当前位置: 首页 > news >正文

FifthOne:用于矢量搜索的计算机视觉接口

一、说明

        数据太多了。数据湖和数据仓库;广阔的像素牧场和充满文字的海洋。找到正确的数据就像大海捞针一样!如果你喜欢开源机器学习库 FiftyOne,矢量搜索引擎通过将复杂数据(图像的原始像素值、文本文档中的字符)转换为称为嵌入矢量的实体来解决此问题。

        矢量搜索引擎通过将复杂数据(图像的原始像素值、文本文档中的字符)转换为称为嵌入矢量的实体来解决此问题。然后对这些数值向量编制索引,以便您可以有效地搜索原始数据。毫不奇怪,像Qdrant,Pinecone,LanceDB和Milvus这样的矢量搜索引擎已经成为几乎所有新AI应用程序的重要组成部分。

        如果您正在处理图像或视频数据,并且希望将矢量搜索合并到工作流程中,则可能会产生相当多的开销:

  • 您如何实现跨模式检索,例如搜索带有文本的图像?
  • 如何整合置信度阈值或类标签等传统搜索筛选器?
  • 在图像中搜索物体(人、猫、狗、汽车、自行车等)怎么样?

        这些只是您将遇到的众多挑战中的一小部分。等。停。别急。有更好的方法...

FiftyOne是用于矢量搜索的计算机视觉接口。FiftyOne开源工具包现在具有与Qdrant,Pinecone,LanceDB和Milvus的本机集成,因此您可以使用首选的矢量搜索引擎在一行代码中有效地搜索视觉数据。

        想要一键找到与数据集中第二个样本最相似的 25 张图像?想要通过点击查找至少包含一个人和一辆自行车的交通图片?您可以!

二、FiftyOne它是如何工作的?

1. 加载数据集。

为了便于说明,我们将加载 MS COCO 验证拆分的子集。

import fiftyone as fo
import fiftyone.brain as fob
import fiftyone.zoo as foz
from fiftyone import ViewField as Fdataset = foz.load_zoo_dataset("coco-2017", split='validation', max_samples = 1000
)
session = fo.launch_app(dataset)

2. 生成相似度指数。

为了搜索我们的媒体,我们需要索引数据。在 FiftyOne 中,我们可以通过函数执行此操作。指定要用于生成嵌入向量的模型,以及要在后端使用的向量搜索引擎。您还可以为相似性索引指定一个名称,如果要针对多个索引运行向量搜索,这将非常有用。compute_similarity()

## setup lancedb
pip install lancedb
## generate a similarity index
## with default model embeddings
## using LanceDB backend
fob.compute_similarity(dataset,brain_key="lancedb_index",backend="lancedb",
)## setup milvus
## download and start docker container +
pip install pymilvus
## generate a similarity index
## with CLIP model embeddings
## using Milvus backend
fob.compute_similarity(dataset,brain_key="milvus_clip_index",backend="milvus",metric="dotproduct"
)

3. 搜索索引。

现在,您可以使用该方法使用一行代码对整个数据集运行图像搜索。要找到与数据集中第二张图像最相似的 25 张图像,我们可以传入样本的 ID、我们想要返回的结果数以及我们要搜索的索引的名称:sort_by_similarity()

## get ID of first sample
query = dataset.skip(1).first().id
## find 25 most similar images with LanceDB backend 
sim_view = dataset.sort_by_similarity(query,k=25,brain_key="lancedb_index"
)## display results
session = fo.launch_app(sim_view)

您也可以完全通过 FiftyOne 应用程序中的 UI 执行此操作:

三、语义搜索变得简单

        处理多模式数据的麻烦已经一去不复返了。如果你想使用自然语言在语义上搜索你的图像,你可以使用完全相同的语法!使用 CLIP 等多模式模型创建索引嵌入,然后传入文本查询而不是示例 ID:

## semantic query
query = "kites flying in the sky"## find 30 most similar images with Milvus backend 
kites_view = dataset.sort_by_similarity(query,k=30,brain_key="milvus_clip_index"
)## display results
session = fo.launch_app(kites_view)

这在非结构化数据探索中特别有用,并且比现有标签允许的更深入地挖掘数据。

