🚀 Testen Sie Zilliz Cloud, die vollständig verwaltete Milvus, kostenlos – erleben Sie 10x schnellere Leistung! Jetzt testen>>

milvus-logo
LFAI

Überblick

  • Scenarios
August 04, 2020
Rife Wang

Der Yupoo Picture Manager bedient mehrere Millionen Nutzer und verwaltet mehrere Milliarden Bilder. Da die Benutzergalerie immer größer wird, benötigt Yupoo dringend eine Lösung, die das Bild schnell auffinden kann. Mit anderen Worten: Wenn ein Benutzer ein Bild eingibt, sollte das System das Originalbild und ähnliche Bilder in der Galerie finden. Die Entwicklung des Dienstes "Suche nach Bildern" bietet einen effektiven Ansatz für dieses Problem.

Die Suche nach Bildern hat zwei Entwicklungen durchlaufen:

  1. Anfang 2019 begann die erste technische Untersuchung und im März und April 2019 wurde das System der ersten Generation eingeführt;
  2. Anfang 2020 wurde mit der Untersuchung des Aufrüstungsplans begonnen, und im April 2020 wurde die Gesamtaufrüstung zum System der zweiten Generation in Angriff genommen.

In diesem Artikel werden die Technologieauswahl und die Grundprinzipien der beiden Generationen des Systems für die Suche nach Bildern auf der Grundlage meiner eigenen Erfahrungen mit diesem Projekt beschrieben.

Überblick

Was ist ein Bild?

Bevor wir uns mit Bildern beschäftigen, müssen wir wissen, was ein Bild ist.

Die Antwort ist, dass ein Bild eine Sammlung von Pixeln ist.

Der Teil in dem roten Kasten auf diesem Bild zum Beispiel ist praktisch eine Reihe von Pixeln.

1-what-is-an-image.png 1-was-ist-ein-bild.png

Angenommen, der Teil im roten Kasten ist ein Bild, dann ist jedes unabhängige kleine Quadrat im Bild ein Pixel, die grundlegende Informationseinheit. Dann ist die Größe des Bildes 11 x 11 px.

2-what-is-an-image.png 2-was-ist-ein-bild.png

Mathematische Darstellung von Bildern

Jedes Bild kann durch eine Matrix dargestellt werden. Jedes Pixel des Bildes entspricht einem Element in dieser Matrix.

Binäre Bilder

Die Pixel eines binären Bildes sind entweder schwarz oder weiß, d. h. jedes Pixel kann durch 0 oder 1 dargestellt werden. Die Matrixdarstellung eines binären 4*4-Bildes ist zum Beispiel so:

0 1 0 1
1 0 0 0
1 1 1 0
0 0 1 0

RGB-Bilder

Die drei Grundfarben (Rot, Grün und Blau) können gemischt werden, um eine beliebige Farbe zu erzeugen. Bei RGB-Bildern verfügt jedes Pixel über die Grundinformationen von drei RGB-Kanälen. Wenn jeder Kanal eine 8-Bit-Zahl (in 256 Stufen) verwendet, um seine Grauskala darzustellen, lautet die mathematische Darstellung eines Pixels wie folgt:

([0 .. 255], [0 .. 255], [0 .. 255])

Nehmen wir ein 4 * 4 RGB-Bild als Beispiel:

3-4-x-4-rgb-image.png 3-4-x-4-rgb-image.png

Das Wesen der Bildverarbeitung besteht darin, diese Pixelmatrizen zu verarbeiten.

Das technische Problem der Suche nach einem Bild

Wenn Sie das Originalbild suchen, d. h. ein Bild mit genau denselben Pixeln, können Sie deren MD5-Werte direkt vergleichen. Bilder, die ins Internet hochgeladen werden, sind jedoch oft komprimiert oder mit Wasserzeichen versehen. Schon eine kleine Änderung in einem Bild kann zu einem anderen MD5-Ergebnis führen. Solange es Inkonsistenzen bei den Pixeln gibt, ist es unmöglich, das Originalbild zu finden.

Bei einem System, das nach Bildern sucht, wollen wir nach Bildern mit ähnlichem Inhalt suchen. Dazu müssen wir zwei grundlegende Probleme lösen:

  • Darstellung oder Abstraktion eines Bildes in einem Datenformat, das von einem Computer verarbeitet werden kann.
  • Die Daten müssen für Berechnungen vergleichbar sein.

Genauer gesagt benötigen wir die folgenden Merkmale:

  • Extraktion von Bildmerkmalen.
  • Merkmalsberechnung (Ähnlichkeitsberechnung).

Das System der ersten Generation für die Suche nach Bildern

Merkmalsextraktion - Bildabstraktion

