Ejemplo de exploración de COV
Bienvenido al cuaderno de la API de Ultralytics Explorer. Este cuaderno sirve como punto de partida para explorar los diversos recursos disponibles para ayudarle a empezar a utilizar Ultralytics para explorar sus conjuntos de datos utilizando con el poder de la búsqueda semántica. Puede utilidades fuera de la caja que le permiten examinar tipos específicos de etiquetas utilizando la búsqueda vectorial o incluso consultas SQL.
Pruebe yolo explorer
con Explorer API
Simplemente pip install ultralytics
y ejecuta yolo explorer
en su terminal para ejecutar consultas personalizadas y búsquedas semánticas en sus conjuntos de datos directamente desde su navegador.
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 🚀.
Configurar
Instalación ultralytics
y dependencias y comprueba el software y el hardware.
Búsqueda por similitud
Utilice la potencia de la búsqueda de similitud vectorial para encontrar los puntos de datos similares en su conjunto de datos junto con su distancia en el espacio de incrustación. Basta con crear una tabla de incrustaciones para el par conjunto de datos-modelo dado. Sólo se necesita una vez y se reutiliza automáticamente.
Una vez creada la tabla de incrustaciones, puede ejecutar la búsqueda semántica de cualquiera de las siguientes formas:
- En un índice dado / lista de índices en el conjunto de datos como - exp.get_similar(idx=[1,10], limit=10)
- En cualquier imagen/lista de imágenes que no esté en el conjunto de datos - exp.get_similar(img=["ruta/a/img1", "ruta/a/img2"], limit=10) En caso de entradas múltiples, se utiliza la suma de sus incrustaciones.
Obtendrá un marco de datos pandas con el número límite 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
También puede trazar las muestras similares directamente utilizando la función plot_similar
util
exp.plot_similar(idx=6500, limit=20)
exp.plot_similar(idx=[100, 101], limit=10) # Can also pass list of idxs or imgs
exp.plot_similar(img="https://ultralytics.com/images/bus.jpg", limit=10, labels=False) # Can also pass external images
Ask AI: Buscar o filtrar con lenguaje natural
Puede indicar al objeto Explorador el tipo de puntos de datos que desea ver, e intentará devolver un marco de datos con ellos. Debido a que es alimentado por LLMs, no siempre lo hace bien. En ese caso, devolverá Ninguno.
df = exp.ask_ai("show me images containing more than 10 objects with at least 2 persons")
df.head(5)
para trazar estos resultados puede utilizar plot_query_result
ejemplo útil:
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)
# plot
from PIL import Image
from ultralytics.data.explorer import plot_query_result
plt = plot_query_result(exp.ask_ai("show me 10 images containing exactly 2 persons"))
Image.fromarray(plt)
Ejecutar consultas SQL en el conjunto de datos
A veces es posible que desee investigar un determinado tipo de entradas en su conjunto de datos. Para ello, Explorer le permite ejecutar consultas SQL. Acepta cualquiera de los formatos:
- Las consultas que empiezan por "WHERE" seleccionan automáticamente todas las columnas. Esto puede considerarse como una consulta abreviada
- También puede escribir consultas completas en las que puede especificar qué columnas seleccionar
Esto puede utilizarse para investigar el rendimiento del modelo y puntos de datos específicos. Por ejemplo:
- Digamos que tu modelo lucha con imágenes que tienen humanos y perros. Puedes escribir una consulta como esta para seleccionar los puntos que tienen al menos 2 humanos Y al menos un perro.
Puede combinar la consulta SQL y la búsqueda semántica para filtrar hasta un tipo específico de resultados.
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)
table = exp.sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10")
print(table)
Al igual que en la búsqueda por similitud, también dispone de una utilidad para trazar directamente las consultas sql utilizando exp.plot_sql_query
exp.plot_sql_query("WHERE labels LIKE '%person, person%' AND labels LIKE '%dog%' LIMIT 10", labels=True)
Trabajar con incrustaciones Tabla (Avanzado)
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.
Ejecutar consultas en bruto¶
La búsqueda de vectores encuentra los vectores más cercanos de la base de datos. En un sistema de recomendación o un motor de búsqueda, puede encontrar productos similares a partir del buscado. En LLM y otras aplicaciones de IA, cada punto de datos puede ser presentado por los embeddings generados a partir de algunos modelos, devuelve las características más relevantes.
Una búsqueda en un espacio vectorial de alta dimensión consiste en encontrar los K-Nearest-Neighbors (KNN) del vector de consulta.
Métrica En LanceDB, una Métrica es la forma de describir la distancia entre un par de vectores. Actualmente, soporta las siguientes métricas:
- L2
- Coseno
- La búsqueda por similitud de Dot Explorer utiliza L2 por defecto. Puede ejecutar consultas en tablas directamente, o utilizar el formato lance para crear utilidades personalizadas para gestionar conjuntos de datos. Más detalles sobre las operaciones de tablas LanceDB disponibles en la documentación
dummy_img_embedding = [i for i in range(256)]
table.search(dummy_img_embedding).limit(5).to_pandas()
Interconversión a formatos de datos populares
Trabajar con incrustaciones
Puede acceder a la incrustación sin procesar desde la tabla lancedb y analizarla. Las imágenes incrustadas se almacenan en la columna vector
import numpy as np
embeddings = table.to_pandas()["vector"].tolist()
embeddings = np.array(embeddings)
Gráfico de dispersión
Uno de los pasos previos al análisis de las incrustaciones consiste en representarlas en un espacio 2D mediante la reducción de la dimensionalidad. Veamos un ejemplo
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA # pip install scikit-learn
# 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's 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()
Índice de similitud
He aquí un ejemplo sencillo de una operación realizada con la tabla de incrustaciones. Explorer 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 se encuentran más cerca que max_dist de la imagen actual en el espacio de incrustación generado, considerando top_k imágenes similares a la vez.
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
. Similar a la búsqueda vectorial y SQL, esta también viene con una utilidad para graficarla directamente. Veamos
sim_idx = exp.similarity_index(max_dist=0.2, top_k=0.01)
exp.plot_similarity_index(max_dist=0.2, top_k=0.01)
en la parcela primero
Veamos ahora el resultado de la operación
Creemos una consulta para ver qué puntos de datos tienen un recuento de similitudes superior a 30 y tracemos imágenes similares a ellos.
Debería ver algo como esto