Ejemplo de exploración de COV¶
中文 | 한국어 | 日本語 | Русский | Deutsch | Français | Español | Português | Türkçe | Tiếng Việt | العربية
¡Bienvenido al cuaderno de la API del Explorador Ultralytics ! Este cuaderno sirve como punto de partida para explorar los distintos recursos disponibles que te ayudarán a empezar a utilizar Ultralytics para explorar tus conjuntos de datos utilizando con la potencia de la búsqueda semántica. Puedes utilizar utilidades listas para usar que te permiten examinar tipos específicos de etiquetas utilizando la búsqueda vectorial o incluso consultas SQL.
Esperamos que los recursos de este cuaderno te ayuden a sacar el máximo partido de Ultralytics. Navega por los documentos del Explorador para obtener más detalles, plantea un problema en GitHub para obtener asistencia y únete a nuestra comunidad de Discord para preguntas y debates.
Prueba yolo explorer
con la API de Exlorer
Simplemente pip install ultralytics
y ejecuta yolo explorer
en tu terminal para ejecutar consultas personalizadas y búsquedas semánticas en tus conjuntos de datos ¡directamente desde tu navegador!
Setup¶
Instalación de tuberías ultralytics
y dependencias y comprueba el software y el hardware.
%pip install ultralytics[explorer] openai
import ultralytics
ultralytics.checks()
de ultralytics importar Explorador
Búsqueda de similitudes¶
Utiliza el poder de la búsqueda de similitud vectorial para encontrar los puntos de datos similares en tu 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.
exp = Explorer("VOC.yaml", model="yolo11n.pt")
exp.create_embeddings_table()
Una vez construida la tabla de incrustaciones, puedes ejecutar la búsqueda semántica de cualquiera de las siguientes formas:
- En un índice / lista de índices dados del 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=["path/to/img1", "path/to/img2"], limit=10)
En caso de múltiples entradas, se utiliza el agregado 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
similar = exp.obtener_similar(idx=1, límite=10)
similar.cabeza()
También puedes trazar directamente las muestras similares utilizando la función plot_similar
Utiliza
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 any external images
2. Ask AI: Busca o filtra con Lenguaje Natural¶
Puedes indicar al objeto Explorador el tipo de puntos de datos que quieres ver e intentará devolver un marco de datos con ellos. Como funciona con LLMs, no siempre acierta. En ese caso, devolverá Ninguno.
df = exp.pregunta_ai("muéstrame imágenes que contengan más de 10 objetos con al menos 2 personas")
df.cabeza(5)
para trazar estos resultados puedes utilizar plot_query_result
Utiliza
Ejemplo:
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)
3. Ejecuta consultas SQL en tu Conjunto de datos!¶
A veces puede que quieras investigar un determinado tipo de entradas en tu conjunto de datos. Para ello, el Explorador te permite ejecutar consultas SQL. Acepta cualquiera de los formatos:
- Las consultas que empiecen por "WHERE" seleccionarán automáticamente todas las columnas. Esto puede considerarse como una consulta abreviada
- También puedes escribir consultas completas en las que puedes especificar qué columnas seleccionar
Esto puede utilizarse para investigar el rendimiento del modelo y puntos de datos específicos. Por ejemplo:
- Supongamos que tu modelo lucha con imágenes que tienen humanos y perros. Puedes escribir una consulta como ésta para seleccionar los puntos que tengan al menos 2 humanos Y al menos un perro.
Puedes combinar la consulta SQL y la búsqueda semántica para filtrar hasta un tipo específico de resultados
tabla = exp.sql_consulta("WHERE labels LIKE '%persona, persona%' AND labels LIKE '%dog%' LIMIT 10")
tabla
Al igual que la búsqueda por similitud, también tienes una utilidad para trazar directamente las consultas sql utilizando exp.plot_sql_query
exp.plot_sql_consulta("WHERE labels LIKE '%persona, persona%' AND labels LIKE '%dog%' LIMIT 10", etiquetas=Verdadero)
tabla = exp.tabla
tabla.esquema
Ejecuta consultas sin procesar¶
La Búsqueda vectorial encuentra los vectores más cercanos de la base de datos. En un sistema de recomendación o en un motor de búsqueda, puede encontrar productos similares a los buscados. En LLM y otras aplicaciones de IA, cada punto de datos puede ser presentado por las incrustaciones generadas 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, admite las siguientes métricas:
- L2
- Coseno
- Punto La búsqueda por similitud de Explorer utiliza L2 por defecto. Puedes ejecutar consultas en las 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 para i en rango(256)]
tabla.buscar(incrustación_imagen_falsa).limitar(5).to_pandas()
Interconversión a formatos de datos populares¶
df = tabla.a_pandas()
pa_tabla = tabla.a_flecha()
Trabajar con incrustaciones¶
Puedes acceder a la incrustación sin procesar desde la Tabla lancedb y analizarla. Las incrustaciones de la imagen se almacenan en la columna vector
importa numpy como np
incrustaciones = tabla.a_pandas()["vector].tolist()
incrustaciones = np.matriz(incrustaciones)
Diagrama de dispersión¶
Uno de los pasos previos al análisis de las incrustaciones es trazarlas en el espacio 2D mediante la reducción de la dimensionalidad. Probemos con un ejemplo
¡!pip instala scikit-aprender --q
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
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'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()
4. Índice de similitud¶
He aquí un ejemplo sencillo de una operación realizada con la tabla de incrustaciones. 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.
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
.
Al igual que la búsqueda vectorial y SQL, también incluye una utilidad para trazarla directamente. Veamos primero el gráfico
exp.trazar_índice_similaridad(distancia_máx=0.2, top_k=0.01)
Ahora veamos el resultado de la operación
importa numpy como np
sim_idx = exp.índice_de_similitud(distancia_máx=0.2, top_k=0.01, fuerza=Falso)
sim_idx
Vamos a crear una consulta para ver qué puntos de datos tienen un recuento de similitudes superior a 30 y trazar imágenes similares a ellos.
import numpy as np
sim_count = np.array(sim_idx["count"])
sim_idx["im_file"][sim_count > 30]
Deberías ver algo así
exp.plot_similar(idx=[7146, 14035]) # Using avg embeddings of 2 images