Visualisieren Sie die umgekehrte Bildsuche mit Feder
Reverse Image Search ist eine der am weitesten verbreiteten Anwendungen der Vektorsuche oder der Suche nach approximativen nächsten Nachbarn. Wenn ein Benutzer ein Bild in die Suchmaschine hochlädt, wird eine Reihe ähnlicher Bilder zurückgegeben. Während des Prozesses werden Indizes erstellt, um die Suche in großen Datensätzen zu beschleunigen, insbesondere in Datensätzen im Milliarden- oder sogar Billionenmaßstab.
Im vorherigen Blog haben wir anhand des Beispiels der HNSW-Indexvisualisierung vorgestellt, wie Sie Ihre Suche nach approximativen nächsten Nachbarn mit Feder visualisieren können. In diesem Artikel nehmen wir das Beispiel der Reverse Image Search und erklären weiter, wie Sie Feder verwenden können, um den Indexaufbau und den Suchprozess zu visualisieren. In diesem Artikel verwenden wir den IVF_FLAT-Index, da er der am häufigsten verwendete Index in Anwendungen für Reverse Image Search ist.
So visualisieren Sie Reverse Image Search mit Feder
Feder wurde mit JavaScript erstellt. Um Feder für die Visualisierung zu verwenden, müssen Sie zunächst einen Index erstellen und die Indexdatei aus Faiss oder Hnswlib speichern. Anschließend analysiert Feder die hochgeladene Datei, um Indexinformationen zu erhalten, und bereitet die Visualisierung vor. Während einer Vektorähnlichkeitssuche müssen Sie einen Zielvektor und die Konfiguration der Suchparameter bereitstellen. Dann visualisiert Feder den gesamten Suchprozess für Sie.
Erfahren Sie mehr über die Verwendung von Feder, indem Sie das Feder-Benutzerhandbuch lesen.
Ein Anwendungsfall zur Visualisierung der Suche mit dem IVF_FLAT-Index
In diesem Anwendungsfall verwenden wir VOC 2012, den klassischen ML-Bilddatensatz, der mehr als 17.000 Bilder enthält.
Zunächst verwenden wir Towhee, eine Open-Source-ML-Pipeline, um die Bilder im VOC-2012-Datensatz in Vektoren zu kodieren. Dann erstellen wir mit Faiss einen IVF_FLAT-Index und speichern die Indexdatei. Schließlich verwenden wir Feder für die Visualisierung.
Einen IVF_Flat-Index erstellen
Indizes werden erstellt, um den Suchprozess zu beschleunigen. Eine Analogie kann zu einem Wörterbuch gezogen werden. Alle Wörter sind nach ihren Anfangsbuchstaben organisiert. Genauer gesagt werden Wörter mit denselben Anfangsbuchstaben zusammengefasst. Und wir alle wissen, dass die Anzahl der Einträge unter jedem Anfangsbuchstaben ungleich ist. Wir haben mehr Wörter, die mit dem Buchstaben "E" beginnen, als solche, die mit "Z" beginnen. Wenn wir ein Wort nachschlagen, können wir schnell zu dem Abschnitt navigieren, der nur Wörter mit demselben Anfangsbuchstaben enthält. Dies hilft, die Suchgeschwindigkeit drastisch zu erhöhen.
Ähnlich teilt der IVF_FLAT-Index Vektoren im Vektorraum basierend auf der Vektordistanz in verschiedene Cluster auf. Vektoren, die nahe beieinander liegen, werden mit größerer Wahrscheinlichkeit in denselben Cluster eingeordnet. Und die Vektoren sind nicht unbedingt gleichmäßig auf die einzelnen Cluster verteilt. Daher enthält jeder Cluster eine unterschiedliche Anzahl von Vektoren.
In diesem Anwendungsfall haben wir Faiss verwendet, um einen IVF_FLAT-Index für die 17.000 Bilder im VOC-2012-Datensatz mit einer nlist von 256 zu erstellen. Die 17.000 Bildvektoren werden basierend auf der K-means-Clustering-Methode in 256 Cluster unterteilt.
Mit Feder können Sie das Clustering eines hochdimensionalen Vektorraums in einer 2D-Ansicht visualisieren. Feder unterstützt die Anzeige der Details jedes Clusters und bietet zugleich eine interaktive Benutzererfahrung. Um ein besseres Verständnis des IVF_FLAT-Index zu erhalten, können Sie in Feder auf einen der Cluster klicken; anschließend sehen Sie maximal neun Bilder, die durch Vektoren innerhalb dieses Clusters repräsentiert werden.
Grobsuche
Wenn Sie ein Zielbild eingeben und es für die umgekehrte Bildsuche in einen Zielvektor umwandeln, berechnet das System zunächst die Distanz zwischen dem Zielvektor und dem Zentroid jedes Clusters, um die nächstgelegenen Cluster zu finden.
In diesem Anwendungsfall entspricht nlist 256, was bedeutet, dass der gesamte Vektorraum in 265 Cluster-Einheiten unterteilt ist. Daher vergleicht das System im Grobsuchprozess die Distanz zwischen dem Zielvektor und 256 Cluster-Zentroiden.
In IVF-Indizes werden die Vektoren basierend auf ihrer relativen Distanz zueinander geclustert. Das bedeutet, dass es sehr wahrscheinlich ist, dass sich die nächsten Nachbarn des Zielvektors in seinen nächstgelegenen Clustern befinden. Wir können die Anzahl der abzufragenden Cluster-Einheiten mit dem Parameter nprobe steuern. In diesem Anwendungsfall entspricht nprobe 8, was bedeutet, dass das System innerhalb der acht nächstgelegenen Cluster nach dem nächsten Nachbarn des Zielvektors suchen wird.
Der folgende Screenshot zeigt eine detaillierte Ansicht der nächstgelegenen Cluster. In cluster-186 (dem acht-nächstgelegenen Cluster zum Zielvektor) können wir sehen, dass er einige Vektoren von Autobildern enthält. Obwohl die Autos dem Flugzeug in unserem Zielbild überhaupt nicht ähneln, weisen die Bilder in cluster-186 und das Ziel eine gewisse Ähnlichkeit auf, da die Autospuren in den cluster-186-Bildern der Landebahn im Zielbild sehr ähnlich sehen. In einem deutlich näheren Cluster, cluster-96, sehen wir, dass er Bilder von Flugzeugen am Himmel enthält.
Grobsuche.
Die Cluster in diesem Anwendungsfall zeigen, dass das Machine-Learning-Modell beim Embedding die Merkmale einschließlich Flugzeug, Landebahn und Himmel im Zielbild präzise extrahiert. Anschließend teilt es Vektoren im Vektorraum basierend auf diesen Merkmalen auf. Cluster-186 teilt das Merkmal „Landebahn“, während cluster-96 das Merkmal „Flugzeug“ teilt.
Feinsuche
Nach einer Grobsuche können wir eine Anzahl von nprobe-Clustern für eine Feinsuche sichern. In dieser Phase vergleicht das System die Distanz zwischen dem Zielvektor und allen Vektoren in den nprobe-Clustern. Anschließend werden die topK nächstgelegenen Vektoren als Endergebnisse zurückgegeben.
In diesem Anwendungsfall berechnet das System während des Feinsuchprozesses die Distanz zwischen dem Zielvektor und insgesamt 742 Vektoren in 8 Clustern.
Feder bietet zwei Visualisierungsmodi für den Feinsuchprozess. Ein Modus ist die Visualisierung basierend auf Cluster- und Vektordistanz. Der andere ist der Projektionsmodus zur Dimensionsreduktion.
Im folgenden Screenshot werden verschiedene Cluster in unterschiedlichen Farben angezeigt. Der weiße Kreis in der Mitte repräsentiert den Zielvektor. Mithilfe von Feder können Sie die Distanz zwischen jedem Vektor und dem Zielvektor klarer und direkter erkennen. Sie können auf jeden Vektor klicken, um detailliertere Informationen zu sehen, wie etwa seine Distanz zum Zielvektor, das Bild, das er repräsentiert, usw.
Feinsuche.
Der folgende Screenshot zeigt den Projektionsmodus zur Dimensionsreduktion. Auch hier werden verschiedene Cluster in unterschiedlichen Farben angezeigt. Derzeit unterstützen wir nur UMAP, eine der beliebtesten Methoden zur Dimensionsreduktion. Weitere Projektionsmethoden werden in zukünftigen Versionen von Feder unterstützt.
Feinsuche.
Analyse der Suchleistung
Bei der Suche ohne Index muss das System die Distanz zwischen dem Zielvektor und allen 17.000 Vektoren in der Datenbank berechnen. Wenn wir hingegen einen IVF_FLAT-Index erstellen, wird die Sucheffizienz erheblich gesteigert, da das Berechnungsvolumen deutlich reduziert wird (das System muss nur die Distanz zwischen dem Zielvektor und den 256 Cluster-Zentroiden in der Grobsuche und 742 Vektoren in der Feinsuche berechnen).
Auch mit der Feder-Visualisierung werden wir erkennen, dass der Wert der Parameter für den Indexaufbau beeinflusst, wie der Vektorraum aufgeteilt wird. Der Parameter nprobe kann verwendet werden, um einen Kompromiss zwischen Sucheffizienz und Genauigkeit zu erzielen. Je höher der Wert von nprobe, desto breiter der Suchbereich und desto genauer die Ergebnisse. Dementsprechend wird jedoch die Sucheffizienz beeinträchtigt, da das Berechnungsvolumen zunimmt.
Was kommt als Nächstes
- Testen Sie Attu, um Ihre Vektordatenbank mit Ein-Klick-Einfachheit zu verwalten.
- Erfahren Sie, wie Sie Ihre Suche nach nächsten Nachbarn mit Feder visualisieren.
Weiterlesen

A Developer's Guide to Exploring Milvus 2.6 Features on Zilliz Cloud
Milvus 2.6 marks a shift from “vector search + glue code” to a more advanced retrieval engine, and it is now Generally Available (GA) on Zilliz Cloud (a managed Milvus service).

Expanding Our Global Reach: Zilliz Cloud Launches in Azure Central India
Zilliz Cloud expands to Azure Central India. This new region helps customers meet compliance, reduce latency, and optimize cloud costs when building AI applications.

Selecting the Right ETL Tools for Unstructured Data to Prepare for AI
Learn the right ETL tools for unstructured data to power AI. Explore key challenges, tool comparisons, and integrations with Milvus for vector search.



