Vai al contenuto

Ultralytics Esploratore API

Nota della Comunità ⚠️

A partire da ultralytics>=8.3.10, il supporto di Ultralytics explorer è stato deprecato. Ma non preoccupatevi! È ora possibile accedere a funzionalità simili e persino migliorate tramite Ultralytics HUBla nostra piattaforma intuitiva senza codice, progettata per semplificare il vostro flusso di lavoro. Con Ultralytics HUB, potete continuare a esplorare, visualizzare e gestire i vostri dati senza sforzo, il tutto senza scrivere una sola riga di codice. Assicuratevi di dare un'occhiata e di approfittare delle sue potenti funzioni!🚀

Introduzione

Aprire in Colab L'API Explorer è un'API Python per l'esplorazione dei dataset. Supporta il filtraggio e la ricerca del set di dati mediante query SQL, la ricerca per similarità vettoriale e la ricerca semantica.



Guarda: Ultralytics Panoramica dell'API Explorer

Installazione

Explorer dipende da librerie esterne per alcune delle sue funzionalità. Queste vengono installate automaticamente al momento dell'utilizzo. Per installare manualmente queste dipendenze, utilizzare il seguente comando:

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 dati e modelli viene creata una sola volta e riutilizzata. Questi modelli utilizzano LanceDB, che scala su disco, in modo da poter creare e riutilizzare gli embeddings per grandi insiemi di dati come COCO senza esaurire la memoria.

Nel caso in cui si voglia forzare l'aggiornamento della tabella degli embeddings, si può passare il parametro force=True a create_embeddings_table metodo.

È possibile accedere direttamente all'oggetto tabella LanceDB per eseguire analisi avanzate. Per saperne di più, consultare la sezione Lavorare con la tabella Embeddings.

La ricerca per similarità è una tecnica per trovare immagini simili a un'immagine data. Si basa sull'idea che immagini simili avranno embeddings simili. Una volta costruita la tabella degli embeddings, è possibile eseguire la ricerca semantica in uno dei seguenti modi:

  • Su un determinato indice o elenco di indici nel set di dati: exp.get_similar(idx=[1,10], limit=10)
  • Su qualsiasi immagine o elenco di immagini non presenti nel set di dati: exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)

In caso di più ingressi, viene utilizzato l'aggregato delle loro incorporazioni.

Si ottiene un dataframe pandas con il parametro limit numero di punti dati più simili all'input, insieme alla loro distanza nello spazio di incorporazione. È possibile utilizzare questo set di dati per eseguire ulteriori filtri.

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())

Tracciare immagini simili

È inoltre possibile tracciare le immagini simili utilizzando la funzione plot_similar metodo. Questo metodo accetta gli stessi argomenti di get_similar e traccia le immagini simili in una griglia.

Tracciare 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. Ask AI (interrogazione in linguaggio naturale)

Questo permette di scrivere come si desidera filtrare il set di dati utilizzando il linguaggio naturale. Non è necessario essere esperti nella scrittura di query SQL. Il nostro generatore di query alimentato dall'intelligenza artificiale lo farà automaticamente. Ad esempio, potete dire: "Mostrami 100 immagini con esattamente una persona e 2 cani. Possono esserci anche altri oggetti" e il generatore di query genererà internamente la query e mostrerà i risultati. Nota: questo funziona usando gli LLM sotto il cofano, quindi i risultati sono probabilistici e a volte potrebbero essere sbagliati.

Chiedi all'intelligenza artificiale

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 il metodo sql_query metodo. Questo metodo prende in input una query SQL 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())

Tracciare i risultati delle query SQL

È anche possibile tracciare i risultati di una query SQL utilizzando l'opzione plot_sql_query metodo. Questo metodo accetta gli stessi argomenti di sql_query e traccia i risultati in una griglia.

Tracciare i risultati delle 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 delle incorporazioni

È anche possibile lavorare direttamente con la tabella degli embeddings. Una volta creata la tabella degli embeddings, è possibile accedervi utilizzando il metodo Explorer.table

Suggerimento

Explorer funziona su LanceDB internamente. È possibile accedere direttamente a questa tabella, utilizzando Explorer.table ed eseguire query grezze, applicare pre-filtri e post-filtri, ecc.

