milvus-logo
LFAI
Home
  • Integrationen

Bildverarbeitungssuchen mit Milvus und FiftyOne durchführen

FiftyOne ist ein Open-Source-Werkzeug zur Erstellung hochwertiger Datensätze und Computer Vision Modelle. Dieser Leitfaden hilft Ihnen, die Ähnlichkeitssuche von Milvus in FiftyOne zu integrieren, so dass Sie Ihre eigenen Datensätze durchsuchen können.

FiftyOne stellt eine API zur Verfügung, um Milvus-Sammlungen zu erstellen, Vektoren hochzuladen und Ähnlichkeitsabfragen auszuführen, sowohl programmatisch in Python als auch per Point-and-Click in der App. Die Demonstration auf dieser Seite konzentriert sich auf die programmatische Integration.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie über die folgenden Voraussetzungen verfügen:

  • Ein laufender Milvus-Server.
  • Eine Python-Umgebung mit pymilvus und fiftyone installiert.
  • Einen Datensatz mit Bildern zum Durchsuchen.

Voraussetzungen für die Installation

Für dieses Beispiel werden wir pymilvus und fiftyone verwenden. Sie können sie mit den folgenden Befehlen installieren:

python3 -m pip install pymilvus fiftyone torch torchvision

Grundlegendes Rezept

Der grundlegende Arbeitsablauf, um mit Milvus einen Ähnlichkeitsindex auf Ihren FiftyOne-Datensätzen zu erstellen und diesen zur Abfrage Ihrer Daten zu verwenden, sieht wie folgt aus:

  1. Laden Sie einen Datensatz in FiftyOne
  2. Berechnen Sie Vektoreinbettungen für Samples oder Patches in Ihrem Datensatz, oder wählen Sie ein Modell aus, um die Einbettungen zu erzeugen.
  3. Verwenden Sie die compute_similarity() um einen Milvus-Ähnlichkeitsindex für die Proben oder Objektfelder in einem Datensatz zu erzeugen, indem Sie den Parameter backend="milvus" setzen und ein brain_key Ihrer Wahl angeben.
  4. Verwenden Sie diesen Milvus-Ähnlichkeitsindex zur Abfrage Ihrer Daten mit sort_by_similarity().
  5. Falls gewünscht, löschen Sie den Index.

Prozeduren

Das folgende Beispiel veranschaulicht den oben beschriebenen Arbeitsablauf.

1. Laden Sie einen Datensatz in FiftyOne und berechnen Sie die Einbettungen für die Muster

Der folgende Code verwendet das von FiftyOne bereitgestellte Beispielbildset, um die Integration zu demonstrieren. Sie können Ihren eigenen Datensatz vorbereiten, indem Sie sich auf diesen Artikel beziehen.

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. Durchführen von Ähnlichkeitssuchen

Sie können nun den Milvus Ähnlichkeitsindex verwenden, um eine Ähnlichkeitssuche in Ihrem Datensatz durchzuführen.

# 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. Löschen Sie den Index

Wenn Sie den Milvus-Ähnlichkeitsindex nicht mehr benötigen, können Sie ihn mit dem folgenden Code löschen:

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

Verwenden Sie das Milvus-Backend

Standardmäßig wird durch den Aufruf von compute_similarity() oder sort_by_similarity() wird standardmäßig ein Sklearn-Backend verwendet.

Um das Milvus-Backend zu verwenden, setzen Sie einfach den optionalen Backend-Parameter von compute_similarity() auf "milvus":

import fiftyone.brain as fob

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

Alternativ können Sie FiftyOne dauerhaft so konfigurieren, dass das Milvus-Backend verwendet wird, indem Sie die folgende Umgebungsvariable setzen:

export FIFTYONE_BRAIN_DEFAULT_SIMILARITY_BACKEND=milvus

oder indem Sie den Parameter default_similarity_backend in Ihrer brain config auf ~/.fiftyone/brain_config.json setzen:

