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

一、说明

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

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

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

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

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

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

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

二、FiftyOne它是如何工作的?

  1. 加载数据集。

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

ba 复制代码
import fiftyone as fo
import fiftyone.brain as fob
import fiftyone.zoo as foz
from fiftyone import ViewField as F

dataset = foz.load_zoo_dataset(
    "coco-2017", 
    split='validation', 
    max_samples = 1000
)
session = fo.launch_app(dataset)
  1. 生成相似度指数。

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

ba 复制代码
## 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"
)
  1. 搜索索引。

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

ba 复制代码
## 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:

ba 复制代码
## 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()

ba 复制代码
## 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_field``compute_similarity()

ba 复制代码
## 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 颗星,而且还在增加!)来表示您的支持。

相关推荐
佚明zj1 小时前
全卷积和全连接
人工智能·深度学习
程序小旭3 小时前
机器视觉基础—双目相机
计算机视觉·双目相机
qzhqbb3 小时前
基于统计方法的语言模型
人工智能·语言模型·easyui
冷眼看人间恩怨4 小时前
【话题讨论】AI大模型重塑软件开发:定义、应用、优势与挑战
人工智能·ai编程·软件开发
2401_883041084 小时前
新锐品牌电商代运营公司都有哪些?
大数据·人工智能
AI极客菌5 小时前
Controlnet作者新作IC-light V2:基于FLUX训练,支持处理风格化图像,细节远高于SD1.5。
人工智能·计算机视觉·ai作画·stable diffusion·aigc·flux·人工智能作画
阿_旭5 小时前
一文读懂| 自注意力与交叉注意力机制在计算机视觉中作用与基本原理
人工智能·深度学习·计算机视觉·cross-attention·self-attention
王哈哈^_^5 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
Power20246666 小时前
NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
人工智能·深度学习·机器学习·自然语言处理·nlp
数据猎手小k6 小时前
AIDOVECL数据集:包含超过15000张AI生成的车辆图像数据集,目的解决旨在解决眼水平分类和定位问题。
人工智能·分类·数据挖掘