Erstellen eines visuellen Suchalgorithmus in wenigen Schritten mithilfe von Transfer Learning

Quelle: Hockeygemeinschaft

In unserer jüngsten Blogserie zum Transferlernen haben wir die Anwendung des Transferlernens auf die Klassifizierung von Bildern untersucht. Insbesondere haben wir gelernt, dass Transferlernen bedeutet, dass wir von einem Modell ausgehen, das für eine etwas andere Anwendung erstellt wurde, und es anpassen, um für unser spezifisches Problem effizient zu werden. Wir haben auch gezeigt, dass wir mithilfe des Transfer-Lernens und der von Decathlon Canada entwickelten Bildklassifizierungsbibliothek in wenigen Schritten einen Klassifizierer erstellen können, mit dem 30 verschiedene Eishockeygeräte mit einer Genauigkeit von über 90% unterschieden werden können.

Aber offensichtlich gibt es mehrere andere Anwendungen des Transferlernens. In diesem Artikel werden wir uns eine sehr interessante anschauen: die visuelle Suche.

Angenommen, Sie sind ein Einzelhändler oder haben einen Online-Marktplatz mit einem Bilddatensatz, der Ihre Produkte beschreibt. Möglicherweise haben Sie einen Benutzer, der das Bild eines Produkts gesehen hat, das an einer anderen Stelle verkauft wurde, und möchten die Produkte in Ihrem Katalog finden, die ähnlich sind. Vielleicht haben Sie auch einen Benutzer, der ein Bild von seinem gebrauchten Produkt gemacht hat und den besten Ersatz finden möchte, den Sie anbieten können. Oder vielleicht haben Sie einen Benutzer, der nach Inspiration sucht und mit dem Bild eines Produkts beginnt, das ihm gefällt.

Diese neuen Möglichkeiten der Produktsuche können durch die Erstellung einer visuellen Suchmaschine erreicht werden, die https://images.google.com/ ähnelt. In diesem Beitrag werden wir in wenigen einfachen Schritten einen leistungsstarken visuellen Suchalgorithmus erstellen und sehen, wie die Suche nach Hockey-Produkten in Decathlons Katalog funktioniert.

Wie es funktioniert

Ein Beispiel für Transferlernen. Quelle: Brian Curry

Zurück zu Teil 1 unserer Blog-Serie zur Bildklassifizierung erinnern wir uns, dass ein Modell wie Inception_V3 aus zwei Teilen besteht. Der erste findet die Komponenten (Linien, Kurven, Formen), die ein Bild enthält, und der zweite Teil identifiziert, was das Bild angesichts der darin enthaltenen Komponenten zeigt.

Wenn nur der erste Teil des Modells beibehalten wird, wird ein Vektor ausgegeben, der die im Bild enthaltenen Komponenten definiert. Wenn zwei Bilder ein ähnliches Produkt beschreiben, ist die Wahrscheinlichkeit groß, dass diese beiden Vektoren einander ähnlich sind.

Um zu berechnen, wie „ähnlich“ zwei Vektoren sind, können wir eine Metrik verwenden, die als Kosinusähnlichkeit bezeichnet wird. Angenommen, der erste Teil von Inception_V3 gibt einen Vektor X für ein Bild und einen Vektor Y für ein zweites Bild aus. Die Kosinusähnlichkeit dieser beiden Vektoren kann wie folgt berechnet werden:

  #import numpy library 
numpy als np importieren
  #Berechnen Sie das Skalarprodukt der Vektoren, dh die #Multiplikation jeder Zahl in X mit jeder Zahl in Y, gefolgt von #Ihrer Summation 
dot_product = np.dot (X, Y)
  #normalisieren Sie die Ergebnisse, um Ähnlichkeitsmaße unabhängig von der Skalierung der Vektoren zu erzielen 
norm_Y = np.linalg.norm (X)
norm_X = np.linalg.norm (Y)
cosine_similarity = dot_product / (norm_X * norm_Y)

Die Pipeline zum Erstellen eines visuellen Suchalgorithmus ist daher recht einfach: Übersetzen Sie das Bild mit dem ersten Teil von Inception_V3 in einen Vektor, berechnen Sie die Kosinusähnlichkeit zwischen diesem Vektor und den Bildern in Ihrem Katalog und geben Sie die Produkte mit dem zurück höchste Ähnlichkeit. Das ist es!

Ein Beispiel für Hockeyprodukte

Quelle: Hockeygemeinschaft

In diesem Beitrag erstellen wir einen visuellen Suchalgorithmus für Hockeyprodukte unter Verwendung der von Decathlon Canada erstellten Bildähnlichkeitsbibliothek. Um zu beginnen, klonen Sie einfach die Bibliothek an der gewünschten Stelle:

git clone https://github.com/decathloncanada/image-similarity.git 

