Visualisez la recherche d’image inversée avec Feder
La recherche d’image inversée est l’une des applications les plus répandues de la recherche vectorielle ou de la recherche approximative du plus proche voisin. Lorsqu’un utilisateur téléverse une image dans le moteur de recherche, un ensemble d’images similaires est renvoyé. Pendant le processus, des index sont construits pour accélérer la recherche sur de grands jeux de données, en particulier ceux à l’échelle du milliard, voire du billion.
Dans le blog précédent, nous avons présenté comment visualiser votre recherche approximative du plus proche voisin avec Feder en utilisant l’exemple de la visualisation d’index HNSW. Dans cet article, nous prendrons l’exemple de la recherche d’image inversée et continuerons à expliquer comment vous pouvez utiliser Feder pour visualiser la construction de l’index et le processus de recherche. Dans cet article, nous utilisons l’index IVF_FLAT, car c’est l’index le plus couramment utilisé dans les applications de recherche d’image inversée.
Comment visualiser la recherche d’image inversée avec Feder
Feder est construit avec JavaScript. Pour utiliser Feder pour la visualisation, vous devez d’abord construire un index et enregistrer le fichier d’index depuis Faiss ou Hnswlib. Ensuite, Feder analyse le fichier téléversé afin d’obtenir les informations de l’index et se prépare pour la visualisation. Lors d’une recherche de similarité vectorielle, vous devez fournir un vecteur cible et la configuration des paramètres de recherche. Ensuite, Feder visualise pour vous l’ensemble du processus de recherche.
Apprenez-en davantage sur l’utilisation de Feder en lisant le guide utilisateur de Feder.
Un cas d’utilisation de visualisation de recherche avec l’index IVF_FLAT
Dans ce cas d’utilisation, nous utilisons VOC 2012, le jeu de données d’images ML classique qui contient plus de 17 000 images.
Tout d’abord, nous utilisons Towhee, un pipeline ML open source, pour encoder les images du jeu de données VOC 2012 en vecteurs. Ensuite, nous construisons un index IVF_FLAT avec Faiss et enregistrons le fichier d’index. Enfin, nous utilisons Feder pour la visualisation.
Construire un index IVF_Flat
Les index sont construits pour accélérer le processus de recherche. On peut établir une analogie avec un dictionnaire. Tous les mots sont organisés selon leurs initiales. Plus précisément, les mots ayant les mêmes initiales sont regroupés. Et nous savons tous que le nombre d’entrées sous chaque initiale est inégal. Nous avons davantage de mots commençant par la lettre "E" que de mots commençant par "Z". Lorsque l’on cherche un mot, on peut rapidement accéder à la section qui ne contient que les mots ayant la même initiale. Cela contribue à augmenter considérablement la vitesse de recherche.
De même, l’index IVF_FLAT divise les vecteurs dans l’espace vectoriel en différents clusters en fonction de la distance vectorielle. Les vecteurs proches les uns des autres sont plus susceptibles d’être placés dans le même cluster. Et les vecteurs ne sont pas nécessairement répartis uniformément dans chaque cluster. Par conséquent, chaque cluster contient une quantité différente de vecteurs.
Dans ce cas d’utilisation, nous avons utilisé Faiss pour construire un index IVF_FLAT sur les 17 000 images du jeu de données VOC 2012, avec un nlist de 256. Les 17 000 vecteurs d’images sont divisés en 256 clusters selon la méthode de clustering K-means.
Avec Feder, vous pouvez visualiser le clustering d’un espace vectoriel à haute dimension dans une vue 2D. Feder permet de consulter les détails de chaque cluster tout en offrant une expérience utilisateur interactive. Pour mieux comprendre l’index IVF_FLAT, vous pouvez cliquer sur l’un des clusters dans Feder, puis vous verrez un maximum de neuf images représentées par des vecteurs au sein de ce cluster.
Recherche grossière
Lorsque vous saisissez une image cible et la convertissez en vecteur cible pour une recherche d’image inversée, le système calcule d’abord la distance entre le vecteur cible et le centroïde de chaque cluster afin de trouver les clusters les plus proches.
Dans ce cas d’utilisation, nlist vaut 256, ce qui signifie que l’ensemble de l’espace vectoriel est divisé en 265 unités de cluster. Par conséquent, lors du processus de recherche grossière, le système compare la distance entre le vecteur cible et 256 centroïdes de clusters.
Dans les index IVF, les vecteurs sont regroupés en clusters en fonction de leur distance relative les uns par rapport aux autres. Cela signifie qu’il est très probable que les plus proches voisins du vecteur cible se trouvent dans ses clusters les plus proches. Nous pouvons contrôler le nombre d’unités de cluster à interroger avec le paramètre nprobe. Dans ce cas d’utilisation, nprobe vaut 8, ce qui signifie que le système recherchera le plus proche voisin du vecteur cible parmi les huit clusters les plus proches.
La capture d’écran ci-dessous est une vue détaillée des clusters les plus proches. Dans cluster-186 (le huitième cluster le plus proche du vecteur cible), nous pouvons voir qu’il contient certains vecteurs d’images de voitures. Même si les voitures ne ressemblent pas du tout à l’avion de notre image cible, les images de cluster-186 et la cible partagent une certaine ressemblance, car les pistes automobiles dans les images de cluster-186 ressemblent beaucoup à la piste d’aéroport dans l’image cible. Dans un cluster beaucoup plus proche, cluster-96, nous pouvons voir qu’il contient des images d’avions dans le ciel.
Recherche grossière.
Les clusters de ce cas d’utilisation démontrent que lors de l’embedding, le modèle d’apprentissage automatique extrait avec précision les caractéristiques, notamment l’avion, la piste et le ciel dans l’image cible. Il divise ensuite les vecteurs dans l’espace vectoriel en fonction de ces caractéristiques. Cluster-186 partage la caractéristique de « piste », tandis que cluster-96 partage la caractéristique d’« avion ».
Recherche fine
Après une recherche grossière, nous pouvons réserver un certain nombre de clusters nprobe pour une recherche fine. À cette étape, le système compare la distance entre le vecteur cible et tous les vecteurs des clusters nprobe. Les vecteurs topK les plus proches sont ensuite renvoyés comme résultats finaux.
Dans ce cas d’utilisation, le système calcule la distance entre le vecteur cible et un total de 742 vecteurs dans 8 clusters pendant le processus de recherche fine.
Feder propose deux modes de visualisation pour le processus de recherche fine. Un mode est la visualisation basée sur la distance entre clusters et vecteurs. L’autre est le mode de projection pour la réduction de dimension.
Dans la capture d’écran ci-dessous, les différents clusters sont affichés dans différentes couleurs. Le cercle blanc au centre représente le vecteur cible. Avec l’aide de Feder, vous pouvez voir la distance entre chaque vecteur et le vecteur cible de manière plus claire et plus directe. Vous pouvez cliquer sur chaque vecteur pour voir des informations plus détaillées, comme sa distance par rapport au vecteur cible, l’image qu’il représente, etc.
Recherche fine.
La capture d’écran ci-dessous montre le mode de projection pour la réduction de dimension. Là encore, les différents clusters sont affichés dans différentes couleurs. Actuellement, nous ne prenons en charge que UMAP, l’une des méthodes les plus populaires pour la réduction de dimension. D’autres méthodes de projection seront prises en charge dans les prochaines versions de Feder.
Recherche fine.
Analyse des performances de recherche
Lors d’une recherche sans index, le système doit calculer la distance entre le vecteur cible et les 17 000 vecteurs de la base de données. Cependant, en revanche, si nous construisons un index IVF_FLAT, l’efficacité de la recherche est considérablement améliorée, car le volume de calcul est significativement réduit (le système doit seulement calculer la distance entre le vecteur cible et les 256 centroïdes de clusters lors de la recherche grossière, puis 742 vecteurs lors de la recherche fine).
De plus, avec la visualisation Feder, nous constaterons que la valeur des paramètres de construction de l’index influence la manière dont l’espace vectoriel est divisé. Le paramètre nprobe peut être utilisé pour obtenir un compromis entre l’efficacité et la précision de la recherche. Plus la valeur de nprobe est élevée, plus le périmètre de recherche est large, et plus les résultats sont précis. Mais, en conséquence, l’efficacité de la recherche sera compromise à mesure que le volume de calcul augmente.
Et ensuite
- Essayez Attu pour gérer votre base de données vectorielle avec une simplicité en un clic.
- Découvrez comment visualiser votre recherche du plus proche voisin avec Feder.
Continuer à lire

What Is a Vector Lakebase?
A Vector Lakebase is a unified, lake-native data architecture for AI that combines vector-database-grade serving with open lake storage, reusable lake-level indexes, and a shared semantic layer.

Zilliz Cloud Now Available in Azure North Europe: Bringing AI-Powered Vector Search Closer to European Customers
The addition of the Azure North Europe (Ireland) region further expands our global footprint to better serve our European customers.

Building RAG Pipelines for Real-Time Data with Cloudera and Milvus
explore how Cloudera can be integrated with Milvus to effectively implement some of the key functionalities of RAG pipelines.



