Skip to content

Ultralytics API de l'explorateur

Note communautaire ⚠

Depuis le ultralytics>=8.3.10La prise en charge de l'explorateur Ultralytics a Ă©tĂ© supprimĂ©e. Mais ne vous inquiĂ©tez pas ! Vous pouvez dĂ©sormais accĂ©der Ă  des fonctionnalitĂ©s similaires, voire amĂ©liorĂ©es, par l'intermĂ©diaire de Ultralytics HUBHUB, notre plateforme intuitive sans code conçue pour rationaliser votre flux de travail. Avec Ultralytics HUB, vous pouvez continuer Ă  explorer, visualiser et gĂ©rer vos donnĂ©es sans effort, le tout sans Ă©crire une seule ligne de code. Ne manquez pas de le dĂ©couvrir et de profiter de ses puissantes fonctionnalitĂ©s!🚀

Introduction

Open In Colab L'API Explorer est une API Python qui permet d'explorer vos ensembles de donnĂ©es. Elle prend en charge le filtrage et la recherche de vos ensembles de donnĂ©es Ă  l'aide de requĂȘtes SQL, la recherche par similaritĂ© vectorielle et la recherche sĂ©mantique.



Regarder : Ultralytics Aperçu de l'API Explorer

Installation

Explorer dépend de bibliothÚques externes pour certaines de ses fonctionnalités. Celles-ci sont automatiquement installées lors de l'utilisation. Pour installer manuellement ces dépendances, utilisez 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
dataframe = explorer.get_similar(img="path/to/image.jpg")

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

Note

La table des embeddings pour une paire donnée de données et de modÚles n'est créée qu'une seule fois et réutilisée. Ceux-ci utilisent LanceDB sous le capot, qui s'étend sur le disque, de sorte que vous pouvez créer et réutiliser des embeddings pour de grands ensembles de données tels que COCO sans manquer de mémoire.

Si vous souhaitez forcer la mise à jour de la table d'embeddings, vous pouvez passer le paramÚtre force=True à create_embeddings_table méthode.

Vous pouvez accéder directement à l'objet table de LanceDB pour effectuer des analyses avancées. Pour en savoir plus, consultez la section Travailler avec les tables Embeddings.

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

  • Sur un index donnĂ© ou une liste d'index dans l'ensemble de donnĂ©es : exp.get_similar(idx=[1,10], limit=10)
  • Sur toute image ou liste d'images ne faisant pas partie de l'ensemble de donnĂ©es : exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)

Dans le cas d'entrées multiples, c'est l'ensemble de leurs encastrements qui est utilisé.

Vous obtenez un cadre de données pandas avec l'attribut limit le nombre de points de données les plus similaires à l'entrée, ainsi que leur distance dans l'espace d'intégration. Vous pouvez utiliser cet ensemble de données pour effectuer d'autres filtrages

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())
from ultralytics import Explorer

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

similar = exp.get_similar(idx=1, limit=10)
print(similar.head())

# Search using multiple indices
similar = exp.get_similar(idx=[1, 10], limit=10)
print(similar.head())

Tracé d'images similaires

Vous pouvez Ă©galement tracer les images similaires Ă  l'aide de la fonction plot_similar Cette mĂ©thode prend les mĂȘmes arguments que la mĂ©thode Cette mĂ©thode prend les mĂȘmes arguments que get_similar et place 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()
from ultralytics import Explorer

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

plt = exp.plot_similar(idx=1, limit=10)
plt.show()

2. Ask AI (interrogation en langage naturel)

Cela vous permet d'Ă©crire comment vous souhaitez filtrer votre ensemble de donnĂ©es en utilisant le langage naturel. Vous n'avez pas besoin d'ĂȘtre compĂ©tent dans l'Ă©criture de requĂȘtes SQL. Notre gĂ©nĂ©rateur de requĂȘtes alimentĂ© par l'IA le fera automatiquement sous le capot. Par exemple, vous pouvez dire : "Montrez-moi 100 images avec exactement une personne et 2 chiens. Il peut y avoir d'autres objets aussi" et il gĂ©nĂ©rera en interne la requĂȘte et vous montrera les rĂ©sultats. Note : Cela fonctionne en utilisant des LLMs sous le capot, donc les rĂ©sultats sont probabilistes et peuvent parfois se tromper.

Demander Ă  l'IA

from ultralytics import Explorer
from ultralytics.data.explorer import plot_query_result

# 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ĂȘte SQL

Vous pouvez exĂ©cuter des requĂȘtes SQL sur votre ensemble de donnĂ©es Ă  l'aide de la fonction sql_query Cette mĂ©thode prend une requĂȘte SQL en entrĂ©e et renvoie un cadre de donnĂ©es pandas avec les rĂ©sultats. 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())

ReprĂ©sentation graphique des rĂ©sultats d'une requĂȘte SQL

Vous pouvez Ă©galement tracer les rĂ©sultats d'une requĂȘte SQL Ă  l'aide de la fonction plot_sql_query Cette mĂ©thode prend les mĂȘmes arguments que la mĂ©thode Cette mĂ©thode prend les mĂȘmes arguments que sql_query et prĂ©sente les rĂ©sultats sous la forme d'une grille.

ReprĂ©sentation graphique des rĂ©sultats d'une 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 des tableaux d'encodage

Vous pouvez également travailler directement avec le tableau des enchùssements. Une fois le tableau des enchùssements créé, vous pouvez y accéder à l'aide de la commande Explorer.table

Conseil

