Ultralytics Explorador API
Nota de la Comunidad ⚠️
A partir de ultralytics>=8.3.10
, Ultralytics el soporte para el explorador ha quedado obsoleto. Pero ¡no te preocupes! 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 tu 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. Asegúrate de echarle un vistazo y aprovechar sus potentes funciones!🚀
Introducción
La API Explorador es una API Python para explorar tus conjuntos de datos. Admite el filtrado y la búsqueda de tu conjunto de datos mediante consultas SQL, búsqueda de similitud vectorial y búsqueda semántica.
Observa: Ultralytics Visión general de la API del Explorador
Instalación
Explorer depende de bibliotecas externas para algunas de sus funciones. Éstas se instalan automáticamente al utilizarlo. Para instalar manualmente estas dependencias, utiliza 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 determinado conjunto de datos y par de modelos sólo se crea una vez y se reutiliza. Utilizan LanceDB bajo el capó, que escala en disco, de modo que puedes crear y reutilizar incrustaciones para grandes conjuntos de datos como COCO sin quedarte sin memoria.
En caso de que quieras forzar la actualización de la tabla de incrustaciones, puedes pasar force=True
a create_embeddings_table
método.
Puedes acceder directamente al objeto de tabla LanceDB para realizar análisis avanzados. Obtén más información al respecto en la sección Trabajar con tablas incrustadas
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 las imágenes similares tendrán incrustaciones similares. Una vez construida la tabla de incrustaciones, puedes ejecutar la búsqueda semántica de cualquiera de las siguientes formas:
- 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é en el conjunto de datos:
exp.get_similar(img=["path/to/img1", "path/to/img2"], limit=10)
Si hay varias entradas, se utiliza la suma de sus incrustaciones.
Obtendrás un marco de datos pandas con la función limit
número de puntos de datos más similares a los de entrada, junto con su distancia en el espacio de incrustación. Puedes 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())
Trazar imágenes similares
También puedes 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.
Trazar imágenes similares
2. Ask AI (Consulta en lenguaje natural)
Esto te permite escribir cómo quieres filtrar tu conjunto de datos utilizando lenguaje natural. No tienes que ser experto en escribir consultas SQL. Nuestro generador de consultas basado en IA lo hará automáticamente. Por ejemplo, puedes decir "muéstrame 100 imágenes con exactamente una persona y 2 perros. También puede haber otros objetos" y generará internamente la consulta y te mostrará los resultados. Nota: Esto funciona utilizando LLMs bajo el capó, por lo que los resultados son probabilísticos y puede que a veces se equivoquen.
Pregunta 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. Consulta SQL
Puedes ejecutar consultas SQL en tu conjunto de datos utilizando la función sql_query
método. Este método toma una consulta SQL como entrada y devuelve un marco de datos pandas con los resultados.
Consulta SQL
Trazar los resultados de una consulta SQL
También puedes 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.
Trazar los resultados de una consulta SQL
4. Trabajar con la tabla de incrustaciones
También puedes trabajar directamente con la tabla de incrustaciones. Una vez creada la tabla de incrustaciones, puedes acceder a ella utilizando la función Explorer.table
Consejo
El Explorador funciona en LanceDB internamente. Puedes acceder a esta tabla directamente, utilizando Explorer.table
y ejecuta consultas sin procesar, introduce filtros previos y posteriores, etc.
Aquí tienes algunos ejemplos de lo que puedes hacer con la mesa:
Obtener incrustaciones en bruto
Ejemplo
Consulta avanzada con filtros previos y posteriores
Ejemplo
Crear índice vectorial
Cuando utilices grandes conjuntos de datos, también puedes crear un índice vectorial específico para una consulta más rápida. Esto se hace utilizando la función create_index
en la tabla LanceDB.
Encuentra 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 la API del Explorador.
5. Aplicaciones incrustadas
Puedes utilizar la tabla de incrustaciones para realizar diversos análisis exploratorios. He aquí algunos ejemplos:
Índice de similitud
El Explorador viene con un similarity_index
funcionamiento:
- Intenta estimar la similitud de cada punto de datos con el resto del conjunto de datos.
- Para ello, cuenta cuántas imágenes incrustadas están 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 al 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
se reutilizará el índice de similitud una vez generado. 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
Puedes utilizar el índice de similitud para crear condiciones personalizadas para filtrar el conjunto de datos. Por ejemplo, puedes 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 puedes visualizar el espacio de incrustación utilizando la herramienta de trazado que prefieras. Aquí tienes 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()
Empieza a crear tus propios informes de exploración de conjuntos de datos CV utilizando la API del Explorador. Para inspirarte, consulta la página
Aplicaciones creadas con Ultralytics Explorer
Prueba nuestra Demo GUI basada en Explorer API
Próximamente
- [ ] Fusionar etiquetas específicas de conjuntos de datos. Ejemplo - Importar todos
person
etiquetas de COCO ycar
etiquetas de Paisajes urbanos - [ ] Elimina 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é se utiliza la API del Explorador Ultralytics ?
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 instalo la API Ultralytics Explorer?
Para instalar la API Ultralytics Explorer junto con sus dependencias, utiliza el siguiente comando:
Esto instalará automáticamente todas las bibliotecas externas necesarias para la funcionalidad de la API del Explorador. Para más detalles sobre la instalación, consulta la sección de instalación de nuestra documentación.
¿Cómo puedo utilizar la API del Explorador Ultralytics para la búsqueda de similitudes?
Puedes utilizar la API del Explorador Ultralytics 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, visita la sección Búsqueda por similitud.
¿Cuáles son las ventajas de utilizar LanceDB con Ultralytics Explorer?
LanceDB, utilizado bajo el capó por Ultralytics Explorer, proporciona tablas de incrustaciones escalables y en disco. Esto garantiza que puedas crear y reutilizar incrustaciones para grandes conjuntos de datos como COCO sin quedarte sin memoria. Estas tablas sólo se crean una vez y pueden reutilizarse, mejorando la eficiencia en el manejo de los datos.
¿Cómo funciona la función Preguntar a la IA en la API del Explorador Ultralytics ?
La función Pregúntale a la IA 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 ver más ejemplos, consulta la sección Pregúntale a AI.