YOLO Vision 2026 :

Ultralytics Explorer API#

Note pour la communauté ⚠️

À partir de ultralytics>=8.3.12, Ultralytics Explorer a été supprimé. Pour utiliser Explorer, installe des pip install ultralytics==8.3.11. Des fonctionnalités d'exploration de jeux de données similaires (et étendues) sont disponibles dans Ultralytics Platform.

Introduction#

Open In Colab The Explorer API is a Python API for exploring your datasets. It supports filtering and searching your dataset using SQL queries, vector similarity search, and semantic search.



Watch: Ultralytics Explorer API Overview

Installation#

Explorer dépend de bibliothèques externes pour certaines de ses fonctionnalités. Celles-ci sont installées automatiquement lorsque tu utilises Explorer. Pour installer manuellement ces dépendances, utilise la commande suivante :

pip install ultralytics[explorer]

Utilisation#

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")

# Create embeddings for your dataset
explorer.create_embeddings_table()

# Search for similar images to a given image/images
df = explorer.get_similar(img="path/to/image.jpg")

# Or search for similar images to a given index/indices
df = explorer.get_similar(idx=0)
Remarque

La table des Embeddings pour une paire de dataset et de modèle donnée est créée une seule fois et réutilisée. Celles-ci utilisent LanceDB en arrière-plan, qui s'adapte sur le disque, ce qui te permet de créer et de réutiliser des embeddings pour de grands datasets comme COCO sans manquer de mémoire.

Si tu souhaites forcer la mise à jour de la table des embeddings, tu peux passer force=True à la méthode create_embeddings_table.

Tu peux accéder directement à l'objet table LanceDB pour effectuer une analyse avancée. Apprends-en plus dans la section Working with Embeddings Table

1. Recherche de similarité#

La recherche de similarité est une technique permettant de trouver des images similaires à une image donnée. Elle repose sur l'idée que des images similaires auront des embeddings similaires. Une fois la table des embeddings construite, tu peux lancer une recherche sémantique de l'une des manières suivantes :

  • Sur un index donné ou une liste d'indices dans le dataset : exp.get_similar(idx=[1,10], limit=10)
  • Sur n'importe quelle image ou liste d'images ne se trouvant pas dans le dataset : exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)

En cas d'entrées multiples, l'agrégat de leurs embeddings est utilisé.

Tu obtiens un DataFrame pandas avec le nombre limit de points de données les plus similaires à l'entrée, ainsi que leur distance dans l'espace des embeddings. Tu peux utiliser ce dataset pour effectuer un filtrage supplémentaire.

Recherche sémantique
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

similar = exp.get_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
print(similar.head())

# Search using multiple indices
similar = exp.get_similar(
    img=["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/bus.jpg"],
    limit=10,
)
print(similar.head())

Tracé d'images similaires#

Tu peux également tracer les images similaires à l'aide de la méthode plot_similar. Cette méthode prend les mêmes arguments que get_similar et trace les images similaires dans une grille.

Tracé d'images similaires
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

plt = exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
plt.show()

2. Demander à l'IA (Requêtes en langage naturel)#

Cette fonctionnalité te permet de filtrer ton dataset en utilisant le langage naturel, sans écrire de SQL. Le générateur de requêtes alimenté par l'IA convertit ton invite en requête et renvoie les résultats correspondants. Par exemple, tu peux demander : "montre-moi 100 images avec exactement une personne et 2 chiens. Il peut y avoir d'autres objets aussi" et il générera la requête et te montrera ces résultats. Remarque : Cette fonctionnalité utilise des LLMs, les résultats sont donc probabilistes et peuvent être inexacts.

Ask AI
from ultralytics.data.explorer import plot_query_result

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

df = exp.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(df.head())

# plot the results
plt = plot_query_result(df)
plt.show()

3. Requêtes SQL#

Tu peux exécuter des requêtes SQL sur ton dataset en utilisant la méthode sql_query. Cette méthode prend une requête SQL en entrée et renvoie un DataFrame pandas avec les résultats.

Requête SQL
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())

Tracé des résultats de la requête SQL#

Tu peux également tracer les résultats d'une requête SQL en utilisant la méthode plot_sql_query. Cette méthode prend les mêmes arguments que sql_query et trace les résultats dans une grille.

Tracé des résultats de la requête SQL
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

# plot the SQL Query
exp.plot_sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%' LIMIT 10")

4. Travailler avec la table des embeddings#

Tu peux également travailler directement avec la table des embeddings. Une fois que la table des embeddings est créée, tu peux y accéder en utilisant le Explorer.table

Astuce

Explorer fonctionne en interne sur des tables LanceDB. Tu peux accéder directement à cette table en utilisant l'objet Explorer.table et exécuter des requêtes brutes, appliquer des filtres en amont et en aval, etc.

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

Voici quelques exemples de ce que tu peux faire avec la table :

Obtenir des embeddings bruts#

Exemple
from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

embeddings = table.to_pandas()["vector"]
print(embeddings)

Requêtes avancées avec filtres en amont et en aval#

Exemple
from ultralytics import Explorer

exp = Explorer(model="yolo11n.pt")
exp.create_embeddings_table()
table = exp.table

