API de Ultralytics Explorer
Nota de la comunidad ⚠️
A partir de ultralytics>=8.3.10El soporte para Ultralytics ha quedado obsoleto. Hay disponibles funciones similares (y ampliadas) para la exploración de conjuntos de datos en Ultralytics HUB.
Introducción
La API Explorer es una Python para explorar sus conjuntos de datos. Admite el filtrado y la búsqueda de su conjunto de datos mediante consultas SQL, búsqueda de similitud vectorial y búsqueda semántica.
Ver: Descripción General de la API de Ultralytics Explorer
Instalación
Explorer depende de bibliotecas externas para algunas de sus funcionalidades. Estas se instalan automáticamente cuando usa Explorer. Para instalar manualmente estas dependencias, use el siguiente comando:
pip install ultralytics[explorer]
Uso
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 tabla de incrustaciones para un conjunto de datos y un par de modelos dados solo se crea una vez y se reutiliza. Estos utilizan LanceDB por debajo, que se escala en el disco, por lo que puede crear y reutilizar incrustaciones para conjuntos de datos grandes como COCO sin quedarse sin memoria.
En caso de que desee forzar la actualización de la tabla de embeddings, puede pasar force=True a datos create_embeddings_table método.
Puede acceder directamente al objeto de tabla LanceDB para realizar análisis avanzados. Obtenga más información al respecto en la sección Trabajar con la tabla de incrustaciones
1. Búsqueda por similitud
La búsqueda de similitud es una técnica para encontrar imágenes similares a una imagen dada. Se basa en la idea de que las imágenes similares tendrán incrustaciones similares. Una vez que se construye la tabla de incrustaciones, puedes ejecutar la búsqueda semántica de cualquiera de las siguientes maneras:
- En un índice dado o lista de índices en el conjunto de datos:
exp.get_similar(idx=[1,10], limit=10) - En cualquier imagen o lista de imágenes que no estén en el conjunto de datos:
exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)
En caso de múltiples entradas, se utiliza el agregado de sus embeddings.
Obtienes un DataFrame de pandas con el limit número de puntos de datos más similares a la entrada, junto con su distancia en el espacio de incrustación. Puede utilizar este conjunto de datos para realizar un filtrado adicional.
Búsqueda Semántica
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())
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
similar = exp.get_similar(idx=1, limit=10)
print(similar.head())
# Search using multiple indices
similar = exp.get_similar(idx=[1, 10], limit=10)
print(similar.head())
Trazado de imágenes similares
También puede trazar imágenes similares utilizando el plot_similar método. Este método toma los mismos argumentos que get_similar y grafica las imágenes similares en una cuadrícula.
Trazado de imágenes similares
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()
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data="coco128.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
plt = exp.plot_similar(idx=1, limit=10)
plt.show()
2. Preguntar a la IA (Consultas en lenguaje natural)
Esta función le permite filtrar su conjunto de datos utilizando lenguaje natural, sin necesidad de escribir SQL. El generador de consultas basado en IA convierte su solicitud en una consulta y devuelve los resultados coincidentes. Por ejemplo, puede preguntar: «muéstrame 100 imágenes con exactamente una persona y dos perros. También pueden aparecer otros objetos», y generará la consulta y le mostrará esos resultados. Nota: Esta función utiliza LLM, por lo que los resultados son probabilísticos y pueden ser inexactos.
Preguntar a la IA
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. Consultas SQL
Puedes ejecutar consultas SQL en tu conjunto de datos utilizando el sql_query método. Este método toma una consulta SQL como entrada y devuelve un DataFrame de pandas con los resultados.
Consulta 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())
Trazado de resultados de consultas SQL
También puede trazar los resultados de una consulta SQL utilizando el plot_sql_query método. Este método toma los mismos argumentos que sql_query y grafica los resultados en una cuadrícula.
Trazado de resultados de consultas 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. Trabajar con la tabla de embeddings
También puede trabajar directamente con la tabla de incrustaciones. Una vez creada la tabla de incrustaciones, puede acceder a ella utilizando el Explorer.table
Consejo
Explorer funciona en LanceDB tablas internamente. Puedes acceder a esta tabla directamente, usando Explorer.table objeto y ejecutar consultas sin procesar, insertar filtros previos y posteriores, etc.
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.table
Aquí hay algunos ejemplos de lo que puedes hacer con la tabla:
Obtener incrustaciones sin procesar
Ejemplo
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
table = exp.table
embeddings = table.to_pandas()["vector"]
print(embeddings)
Consultas avanzadas con filtros previos y posteriores
Ejemplo
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)
Crear índice vectorial
Cuando se utilizan grandes conjuntos de datos, también puede crear un índice vectorial dedicado para realizar consultas más rápidas. Esto se hace utilizando el create_index método en la tabla LanceDB.
table.create_index(num_partitions=..., num_sub_vectors=...)
5. Aplicaciones de incrustaciones (Embeddings)
Puedes usar la tabla de incrustaciones para realizar una variedad de análisis exploratorios. Aquí tienes algunos ejemplos:
Índice de similitud
Explorer viene con un similarity_index operación:
- Intenta estimar cuán similar es cada punto de datos con el resto del conjunto de datos.
- Lo hace contando cuántas incrustaciones de imágenes se encuentran más cerca que
max_dista la imagen actual en el espacio de incrustación generado, considerandotop_kimágenes similares a la vez.
Devuelve un DataFrame de pandas con las siguientes columnas:
idx: Índice de la imagen en el conjunto de datosim_file: Ruta al archivo de imagencount: Número de imágenes en el conjunto de datos que están más cerca quemax_dista la imagen actualsim_im_files: Lista de rutas a loscountimágenes similares
Consejo
Para un conjunto de datos dado, modelo, max_dist & top_k el índice de similitud una vez generado se reutilizará. En caso de que tu conjunto de datos haya cambiado, o simplemente necesites regenerar el índice de similitud, puedes pasar force=True.
Índice de similitud
from ultralytics import Explorer
exp = Explorer()
exp.create_embeddings_table()
sim_idx = exp.similarity_index()
Puedes usar el índice de similitud para crear condiciones personalizadas y filtrar el conjunto de datos. Por ejemplo, puedes filtrar las imágenes que no son similares a ninguna otra imagen del conjunto de datos utilizando el siguiente código:
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]
Visualizar el espacio de incrustación
También puede visualizar el espacio de incrustación utilizando la herramienta de trazado que prefiera. Por ejemplo, aquí tiene un ejemplo sencillo utilizando 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()
Empiece a crear sus propios informes de exploración de conjuntos de datos de CV utilizando la API Explorer. Para inspirarse, consulte el Ejemplo de exploración VOC.
Aplicaciones creadas con Ultralytics Explorer
Pruebe nuestra Demo GUI basada en la API Explorer
Próximamente
- [ ] Fusionar etiquetas específicas de conjuntos de datos. Ejemplo: importar todo
personetiquetas de COCO ycaretiquetas de Cityscapes - [ ] Eliminar imágenes que tengan un índice de similitud mayor que el umbral dado
- [ ] Persistir automáticamente los nuevos conjuntos de datos después de fusionar/eliminar entradas
- [ ] Visualizaciones avanzadas del conjunto de datos
Preguntas frecuentes
¿Para qué se utiliza la API Ultralytics Explorer?
La API de Ultralytics Explorer está diseñada para la exploración integral de conjuntos de datos. Permite a los usuarios filtrar y buscar conjuntos de datos utilizando consultas SQL, búsqueda de similitud vectorial y búsqueda semántica. Esta potente API de python puede manejar grandes conjuntos de datos, lo que la hace ideal para diversas tareas de visión artificial utilizando modelos de Ultralytics.
¿Cómo instalo la API de Ultralytics Explorer?
Para instalar la API de Ultralytics Explorer junto con sus dependencias, utilice el siguiente comando:
pip install ultralytics[explorer]
Esto instalará automáticamente todas las bibliotecas externas necesarias para la funcionalidad de la API Explorer. Para obtener detalles de configuración adicionales, consulte la sección de instalación de nuestra documentación.
¿Cómo puedo utilizar la API de Ultralytics Explorer para la búsqueda de similitud?
Puedes usar la API de Ultralytics Explorer para realizar búsquedas de similitud creando una tabla de incrustaciones y consultándola para obtener imágenes similares. Aquí tienes un ejemplo básico:
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())
Para obtener más detalles, visita la sección de búsqueda de similitud.
¿Cuáles son los beneficios de usar LanceDB con Ultralytics Explorer?
LanceDB, utilizado internamente por Ultralytics Explorer, proporciona tablas de embeddings escalables en disco. Esto asegura que puedas crear y reutilizar embeddings para grandes conjuntos de datos como COCO sin quedarte sin memoria. Estas tablas solo se crean una vez y pueden ser reutilizadas, mejorando la eficiencia en el manejo de datos.
¿Cómo funciona la función Ask AI en la API de Ultralytics Explorer?
La función Ask AI permite a los usuarios filtrar conjuntos de datos mediante consultas en lenguaje natural. Esta función aprovecha los LLM para convertir estas consultas en consultas SQL entre bastidores. Aquí hay un ejemplo:
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())
Para ver más ejemplos, consulta la sección de Pregunta a la IA.