Vai al contenuto

Esempio di esplorazione VOC

Benvenuti nel notebook dell'API Ultralytics Explorer. Questo notebook presenta le risorse disponibili per esplorare i dataset tramite ricerca semantica, ricerca vettoriale e query SQL.

Prova yolo explorer (alimentato dall'API Explorer)

Installa ultralytics e esegui yolo explorer nel tuo terminale per eseguire query personalizzate e ricerca semantica nel tuo browser.

Nota della community ⚠️

A partire da ultralytics>=8.3.10, il supporto per Ultralytics Explorer è deprecato. Funzionalità simili (ed espanse) per l'esplorazione dei dataset sono disponibili in Ultralytics Platform.

Configurazione

Installa ultralytics e il richiesto dipendenze, quindi controllare software e hardware.

!uv pip install ultralytics[explorer] openai
yolo checks

Sfrutta la potenza della ricerca di similarità vettoriale per trovare i punti dati simili nel tuo set di dati insieme alla loro distanza nello spazio di embedding. È sufficiente creare una tabella di embedding per la coppia set di dati-modello specificata. È necessario solo una volta e viene riutilizzato automaticamente.

exp = Explorer("VOC.yaml", model="yolo26n.pt")
exp.create_embeddings_table()

Una volta costruita la tabella degli embedding, è possibile eseguire la ricerca semantica in uno dei seguenti modi:

  • Su un dato indice/elenco di indici nel dataset, ad esempio, exp.get_similar(idx=[1, 10], limit=10)
  • Su qualsiasi immagine/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.

Si ottiene un Pandas DataFrame con il numero limite di punti dati più simili all'input, insieme alla loro distanza nello spazio di embedding. È possibile utilizzare questo dataset per eseguire ulteriori filtri.

Risultati della ricerca per somiglianza con Ultralytics

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()

Puoi anche tracciare i campioni simili direttamente usando il plot_similar util

Immagini simili trovate tramite ricerca vettoriale

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

Visualizzazione della ricerca per similarità con incorporamenti

Chiedi all'IA: Cerca o Filtra con il Linguaggio Naturale

È possibile interrogare l'oggetto Explorer con il tipo di punti dati che si desidera visualizzare, e questo cercherà di restituire un DataFrame con tali risultati. Poiché è alimentato da LLM, non sempre ottiene il risultato corretto. In tal caso, restituirà None.

Risultati della query in linguaggio naturale Ask AI Ultralytics

df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)

Per tracciare questi risultati, è possibile utilizzare la plot_query_result utility. Esempio:

plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)

Risultato della query AI che mostra immagini corrispondenti

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

Esegui Query SQL sul Tuo Dataset

A volte potresti voler indagare su determinate voci nel tuo dataset. Per questo, Explorer ti consente di eseguire query SQL. Accetta uno dei seguenti formati:

  • Le query che iniziano con "WHERE" selezioneranno automaticamente tutte le colonne. Questo può essere considerato come una query abbreviata.
  • È anche possibile scrivere query complete in cui è possibile specificare quali colonne selezionare.

Questo può essere usato per esaminare le prestazioni del modello e specifici punti dati. Per esempio:

  • supponiamo che il tuo modello abbia difficoltà con le immagini che contengono esseri umani e cani. Puoi scrivere una query come questa per selezionare i punti che hanno almeno 2 esseri umani E almeno un cane.

Puoi combinare query SQL e ricerca semantica per filtrare e restringere i risultati a un tipo specifico.

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)

Tabella dei risultati della query SQL Explorer

table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)

Proprio come la ricerca di similarità, hai anche un'utilità per tracciare direttamente le query SQL usando exp.plot_sql_query

Visualizzazione delle immagini corrispondenti alla query SQL

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)

Tabella per lavorare con gli embeddings (Avanzato)

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.

table = exp.table
print(table.schema)

Esegui query raw¶

La ricerca vettoriale trova i vettori più vicini dal database. In un sistema di raccomandazione o in un motore di ricerca, è possibile trovare prodotti simili a quello cercato. Nelle applicazioni LLM e in altre applicazioni di intelligenza artificiale, ogni punto dati può essere presentato dagli embedding generati da alcuni modelli, restituendo le caratteristiche più rilevanti.

Una ricerca nello spazio vettoriale ad alta dimensione, consiste nel trovare i K-Nearest-Neighbors (KNN) del vettore di query.

Metrica. In LanceDB, una Metrica è il modo per descrivere la distanza tra una coppia di vettori. Attualmente, supporta le seguenti metriche:

  • L2
  • Coseno
  • La ricerca di similarità di Dot Explorer utilizza L2 per impostazione predefinita. Puoi eseguire query direttamente sulle tabelle oppure utilizzare il formato lance per creare utilità personalizzate per gestire i set di dati. Maggiori dettagli sulle operazioni della tabella LanceDB disponibili nella documentazione.

Esplora la tabella dei risultati delle query SQL grezze

dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()
df = table.to_pandas()
pa_table = table.to_arrow()

Lavorare con gli Embeddings

Puoi accedere all'embedding raw dalla tabella lancedb e analizzarlo. Gli image embedding sono memorizzati nella colonna vector

import numpy as np

embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)

Grafico a dispersione

Uno dei passaggi preliminari nell'analisi degli embedding è rappresentarli in uno spazio 2D tramite la riduzione della dimensionalità. Proviamo un esempio

Visualizzazione del grafico a dispersione degli embedding Explorer

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 di similarità

Ecco un semplice esempio di un'operazione basata sulla tabella degli embedding. Explorer viene fornito con un 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.

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. Similmente alla ricerca vettoriale e SQL, questo include anche un'utilità per tracciarlo direttamente.

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)

Analisi dell'indice di similarità dei set di dati

Diamo prima un'occhiata al grafico

exp.plot_similarity_index(max_dist=0.2, top_k=0.01)

Ora diamo un'occhiata all'output dell'operazione

sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, force=False)

sim_idx

Creiamo una query per vedere quali punti dati hanno un conteggio di similarità superiore a 30 e visualizziamo immagini simili a essi.

import numpy as np

sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]

Dovresti vedere qualcosa del genere

Visualizzazione dell'indice di similarità per l'analisi dei set di dati

exp.plot_similar(idx=[7146, 14035])  # Using avg embeddings of 2 images


📅 Creato 1 anno fa ✏️ Aggiornato 1 mese fa
glenn-jocherRizwanMunawarpderrengerronald_eddy@yahoo.commiles-deans-ultralyticsonuralpszrpicsalex

Commenti