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_field
compute_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 颗星,而且还在增加!)来表示您的支持。
相关文章:
FifthOne:用于矢量搜索的计算机视觉接口
一、说明 数据太多了。数据湖和数据仓库;广阔的像素牧场和充满文字的海洋。找到正确的数据就像大海捞针一样!如果你喜欢开源机器学习库 FiftyOne,矢量搜索引擎通过将复杂数据(图像的原始像素值、文本文档中的字符)转换为称为嵌入矢…...
认识Axios
axios中文网 一. 为什么会诞生Axios 最初浏览器页面向服务器请求数据时,返回的是整个页面,整个页面都会刷新ajax的出现,它可以在页面无刷新的情况下请求数据原生的XMLHttpRequest,jQuery封装的ajax,以及axios都可以实…...

系统架构设计专业技能 · 信息安全技术
系列文章目录 系统架构设计专业技能 网络技术(三) 系统架构设计专业技能 系统安全分析与设计(四)【系统架构设计师】 系统架构设计高级技能 软件架构设计(一)【系统架构设计师】 系统架构设计高级技能 …...

kafka晋升之路-理论+场景
kafka晋升之路 一:故事背景二:核心概念2.1 系统架构2.2 生产者(Producer)2.2.1 生产者分区2.2.2 生产者分区策略 2.3 经纪人(Broker)2.3.1 主题(Topic)2.3.2 分区(Partit…...

(牛客网)链表相加(二)
嗯哼~ 题目 描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。 给定两个这种链表,请生成代表两个整数相加值的结果链表。 数据范围:0 ≤ n,m ≤ 1000000,链表任意值 0 ≤ val ≤ 9 要求&#x…...

Vs code 使用中的小问题
1.Java在Vs code 中使用单元测试失败或者如何使用单元测试 创建Java项目,或者将要测试的文件夹添加进工作区 要出现lib包,并有两个测试用的jar包 编写测试文件 public class TestUnit{ public static void main(String[] args) {String str "…...
vue2和vue3
1. 双向数据绑定原理发生了改变 vue2的双向数据绑定是利用了es5 的一个API Object.definepropert() 对数据进行劫持 结合发布订阅模式来实现的。vue3中使用了es6的proxyAPI对数据进行处理。 相比与vue2,使用proxy API 优势有:defineProperty只能监听某个…...

火山引擎ByteHouse:一套方案,让OLAP引擎在精准投放场景更高效
由于流量红利逐渐消退,越来越多的广告企业和从业者开始探索精细化营销的新路径,取代以往的全流量、粗放式的广告轰炸。精细化营销意味着要在数以亿计的人群中优选出那些最具潜力的目标受众,这无疑对提供基础引擎支持的数据仓库能力࿰…...

【论文阅读】SHADEWATCHER:使用系统审计记录的推荐引导网络威胁分析(SP-2022)
SHADEWATCHER: Recommendation-guided CyberThreat Analysis using System Audit Records S&P-2022 新加坡国立大学、中国科学技术大学 Zengy J, Wang X, Liu J, et al. Shadewatcher: Recommendation-guided cyber threat analysis using system audit records[C]//2022 I…...

Mac 使用 rar 命令行工具解压和压缩文件
在 Mac 中常遇到的压缩文件有 zip 和 rar 格式的,如果是 zip 格式的 Mac 系统默认双击一下文件就能直接解压了,但 rar 文件就不行。 需要额外下载 rar 工具了实现。 第一步:下载 rar 工具 工具网址:https://www.rarlab.com/dow…...

7.maven
1 初始Maven 1.1 什么是Maven Maven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。 官网:https://maven.apache.org/ Apache 软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会&…...

MySQL 主从复制遇到 1590 报错
作者通过一个主从复制过程中 1590 的错误,说明了 MySQL 8.0 在创建用户授权过程中的注意事项。 作者:王祥 爱可生 DBA 团队成员,主要负责 MySQL 故障处理和性能优化。对技术执着,为客户负责。 本文来源:原创投稿 爱可生…...

games101-windows环境配置(CMake+vcpkg+VS2019)
下载工具 安装CMake 安装vcpkg 安装vs2019 安装 eigen3 opencv 在vcpkg安装目录下,使用Windows Power Shell运行下面脚本 .\vcpkg.exe install eigen3:x64-windows .\vcpkg.exe install opencv:x64-windows安装过程中可能会用红色字体提示:Failed to…...

2023年Java核心技术面试第五篇(篇篇万字精讲)
目录 十 . HashMap,ConcurrentHashMap源码解析 10.1 HashMap 的源码解析: 10.1.1数据结构: 10.1.2哈希算法: 10.1.3解决哈希冲突: 10.1.4扩容机制: 10.1.5如何使用 HashMap: 10.2 HashMap 关注…...

第十课:Qt 字符编码和中文乱码相关问题
功能描述:最全的 Qt 字符编码相关知识以及中文乱码的原因与解决办法 一、字符编码种类 ASCII 码 美国人对信息交流的编码,包括 26 个字母(大小写)、数字和标点符号等,用一个字节(8 位)表示这些…...
Go语言基础:Interface接口、Goroutines线程、Channels通道详细案例教程
目录标题 一、Interface1. Declaring and implementing an interface2. Practical use of an interface3. Nterface internal representation4. Empty interface5. Type assertion6. Type switch7. Implementing interfaces using pointer receivers VS value receivers8. Impl…...

Cesium加载ArcGIS Server4490且orgin -400 400的切片服务
Cesium在使用加载Cesium.ArcGisMapServerImageryProvider加载切片服务时,默认只支持wgs84的4326坐标系,不支持CGCS2000的4490坐标系。 如果是ArcGIS发布的4490坐标系的切片服务,如果原点在orgin X: -180.0Y: 90.0的情况下,我们可…...

Objectarx 2021使用vs2019生成报错 /RTCc rejects conformant code
error C2338: /RTCc rejects conformant code错误解决 使用VS2019/VS2022生成项目报错 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C1189 #error: /RTCc rejects conformant code, so it is not supported by the C Standard Library. Either remove this compiler opti…...
QT中使用QtXlsx库的三种方法 QT基础入门【Excel的操作】
对于Linux用户,如果Qt是通过“ apt-get”之类的软件包管理器工具安装的,请确保已安装Qt5开发软件包qtbase5-private-dev QtXlsx是一个可以读写Excel文件的库。它不需要Microsoft Excel,可以在Qt5支持的任何平台上使用。该库可用于从头开始生成新的.xlsx文件从现有.xlsx文件中…...

容器和云原生(二):Docker容器化技术
目录 Docker容器的使用 Docker容器关键技术 Namespace Cgroups UnionFS Docker容器的使用 首先直观地了解docker如何安装使用,并快速启动mysql服务的,启动时候绑定主机上的3306端口,查找mysql容器的ip,使用mysql -h contain…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...