这也可以完全在 FiftyOne 应用程序中执行:

四、传递预过滤器

        对数据的特定子集运行矢量搜索通常涉及编写复杂的预过滤器:在矢量搜索之前传递到矢量搜索引擎以应用于数据集的过滤器

        FiftyOne的矢量搜索集成为您处理这些细节!

        如果要查找看起来像“交通”的图像,但只希望将此搜索应用于包含人和自行车的图像,可以通过调用筛选视图来实现此目的:sort_by_similarity()

## create filtered view
view = dataset.match_labels(F("label").is_in(["person", "bicycle"]))## search against this view
traffic_view = view.sort_by_similarity("traffic",k=25,brain_key="milvus_clip_index"
)
session = fo.launch_app(traffic_view)

五、把你的东西整理好

        上述所有功能也可以与对象检测补丁一起开箱即用!

        生成相似性索引时,您需要做的就是传入参数 - 命名可以找到“对象”的标签字段 - 并将为所有图像中的每个对象生成嵌入向量。矢量数据库为这些修补程序嵌入编制索引,以便您可以按与引用对象或自然语言查询的相似性对这些检测进行排序:patches_fieldcompute_similarity()

## setup qdrant
# pull and start docker container +
pip install qdrant-client## create a similarity index for ground truth patches
## with CLIP model, indexed with Qdrant vector database
fob.compute_similarity(dataset,patches_field="ground_truth",model="clip-vit-base32-torch",brain_key="qdrant_gt_index",backend="qdrant"
)## Search for the object that looks most like a tennis racket
tennis_view = dataset.to_patches("ground_truth").sort_by_similarity("tennis racket",k = 25,brain_key= "qdrant_gt_index"
)session = fo.launch_app(tennis_view)

六、结论

        无论您有多少图像或视频,您都需要使用矢量搜索。FiftyOne的原生矢量搜索集成将使您的生活更轻松。使用 FiftyOne,相似性搜索与应用更传统的筛选和查询操作一样简单。将矢量搜索查询与元数据查询混合搭配,以满足您的喜好。

        有关 FiftyOne 中矢量搜索的一般信息,请查看 FiftyOne App 中的按相似性排序,以及有关相似性的 FiftyOne Brain 用户指南。

        如果你喜欢开源机器学习库 FiftyOne,请在 GitHub 上给这个项目⭐一个(3,900 颗星,而且还在增加!)来表示您的支持。

http://www.lryc.cn/news/131938.html

相关文章:

  • 认识Axios
  • 系统架构设计专业技能 · 信息安全技术
  • kafka晋升之路-理论+场景
  • (牛客网)链表相加(二)
  • Vs code 使用中的小问题
  • vue2和vue3
  • 火山引擎ByteHouse:一套方案,让OLAP引擎在精准投放场景更高效
  • 【论文阅读】SHADEWATCHER:使用系统审计记录的推荐引导网络威胁分析(SP-2022)
  • Mac 使用 rar 命令行工具解压和压缩文件
  • 7.maven
  • MySQL 主从复制遇到 1590 报错
  • games101-windows环境配置(CMake+vcpkg+VS2019)
  • 2023年Java核心技术面试第五篇(篇篇万字精讲)
  • 第十课:Qt 字符编码和中文乱码相关问题
  • Go语言基础:Interface接口、Goroutines线程、Channels通道详细案例教程
  • Cesium加载ArcGIS Server4490且orgin -400 400的切片服务
  • Objectarx 2021使用vs2019生成报错 /RTCc rejects conformant code
  • QT中使用QtXlsx库的三种方法 QT基础入门【Excel的操作】
  • 容器和云原生(二):Docker容器化技术
  • 学习总结(TAT)
  • 2023java异常之八股文——面试题
  • 数据可视化和数字孪生相互促进的关系
  • axios使用axiosSource.cancel取消请求后怎么恢复请求,axios取消请求和恢复请求实现
  • SAP动态安全库存简介
  • JVM基础了解
  • QT:event事件分发器,事件过滤器(了解)
  • 若依项目的介绍(前后端分离版本)
  • DT游乐场建模
  • Servlet+JDBC实战开发书店项目讲解第9篇:VIP等级优惠实现
  • Azure文件共享