Link to this sectionEsempio di esplorazione VOC#
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
Benvenuto nel notebook dell'API Ultralytics Explorer. Questo notebook introduce le risorse disponibili per esplorare i dataset con ricerca semantica, ricerca vettoriale e query SQL.
Prova yolo explorer (basato sull'API Explorer)
Installa ultralytics ed esegui yolo explorer nel tuo terminale per eseguire query personalizzate e ricerche semantiche nel tuo browser.
A partire da ultralytics>=8.3.12, Ultralytics Explorer è stato rimosso. Per utilizzare Explorer, installa pip install ultralytics==8.3.11. Funzionalità di esplorazione del dataset simili (e ampliate) sono disponibili nella Piattaforma Ultralytics.
Link to this sectionConfigurazione#
Installa ultralytics e le dipendenze richieste, quindi controlla il software e l'hardware.
!uv pip install ultralytics[explorer] openai
yolo checksLink to this sectionRicerca di similarità#
Sfrutta la potenza della ricerca di similarità vettoriale per trovare i punti dati simili nel tuo dataset insieme alla loro distanza nello spazio degli embedding. Crea semplicemente una tabella di embedding per la coppia dataset-modello specificata. È necessario farlo solo una volta e viene riutilizzata 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 dato indice/elenco di indici nel dataset, ad es.,
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 utilizzato l'aggregato dei loro embedding.
Ottieni un DataFrame pandas con il numero limite di punti dati più simili all'input, insieme alla loro distanza nello spazio degli embedding. Puoi usare questo dataset per eseguire ulteriori filtraggi.

# Search dataset by index
similar = exp.get_similar(idx=1, limit=10)
similar.head()Puoi anche tracciare i campioni simili direttamente usando l'utility plot_similar

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
Link to this sectionChiedi all'IA: Cerca o filtra con il linguaggio naturale#
Puoi inviare all'oggetto Explorer il tipo di punti dati che vuoi vedere e lui proverà a restituire un DataFrame con quei risultati. Poiché è basato su LLM, non sempre indovina. In tal caso, restituirà None.

df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)Per rappresentare graficamente questi risultati, puoi usare l'utility plot_query_result. Esempio:
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)
# 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)Link to this sectionEsegui 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.
- Puoi anche scrivere query complete in cui specificare quali colonne selezionare.
Questo può essere usato per indagare le prestazioni del modello e punti dati specifici. Ad esempio:
- diciamo che il tuo modello ha difficoltà con 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 fino a un tipo specifico di risultati
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)
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'utility per tracciare direttamente le query SQL usando exp.plot_sql_query

exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)Link to this sectionLavorare con la tabella degli embedding (Avanzato)#
Explorer funziona internamente su tabelle LanceDB. Puoi accedere a questa tabella direttamente, usando l'oggetto Explorer.table ed eseguire query non elaborate, inviare pre- e post-filtri, ecc.
table = exp.table
print(table.schema)Link to this sectionEsegui query non elaborate¶#
La ricerca vettoriale trova i vettori più vicini dal database. In un sistema di raccomandazione o un motore di ricerca, puoi trovare prodotti simili a quello che hai cercato. Nelle applicazioni LLM e altre applicazioni di IA, ogni punto dati può essere rappresentato dagli embedding generati da alcuni modelli; restituisce le caratteristiche più rilevanti.
Una ricerca nello spazio vettoriale ad alta dimensionalità serve a 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
- Dot La ricerca di similarità di Explorer usa L2 per impostazione predefinita. Puoi eseguire query direttamente sulle tabelle o usare il formato lance per creare utility personalizzate per gestire i dataset. Maggiori dettagli sulle operazioni disponibili sulle tabelle LanceDB nella documentazione

dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()Link to this sectionInterconversione verso formati dati popolari#
df = table.to_pandas()
pa_table = table.to_arrow()Link to this sectionLavora con gli embedding#
Puoi accedere all'embedding grezzo dalla tabella lancedb e analizzarlo. Gli embedding delle immagini sono memorizzati nella colonna vector
import numpy as np
embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)Link to this sectionGrafico a dispersione#
Uno dei passaggi preliminari nell'analisi degli embedding consiste nel tracciarli in uno spazio 2D tramite la riduzione della dimensionalità. Proviamo un esempio

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()Link to this sectionIndice di similarità#
Ecco un semplice esempio di un'operazione basata sulla tabella degli embedding. Explorer viene fornito con un'operazione similarity_index-
- Tenta di stimare quanto ogni punto dati è 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 e 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, anche questa viene fornita con un'utility per tracciarla 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)
Guardiamo prima il grafico
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)Ora guardiamo l'output dell'operazione
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01, force=False)
sim_idxCreiamo una query per vedere quali punti dati hanno un conteggio di similarità superiore a 30 e tracciamo le 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

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