API Ultralytics Explorer
Nota della community ⚠️
A partire da ultralytics>=8.3.10
, il supporto per Ultralytics Explorer è stato deprecato. Ma non preoccuparti! Ora puoi accedere a funzionalità simili e persino migliorate tramite Ultralytics HUB, la nostra intuitiva piattaforma no-code progettata per semplificare il tuo flusso di lavoro. Con Ultralytics HUB, puoi continuare a esplorare, visualizzare e gestire i tuoi dati senza sforzo, il tutto senza scrivere una sola riga di codice. Assicurati di provarlo e di sfruttare le sue potenti funzionalità!🚀
Introduzione
L'API Explorer è un'API Python per esplorare i tuoi dataset. Supporta il filtraggio e la ricerca nel tuo dataset utilizzando query SQL, ricerca di similarità vettoriale e ricerca semantica.
Guarda: Panoramica dell'API Ultralytics Explorer
Installazione
Explorer dipende da librerie esterne per alcune delle sue funzionalità. Queste vengono installate automaticamente durante l'utilizzo. Per installare manualmente queste dipendenze, utilizzare il comando seguente:
pip install ultralytics[explorer]
Utilizzo
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)
Nota
La tabella degli Embeddings per una data coppia di set di dati e modello viene creata e riutilizzata una sola volta. Questi utilizzano LanceDB sotto il cofano, che scala su disco, quindi puoi creare e riutilizzare gli embeddings per set di dati di grandi dimensioni come COCO senza esaurire la memoria.
Nel caso in cui si desideri forzare l'aggiornamento della tabella degli embedding, è possibile passare force=True
a create_embeddings_table
metodo.
Puoi accedere direttamente all'oggetto tabella LanceDB per eseguire analisi avanzate. Scopri di più nella sezione Working with Embeddings Table section.
1. Ricerca di similarità
La ricerca di similarità è una tecnica per trovare immagini simili a un'immagine data. Si basa sull'idea che immagini simili avranno embedding simili. Una volta creata la tabella degli embedding, è possibile eseguire la ricerca semantica in uno dei seguenti modi:
- Su un determinato indice o elenco di indici nel dataset:
exp.get_similar(idx=[1,10], limit=10)
- Su qualsiasi immagine o elenco di immagini non presenti nel dataset:
exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)
In caso di input multipli, viene utilizzata l'aggregazione dei loro embedding.
Ottieni un dataframe pandas con il limit
numero di punti dati più simili all'input, insieme alla loro distanza nello spazio di embedding. Puoi utilizzare questo set di dati per eseguire ulteriori filtraggi
Ricerca semantica
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())
Tracciamento di immagini simili
Puoi anche tracciare immagini simili usando il plot_similar
metodo. Questo metodo accetta gli stessi argomenti di get_similar
e traccia le immagini simili in una griglia.
Tracciamento di immagini simili
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. Chiedi all'AI (Interrogazione in linguaggio naturale)
Questo permette di scrivere come si desidera filtrare il dataset usando il linguaggio naturale. Non è necessario essere esperti nella scrittura di query SQL. Il nostro generatore di query basato sull'intelligenza artificiale lo farà automaticamente dietro le quinte. Ad esempio, si può dire "mostrami 100 immagini con esattamente una persona e 2 cani. Ci possono essere anche altri oggetti" e genererà internamente la query e mostrerà quei risultati. Nota: questo funziona usando LLM sotto il cofano, quindi i risultati sono probabilistici e a volte potrebbero sbagliare.
Chiedi all'AI
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. Interrogazione SQL
È possibile eseguire query SQL sul set di dati utilizzando sql_query
metodo. Questo metodo accetta una query SQL come input e restituisce un dataframe pandas con i risultati.
Query 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())
Tracciamento dei risultati di query SQL
Puoi anche tracciare i risultati di una query SQL utilizzando il plot_sql_query
metodo. Questo metodo accetta gli stessi argomenti di sql_query
e traccia i risultati in una griglia.
Tracciamento dei risultati di query 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. Lavorare con la tabella degli embedding
Puoi anche lavorare direttamente con la tabella degli embedding. Una volta creata la tabella degli embedding, puoi accedervi utilizzando il Explorer.table
Suggerimento
Explorer funziona su LanceDB tabelle internamente. Puoi accedere direttamente a questa tabella, utilizzando Explorer.table
oggetti ed eseguire query raw, eseguire push-down di pre e post-filtri, ecc.
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.table
Ecco alcuni esempi di cosa puoi fare con la tabella:
Ottieni Embeddings raw
Esempio
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.table
embeddings = table.to_pandas()["vector"]
print(embeddings)
Interrogazione avanzata con pre e post-filtri
Esempio
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)
Crea indice vettoriale
Quando si utilizzano dataset di grandi dimensioni, è anche possibile creare un indice vettoriale dedicato per interrogazioni più rapide. Questo si fa usando il create_index
metodo sulla tabella LanceDB.
table.create_index(num_partitions=..., num_sub_vectors=...)
Trova maggiori dettagli sui tipi di indice vettoriale disponibili e sui parametri di configurazione nella documentazione sull'indicizzazione di LanceDB. In futuro, prevediamo di supportare la creazione di indici vettoriali direttamente tramite l'API Explorer.
5. Applicazioni di embedding
Puoi utilizzare la tabella degli embedding per eseguire una varietà di analisi esplorative. Ecco alcuni esempi:
Indice di similarità
Explorer è dotato di similarity_index
operazione:
- Cerca di stimare quanto ogni punto dati sia simile al resto del dataset.
- Lo fa contando quanti embedding di immagini si trovano più vicini di
max_dist
all'immagine corrente nello spazio di embedding generato, considerandotop_k
immagini simili alla volta.
Restituisce un dataframe pandas con le seguenti colonne:
idx
: Indice dell'immagine nel set di datiim_file
: Percorso del file immaginecount
: Numero di immagini nel dataset che sono più vicine dimax_dist
all'immagine correntesim_im_files
: Elenco dei percorsi deicount
immagini simili
Suggerimento
Per un determinato dataset, modello, max_dist
& top_k
l'indice di similarità una volta generato verrà riutilizzato. Nel caso in cui il tuo dataset sia cambiato o tu abbia semplicemente bisogno di rigenerare l'indice di similarità, puoi passare force=True
.
Indice di similarità
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
sim_idx = exp.similarity_index()
È possibile utilizzare l'indice di similarità per creare condizioni personalizzate per filtrare il set di dati. Ad esempio, puoi filtrare le immagini che non sono simili a nessun'altra immagine nel set di dati utilizzando il seguente codice:
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]
Visualizza lo spazio di embedding
Puoi anche visualizzare lo spazio di embedding utilizzando lo strumento di tracciamento che preferisci. Ad esempio, ecco un semplice esempio che utilizza 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()
Inizia a creare i tuoi report di esplorazione del dataset CV utilizzando l'API Explorer. Per ispirazione, dai un'occhiata all'Esempio di esplorazione VOC.
App create utilizzando Ultralytics Explorer
Prova la nostra Demo GUI basata sull'API Explorer
Prossimamente
- [ ] Unisci etichette specifiche dai dataset. Esempio - Importa tutto
person
etichette da COCO ecar
etichette da Cityscapes - [ ] Rimuovi le immagini che hanno un indice di similarità superiore alla soglia specificata
- [ ] Salva automaticamente i nuovi dataset dopo aver unito/rimosso le voci
- [ ] Visualizzazioni avanzate del dataset
FAQ
A cosa serve l'API Ultralytics Explorer?
L'API Explorer di Ultralytics è progettata per l'esplorazione completa dei dataset. Consente agli utenti di filtrare e cercare dataset utilizzando query SQL, ricerca di similarità vettoriale e ricerca semantica. Questa potente API python è in grado di gestire dataset di grandi dimensioni, rendendola ideale per varie attività di computer vision utilizzando i modelli Ultralytics.
Come posso installare l'API di Ultralytics Explorer?
Per installare l'API Ultralytics Explorer insieme alle sue dipendenze, utilizzare il seguente comando:
pip install ultralytics[explorer]
Questo installerà automaticamente tutte le librerie esterne necessarie per la funzionalità dell'API Explorer. Per ulteriori dettagli sulla configurazione, fare riferimento alla sezione di installazione della nostra documentazione.
Come posso usare l'API di Ultralytics Explorer per la ricerca di similarità?
Puoi utilizzare l'API Ultralytics Explorer per eseguire ricerche di similarità creando una tabella di embedding ed eseguendo query per immagini simili. Ecco un esempio di 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())
Per maggiori dettagli, visita la sezione Ricerca di similarità.
Quali sono i vantaggi dell'utilizzo di LanceDB con Ultralytics Explorer?
LanceDB, utilizzato internamente da Ultralytics Explorer, fornisce tabelle di embedding scalabili su disco. Ciò garantisce la possibilità di creare e riutilizzare embedding per set di dati di grandi dimensioni come COCO senza esaurire la memoria. Queste tabelle vengono create una sola volta e possono essere riutilizzate, migliorando l'efficienza nella gestione dei dati.
Come funziona la funzionalità Ask AI nell'API Ultralytics Explorer?
La funzionalità Ask AI consente agli utenti di filtrare i dataset utilizzando query in linguaggio naturale. Questa funzionalità sfrutta gli LLM per convertire queste query in query SQL dietro le quinte. Ecco un esempio:
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())
Per ulteriori esempi, consulta la sezione Chiedi all'AI.