Skip to content

Exemple d'exploration des COV

Welcome to the Ultralytics Explorer API notebook! This notebook serves as the starting point for exploring the various resources available to help you get started with using Ultralytics to explore your datasets using with the power of semantic search. You can utilities out of the box that allow you to examine specific types of labels using vector search or even SQL queries.

Essayer yolo explorer powered by Explorer API

Simplement pip install ultralytics et exécuter yolo explorer dans votre terminal pour exécuter des requêtes personnalisées et des recherches sémantiques sur vos ensembles de données directement dans votre navigateur !

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!🚀

Mise en place

Pip installer ultralytics et dépendances et vérifier les logiciels et le matériel.

%pip install ultralytics[explorer] openai
yolo checks

Utilize the power of vector similarity search to find the similar data points in your dataset along with their distance in the embedding space. Simply create an embeddings table for the given dataset-model pair. It is only needed once, and it is reused automatically.

exp = Explorer("VOC.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

Une fois que la table des embeddings est construite, vous pouvez lancer une recherche sémantique de l'une des manières suivantes :

  • On a given index / list of indices in the dataset like - exp.get_similar(idx=[1,10], limit=10)
  • On any image/ list of images not in the dataset - exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10) In case of multiple inputs, the aggregate of their embeddings is used.

You get a pandas dataframe with the limit number of most similar data points to the input, along with their distance in the embedding space. You can use this dataset to perform further filtering

Similarity search table

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()

Vous pouvez également tracer les échantillons similaires directement à l'aide de la fonction plot_similar util

Similarity search image 1

exp.plot_similar(idx=6500, limit=20)
exp.plot_similar(idx=[100, 101], limit=10)  # Can also pass list of idxs or imgs

exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10, labels=False)  # Can also pass external images

Similarity search image 2

Ask AI: Search or filter with Natural Language

You can prompt the Explorer object with the kind of data points you want to see, and it'll try to return a dataframe with those. Because it is powered by LLMs, it doesn't always get it right. In that case, it'll return None.

Ask ai table

df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)

pour tracer ces résultats, vous pouvez utiliser plot_query_result util Example:

plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)

Ask ai image 1

# plot
from PIL import Image

from ultralytics.data.explorer import plot_query_result

plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)

Run SQL queries on your Dataset

Sometimes you might want to investigate a certain type of entries in your dataset. For this Explorer allows you to execute SQL queries. It accepts either of the formats:

  • Queries beginning with "WHERE" will automatically select all columns. This can be thought of as a shorthand query
  • Vous pouvez également écrire des requêtes complètes dans lesquelles vous pouvez spécifier les colonnes à sélectionner

Elle peut être utilisée pour étudier les performances du modèle et des points de données spécifiques. Par exemple, il est possible d'étudier les performances du modèle et des points de données spécifiques :

  • Supposons que votre modèle se batte sur des images comportant des humains et des chiens. Vous pouvez écrire une requête comme celle-ci pour sélectionner les points qui ont au moins 2 humains ET au moins un chien.

Vous pouvez combiner une requête SQL et une recherche sémantique pour filtrer des types de résultats spécifiques.

table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)

SQL queries table

table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)

Tout comme pour la recherche par similarité, vous disposez également d'un utilitaire pour tracer directement les requêtes SQL en utilisant exp.plot_sql_query

SQL queries image 1

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)

Working with embeddings Table (Advanced)

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.

table = exp.table
print(table.schema)

Run raw queries¶

La recherche de vecteurs permet de trouver les vecteurs les plus proches dans la base de données. Dans un système de recommandation ou un moteur de recherche, vous pouvez trouver des produits similaires à ceux que vous avez recherchés. Dans le LLM et d'autres applications d'IA, chaque point de données peut être présenté par les embeddings générés à partir de certains modèles, ce qui permet d'obtenir les caractéristiques les plus pertinentes.

Une recherche dans un espace vectoriel à haute dimension consiste à trouver les K-voisins les plus proches (KNN) du vecteur de la requête.

Metric In LanceDB, a Metric is the way to describe the distance between a pair of vectors. Currently, it supports the following metrics:

  • L2
  • Cosinus
  • Dot Explorer's similarity search uses L2 by default. You can run queries on tables directly, or use the lance format to build custom utilities to manage datasets. More details on available LanceDB table ops in the docs

Raw-queries-table

dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()
df = table.to_pandas()
pa_table = table.to_arrow()

Travailler avec des emboîtements

Vous pouvez accéder à l'intégration brute à partir de la table lancedb et l'analyser. Les intégrations d'images sont stockées dans la colonne vector

import numpy as np

embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)

Diagramme de dispersion

L'une des étapes préliminaires de l'analyse des embeddings consiste à les représenter dans l'espace 2D via la réduction de la dimensionnalité. Prenons un exemple

Scatterplot Example

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA  # pip install scikit-learn

# 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's 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()

Indice de similitude

Voici un exemple simple d'une opération réalisée à l'aide de la table "embeddings". Explorer est livré avec un similarity_index fonctionnement-

  • Il tente d'estimer le degré de similitude de chaque point de données avec le reste de l'ensemble de données.
  • It does that by counting how many image embeddings lie closer than max_dist to the current image in the generated embedding space, considering top_k similar images at a time.

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. Similar to vector and SQL search, this also comes with a util to directly plot it. Let's look

sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01)
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)

Indice de similitude

at the plot first

exp.plot_similarity_index(max_dist=0.2, top_k=0.01)

Examinons maintenant le résultat de l'opération

sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, force=False)

sim_idx

Créons une requête pour voir quels sont les points de données dont le nombre de similitudes est supérieur à 30 et traçons les images qui leur sont similaires.

import numpy as np

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

Vous devriez voir quelque chose comme ceci

similarity-index-image

exp.plot_similar(idx=[7146, 14035])  # Using avg embeddings of 2 images
📅 Created 16 days ago ✏️ Updated 1 day ago

Commentaires