Explorer fonctionne sur LanceDB en interne. Vous pouvez accĂ©der Ă  cette table directement, en utilisant Explorer.table et d'exĂ©cuter des requĂȘtes brutes, de mettre en place des prĂ© et post-filtres, etc.

from ultralytics import Explorer

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

Voici quelques exemples de ce que vous pouvez faire avec le tableau :

Obtenir les emboĂźtements bruts

Exemple

from ultralytics import Explorer

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

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

RequĂȘte avancĂ©e avec prĂ© et post-filtres

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

Lorsque vous utilisez de grands ensembles de données, vous pouvez également créer un index vectoriel dédié pour accélérer les recherches. Cela se fait à l'aide de l'option create_index sur la table LanceDB.

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

Pour plus de dĂ©tails sur les types d'indices vectoriels disponibles et les paramĂštres , cliquez ici. À l'avenir, nous ajouterons la prise en charge de la crĂ©ation d'indices vectoriels directement Ă  partir de l'API Explorer.

5. Applications de l'intégration

Vous pouvez utiliser le tableau des enchĂąssements pour effectuer diverses analyses exploratoires. En voici quelques exemples :

Indice de similitude

Explorer est livré avec un similarity_index opération :

  • Il tente d'estimer le degrĂ© de similitude de chaque point de donnĂ©es avec le reste de l'ensemble de donnĂ©es.
  • Pour ce faire, il compte le nombre d'images intĂ©grĂ©es qui sont plus proches de max_dist Ă  l'image actuelle dans l'espace d'intĂ©gration gĂ©nĂ©rĂ©, en considĂ©rant que top_k images similaires Ă  la fois.

Il renvoie un cadre de données pandas avec les colonnes suivantes :

  • idx: Index de l'image dans l'ensemble de donnĂ©es
  • im_file: Chemin d'accĂšs au fichier image
  • count: Nombre d'images dans l'ensemble de donnĂ©es qui sont plus proches que max_dist Ă  l'image actuelle
  • sim_im_files: Liste des chemins d'accĂšs au count images similaires

Conseil

Pour un ensemble de données donné, le modÚle, max_dist & top_k l'index de similarité une fois généré sera réutilisé. Si votre jeu de données a changé, ou si vous avez simplement besoin de régénérer l'index de similarité, vous pouvez passer le paramÚtre force=True.

Indice de similitude

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()

sim_idx = exp.similarity_index()

Vous pouvez utiliser l'indice de similarité pour créer des conditions personnalisées afin de filtrer l'ensemble des données. Par exemple, vous pouvez filtrer les images qui ne sont similaires à aucune autre image de l'ensemble de données à l'aide du code suivant :

import numpy as np

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

Visualiser l'espace d'intégration

Vous pouvez également visualiser l'espace d'intégration à l'aide de l'outil de traçage de votre choix. 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()

Commencez à créer vos propres rapports d'exploration d'ensembles de données CV à l'aide de l'API Explorer. Pour vous inspirer, consultez la page

Applications créées à l'aide de Ultralytics Explorer

Essayez notre démo d'interface graphique basée sur l'API Explorer

BientĂŽt disponible

  • [Fusionner des Ă©tiquettes spĂ©cifiques Ă  partir d'ensembles de donnĂ©es. Exemple - Importer tout person Ă©tiquettes de COCO et car Ă©tiquettes de paysages urbains
  • [Supprimer les images dont l'indice de similaritĂ© est supĂ©rieur au seuil fixĂ©.
  • [Persister automatiquement les nouveaux ensembles de donnĂ©es aprĂšs la fusion/suppression d'entrĂ©es
  • [Visualisations avancĂ©es des ensembles de donnĂ©es

FAQ

À quoi sert l'API Ultralytics Explorer ?

L'API Ultralytics Explorer est conçue pour l'exploration complĂšte des ensembles de donnĂ©es. Elle permet aux utilisateurs de filtrer et de rechercher des ensembles de donnĂ©es Ă  l'aide de requĂȘtes SQL, de la recherche de similaritĂ© vectorielle et de la recherche sĂ©mantique. Cette puissante API Python peut gĂ©rer de grands ensembles de donnĂ©es, ce qui la rend idĂ©ale pour diverses tĂąches de vision par ordinateur utilisant des modĂšles Ultralytics .

Comment installer l'API Ultralytics Explorer ?

Pour installer l'API Ultralytics Explorer et ses dépendances, utilisez la commande suivante :

pip install ultralytics[explorer]

Cela installera automatiquement toutes les bibliothÚques externes nécessaires à la fonctionnalité de l'API Explorer. Pour plus de détails sur l'installation, reportez-vous à la section "Installation" de notre documentation.

Vous pouvez 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, veuillez consulter la section Recherche de similitudes.

Quels sont les avantages de l'utilisation de LanceDB avec Ultralytics Explorer ?

LanceDB, utilisĂ© sous le capot de Ultralytics Explorer, fournit des tables d'intĂ©gration Ă©volutives sur disque. Vous pouvez ainsi crĂ©er et rĂ©utiliser des embeddings pour de grands ensembles de donnĂ©es tels que 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.

Comment fonctionne la fonction Ask AI dans l'API Ultralytics Explorer ?

La fonction Ask AI permet aux utilisateurs de filtrer des ensembles de donnĂ©es Ă  l'aide de requĂȘtes en langage naturel. Cette fonctionnalitĂ© s'appuie sur les LLM pour convertir ces requĂȘtes en requĂȘtes SQL dans les coulisses. 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, consultez la section "Ask AI" (demandez Ă  l'IA).

📅C rĂ©Ă© il y a 11 mois ✏ Mis Ă  jour il y a 1 mois

Commentaires