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.mzph.cn/news/43510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP报错:未定义常量的解决方法!

PHP报错:未定义常量的解决方法! 在PHP编程中,我们经常会遇到常量未定义的错误。这种错误通常会在代码中使用未定义的常量时发生。本文将介绍常量的概念以及如何解决未定义常量的问题。 首先,让我们来了解什么是常量。在PHP中&am…

大数据平台运维实训室建设方案

一、概况 本实训室的主要目的是培养大数据平台运维项目的实践能力,以数据计算、分析、挖掘和可视化的案例训练为辅助。同时,实训室也承担相关考评员与讲师培训考试、学生认证培训考试、社会人员认证培训考试、大数据技能大赛训练、大数据专业课程改革等多项任务。 实训室旨在培…

无人机跟随一维高度避障场景--逻辑分析

无人机跟随一维高度避障场景--逻辑分析 1. 源由2. 视频3. 问题3.1 思维发散3.2 问题收敛 4. 图示4.1 水平模式4.2 下坡模式4.3 上坡模式4.4 碰撞分析 5. 总结5.1 一维高度避障场景5.2 业界跟随产品5.3 APM集成跟随示意图一:示意图二:示意图三&#xff1a…

Java算法_ 验证二叉搜索树(LeetCode_Hot100)

题目描述: 给你一个二叉树的根节点 ,判断其是否是一个有效的二叉搜索树。root 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 获得…

【TypeScript】tsc -v 报错 —— 在此系统上禁止运行脚本

在 VS Code 终端中执行 tsc -v ,报错 —— 在此系统上禁止运行脚本 然后 windows x ,打开终端管理员,出现同样的问题 解决方法: 终端(管理员)执行以下命令: 出现 RemoteSigned 则代表更改成功…

11,模板泛化、模板特化、所占字节数、继承实现模板展开、using循环命名展开可变参数

模板泛化、模板特化、所占字节数、继承实现模板展开、using循环命名展开可变参数 模板泛化模板特化模板全特化通过模板偏特化获取类型所占字节数通过模板偏特化和宏获取类型所占字节数...ParamTypes和ParamTypes...的区别 通过继承实现模板展开using 通过using循环命名的方式来…

开发一个文生图的功能

文章目录 效果开发环境原理核心代码代码仓库问题效果 开发环境 Python 3.10PyCharm原理 借助开源项目stable-diffusion,通过该项目封装python库diffusers,可以轻易的实现文生图的功能。 关于更多diffusers的功能请访问:https://huggingface.co/docs/diffusers/index 核心代…

css样式表属性

文章目录 css样式表属性colorbackground-colorfont-sizefont-weightfont-familyfont-styletext-decorationtext-indentline-height(line-height的概念)width、heightletter-spacingtext-aligndirectionwriting-modefont-variantborder-radiusopacitycursorvertical-alignmin-wi…

【数据结构与算法】十大经典排序算法-归并排序

🌟个人博客:www.hellocode.top 🏰Java知识导航:Java-Navigate 🔥CSDN:HelloCode. 🌞知乎:HelloCode 🌴掘金:HelloCode ⚡如有问题,欢迎指正&#…

如何用输入函数为数组赋值

在编写程序时我们经常使用数组,而数组的大小可能是很大的但是我们并不需要为每个元素都自己赋值,我们可能会自定义输入数组元素个数,我们应该如何实现通过输入函数为数组赋值呢? 目录 第一种: 第二种: 第一…

大数据bug-sqoop(二:sqoop同步mysql数据到hive进行字段限制。)

一:sqoop脚本解析。 #!/bin/sh mysqlHost$1 mysqlUserName$2 mysqlUserPass$3 mysqlDbName$4 sql$5 split$6 target$7 hiveDbName$8 hiveTbName$9 partFieldName${10} inputDate${11}echo ${mysqlHost} echo ${mysqlUserName} echo ${mysqlUserPass} ec…

OpenCV之remap的使用

OpenCV中使用remap实现图像的重映射。 重映射是指将图像中的某一像素值赋值到指定位置的操作:g(x,y) f ( h(x,y) ), 在这里, g( ) 是目标图像, f() 是源图像, 而h(x,y) 是作用于 (x,y) 的映射方法函数。为了完成映射过程, 需要获得一些插值为…

TypeError: a bytes-like object is required, not ‘str‘

raceback (most recent call last): File "D:\pycharmcode\client.py", line 12, in <module> tcp_socket.send(send_data) TypeError: a bytes-like object is required, not str 使用socket进行ubuntu与windows通信时&#xff0c;发送数据时报了以上错…

LeetCode 面试题 01.04. 回文排列

文章目录 一、题目二、C# 题解 一、题目 给定一个字符串&#xff0c;编写一个函数判定其是否为某个回文串的排列之一。 回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。 回文串不一定是字典当中的单词。 点击此处跳转题目。 示例1&#xff1a; 输入&…

CSS3:图片边框

简介 图片也可以作为边框&#xff0c;以下是实例演示 注意 实现该效果必须添加border样式&#xff0c;且必须位于border-image-socure之前否则不会生效 实例 <html lang"en"><head><style>p {width: 600px;margin: 200px auto;border: 30px soli…

maven工具-maven的使用-镜像仓库、本地仓、IDEA使用maven

Maven 一、为什么使用maven 添加第三方jar包jar包之间的依赖关系处理jar包之间的冲突获取第三方jar包将项目拆分成多个工程模块实现项目的分布式部署 二、maven简介 ​ Maven项目对象模型(POM)&#xff0c;可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的…

2023.8 - java - 对象和类

public class Dog {String breed;int size;String colour;int age;void eat() {}void run() {}void sleep(){}void name(){} } 一个类可以包含以下类型变量&#xff1a; 局部变量&#xff1a;在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方…

基于STM32标准库智能风扇设计

目录 一&#xff0c;前言 二&#xff0c;系统方案选择 三&#xff0c;实体展示 工程分类 四&#xff0c;相关代码 PWM.c PWM.h AD.c AD.h 电机驱动程序 舵机驱动 一&#xff0c;前言 当今生活中&#xff0c;风扇已成为人们解暑的重要工具&#xff0c;然而使用风扇缓解…

CentOS系统环境搭建(九)——centos系统下使用docker部署项目

centos系统环境搭建专栏&#x1f517;点击跳转 关于Docker-compose安装请看CentOS系统环境搭建&#xff08;三&#xff09;——Centos7安装Docker&Docker Compose&#xff0c;该文章同样收录于centos系统环境搭建专栏。 Centos7部署项目 采用前后端分离的形式部署。使用Do…

【Sklearn】基于随机梯度下降算法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于随机梯度下降算法的数据分类预测(Excel可直接替换数据) 1.模型原理2.模型参数3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果1.模型原理 随机梯度下降(Stochastic Gradient Descent,SGD)是一种优化算法,用于训练模型的参数以最小化损失函数。在分…