Vai al contenuto

Ultralytics API Explorer

Introduzione

Apri in Colab L'API Explorer è un'API Python per esplorare i tuoi set di dati. Supporta il filtraggio e la ricerca del tuo set di dati utilizzando query SQL, la ricerca di 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, usa il seguente comando:

pip install ultralytics[explorer]

Utilizzo

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data='coco128.yaml', model='yolov8n.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. Queste tabelle utilizzano LanceDB, che è in grado di scalare su disco, in modo da poter creare e riutilizzare embeddings per set di dati di grandi dimensioni come COCO senza esaurire la memoria.

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

Puoi accedere direttamente all'oggetto tabella LanceDB per eseguire analisi avanzate. Per saperne di più, consulta 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, puoi eseguire la ricerca semantica in uno dei seguenti modi:

  • Su un dato indice o su un 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 l'opzione 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='yolov8n.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='yolov8n.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

Puoi anche 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='yolov8n.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='yolov8n.pt')
exp.create_embeddings_table()

plt = exp.plot_similar(idx=1, limit=10)
plt.show()

2. Ask AI (interrogazione in linguaggio naturale)

Questo ti permette di scrivere come vuoi filtrare il tuo set di dati usando 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, puoi dire: "Mostrami 100 immagini con esattamente una persona e due cani. Possono esserci anche altri oggetti" e il generatore di query genererà internamente la query e ti mostrerà i risultati. Nota: questo funziona utilizzando gli LLM sotto il cofano, quindi i risultati sono probabilistici e a volte potrebbero essere sbagliati.

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='yolov8n.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

Puoi eseguire delle query SQL sul tuo set di dati utilizzando la funzione 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='yolov8n.pt')
exp.create_embeddings_table()

df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())

Tracciare i risultati di una query SQL

Puoi anche 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 di una query SQL

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data='coco128.yaml', model='yolov8n.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

Puoi anche lavorare direttamente con la tabella degli embeddings. Una volta creata la tabella degli embeddings, puoi accedervi utilizzando il metodo Explorer.table

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

from ultralytics import Explorer

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

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

Ottieni 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 e post-filtri

Esempio

from ultralytics import Explorer

exp = Explorer(model="yolov8n.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 utilizzi grandi insiemi di dati, puoi anche creare un indice vettoriale dedicato per velocizzare le interrogazioni. Per farlo si utilizza l'opzione create_index sulla tabella LanceDB.

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

Per maggiori dettagli sul tipo di indici vettoriali disponibili e sui parametri, clicca qui In futuro, aggiungeremo il supporto per la creazione di indici vettoriali direttamente dall'API di Explorer.

5. Applicazioni delle incorporazioni

Puoi 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 quanto ogni punto di dati sia simile al 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 tuo set di dati sia cambiato o semplicemente tu abbia bisogno di rigenerare l'indice di somiglianza, puoi passare force=True.

Indice di somiglianza

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()

sim_idx = exp.similarity_index()

Puoi utilizzare l'indice di somiglianza per creare condizioni personalizzate per filtrare il set di dati. Ad esempio, puoi 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

Puoi anche visualizzare lo spazio di incorporazione utilizzando uno strumento di plottaggio di tua scelta. Ecco un semplice esempio che utilizza matplotlib:

import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 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 dei set di dati CV utilizzando l'API di Explorer. Per trarre ispirazione, dai un'occhiata al sito

Applicazioni costruite con Ultralytics Explorer

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

Prossimamente

  • [ ] Unisci etichette specifiche dai set di dati. Esempio - Importa tutti person etichette di COCO e car etichette di Cityscapes
  • [Rimuovi le immagini che hanno un indice di somiglianza superiore alla soglia indicata.
  • [ ] Persevera automaticamente i nuovi set di dati dopo aver unito/rimosso le voci
  • [ ] Visualizzazioni avanzate del set di dati


Creato 2024-01-07, Aggiornato 2024-04-27
Autori: glenn-jocher (8), 0xSynapse (1), RizwanMunawar (2), AyushExel (2)

Commenti