API de Ultralytics Explorer
Nota de la comunidad ⚠️
A partir de ultralytics>=8.3.10
, el soporte de Ultralytics Explorer ha quedado obsoleto. ¡Pero no se preocupe! Ahora puede acceder a funcionalidades similares e incluso mejoradas a través de Ultralytics HUB, nuestra intuitiva plataforma sin código diseñada para optimizar su flujo de trabajo. Con Ultralytics HUB, puede seguir explorando, visualizando y gestionando sus datos sin esfuerzo, todo ello sin escribir una sola línea de código. ¡Asegúrese de echarle un vistazo y aprovechar sus potentes funciones! 🚀
Introducción
La API Explorer es una API de Python para explorar sus conjuntos de datos. Admite el filtrado y la búsqueda en 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 al usarlas. Para instalar manualmente estas dependencias, utilice 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
dataframe = explorer.get_similar(img="path/to/image.jpg")
# Or search for similar images to a given index/indices
dataframe = 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 puedes crear y reutilizar incrustaciones para grandes conjuntos de datos como COCO sin quedarte 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)
Esto le permite escribir cómo desea filtrar su conjunto de datos utilizando lenguaje natural. No tiene que ser competente en la escritura de consultas SQL. Nuestro generador de consultas con tecnología de IA lo hará automáticamente bajo el capó. Por ejemplo, puede decir: "muéstrame 100 imágenes con exactamente una persona y 2 perros. También puede haber otros objetos" e internamente generará la consulta y le mostrará esos resultados. Nota: Esto funciona usando LLM bajo el capó, por lo que los resultados son probabilísticos y a veces pueden equivocarse.
Preguntar a la IA
from ultralytics import Explorer
from ultralytics.data.explorer import plot_query_result
# 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=...)
Encuentre más detalles sobre los tipos de índice vectorial disponibles y los parámetros de configuración en la documentación de indexación de LanceDB. En el futuro, planeamos admitir la creación de índices vectoriales directamente a través de la API Explorer.
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_dist
a la imagen actual en el espacio de incrustación generado, considerandotop_k
imá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_dist
a la imagen actualsim_im_files
: Lista de rutas a loscount
imá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()
Comience 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
person
etiquetas de COCO ycar
etiquetas 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 se crean solo 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.