milvus-logo
LFAI
Home
  • Intégrations
    • Évaluation et observabilité

Effectuer des recherches par vision avec Milvus et FiftyOne

FiftyOne est un outil open-source permettant de construire des ensembles de données et des modèles de vision par ordinateur de haute qualité. Ce guide vous aide à intégrer les capacités de recherche de similarité de Milvus dans FiftyOne, ce qui vous permet d'effectuer des recherches de vision sur vos propres ensembles de données.

FiftyOne fournit une API pour créer des collections Milvus, télécharger des vecteurs et exécuter des requêtes de similarité, à la fois par programmation en Python et par pointer-cliquer dans l'application. La démonstration sur cette page se concentre sur l'intégration programmatique.

Conditions préalables

Avant de commencer, assurez-vous que vous disposez des éléments suivants :

Installation des conditions requises

Pour cet exemple, nous allons utiliser pymilvus et fiftyone. Vous pouvez les installer en exécutant les commandes suivantes :

python3 -m pip install pymilvus fiftyone torch torchvision

Recette de base

Le flux de travail de base pour utiliser Milvus afin de créer un index de similarité sur vos ensembles de données FiftyOne et l'utiliser pour interroger vos données est le suivant :

  1. Charger un jeu de données dans FiftyOne
  2. Calculer les embeddings vectoriels pour les échantillons ou les patchs dans votre jeu de données, ou sélectionner un modèle pour utiliser les embeddings générés.
  3. Utilisez la méthode compute_similarity() pour générer un indice de similarité Milvus pour les échantillons ou les patchs d'objets dans un jeu de données en définissant le paramètre backend="milvus" et en spécifiant un brain_key de votre choix.
  4. Utilisez cet indice de similarité de Milvus pour interroger vos données avec sort_by_similarity().
  5. Si vous le souhaitez, supprimez l'index.

Procédures

L'exemple ci-dessous illustre la procédure décrite ci-dessus.

1. Charger un ensemble de données dans FiftyOne et calculer les embeddings pour les échantillons.

Le code suivant utilise l'échantillon d'images fourni par FiftyOne pour démontrer l'intégration. Vous pouvez préparer votre propre jeu d'images en vous référant à cet article.

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. Effectuer des recherches de similarité de vision

Vous pouvez maintenant utiliser l'index de similarité Milvus pour effectuer des recherches de similarité de vision sur votre ensemble de données.

# 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. Supprimer l'index

Si vous n'avez plus besoin de l'index de similarité Milvus, vous pouvez le supprimer à l'aide du code suivant :

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

Utiliser le backend Milvus

Par défaut, l'appel à compute_similarity() ou sort_by_similarity() utilise un backend sklearn.

Pour utiliser le backend Milvus, il suffit de définir le paramètre optionnel backend de compute_similarity() à "milvus":

import fiftyone.brain as fob

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

Alternativement, vous pouvez configurer FiftyOne de manière permanente pour utiliser le backend Milvus en définissant la variable d'environnement suivante :

export FIFTYONE_BRAIN_DEFAULT_SIMILARITY_BACKEND=milvus

ou en définissant le paramètre default_similarity_backend de votre configuration brain située à ~/.fiftyone/brain_config.json:

{
    "default_similarity_backend": "milvus"
}

Authentification

Si vous utilisez un serveur Milvus personnalisé, vous pouvez fournir vos informations d'identification de différentes manières.

La manière recommandée de configurer vos identifiants Milvus est de les stocker dans les variables d'environnement montrées ci-dessous, qui sont automatiquement accédées par FiftyOne à chaque fois qu'une connexion à Milvus est établie.

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

Vous pouvez également stocker vos informations d'identification dans votre fichier brain config situé à l'adresse ~/.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"
        }
    }
}

Notez que ce fichier n'existera pas tant que vous ne l'aurez pas créé.

Arguments de mots-clés

Vous pouvez fournir manuellement vos informations d'identification Milvus en tant qu'arguments de mot-clé chaque fois que vous appelez des méthodes comme compute_similarity() qui nécessitent des connexions à 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",
)

Notez que, lorsque vous utilisez cette stratégie, vous devez fournir manuellement les informations d'identification lors du chargement ultérieur d'un index via 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",
)

Paramètres de configuration de Milvus

Le backend Milvus prend en charge une variété de paramètres de requête qui peuvent être utilisés pour personnaliser vos requêtes de similarité. Ces paramètres sont les suivants

  • collection_name(Aucun) : le nom de la collection Milvus à utiliser ou à créer. Si aucun nom n'est fourni, une nouvelle collection sera créée.

  • metric ("dotproduct"): la métrique de distance d'intégration à utiliser lors de la création d'un nouvel index. Les valeurs supportées sont ("dotproduct", "euclidean")

  • consistency_level ("Session"): le niveau de cohérence à utiliser. Les valeurs prises en charge sont ("Strong", "Session", "Bounded", "Eventually")

Pour des informations détaillées sur ces paramètres, voir la documentation sur l' authentification Milvus et la documentation sur les niveaux de cohérence Milvus.

Vous pouvez spécifier ces paramètres via l'une des stratégies décrites dans la section précédente. Voici un exemple de configuration de cerveau qui inclut tous les paramètres disponibles :

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

Toutefois, ces paramètres sont généralement transmis directement à compute_similarity() pour configurer un nouvel index spécifique :

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

Gérer les exécutions des cerveaux

FiftyOne fournit une variété de méthodes que vous pouvez utiliser pour gérer les brain runs.

Par exemple, vous pouvez appeler list_brain_runs() pour voir les clés cérébrales disponibles sur un jeu de données :

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

Ou, vous pouvez utiliser get_brain_info() pour récupérer des informations sur la configuration d'un brain run :

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

Utilisez load_brain_results() pour charger l'instance SimilarityIndex pour un brain run.

Vous pouvez utiliser rename_brain_run() pour renommer la clé de cerveau associée à un cycle de résultats de similarité existant :

dataset.rename_brain_run(brain_key, new_brain_key)

Enfin, vous pouvez utiliser delete_brain_run() pour supprimer une analyse de cerveau :

dataset.delete_brain_run(brain_key)

L'appel à delete_brain_run() ne supprime que l'enregistrement de l'analyse cérébrale de votre jeu de données FiftyOne ; il ne supprime pas la collection Milvus associée, ce que vous pouvez faire comme suit :

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

Pour un flux de travail commun de recherche vectorielle sur un ensemble de données FiftyOne utilisant le backend Milvus, voir Exemples ici.

Traduit parDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

Cette page a-t - elle été utile ?