YOLO Vision 2026:

Ultralytics Explorer API#

Nota per la community ⚠️

A partire da ultralytics>=8.3.12, Ultralytics Explorer è stato rimosso. Per usare Explorer, installa pip install ultralytics==8.3.11. Funzionalità di esplorazione dei dataset simili (e ampliate) sono disponibili in Ultralytics Platform.

Introduzione#

Open In Colab The Explorer API is a Python API for exploring your datasets. It supports filtering and searching your dataset using SQL queries, vector similarity search, and semantic search.



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 sottostante, che si scala su disco, consentendoti di creare e riutilizzare gli embeddings per dataset di grandi dimensioni come COCO senza esaurire la memoria.

Nel caso in cui tu voglia 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 Lavorare con la 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 embedding. 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

Explorer opera internamente su tabelle LanceDB. Puoi accedere direttamente a questa tabella usando l'oggetto Explorer.table ed eseguire query grezze, applicare filtri preliminari e successivi, 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 una ricerca più rapida. 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.
  • Ciò avviene contando quanti embedding di immagini si trovano a una distanza inferiore a max_dist rispetto all'immagine corrente nello spazio degli embedding 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 che si trovano a una distanza inferiore a max_dist rispetto all'immagine corrente
  • sim_im_files: Elenco dei percorsi delle count immagini simili
Suggerimento

Per un determinato dataset, modello, max_dist e top_k, l'indice di somiglianza, una volta generato, verrà riutilizzato. Nel caso in cui il tuo dataset sia cambiato o tu debba semplicemente rigenerare l'indice di somiglianza, 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 dei dataset di CV usando 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#

  • 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 somiglianza vettoriale e ricerca semantica. Questa potente API Python è in grado di gestire dataset di grandi dimensioni, rendendola ideale per varie attività di computer vision che utilizzano i modelli Ultralytics.

  • 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 la funzionalità di Explorer API. Per ulteriori dettagli sulla configurazione, fai riferimento alla sezione di installazione della nostra documentazione.

  • 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 maggiori dettagli, visita la sezione Ricerca di somiglianza.

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

  • 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 ulteriori esempi, dai un'occhiata alla sezione Chiedi all'IA.

Commenti