Ultralytics Explorador API
Nota comunitaria ⚠️
A partir de ultralytics>=8.3.10
Ultralytics 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
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:
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.
1. Búsqueda por similitud
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
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
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
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.
Aquí tienes algunos ejemplos de lo que puedes hacer con la tabla:
Obtener incrustaciones en bruto
Ejemplo
Consultas avanzadas con filtros previos y posteriores
Ejemplo
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.
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, considerandotop_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 datosim_file
: Ruta del archivo de imagencount
: Número de imágenes del 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 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
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:
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 ycar
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:
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.
¿Cómo puedo utilizar la API Ultralytics Explorer para la búsqueda de similitudes?
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.