🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
主頁
  • 整合
  • Home
  • Docs
  • 整合

  • 評估與可觀察性

  • 五十一

使用 Milvus 與 FiftyOne 進行視覺搜尋

FiftyOne是一個開放源碼工具,用來建立高品質的資料集與電腦視覺模型。本指南可協助您將 Milvus 的相似性搜尋功能整合至 FiftyOne,讓您能在自己的資料集上進行視覺搜尋。

FiftyOne 提供 API 來建立 Milvus 資料集、上傳向量以及執行相似性查詢,您可以使用 Python程式語言或在 App 中透過點選方式來進行。本頁面的示範將著重於程式整合。

先決條件

在開始之前,請確認您有以下條件:

安裝需求

在這個範例中,我們要使用pymilvusfiftyone 。您可以執行下列指令來安裝它們:

python3 -m pip install pymilvus fiftyone torch torchvision

基本配方

使用 Milvus 在您的 FiftyOne 資料集上建立相似性索引,並以此查詢資料的基本工作流程如下:

  1. 將資料集載入FiftyOne
  2. 為您資料集中的樣本或斑塊計算向量內嵌,或選擇一個模型來使用產生內嵌。
  3. 使用 compute_similarity()方法為資料集中的樣本或物件修補區產生一個 Milvus 相似度指數,方法是設定參數backend="milvus" 並指定您所選擇的brain_key
  4. 使用此 Milvus 相似性索引來查詢您的資料,使用 sort_by_similarity().
  5. 如果需要,請刪除索引。

程序

下面的示例演示了上述工作流程。

1.將資料集載入 FiftyOne 並計算樣本的內嵌值

以下程式碼使用 FiftyOne 提供的樣本圖片集來示範整合。您可以參考這篇文章來準備您自己的圖像集。

import fiftyone as fo
import fiftyone.brain as fob
import fiftyone.zoo as foz

# Step 1: Load your data into FiftyOne
dataset = foz.load_zoo_dataset("quickstart")

# Steps 2 and 3: Compute embeddings and create a similarity index
milvus_index = fob.compute_similarity(
    dataset,
    brain_key="milvus_index",
    backend="milvus",
)

2.進行視覺相似性搜尋

現在您可以使用 Milvus 相似性索引來對您的資料集進行視覺相似性搜尋。

# Step 4: Query your data
query = dataset.first().id  # query by sample ID
view = dataset.sort_by_similarity(
    query,
    brain_key="milvus_index",
    k=10,  # limit to 10 most similar samples
)

# Step 5 (optional): Cleanup

# Delete the Milvus collection
milvus_index.cleanup()

# Delete run record from FiftyOne
dataset.delete_brain_run("milvus_index")

3.刪除索引

如果您不再需要 Milvus 相似性索引,您可以使用以下代碼刪除它:

# Step 5: Delete the index
milvus_index.delete()

使用 Milvus 後端

預設情況下,呼叫 compute_similarity()sort_by_similarity() 將使用 sklearn 後端。

要使用 Milvus 後端,只需將可選的後端參數設定為 compute_similarity()"milvus"

import fiftyone.brain as fob

fob.compute_similarity(..., backend="milvus", ...)

另外,您也可以透過設定以下的環境變數,永久設定 FiftyOne 使用 Milvus 後端:

export FIFTYONE_BRAIN_DEFAULT_SIMILARITY_BACKEND=milvus

或設定你的brain configdefault_similarity_backend 參數,位於~/.fiftyone/brain_config.json

{
    "default_similarity_backend": "milvus"
}

驗證

如果您使用自訂的 Milvus 伺服器,您可以用多種方式提供您的認證。

建議的方式是將您的 Milvus 認證資料儲存在下列的環境變數中,當連線到 Milvus 時,FiftyOne 會自動存取這些變數。

export FIFTYONE_BRAIN_SIMILARITY_MILVUS_URI=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_USER=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_PASSWORD=XXXXXX

# also available if necessary
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_SECURE=true
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_TOKEN=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_DB_NAME=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_CLIENT_KEY_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_CLIENT_PEM_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_CA_PEM_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_SERVER_PEM_PATH=XXXXXX
export FIFTYONE_BRAIN_SIMILARITY_MILVUS_SERVER_NAME=XXXXXX

FiftyOne Brain config

您也可以將您的認證存放在您的腦組設定中,位於~/.fiftyone/brain_config.json

