Ir al contenido

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

Abrir en Colab 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

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, considerando top_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 datos
  • im_file: Ruta al archivo de imagen
  • count: Número de imágenes en el conjunto de datos que están más cerca que max_dist a la imagen actual
  • sim_im_files: Lista de rutas a los count 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 y car 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.

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.



📅 Creado hace 1 año ✏️ Actualizado hace 4 meses

Comentarios