Ir al contenido

Ultralytics Explorador API

Nota comunitaria ⚠️

A partir de ultralytics>=8.3.10Ultralytics explorer support has been deprecated. Pero no se preocupe. Ahora puedes acceder a una funcionalidad similar e incluso mejorada a través de Ultralytics HUBnuestra intuitiva plataforma sin código diseñada para agilizar su flujo de trabajo. Con Ultralytics HUB, puedes seguir explorando, visualizando y gestionando tus datos sin esfuerzo, todo ello sin escribir una sola línea de código. No dejes de probarlo y aprovéchate de sus potentes funciones 🚀.

Introducción

Abrir en Colab La API Explorer es una API Python para explorar sus conjuntos de datos. Admite el filtrado y la búsqueda de conjuntos de datos mediante consultas SQL, búsqueda de similitud vectorial y búsqueda semántica.



Observa: Ultralytics Descripción general de la API Explorer

Instalación

Explorer depende de bibliotecas externas para algunas de sus funciones. Éstas se instalan automáticamente al utilizarlo. Para instalar manualmente estas dependencias, utilice el siguiente comando:

pip install ultralytics[explorer]

Utilización

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 determinados sólo se crea una vez y se reutiliza. Utilizan LanceDB, que se escala en disco, para que puedas 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 incrustaciones, puede pasar force=True a 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 Embeddings.

La búsqueda por similitud es una técnica para encontrar imágenes similares a una imagen dada. Se basa en la idea de que imágenes similares tendrán incrustaciones similares. Una vez construida la tabla de incrustaciones, puede ejecutar la búsqueda semántica de cualquiera de las siguientes maneras:

  • En un índice o lista de índices dados del 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 la suma de sus incrustaciones.

Obtendrá un marco de datos pandas con el valor limit número de puntos de datos más similares a los de entrada, junto con su distancia en el espacio de incrustación. Puede utilizar este conjunto de datos para realizar otros filtrados

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 las imágenes similares utilizando la función plot_similar método. Este método toma los mismos argumentos que get_similar y traza 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. Ask AI (consultas en lenguaje natural)

Esto le permite escribir cómo desea filtrar su conjunto de datos utilizando lenguaje natural. No es necesario que domine la escritura de consultas SQL. Nuestro generador de consultas basado en IA lo hará automáticamente. Por ejemplo, puede decir "muéstreme 100 imágenes con exactamente una persona y 2 perros. También puede haber otros objetos" y generará internamente la consulta y le mostrará los resultados. Nota: Esto funciona utilizando LLMs bajo el capó por lo que los resultados son probabilísticos y puede obtener cosas mal a veces.

Pregunte a AI

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. Consulta SQL

Puede ejecutar consultas SQL en su conjunto de datos utilizando la función 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 la función plot_sql_query método. Este método toma los mismos argumentos que sql_query y traza 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 incrustaciones

También puede trabajar directamente con la tabla de incrustaciones. Una vez creada la tabla de incrustaciones, puede acceder a ella mediante la función Explorer.table

Consejo

Explorer funciona en LanceDB internamente. Puede acceder a esta tabla directamente, utilizando Explorer.table y ejecutar consultas sin procesar, introducir filtros previos y posteriores, etc.

from ultralytics import Explorer

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

Aquí tienes algunos ejemplos de lo que puedes hacer con la tabla:

Obtener incrustaciones en bruto

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 se puede crear un índice vectorial específico para agilizar las consultas. Para ello se utiliza la función create_index en la tabla LanceDB.

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

Encuentre más detalles sobre los tipos de índices vectoriales disponibles y los parámetros aquí En el futuro, añadiremos soporte para crear índices vectoriales directamente desde Explorer API.

5. Aplicaciones incrustadas

Puede utilizar la tabla de incrustaciones para realizar diversos análisis exploratorios. He aquí algunos ejemplos:

Índice de similitud

Explorer viene con un similarity_index operación:

  • Intenta estimar la similitud de cada punto de datos con el resto del conjunto de datos.
  • Para ello, cuenta 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 marco de datos pandas con las siguientes columnas:

  • idx: Índice de la imagen en el conjunto de datos
  • im_file: Ruta del archivo de imagen
  • count: Número de imágenes del 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 será reutilizado. En caso de que su conjunto de datos haya cambiado, o simplemente necesite regenerar el índice de similitud, puede pasar force=True.

Índice de similitud

from ultralytics import Explorer

exp = Explorer()
exp.create_embeddings_table()

sim_idx = exp.similarity_index()

Puede utilizar el índice de similitud para crear condiciones personalizadas para filtrar el conjunto de datos. Por ejemplo, puede filtrar las imágenes que no sean 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 de su elección. Por ejemplo, aquí hay 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

Aplicaciones creadas con Ultralytics Explorer

Pruebe nuestra demostración de GUI basada en Explorer API

Próximamente

  • [ ] Fusionar etiquetas específicas de conjuntos de datos. Ejemplo - Importar todo person etiquetas de COCO y car etiquetas de Cityscapes
  • [ ] Eliminar las imágenes que tengan un índice de similitud superior al umbral dado.
  • [Persistir automáticamente nuevos conjuntos de datos después de fusionar/eliminar entradas
  • [ ] Visualizaciones avanzadas de conjuntos de datos

PREGUNTAS FRECUENTES

¿Para qué sirve la API Ultralytics Explorer?

La API Ultralytics Explorer está diseñada para la exploración exhaustiva de conjuntos de datos. Permite a los usuarios filtrar y buscar conjuntos de datos mediante consultas SQL, búsqueda de similitud vectorial y búsqueda semántica. Esta potente API Python puede manejar grandes conjuntos de datos, lo que la hace ideal para diversas tareas de visión por ordenador que utilizan modelos Ultralytics .

¿Cómo se instala la API Ultralytics Explorer?

Para instalar la API 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 Explorer API. Para más detalles sobre la instalación, consulte la sección de instalación de nuestra documentación.

Puede utilizar la API Ultralytics Explorer para realizar búsquedas de similitud creando una tabla de incrustaciones y consultándola en busca de imágenes similares. He aquí 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 más detalles, visite la sección Búsqueda por similitud.

¿Cuáles son las ventajas de utilizar LanceDB con Ultralytics Explorer?

LanceDB, que se utiliza en Ultralytics Explorer, proporciona tablas de incrustación en disco escalables. Esto permite crear y reutilizar incrustaciones para grandes conjuntos de datos como COCO sin quedarse sin memoria. Estas tablas sólo se crean una vez y pueden reutilizarse, lo que aumenta la eficiencia en el manejo de los datos.

¿Cómo funciona la función Ask AI en la API 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. He aquí 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 más ejemplos, consulta la sección Pregúntale a AI.

Creado hace 11 meses ✏️ Actualizado hace 1 mes

Comentarios