Esempio di esplorazione dei COV
Benvenuti nel notebook di Ultralytics Explorer API! Questo notebook serve come punto di partenza per esplorare le varie risorse disponibili per aiutarvi a iniziare a usare Ultralytics per esplorare i vostri set di dati utilizzando la potenza della ricerca semantica. È possibile utilizzare le utility che consentono di esaminare tipi specifici di etichette utilizzando la ricerca vettoriale o anche query SQL.
Prova yolo explorer
alimentato dall'API di Explorer
Semplicemente pip install ultralytics
ed eseguire yolo explorer
nel vostro terminale per eseguire query personalizzate e ricerche semantiche sui vostri set di dati direttamente nel vostro browser!
Nota della Comunità ⚠️
A partire da ultralytics>=8.3.10
, il supporto di Ultralytics explorer è stato deprecato. Ma non preoccupatevi! È ora possibile accedere a funzionalità simili e persino migliorate tramite Ultralytics HUBla nostra piattaforma intuitiva senza codice, progettata per semplificare il vostro flusso di lavoro. Con Ultralytics HUB, potete continuare a esplorare, visualizzare e gestire i vostri dati senza sforzo, il tutto senza scrivere una sola riga di codice. Assicuratevi di dare un'occhiata e di approfittare delle sue potenti funzioni!🚀
Impostazione
Installazione Pip ultralytics
e dipendenze e controllare il software e l'hardware.
Ricerca per similarità
Utilizza la potenza della ricerca di similarità vettoriale per trovare i punti di dati simili nel dataset e la loro distanza nello spazio di incorporazione. È sufficiente creare una tabella di incorporazioni per la coppia dataset-modello data. È necessaria una sola volta e viene riutilizzata automaticamente.
Una volta costruita la tabella degli embeddings, è possibile eseguire la ricerca semantica in uno dei seguenti modi:
- Su un dato indice/elenco di indici nel dataset come - 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 delle loro incorporazioni.
Si ottiene un dataframe pandas con il numero limite di punti dati più simili all'input, insieme alla loro distanza nello spazio di incorporazione. È possibile utilizzare questo set di dati per eseguire ulteriori filtraggi.
È possibile utilizzare anche il tracciato dei campioni simili direttamente utilizzando l'opzione 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 external images
Ask AI: cercare o filtrare con il linguaggio naturale
È possibile richiedere all'oggetto Explorer il tipo di punti di dati che si desidera visualizzare e l'oggetto cercherà di restituire un dataframe con tali punti. Poiché è alimentato da LLM, non sempre ci riesce. In questo caso, restituirà None.
df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)
per tracciare questi risultati si può usare plot_query_result
Esempio di utilizzo:
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)
Eseguire query SQL sul set di dati
A volte si può desiderare di indagare su un certo tipo di voci nel set di dati. A questo scopo, Explorer consente di eseguire 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
- È anche possibile scrivere query complete in cui è possibile specificare quali colonne selezionare
Questo può essere utilizzato per analizzare le prestazioni del modello e punti di dati specifici. Ad esempio:
- Supponiamo che il vostro modello si concentri su immagini con esseri umani e cani. Si può scrivere una query come questa per selezionare i punti che hanno almeno 2 umani E almeno un cane.
È possibile combinare la query SQL e la ricerca semantica per filtrare su 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 per la ricerca per similarità, è possibile anche tracciare direttamente le query sql utilizzando exp.plot_sql_query
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)
Lavorare con le incorporazioni Tabella (Avanzato)
Explorer funziona su LanceDB internamente. È possibile accedere direttamente a questa tabella, utilizzando Explorer.table
ed eseguire query grezze, applicare pre-filtri e post-filtri, ecc.
Eseguire 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 AI, ogni punto di dati può essere presentato dalle incorporazioni generate da alcuni modelli, che restituiscono le caratteristiche più rilevanti.
Una ricerca in uno spazio vettoriale ad alta dimensione consiste nel trovare i K-Nearest-Neighbors (KNN) del vettore di interrogazione.
Metrica In LanceDB, una metrica è il modo di descrivere la distanza tra una coppia di vettori. Attualmente supporta le seguenti metriche:
- L2
- Coseno
- La ricerca per similarità di Dot Explorer utilizza L2 per impostazione predefinita. È possibile eseguire query sulle tabelle direttamente o utilizzare il formato lance per creare utility personalizzate per gestire gli insiemi di dati. Maggiori dettagli sulle operazioni disponibili sulle tabelle LanceDB nei documenti.
dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()
Interconversione con i formati di dati più diffusi
Lavorare con le incorporazioni
È 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 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
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 somiglianza
Ecco un semplice esempio di un'operazione che si avvale della tabella degli embeddings. Explorer è dotato di una tabella similarity_index
operazione-
- Cerca di stimare la somiglianza di ciascun punto di dati con il resto del set di dati.
- 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 dato set di dati, il modello, max_dist
& top_k
l'indice di similarità una volta generato sarà riutilizzato. Nel caso in cui il set di dati sia cambiato o sia semplicemente necessario rigenerare l'indice di somiglianza, si può passare il comando force=True
. Come la ricerca vettoriale e quella SQL, anche questa è dotata di un util per tracciarla direttamente. Vediamo
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)
prima la trama
Ora diamo un'occhiata all'output dell'operazione
Creiamo una query per vedere quali punti di dati hanno un numero di somiglianze superiore a 30 e tracciamo le immagini simili.
Si dovrebbe vedere qualcosa di simile a questo