{
    "default_similarity_backend": "milvus"
}

Authentifizierung

Wenn Sie einen eigenen Milvus-Server verwenden, können Sie Ihre Anmeldedaten auf verschiedene Weise angeben.

Der empfohlene Weg, Ihre Milvus-Zugangsdaten zu konfigurieren, ist, sie in den unten gezeigten Umgebungsvariablen zu speichern, auf die FiftyOne automatisch zugreift, sobald eine Verbindung zu Milvus hergestellt wird.

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 Gehirn-Konfiguration

Sie können Ihre Zugangsdaten auch in Ihrer Brain-Config-Datei speichern, die Sie unter ~/.fiftyone/brain_config.json finden:

{
    "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"
        }
    }
}

Beachten Sie, dass diese Datei nicht existiert, bis Sie sie erstellen.

Schlüsselwort-Argumente

Sie können Ihre Milvus-Anmeldeinformationen manuell als Schlüsselwortargumente angeben, wenn Sie Methoden wie compute_similarity() aufrufen, die Verbindungen zu Milvus erfordern:

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",
)

Beachten Sie, dass Sie bei dieser Strategie die Anmeldeinformationen manuell angeben müssen, wenn Sie später einen Index über 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-Konfigurationsparameter

Das Milvus-Backend unterstützt eine Vielzahl von Abfrageparametern, mit denen Sie Ihre Ähnlichkeitsabfragen anpassen können. Diese Parameter umfassen:

  • collection_name(None): der Name der Milvus-Sammlung, die verwendet oder erstellt werden soll. Wenn keine angegeben wird, wird eine neue Sammlung erstellt.

  • metric ("dotproduct"): die Metrik für den Einbettungsabstand, die bei der Erstellung eines neuen Index verwendet werden soll. Die unterstützten Werte sind ("dotproduct", "euclidean")

  • consistency_level ("Session"): die zu verwendende Konsistenzstufe. Unterstützte Werte sind ("Strong", "Session", "Bounded", "Eventually")

Ausführliche Informationen zu diesen Parametern finden Sie in der Milvus-Authentifizierungsdokumentation und der Milvus-Konsistenzstufen-Dokumentation.

Sie können diese Parameter mit jeder der im vorherigen Abschnitt beschriebenen Strategien angeben. Hier ist ein Beispiel für eine Gehirnkonfiguration, die alle verfügbaren Parameter enthält:

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

Normalerweise werden diese Parameter jedoch direkt an compute_similarity() übergeben, um einen bestimmten neuen Index zu konfigurieren:

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

Verwalten von Brain-Läufen

FiftyOne stellt eine Reihe von Methoden zur Verfügung, mit denen Sie Brain Runs verwalten können.

Zum Beispiel können Sie list_brain_runs() aufrufen, um die verfügbaren Brain Keys eines Datensatzes zu sehen:

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,
)

Oder Sie können mit get_brain_info() können Sie Informationen über die Konfiguration eines Brain Runs abrufen:

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

Verwenden Sie load_brain_results() laden Sie die SimilarityIndex Instanz für einen Brain-Lauf.

Sie können mit rename_brain_run() können Sie den Gehirnschlüssel umbenennen, der mit einem bestehenden Ähnlichkeits-Ergebnislauf verbunden ist:

dataset.rename_brain_run(brain_key, new_brain_key)

Schließlich können Sie mit delete_brain_run() können Sie einen Gehirnlauf löschen:

dataset.delete_brain_run(brain_key)

Der Aufruf von delete_brain_run() löscht nur den Datensatz des Hirnlaufs aus dem FiftyOne-Datensatz, nicht aber die zugehörige Milvus-Sammlung, die Sie wie folgt löschen können:

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

Für einen allgemeinen Vektorsuch-Workflow auf einem FiftyOne-Datensatz unter Verwendung des Milvus-Backends, siehe Beispiele hier.

Übersetzt vonDeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

War diese Seite hilfreich?