YOLO Vision 2026:

Ultralytics Explorer API#

Nota per la 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 (ed estese) sono disponibili nella Ultralytics Platform.

Introduzione#

Open In Colab La Explorer API è una Python API per esplorare i tuoi dataset. Supporta il filtraggio e la ricerca nel tuo dataset tramite query SQL, ricerca di similarità vettoriale e ricerca semantica.



Watch: Ultralytics Explorer API Overview

Installazione#

Explorer dipende da librerie esterne per alcune delle sue funzionalità. Queste vengono installate automaticamente quando usi Explorer. Per installare manualmente queste dipendenze, usa il seguente comando:

pip install ultralytics[explorer]

Utilizzo#

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")

# Create embeddings for your dataset
explorer.create_embeddings_table()

# Search for similar images to a given image/images
df = explorer.get_similar(img="path/to/image.jpg")

# Or search for similar images to a given index/indices
df = explorer.get_similar(idx=0)
Nota

La tabella di Embeddings per una determinata coppia di dataset e modello viene creata una sola volta e riutilizzata. Questa sfrutta LanceDB "under the hood", che scala su disco, consentendoti di creare e riutilizzare gli embeddings per dataset di grandi dimensioni come COCO senza esaurire la memoria.

Se desideri forzare l'aggiornamento della tabella degli embeddings, puoi passare force=True al metodo create_embeddings_table.

Puoi accedere direttamente all'oggetto tabella di LanceDB per eseguire analisi avanzate. Scopri di più nella sezione Utilizzo della tabella degli embeddings

1. Ricerca di similarità#

La ricerca di similarità è una tecnica per trovare immagini simili a una data immagine. Si basa sull'idea che immagini simili avranno embeddings simili. Una volta creata la tabella degli embeddings, puoi eseguire la ricerca semantica in uno dei seguenti modi:

  • Su un determinato indice o elenco di indici nel dataset: exp.get_similar(idx=[1,10], limit=10)
  • Su qualsiasi immagine o 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 embeddings.

Ottieni un DataFrame pandas con il numero limit di punti dati più simili all'input, insieme alla loro distanza nello spazio degli embeddings. Puoi usare questo dataset per eseguire ulteriori filtraggi.

Ricerca semantica
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

similar = exp.get_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
print(similar.head())

# Search using multiple indices
similar = exp.get_similar(
    img=["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/bus.jpg"],
    limit=10,
)
print(similar.head())

Tracciamento di immagini simili#

Puoi anche tracciare le immagini simili usando il metodo plot_similar. Questo metodo accetta gli stessi argomenti di get_similar e traccia le immagini simili in una griglia.

Tracciamento di immagini simili
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

plt = exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10)
plt.show()

2. Chiedi all'AI (Query in linguaggio naturale)#

Questa funzionalità ti consente di filtrare il tuo dataset usando il linguaggio naturale, senza scrivere codice SQL. Il generatore di query basato su AI converte il tuo prompt in una query e restituisce i risultati corrispondenti. Ad esempio, puoi chiedere: "mostrami 100 immagini con esattamente una persona e 2 cani. Possono esserci anche altri oggetti" e genererà la query mostrandoti quei risultati. Nota: Questa funzionalità utilizza i LLMs, quindi i risultati sono probabilistici e potrebbero essere inaccurati.

Ask AI
from ultralytics.data.explorer import plot_query_result

from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

df = exp.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(df.head())

# plot the results
plt = plot_query_result(df)
plt.show()

3. Query SQL#

Puoi eseguire query SQL sul tuo dataset usando il metodo sql_query. Questo metodo accetta una query SQL come input e restituisce un DataFrame pandas con i risultati.

Query SQL
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

df = exp.sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%'")
print(df.head())

Tracciamento dei risultati della query SQL#

Puoi anche tracciare i risultati di una query SQL usando il metodo plot_sql_query. Questo metodo accetta gli stessi argomenti di sql_query e traccia i risultati in una griglia.

Tracciamento dei risultati della query SQL
from ultralytics import Explorer

# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()

# plot the SQL Query
exp.plot_sql_query("WHERE labels LIKE '%person%' AND labels LIKE '%dog%' LIMIT 10")

4. Lavorare con la tabella degli embeddings#

Puoi anche lavorare direttamente con la tabella degli embeddings. Una volta creata la tabella degli embeddings, puoi accedervi usando Explorer.table

Suggerimento

Internamente Explorer funziona su tabelle LanceDB. Puoi accedere direttamente a questa tabella usando l'oggetto Explorer.table ed eseguire query grezze, applicare pre- e post-filtri, ecc.

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

Ecco alcuni esempi di cosa puoi fare con la tabella:

Ottieni embeddings grezzi#

Esempio
from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()
table = exp.table

embeddings = table.to_pandas()["vector"]
print(embeddings)

Query avanzate con pre- e post-filtri#

