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.10
La 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.
Similarity Search
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.
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
Vous pouvez également tracer les échantillons similaires directement à l'aide de la fonction plot_similar
util
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
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.
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)
# 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)
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
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.
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
dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()
Interconversion to popular data formats
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
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)
at the plot first
Examinons maintenant le résultat de l'opération
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.
Vous devriez voir quelque chose comme ceci