Vai al contenuto

Esempio di esplorazione VOC

Benvenuti al notebook dell'API Ultralytics Explorer! Questo notebook funge da punto di partenza per esplorare le varie risorse disponibili per aiutarti a iniziare a utilizzare Ultralytics per esplorare i tuoi set di dati utilizzando la potenza della ricerca semantica. Puoi utilizzare funzionalità pronte all'uso che ti consentono di esaminare tipi specifici di etichette utilizzando la ricerca vettoriale o persino query SQL.

Prova yolo explorer basato su Explorer API

Semplicemente pip install ultralytics e esegui yolo explorer nel tuo terminale per eseguire query personalizzate e la ricerca semantica sui tuoi set di dati direttamente all'interno del tuo browser!

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à!🚀

Configurazione

Installazione con Pip ultralytics e dipendenze e controlla 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="yolo11n.pt")
exp.create_embeddings_table()

Una volta creata la tabella degli embedding, puoi eseguire la ricerca semantica in uno dei seguenti modi:

  • Su un determinato 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.

Ottieni un dataframe pandas con il numero limite 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

Tabella di ricerca di similarità

# 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

Immagine 1 per la ricerca di similarità

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

Immagine 2 per la ricerca di similarità

Chiedi all'AI: Cerca o filtra con linguaggio naturale

Puoi richiedere all'oggetto Explorer il tipo di punti dati che desideri visualizzare e cercherà di restituire un dataframe con tali punti. Poiché è alimentato da LLM, non sempre riesce. In tal caso, restituirà None.

Chiedi all'AI tabella

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

per la rappresentazione grafica di questi risultati è possibile utilizzare plot_query_result Esempio util:

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

Chiedi all'AI immagine 1

# 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 esaminare un certo tipo di 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
  • Puoi anche scrivere query complete in cui puoi 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 delle query SQL

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

Query SQL immagine 1

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.

Tabella delle query non elaborate

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

È possibile accedere alle incorporazioni grezze dalla tabella lancedb e analizzarle. Le incorporazioni dell'immagine sono memorizzate nella colonna vector

import numpy as np

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

Grafico a dispersione

Una delle fasi preliminari dell'analisi delle incorporazioni consiste nel tracciarle nello spazio 2D attraverso la riduzione della dimensionalità. Proviamo a fare un esempio

Esempio di grafico a dispersione

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

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)

Indice di similarità

nel grafico per primo

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

immagine-indice-di-similarita

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


📅C reato 10 mesi fa ✏️ Aggiornato 18 giorni fa
glenn-jocherRizwanMunawarmiles-deans-ultralyticsonuralpszrpderrengerpicsalex

Commenti