# Dummy embedding
embedding = [i for i in range(256)]
rs = table.search(embedding).metric("cosine").where("").limit(10)

Créer un index vectoriel#

Lors de l'utilisation de grands datasets, tu peux également créer un index vectoriel dédié pour des requêtes plus rapides. Pour ce faire, utilise la méthode create_index sur la table LanceDB.

table.create_index(num_partitions=..., num_sub_vectors=...)

5. Applications des embeddings#

Tu peux utiliser la table des embeddings pour effectuer diverses analyses exploratoires. En voici quelques exemples :

Index de similarité#

Explorer propose une opération similarity_index :

  • Elle essaie d'estimer à quel point chaque point de données est similaire au reste du dataset.
  • Pour ce faire, on compte combien d'embeddings d'images se trouvent plus près que max_dist de l'image actuelle dans l'espace des embeddings généré, en considérant top_k images similaires à la fois.

Elle renvoie un DataFrame pandas avec les colonnes suivantes :

  • idx : Index de l'image dans le dataset
  • im_file : Chemin d'accès au fichier image
  • count : Nombre d'images dans le dataset qui sont plus proches que max_dist de l'image actuelle
  • sim_im_files : Liste des chemins d'accès vers les count images similaires
Astuce

Pour un dataset, un modèle, max_dist et top_k donnés, l'index de similarité, une fois généré, sera réutilisé. Si ton dataset a changé, ou si tu as simplement besoin de régénérer l'index de similarité, tu peux passer force=True.

Index de similarité
from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()

sim_idx = exp.similarity_index()

Tu peux utiliser l'index de similarité pour créer des conditions personnalisées afin de filtrer le dataset. Par exemple, tu peux filtrer les images qui ne sont similaires à aucune autre image du dataset en utilisant le code suivant :

import numpy as np

sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]

Visualiser l'espace des embeddings#

Tu peux également visualiser l'espace des embeddings à l'aide de l'outil de traçage de ton choix. Par exemple, voici un exemple simple utilisant Matplotlib :

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

# Reduce dimensions using PCA to 3 components for visualization in 3D
pca = PCA(n_components=3)
reduced_data = pca.fit_transform(embeddings)

# Create a 3D scatter plot using Matplotlib Axes3D
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d")

# Scatter plot
ax.scatter(reduced_data[:, 0], reduced_data[:, 1], reduced_data[:, 2], alpha=0.5)
ax.set_title("3D Scatter Plot of Reduced 256-Dimensional Data (PCA)")
ax.set_xlabel("Component 1")
ax.set_ylabel("Component 2")
ax.set_zlabel("Component 3")

plt.show()

Commence à créer tes propres rapports d'exploration de datasets de vision par ordinateur en utilisant l'API Explorer. Pour trouver l'inspiration, consulte l'exemple VOC Exploration Example.

Applications créées avec Ultralytics Explorer#

Essaie notre GUI Demo basée sur l'API Explorer

FAQ#

  • L'API Ultralytics Explorer est conçue pour une exploration complète des datasets. Elle permet aux utilisateurs de filtrer et de rechercher dans les datasets à l'aide de requêtes SQL, de recherches par similarité vectorielle et de recherches sémantiques. Cette puissante API Python peut gérer de grands datasets, ce qui la rend idéale pour diverses tâches de computer vision utilisant des modèles Ultralytics.

  • Pour installer l'API Ultralytics Explorer ainsi que ses dépendances, utilise la commande suivante :

    pip install ultralytics[explorer]

    Cela installera automatiquement toutes les bibliothèques externes nécessaires au fonctionnement de l'API Explorer. Pour plus de détails sur la configuration, réfère-toi à la section installation de notre documentation.

  • Tu peux utiliser l'API Ultralytics Explorer pour effectuer des recherches de similarité en créant une table d'embeddings et en l'interrogeant pour trouver des images similaires. Voici un exemple de base :

    from ultralytics import Explorer
    
    # Create an Explorer object
    explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
    explorer.create_embeddings_table()
    
    # Search for similar images to a given image
    similar_images_df = explorer.get_similar(img="path/to/image.jpg")
    print(similar_images_df.head())

    Pour plus de détails, consulte la section Similarity Search.

  • LanceDB, utilisé sous le capot par Ultralytics Explorer, fournit des tables d'embeddings évolutives sur le disque. Cela garantit que tu peux créer et réutiliser des embeddings pour de grands datasets comme COCO sans manquer de mémoire. Ces tables ne sont créées qu'une seule fois et peuvent être réutilisées, ce qui améliore l'efficacité du traitement des données.

  • La fonctionnalité Ask AI permet aux utilisateurs de filtrer les datasets à l'aide de requêtes en langage naturel. Cette fonctionnalité exploite des LLMs pour convertir ces requêtes en requêtes SQL en arrière-plan. Voici un exemple :

    from ultralytics import Explorer
    
    # Create an Explorer object
    explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
    explorer.create_embeddings_table()
    
    # Query with natural language
    query_result = explorer.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
    print(query_result.head())

    Pour plus d'exemples, consulte la section Ask AI.

Commentaires