from ultralytics import Explorer

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

Ecco alcuni esempi di ciò che si può fare con la tabella:

Ottenere le incorporazioni grezze

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-filtri 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)

Creare un indice vettoriale

Quando si utilizzano insiemi di dati di grandi dimensioni, è possibile creare un indice vettoriale dedicato per velocizzare le interrogazioni. Questo si fa usando l'opzione create_index sulla tabella LanceDB.

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

Per ulteriori dettagli sul tipo di indici vettoriali disponibili e sui parametri , consultare la sezione In futuro, verrà aggiunto il supporto per la creazione di indici vettoriali direttamente dall'API di Explorer.

5. Applicazioni delle incorporazioni

È possibile utilizzare la tabella delle incorporazioni per eseguire una serie di analisi esplorative. Ecco alcuni esempi:

Indice di somiglianza

Explorer è dotato di un similarity_index operazione:

  • Cerca di stimare la somiglianza di ciascun punto di dati con il resto del set di dati.
  • Lo fa contando quante incorporazioni di immagini si trovano più vicine rispetto a max_dist all'immagine corrente nello spazio di incorporamento 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 set di dati che si avvicinano di più rispetto a max_dist all'immagine corrente
  • sim_im_files: Elenco dei percorsi dei file count immagini simili

Suggerimento

Per un dato set di dati, il modello, max_dist & top_k l'indice di similarità una volta generato sarà riutilizzato. Nel caso in cui il set di dati sia cambiato o sia semplicemente necessario rigenerare l'indice di somiglianza, si può passare il comando force=True.

Indice di somiglianza

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, è possibile filtrare le immagini che non sono simili a nessun'altra immagine del 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]

Visualizzare lo spazio di incorporazione

È inoltre possibile visualizzare lo spazio di incorporazione utilizzando uno strumento di plottaggio a scelta. 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()

Iniziate a creare i vostri report di esplorazione dei set di dati CV utilizzando l'API di Explorer. Per trarre ispirazione, date un'occhiata al sito

Applicazioni realizzate con Ultralytics Explorer

Provate la nostra demo dell'interfaccia grafica basata sull'API di Explorer

Prossimamente

  • [ ] Unire etichette specifiche dai set di dati. Esempio - Importazione di tutti person etichette di COCO e car etichette da Cityscapes
  • [Rimuove le immagini che hanno un indice di somiglianza superiore alla soglia indicata.
  • [ ] Persevera automaticamente i nuovi set di dati dopo l'unione/eliminazione delle voci.
  • [ ] Visualizzazioni avanzate del set di dati

FAQ

A cosa serve l'API di Ultralytics Explorer?

L'API Ultralytics Explorer è stata progettata per l'esplorazione completa dei set di dati. Consente agli utenti di filtrare e cercare insiemi di dati utilizzando query SQL, ricerca di similarità vettoriale e ricerca semantica. Questa potente API Python è in grado di gestire insiemi di dati di grandi dimensioni, il che la rende ideale per varie attività di computer vision che utilizzano modelli Ultralytics .

Come si installa l'API di Ultralytics Explorer?

Per installare l'API di Ultralytics Explorer e le sue dipendenze, usare il seguente comando:

pip install ultralytics[explorer]

Questo installerà automaticamente tutte le librerie esterne necessarie per le funzionalità dell'API di Explorer. Per ulteriori dettagli sulla configurazione, consultare la sezione Installazione della nostra documentazione.

È possibile utilizzare l'API di Ultralytics Explorer per eseguire ricerche di somiglianza, creando una tabella di embeddings e interrogandola per trovare 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, visitate la sezione Ricerca per similarità.

Quali sono i vantaggi dell'utilizzo di LanceDB con Ultralytics Explorer?

LanceDB, utilizzato da Ultralytics Explorer, fornisce tabelle di incorporazioni scalabili su disco. Questo garantisce la possibilità di creare e riutilizzare embeddings per grandi insiemi di dati 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 funzione Ask AI nell'API di Ultralytics Explorer?

La funzione Ask AI consente agli utenti di filtrare gli insiemi di dati utilizzando query in linguaggio naturale. Questa funzione 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, consultare la sezione Ask AI.

📅C reato 11 mesi fa ✏️ Aggiornato 1 mese fa

Commenti