Sicurezza pronta per l'Enterprise: Conformità ISO 27001 + SOC 2 Type I.

Link to this sectionEsempio di esplorazione VOC#

Banner Ultralytics YOLO

中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية


Ultralytics CI Ultralytics Downloads Ultralytics Discord Ultralytics Forums Ultralytics Reddit
Run Ultralytics on Gradient Open Ultralytics In Colab Open Ultralytics In Kaggle Open Ultralytics In Binder

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.

Nota della community ⚠️

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 checks

Link 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.

Risultati della ricerca di similarità di Ultralytics Explorer

# 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

Immagini simili trovate dalla 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 di similarità con embedding

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.

Risultati delle query in linguaggio naturale Ask AI di Ultralytics Explorer

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)

Risultato della query Ask AI che mostra le 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)

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)

Tabella dei risultati delle query SQL di 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'utility 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)

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

Tabella dei risultati delle query SQL non elaborate di Explorer

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

Visualizzazione del grafico a dispersione degli embedding di 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()

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)

Analisi dell'indice di similarità del dataset

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_idx

Creiamo 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

Visualizzazione dell'indice di similarità per l'analisi del dataset

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

Commenti