{
    "similarity_backends": {
        "milvus": {
            "uri": "XXXXXX",
            "user": "XXXXXX",
            "password": "XXXXXX",

            # also available if necessary
            "secure": true,
            "token": "XXXXXX",
            "db_name": "XXXXXX",
            "client_key_path": "XXXXXX",
            "client_pem_path": "XXXXXX",
            "ca_pem_path": "XXXXXX",
            "server_pem_path": "XXXXXX",
            "server_name": "XXXXXX"
        }
    }
}

請注意,這個檔案在您建立之前是不存在的。

關鍵字參數

您可以手動提供您的 Milvus 認證作為關鍵字參數,每次您呼叫方法如 compute_similarity()等需要連線到 Milvus 的方法時,您可以手動提供您的 Milvus 認證作為關鍵字參數:

import fiftyone.brain as fob

milvus_index = fob.compute_similarity(
    ...
    backend="milvus",
    brain_key="milvus_index",
    uri="XXXXXX",
    user="XXXXXX",
    password="XXXXXX",

    # also available if necessary
    secure=True,
    token="XXXXXX",
    db_name="XXXXXX",
    client_key_path="XXXXXX",
    client_pem_path="XXXXXX",
    ca_pem_path="XXXXXX",
    server_pem_path="XXXXXX",
    server_name="XXXXXX",
)

請注意,當使用此策略時,您必須在稍後透過以下方式載入索引時,手動提供憑證 load_brain_results():

milvus_index = dataset.load_brain_results(
    "milvus_index",
    uri="XXXXXX",
    user="XXXXXX",
    password="XXXXXX",

    # also available if necessary
    secure=True,
    token="XXXXXX",
    db_name="XXXXXX",
    client_key_path="XXXXXX",
    client_pem_path="XXXXXX",
    ca_pem_path="XXXXXX",
    server_pem_path="XXXXXX",
    server_name="XXXXXX",
)

Milvus 配置參數

Milvus 後端支援多種查詢參數,可用於自訂您的相似性查詢。這些參數包括

  • collection_name(無):要使用或建立的 Milvus 集合名稱。如果沒有提供,將會建立一個新的集合

  • metric("dotproduct"): 建立新索引時要使用的嵌入距離公制。支援的值是 ("dotproduct","euclidean")

  • consistency_level("Session"): 要使用的一致性等級。支援的值為 ("Strong","Session","Bounded","Eventually")

有關這些參數的詳細資訊,請參閱Milvus 認證說明文件Milvus 一致性等級說明文件

您可以透過上一節所述的任何策略指定這些參數。下面是一個包含所有可用參數的brain config的範例:

{
    "similarity_backends": {
        "milvus": {
            "collection_name": "your_collection",
            "metric": "dotproduct",
            "consistency_level": "Strong"
        }
    }
}

然而,通常這些參數會直接傳給 compute_similarity()來設定特定的新索引:

milvus_index = fob.compute_similarity(
    ...
    backend="milvus",
    brain_key="milvus_index",
    collection_name="your_collection",
    metric="dotproduct",
    consistency_level="Strong",
)

管理大腦運行

FiftyOne 提供了多種方法,您可以用來管理大腦運行。

例如,您可以呼叫 list_brain_runs()來查看資料集上可用的大腦索引鍵:

import fiftyone.brain as fob

# List all brain runs
dataset.list_brain_runs()

# Only list similarity runs
dataset.list_brain_runs(type=fob.Similarity)

# Only list specific similarity runs
dataset.list_brain_runs(
    type=fob.Similarity,
    patches_field="ground_truth",
    supports_prompts=True,
)

或者,您可以使用 get_brain_info()來擷取有關大腦運行配置的資訊:

info = dataset.get_brain_info(brain_key)
print(info)

使用 load_brain_results()來載入 SimilarityIndex實例。

您可以使用 rename_brain_run()來重新命名與現有相似性結果執行相關聯的腦部鍵:

dataset.rename_brain_run(brain_key, new_brain_key)

最後,您可以使用 delete_brain_run()來刪除大腦運行:

dataset.delete_brain_run(brain_key)

呼叫 delete_brain_run()只會從您的 FiftyOne 資料集中刪除腦部運行的記錄;它不會刪除任何相關的 Milvus 資料集,您可以如下操作:

# Delete the Milvus collection
milvus_index = dataset.load_brain_results(brain_key)
milvus_index.cleanup()

有關使用 Milvus 後端在 FiftyOne 資料集上的常見向量搜尋工作流程,請參閱這裡的範例

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?