Esempio
from ultralytics import Explorer

exp = Explorer(model="yolo11n.pt")
exp.create_embeddings_table()
table = exp.table

# Dummy embedding
embedding = [i for i in range(256)]
rs = table.search(embedding).metric("cosine").where("").limit(10)

Crea indice vettoriale#

Quando usi dataset di grandi dimensioni, puoi anche creare un indice vettoriale dedicato per query più veloci. Questo viene fatto usando il metodo create_index sulla tabella LanceDB.

table.create_index(num_partitions=..., num_sub_vectors=...)

5. Applicazioni degli embeddings#

Puoi usare la tabella degli embeddings per eseguire una varietà di analisi esplorative. Ecco alcuni esempi:

Indice di similarità#

Explorer include un'operazione similarity_index:

  • Tenta di stimare quanto ciascun punto dati sia simile al resto del dataset.
  • Fa ciò contando quanti embeddings di immagini si trovano più vicini di max_dist all'immagine corrente nello spazio degli embeddings generato, considerando top_k immagini simili alla volta.

Restituisce un DataFrame pandas con le seguenti colonne:

  • idx: Indice dell'immagine nel dataset
  • im_file: Percorso del file immagine
  • count: Numero di immagini nel dataset più vicine di max_dist all'immagine corrente
  • sim_im_files: Elenco dei percorsi alle count immagini simili
Suggerimento

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 debba semplicemente rigenerare l'indice di similarità, puoi passare force=True.

Indice di similarità
from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()

sim_idx = exp.similarity_index()

Puoi usare l'indice di similarità per creare condizioni personalizzate per filtrare il dataset. Ad esempio, puoi filtrare le immagini che non sono simili a nessun'altra immagine nel dataset usando il seguente codice:

import numpy as np

sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]

Visualizza lo spazio degli embeddings#

Puoi anche visualizzare lo spazio degli embeddings usando lo strumento di visualizzazione che preferisci. Ad esempio, ecco un semplice esempio che utilizza Matplotlib:

import matplotlib.pyplot as plt
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 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()

Inizia a creare i tuoi report di esplorazione del dataset CV usando la Explorer API. Per trarre ispirazione, dai un'occhiata all'Esempio di esplorazione VOC.

App create con Ultralytics Explorer#

Prova la nostra Demo GUI basata su Explorer API

FAQ#

A cosa serve la Ultralytics Explorer API?#

La Ultralytics Explorer API è progettata per un'esplorazione approfondita dei dataset. Consente agli utenti di filtrare e cercare nei dataset utilizzando query SQL, ricerca di similarità vettoriale e ricerca semantica. Questa potente Python API è in grado di gestire dataset di grandi dimensioni, rendendola ideale per varie attività di computer vision che utilizzano i modelli Ultralytics.

Come posso installare la Ultralytics Explorer API?#

Per installare la Ultralytics Explorer API insieme alle sue dipendenze, utilizza il seguente comando:

pip install ultralytics[explorer]

Questo installerà automaticamente tutte le librerie esterne necessarie per il funzionamento della Explorer API. Per ulteriori dettagli sulla configurazione, fai riferimento alla sezione di installazione della nostra documentazione.

Come posso usare la Ultralytics Explorer API per la ricerca di similarità?#

Puoi usare la Ultralytics Explorer API per eseguire ricerche di similarità creando una tabella di embeddings ed eseguendo query su di essa per trovare immagini simili. Ecco un esempio di base:

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
explorer.create_embeddings_table()

# Search for similar images to a given image
similar_images_df = explorer.get_similar(img="path/to/image.jpg")
print(similar_images_df.head())

Per ulteriori dettagli, visita la sezione Ricerca di similarità.

Quali sono i vantaggi dell'utilizzo di LanceDB con Ultralytics Explorer?#

LanceDB, utilizzato internamente da Ultralytics Explorer, fornisce tabelle di embeddings scalabili su disco. Ciò garantisce la possibilità di creare e riutilizzare embeddings per dataset di grandi dimensioni come COCO senza esaurire la memoria. Tabelle di questo tipo vengono create una sola volta e possono essere riutilizzate, migliorando l'efficienza nella gestione dei dati.

Come funziona la funzionalità Chiedi all'AI nella Ultralytics Explorer API?#

La funzionalità Chiedi all'AI consente agli utenti di filtrare i dataset utilizzando query in linguaggio naturale. Questa funzionalità sfrutta i LLMs per convertire tali query in query SQL dietro le quinte. Ecco un esempio:

from ultralytics import Explorer

# Create an Explorer object
explorer = Explorer(data="coco128.yaml", model="yolo11n.pt")
explorer.create_embeddings_table()

# Query with natural language
query_result = explorer.ask_ai("show me 100 images with exactly one person and 2 dogs. There can be other objects too")
print(query_result.head())

Per altri esempi, dai un'occhiata alla sezione Chiedi all'AI.

Commenti