Um einen visuellen Suchalgorithmus für Ihren eigenen Katalog zu erstellen, platzieren Sie einfach die Bilder Ihrer Produkte im Verzeichnis data / dataset /. Diese Bilder können einen beliebigen Namen haben, aber wenn Sie mehr als ein Bild eines bestimmten Produkts haben, stellen Sie sicher, dass Sie den Namen {PRODUCT_ID} _ {IMAGE_ID} .jpg haben, wobei {PRODUCT_ID} der Name oder die ID Ihres Produkts ist und { IMAGE_ID} ist der Name oder die ID des diesem Produkt zugeordneten Bildes.

Angenommen, Sie haben den folgenden Datensatz mit dem Namen “hockey_products” im Verzeichnis data / dataset /:

  Daten/ 
Datensatz /
hockey_produkte /
hockeybag1.jpg
hockeybag2.jpg
hockeybag3_1.jpg
hockeybag3_2.jpg

Die Bibliothek geht davon aus, dass Ihr Katalog aus drei verschiedenen Produkten besteht (Hockeybag1, Hockeybag2 und Hockeybag3) und dass Hockeybag3 zwei Bildern zugeordnet ist.

In unserem Fall haben wir das Bild der von Decathlon Canada verkauften Hockeyprodukte in das Verzeichnis data / dataset / gestellt. Dieser Datensatz enthält insgesamt 411 Bilder, die 32 verschiedene Hockeyprodukte beschreiben.

Unsere nächste Aufgabe ist es, für jedes Bild im Katalog den Vektor zu berechnen, der die darin enthaltenen Komponenten beschreibt. Diese Vektoren können durch Ausführen des folgenden Aufrufs berechnet werden:

  python3 main.py --task fit --dataset hockey_products --transfer_model Inception_Resnet 

In diesem Aufruf wird das Argument – dataset verwendet, um den Namen des Datensatzes anzugeben, der die Bilder Ihrer Produkte enthält, und – transfer_model gibt das Übertragungslernmodell an, das zum Berechnen der den Bildern zugeordneten Vektoren verwendet wird. Diese Vektoren werden in einer SQLite-Datenbank gespeichert, die sich im Verzeichnis data / database / befindet.

Nachdem die Vektoren für alle Produkte in Ihrem Katalog berechnet wurden, können Sie eine visuelle Suche anhand eines vom Benutzer aufgenommenen Bildes mit folgendem Aufruf ausführen:

  python main.py --task visual_search - img {PATH_TO_THE_IMG} --dataset hockey_products --transfer_model Inception_Resnet 

Dabei ist {PATH_TO_THE_IMG} der Pfad zu dem vom Benutzer aufgenommenen Bild.

Nehmen wir zum Beispiel an, ein Benutzer hat ein Bild von seinem Paar gebrauchter Hockey-Skates aufgenommen und sucht im Decathlon-Katalog nach Vorschlägen für ähnliche Produkte. Wenn Sie den visuellen Suchaufruf wie oben beschrieben ausführen, erhalten Sie das folgende Ergebnis:

Ergebnisse des visuellen Suchalgorithmus: Das Bild oben links zeigt ein von einem Benutzer aufgenommenes Gebrauchtprodukt. Die folgenden Bilder beschreiben die acht ähnlichsten Produkte aus dem Hockey-Katalog von Decathlon.

Das Bild des Paares gebrauchter Skates befindet sich in der oberen linken Ecke, während die folgenden Bilder die acht ähnlichsten Produkte im Katalog beschreiben, die vom Algorithmus gefunden wurden.

Wie wir sehen können, hat der Algorithmus erfolgreich festgestellt, dass die Hockey-Skates im Katalog die Produkte sind, die dem vom Benutzer aufgenommenen Bild am ähnlichsten sind. Die Bibliothek gab auch zuerst ein komplett schwarzes, weißes Schnürsenkelmodell zurück, das den Schlittschuhen des Benutzers sehr ähnlich war.

Wie wir in der Einleitung besprochen haben, gibt es viele zusätzliche Anwendungen für Bildähnlichkeit, die wir implementieren können. Eine dieser Anwendungen ist die Entwicklung eines artikelbasierten Empfehlungssystems, das das Thema unseres nächsten Blogposts sein wird!

Wir stellen ein!

Interessieren Sie sich für Transferlernen und die Anwendung von KI, um die Erreichbarkeit des Sports zu verbessern? Zum Glück stellen wir ein! Folgen Sie https://developers.decathlon.com/careers, um die verschiedenen aufregenden Möglichkeiten zu sehen.

Ein besonderer Dank geht an Gabriel Poulin-Lamarre von D-Wave Quantum Computing und Abdullatif Dalab von Décathlon Canada für die Kommentare und die Bewertung.