Esempio di esplorazione VOC¶
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
Benvenuto nel notebook di Ultralytics Explorer API! Questo quaderno è il punto di partenza per esplorare le varie risorse disponibili per aiutarti a iniziare a usare Ultralytics per esplorare i tuoi set di dati con la potenza della ricerca semantica. Puoi utilizzare le utility che ti permettono di esaminare tipi specifici di etichette utilizzando la ricerca vettoriale o anche query SQL.
Ci auguriamo che le risorse contenute in questo quaderno ti aiutino a ottenere il massimo da Ultralytics. Ti invitiamo a consultare i documenti di Explorer per maggiori dettagli, a sollevare un problema su GitHub per ricevere supporto e a unirti alla nostra comunità Discord per domande e discussioni!
Prova yolo explorer
alimentato da Exlorer API
Semplicemente pip install ultralytics
ed eseguire yolo explorer
nel tuo terminale per eseguire query personalizzate e ricerche semantiche sui tuoi set di dati direttamente nel tuo browser!
Impostazione
Installa Pip ultralytics
e dipendenze e controllare il software e l'hardware.
%pip install ultralytics[explorer] openai
import ultralytics
ultralytics.checks()
da ultralytics Importazione Esploratore
Ricerca di somiglianza
Sfrutta la potenza della ricerca di similarità vettoriale per trovare i punti di dati simili nel tuo set di dati e la loro distanza nello spazio delle incorporazioni. Basta creare una tabella di incorporazioni per la coppia dataset-modello data. È necessaria solo una volta e viene riutilizzata automaticamente.
espressa = Esploratore("VOC.yaml", modello="yolov8n.pt")
exp.create_embeddings_table()
Una volta creata la tabella degli embeddings, puoi eseguire la ricerca semantica in uno dei seguenti modi:
- Su un dato indice/elenco di indici nel set di dati come -
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
simile = exp.get_simile(idx=1, limite=10)
simile.testa()
Puoi usare anche il grafico dei campioni simili direttamente usando il comando plot_similar
util
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 any external images
2. Chiedi all'intelligenza artificiale: cerca o filtra con il linguaggio naturale¶.
Puoi chiedere all'oggetto Explorer il tipo di punti dati che vuoi vedere e cercherà di restituire un dataframe con quelli. Poiché è alimentato da LLM, non sempre ci riesce. In questo caso, restituirà None.
df = exp.ask_ai("mostrami immagini che contengono più di 10 oggetti con almeno 2 persone")
df.testa(5)
per tracciare questi risultati puoi usare plot_query_result
util
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)
3. Esegui query SQL sul tuo Dataset!
A volte potresti voler indagare su un certo tipo di voci presenti nel tuo set di dati. Per questo Explorer ti permette di eseguire delle query SQL. Accetta uno dei due formati:
- Le query che iniziano con "WHERE" selezionano automaticamente tutte le colonne. Questa può essere considerata come una query abbreviata
- Puoi anche scrivere query complete in cui puoi specificare quali colonne selezionare
Questo può essere utilizzato per analizzare le prestazioni del modello e i dati specifici. Ad esempio:
- Supponiamo che il tuo modello si concentri su immagini in cui sono presenti esseri umani e cani. Puoi scrivere una query come questa per selezionare i punti che hanno almeno 2 umani E almeno un cane.
Puoi combinare la query SQL e la ricerca semantica per filtrare un tipo specifico di risultati.
tavolo = Esplora.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
tabella
Proprio come la ricerca per somiglianza, puoi anche utilizzare un'utilità per tracciare direttamente le query sql usando exp.plot_sql_query
scadenza.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", etichette=Vero)
tavolo = Esplora.tabella
tabella.schema
Esegui query grezze¶
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. In LLM e in altre applicazioni di intelligenza artificiale, ogni punto di dati può essere presentato dagli embeddings generati da alcuni modelli, che restituiscono le caratteristiche più rilevanti.
Una ricerca nello spazio vettoriale ad alta dimensione consiste nel trovare i K-Nearest-Neighbors (KNN) del vettore di interrogazione.
Metrica In LanceDB, una metrica è il modo per descrivere la distanza tra una coppia di vettori. Attualmente supporta le seguenti metriche:
- L2
- Coseno
- Punto La ricerca per similarità di Explorer utilizza L2 per impostazione predefinita. Puoi eseguire query direttamente sulle tabelle o utilizzare il formato lance per creare utility personalizzate per gestire i set di dati. Maggiori dettagli sulle operazioni sulle tabelle di LanceDB sono disponibili nei documenti.
dummy_img_embedding = [i per i in gamma(256)]
tabella.ricerca(dummy_img_embedding).limite(5).to_pandas()
Interconversione con i formati di dati più diffusi
df = tabella.to_pandas()
pa_table = tabella.to_arrow()
Lavorare con gli embeddings¶
Puoi accedere alle incorporazioni grezze dalla tabella lancedb e analizzarle. Le incorporazioni dell'immagine sono memorizzate nella colonna vector
Importazione numpy come np
embeddings = tabella.to_pandas()["vettore"].tolist()
incorporazioni = np.array(embeddings)
Grafico di 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
!pip installare scikit-imparare --q
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
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'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()
4. Indice di somiglianza
Ecco un semplice esempio di un'operazione che utilizza la tabella delle incorporazioni. Explorer è dotato di una tabella 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, considerandotop_k
immagini simili alla volta.
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
.
Come la ricerca vettoriale e quella SQL, anche questa è dotata di un util per tracciarla direttamente. Vediamo prima il grafico
scadenza.indice_di_similarità(max_dist=0.2, top_k=0.01)
Ora diamo un'occhiata all'output dell'operazione
Importazione numpy come np
sim_idx = exp.indice_di_somiglianza(max_dist=0.2, top_k=0.01, forza=Falso)
sim_idx
Creiamo una query per vedere quali punti dati hanno un numero di somiglianze superiore a 30 e tracciamo le immagini simili.
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]
Dovresti vedere qualcosa di simile a questo
exp.plot_similar(idx=[7146, 14035]) # Using avg embeddings of 2 images