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
undfiftyone
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:
- Laden Sie einen Datensatz in FiftyOne
- Berechnen Sie Vektoreinbettungen für Samples oder Patches in Ihrem Datensatz, oder wählen Sie ein Modell aus, um die Einbettungen zu erzeugen.
- Verwenden Sie die
compute_similarity()
um einen Milvus-Ähnlichkeitsindex für die Proben oder Objektfelder in einem Datensatz zu erzeugen, indem Sie den Parameterbackend="milvus"
setzen und einbrain_key
Ihrer Wahl angeben. - Verwenden Sie diesen Milvus-Ähnlichkeitsindex zur Abfrage Ihrer Daten mit
sort_by_similarity()
. - 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.
Umgebungsvariablen (empfohlen)
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.