Das Bildsuchsystem der ersten Generation verwendet zur Merkmalsextraktion den Wahrnehmungshash- oder pHash-Algorithmus. Was sind die Grundlagen dieses Algorithmus?

4-first-generation-image-search.png 4-erste-generation-bild-suche.png

Wie in der Abbildung oben dargestellt, führt der pHash-Algorithmus eine Reihe von Transformationen am Bild durch, um den Hash-Wert zu erhalten. Während des Transformationsprozesses abstrahiert der Algorithmus kontinuierlich Bilder, wodurch sich die Ergebnisse ähnlicher Bilder einander annähern.

Merkmalsberechnung - Ähnlichkeitsberechnung

Wie berechnet man die Ähnlichkeit zwischen den pHash-Werten zweier Bilder? Die Antwort ist die Verwendung der Hamming-Distanz. Je kleiner der Hamming-Abstand ist, desto ähnlicher ist der Inhalt der Bilder.

Was ist die Hamming-Distanz? Es ist die Anzahl der unterschiedlichen Bits.

Ein Beispiel,

Value 1: 0 1 0 1 0
Value 2: 0 0 0 1 1

Die beiden obigen Werte enthalten zwei unterschiedliche Bits, so dass der Hamming-Abstand zwischen ihnen 2 beträgt.

Jetzt kennen wir das Prinzip der Ähnlichkeitsberechnung. Die nächste Frage ist, wie man die Hamming-Distanzen von 100 Millionen Daten aus 100 Millionen Bildern berechnen kann. Kurz gesagt, wie kann man nach ähnlichen Bildern suchen?

In der Anfangsphase des Projekts fand ich kein befriedigendes Werkzeug (oder eine Rechenmaschine), das die Hamming-Distanz schnell berechnen kann. Also habe ich meinen Plan geändert.

Meine Idee ist, dass, wenn der Hamming-Abstand zwischen zwei pHash-Werten klein ist, ich die pHash-Werte schneiden kann und die entsprechenden kleinen Teile wahrscheinlich gleich sind.

Ein Beispiel:

Value 1: 8 a 0 3 0 3 f 6
Value 2: 8 a 0 3 0 3 d 8

Wir teilen die beiden obigen Werte in acht Segmente und die Werte von sechs Segmenten sind genau gleich. Daraus lässt sich schließen, dass die Hamming-Distanz nahe beieinander liegt und die beiden Bilder somit ähnlich sind.

Nach der Umwandlung wird aus dem Problem der Berechnung der Hamming-Distanz ein Problem der Gleichwertigkeit. Wenn ich jeden pHash-Wert in acht Segmente unterteile, sind die beiden pHash-Werte ähnlich, solange es mehr als fünf Segmente gibt, die genau die gleichen Werte haben.

Es ist also sehr einfach, die Äquivalenzsuche zu lösen. Wir können die klassische Filterung eines herkömmlichen Datenbanksystems verwenden.

Natürlich verwende ich das Multi-Term-Matching und spezifiziere den Grad der Übereinstimmung mit minimum_should_match in ElasticSearch (dieser Artikel stellt das Prinzip von ES nicht vor, Sie können es selbst lernen).

Warum wählen wir ElasticSearch? Erstens, weil es die oben erwähnte Suchfunktion bietet. Zweitens verwendet das Bildmanager-Projekt selbst ES, um eine Volltextsuchfunktion bereitzustellen, und es ist sehr wirtschaftlich, die vorhandenen Ressourcen zu nutzen.

Zusammenfassung des Systems der ersten Generation

Das System der ersten Generation für die Suche nach Bildern wählt die Lösung pHash + ElasticSearch, die die folgenden Eigenschaften aufweist:

  • Der pHash-Algorithmus ist einfach zu verwenden und kann einem gewissen Grad an Kompression, Wasserzeichen und Rauschen widerstehen.
  • ElasticSearch nutzt die vorhandenen Ressourcen des Projekts, ohne zusätzliche Kosten für die Suche zu verursachen.
  • Die Einschränkung dieses Systems ist jedoch offensichtlich: Der pHash-Algorithmus ist eine abstrakte Darstellung des gesamten Bildes. Sobald wir die Integrität des Bildes zerstören, z. B. indem wir dem Originalbild einen schwarzen Rand hinzufügen, ist es fast unmöglich, die Ähnlichkeit zwischen dem Original und den anderen Bildern zu beurteilen.

Um solche Beschränkungen zu überwinden, wurde das Bildsuchsystem der zweiten Generation entwickelt, das auf einer völlig anderen Technologie basiert.

Dieser Artikel wurde von rifewang, Milvus-Benutzer und Softwareentwickler bei UPYUN, geschrieben. Wenn Ihnen dieser Artikel gefällt, können Sie gerne vorbeikommen und Hallo sagen! https://github.com/rifewang

Like the article? Spread the word

Weiterlesen