Visualiza la búsqueda inversa de imágenes con Feder
La búsqueda inversa de imágenes es una de las aplicaciones más frecuentes de la búsqueda vectorial o búsqueda aproximada de vecinos más cercanos. Cuando un usuario sube una imagen al motor de búsqueda, se devolverá un conjunto de imágenes similares. Durante el proceso, se construyen índices para acelerar la búsqueda en grandes conjuntos de datos, especialmente aquellos conjuntos de datos a escala de miles de millones o incluso billones.
En el blog anterior, presentamos cómo visualizar tu búsqueda aproximada de vecinos más cercanos con Feder usando el ejemplo de visualización del índice HNSW. En este artículo, tomaremos el ejemplo de la búsqueda inversa de imágenes y seguiremos explicando cómo puedes usar Feder para visualizar el proceso de construcción del índice y de búsqueda. En este artículo, usamos el índice IVF_FLAT, ya que es el índice más utilizado en aplicaciones de búsqueda inversa de imágenes.
Cómo visualizar la búsqueda inversa de imágenes con Feder
Feder está construido con JavaScript. Para usar Feder para la visualización, primero necesitas construir un índice y guardar el archivo de índice desde Faiss o Hnswlib. Luego Feder analiza el archivo subido para obtener información del índice y queda listo para la visualización. Durante una búsqueda de similitud vectorial, necesitas proporcionar un vector objetivo y la configuración de los parámetros de búsqueda. Luego Feder visualiza todo el proceso de búsqueda para ti.
Obtén más información sobre cómo usar Feder leyendo la guía de usuario de Feder.
Un caso de uso de visualización de búsqueda con el índice IVF_FLAT
En este caso de uso, utilizamos VOC 2012, el clásico conjunto de datos de imágenes de ML que contiene más de 17.000 imágenes.
Primero, usamos Towhee, un pipeline de ML de código abierto, para codificar las imágenes del conjunto de datos VOC 2012 en vectores. Luego construimos un índice IVF_FLAT con Faiss y guardamos el archivo de índice. Finalmente, usamos Feder para la visualización.
Construir un índice IVF_Flat
Los índices se construyen para acelerar el proceso de búsqueda. Se puede establecer una analogía con un diccionario. Todas las palabras están organizadas según sus iniciales. Más específicamente, las palabras con las mismas iniciales se agrupan juntas. Y todos sabemos que el número de entradas bajo cada inicial es desigual. Tenemos más palabras que empiezan con la letra "E" que aquellas que empiezan con "Z". Al buscar una palabra, podemos navegar rápidamente a la sección que solo contiene palabras con la misma inicial. Esto ayuda a aumentar drásticamente la velocidad de búsqueda.
Del mismo modo, el índice IVF_FLAT divide los vectores en el espacio vectorial en diferentes clústeres según la distancia vectorial. Es más probable que los vectores cercanos entre sí se coloquen en el mismo clúster. Y los vectores no necesariamente se distribuyen de manera uniforme en cada clúster. Por lo tanto, cada clúster contiene una cantidad diferente de vectores.
En este caso de uso, usamos Faiss para construir un índice IVF_FLAT sobre las 17.000 imágenes del conjunto de datos VOC 2012, con un nlist de 256. Los 17.000 vectores de imagen se dividen en 256 clústeres según el método de agrupamiento K-means.
Con Feder, puedes visualizar la agrupación del espacio vectorial de alta dimensión en una vista 2D. Feder permite ver los detalles de cada clúster mientras ofrece una experiencia de usuario interactiva. Para comprender mejor el índice IVF_FLAT, puedes hacer clic en uno de los clústeres en Feder y luego verás un máximo de nueve imágenes representadas por vectores dentro de este clúster.
Búsqueda aproximada
Cuando introduces una imagen objetivo y la conviertes en un vector objetivo para la búsqueda inversa de imágenes, el sistema primero calcula la distancia entre el vector objetivo y el centroide de cada clúster para encontrar los clústeres más cercanos.
En este caso de uso, nlist es igual a 256, lo que significa que todo el espacio vectorial se divide en 265 unidades de clúster. Por lo tanto, en el proceso de búsqueda aproximada, el sistema compara la distancia entre el vector objetivo y 256 centroides de clúster.
En los índices IVF, los vectores se agrupan en función de su distancia relativa entre sí. Esto significa que es muy probable que los vecinos más cercanos del vector objetivo se encuentren en sus clústeres más cercanos. Podemos controlar el número de unidades de clúster a consultar con el parámetro nprobe. En este caso de uso, nprobe es igual a 8, lo que significa que el sistema buscará el vecino más cercano del vector objetivo dentro de los ocho clústeres más cercanos.
La captura de pantalla a continuación es una vista detallada de los clústeres más cercanos. En cluster-186 (el octavo clúster más cercano al vector objetivo) podemos ver que contiene algunos vectores de imágenes de autos. Aunque los autos no son en absoluto similares al avión de nuestra imagen objetivo, las imágenes en cluster-186 y el objetivo sí comparten cierta semejanza, ya que las pistas de autos en las imágenes de cluster-186 se parecen mucho a la pista del aeropuerto en la imagen objetivo. En un clúster mucho más cercano, cluster-96, podemos ver que contiene imágenes de aeronaves en el cielo.
Búsqueda aproximada.
Los clústeres en este caso de uso demuestran que, durante la incrustación, el modelo de aprendizaje automático extrae con precisión las características que incluyen aeronave, pista y cielo en la imagen objetivo. Luego divide los vectores en el espacio vectorial en función de estas características. Cluster-186 comparte la característica de "pista", mientras que cluster-96 comparte la característica de "aeronave".
Búsqueda fina
Después de una búsqueda aproximada, podemos asegurar una cantidad de clústeres nprobe para una búsqueda fina. En esta etapa, el sistema compara la distancia entre el vector objetivo y todos los vectores en los clústeres nprobe. Luego, los vectores topK más cercanos se devuelven como resultados finales.
En este caso de uso, el sistema calcula la distancia entre el vector objetivo y un total de 742 vectores en 8 clústeres durante el proceso de búsqueda fina.
Feder proporciona dos modos de visualización para el proceso de búsqueda fina. Un modo es la visualización basada en el clúster y la distancia vectorial. El otro es la proyección para el modo de reducción de dimensiones.
En la captura de pantalla a continuación, se muestran diferentes clústeres en diferentes colores. El círculo blanco en el centro representa el vector objetivo. Con la ayuda de Feder, puedes ver la distancia entre cada vector y el vector objetivo de una manera más clara y directa. Puedes hacer clic en cada vector para ver información más detallada, como su distancia al vector objetivo, la imagen que representa, etc.
Búsqueda fina.
La captura de pantalla a continuación es la proyección para el modo de reducción de dimensiones. Aun así, se muestran diferentes clústeres en diferentes colores. Actualmente, solo admitimos UMAP, uno de los métodos más populares para la reducción de dimensiones. Se admitirán más métodos de proyección en futuras versiones de Feder.
Búsqueda fina.
Análisis del rendimiento de búsqueda
Al buscar sin un índice, el sistema necesita calcular la distancia entre el vector objetivo y los 17,000 vectores de la base de datos. Sin embargo, por el contrario, si construimos un índice IVF_FLAT, la eficiencia de búsqueda aumenta considerablemente, ya que el volumen de cálculo se reduce significativamente (el sistema solo necesita calcular la distancia entre el vector objetivo y los 256 centroides de clúster en la búsqueda aproximada y 742 vectores en la búsqueda fina).
Además, con la visualización de Feder, nos daremos cuenta de que el valor de los parámetros de creación del índice influirá en cómo se divide el espacio vectorial. El parámetro nprobe puede utilizarse para lograr un equilibrio entre la eficiencia de búsqueda y la precisión. Cuanto mayor sea el valor de nprobe, más amplio será el alcance de búsqueda y más precisos serán los resultados. Pero, en consecuencia, la eficiencia de búsqueda se verá comprometida a medida que aumente el volumen de cálculo.
Qué sigue
- Prueba Attu para gestionar tu base de datos vectorial con simplicidad de un solo clic.
- Aprende cómo visualizar tu búsqueda de vecinos más cercanos con Feder.
Sigue leyendo

Introducing Functions and Model Inference on Zilliz Cloud: Automatic Embedding and Reranking with Hosted Models
Zilliz Cloud Functions auto-generate embeddings via OpenAI, Voyage AI, Cohere, or Zilliz Hosted Models. Built-in reranking — just insert text and search.

1 Table = 1000 Words? Foundation Models for Tabular Data
TableGPT2 automates tabular data insights, overcoming schema variability, while Milvus accelerates vector search for efficient, scalable decision-making.

VidTok: Rethinking Video Processing with Compact Tokenization
VidTok tokenizes videos to reduce redundancy while preserving spatial and temporal details for efficient processing.



