Vai al contenuto

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

Apri in Colab 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.

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, considerando top_k immagini simili alla volta.

Restituisce un dataframe pandas con le seguenti colonne:

  • idx: Indice dell'immagine nel set di dati
  • im_file: Percorso del file immagine
  • count: Numero di immagini nel dataset che sono più vicine di max_dist all'immagine corrente
  • sim_im_files: Elenco dei percorsi dei count 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 e car 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.

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.



📅 Creato 1 anno fa ✏️ Aggiornato 4 mesi fa

Commenti