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.pswp.cn/news/43510.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43510.shtml
英文地址,請注明出處:http://en.pswp.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)是一種優化算法,用于訓練模型的參數以最小化損失函數。在分…