Wie wir einen Empfehlungsdienst für die Auswahl von Kleidung in neuronalen Netzen erstellt haben

Bild

In diesem Artikel möchte ich darüber sprechen, wie wir aus einem Foto ein Suchsystem für ähnliche Kleidung (genauer gesagt Kleidung, Schuhe und Taschen) erstellt haben. Das heißt, geschäftlich ausgedrückt, ein Empfehlungsdienst, der auf neuronalen Netzen basiert.

Wie bei den meisten modernen IT-Lösungen können Sie die Entwicklung unseres Systems mit der Baugruppe des Lego-Designers vergleichen, wenn wir viele kleine Teile und Anweisungen entnehmen und daraus ein fertiges Modell erstellen. Hier ist die Anleitung: Welche Teile zu nehmen sind und wie sie anzuwenden sind, damit Ihre GPU ähnliche Produkte aus einem Foto auswählen kann - Sie finden sie in diesem Artikel.

Aus welchen Teilen besteht unser System:

  • Detektor und Klassifizierer von Kleidung, Schuhen und Taschen auf Bildern;
  • Crawler, Indexer oder Arbeitsmodul für elektronische Kataloge von Geschäften;
  • ähnliches Bildsuchmodul;
  • JSON-API für die bequeme Interaktion mit jedem Gerät und Dienst;
  • Weboberfläche oder mobile Anwendung zum Anzeigen der Ergebnisse.

Am Ende des Artikels werden alle „Rechen“, auf die wir während der Entwicklung getreten sind, und Empfehlungen zu deren Neutralisierung beschrieben.

Aufgabenstellung und Erstellung von Rubrikatoren


Die Aufgabe und der Hauptanwendungsfall des Systems klingt recht einfach und klar:

  • der Benutzer übermittelt dem Eingang (beispielsweise über eine mobile Anwendung) ein Foto, auf dem sich Kleidungsstücke und / oder Taschen und / oder Schuhe befinden;
  • Das System erkennt alle diese Elemente.
  • findet für jeden von ihnen die ähnlichsten (relevanten) Produkte in echten Online-Shops;
  • Bietet dem Benutzer die Möglichkeit, eine bestimmte Seite des Produkts zum Kauf aufzurufen.

Einfach ausgedrückt, das Ziel unseres Systems ist es, die berühmte Frage zu beantworten: "Haben Sie dasselbe, nur mit Perlmuttknöpfen?"

Bevor Sie in den Pool des Kodierens, Markierens und Lernens neuronaler Netze vordringen, müssen Sie die Kategorien, die sich in Ihrem System befinden, dh die Kategorien, die vom neuronalen Netz erkannt werden, ganz klar definieren. Es ist wichtig zu verstehen, dass je breiter und detaillierter die Liste der Kategorien ist, desto universeller ist sie, da eine große Anzahl von schmalen kleinen Kategorien wie Minikleid, Midikleid, Maxikleid immer mit einem Tastendruck zu einer Typenkategorie zusammengefasst werden kann. ABER NICHT umgekehrt. Mit anderen Worten, die Rubrik muss zu Beginn des Projekts gut durchdacht und kompiliert sein, damit später nicht dreimal dieselbe Arbeit wiederholt wird. Wir haben eine Rubrik zusammengestellt, die auf mehreren großen Läden wie Lamoda.ru, Amazon.com basiert, und versucht, sie einerseits so breit wie möglich zu gestalten. Auf der anderen Seite ist es so vielseitig wie möglich, so dass es in Zukunft einfacher ist, die Detektorkategorien mit den Kategorien verschiedener Online-Shops zu verknüpfen (ich werde im Abschnitt Crawler und Indexer mehr darüber sprechen, wie dieser Link hergestellt wird). Hier ist ein Beispiel dafür, was passiert ist.

Bild
Beispiel für Kategorien von Rubriken

In unserem Katalog gibt es derzeit nur 205 Kategorien: Damenbekleidung, Herrenbekleidung, Damenschuhe, Herrenschuhe, Taschen, Kleidung für Neugeborene. Die Vollversion unseres Klassifikators finden Sie hier .

Indexer oder Modul der Arbeit mit elektronischen Katalogen von Geschäften


Um in Zukunft nach ähnlichen Produkten suchen zu können, müssen wir eine umfassende Basis für das schaffen, wonach wir suchen. Nach unserer Erfahrung hängt die Qualität der Suche nach ähnlichen Bildern direkt von der Größe der Suchbasis ab, die mindestens 100.000 Bilder und besser als 1 Million Bilder überschreiten sollte. Wenn Sie Ihrer Datenbank 1-2 kleine Online-Shops hinzufügen, erhalten Sie höchstwahrscheinlich keine beeindruckenden Ergebnisse, da in 80% der Fälle nichts wirklich mit dem gewünschten Artikel in Ihrem Katalog übereinstimmt.

Um eine große Bilddatenbank zu erstellen, müssen Sie Kataloge verschiedener Online-Shops verarbeiten. Dazu gehören:

  • Zuerst müssen Sie XML-Feeds von Online-Shops suchen. Normalerweise können Sie sie entweder im Internet frei verfügbar finden oder indem Sie sie vom Store selbst oder in verschiedenen Aggregatoren wie Admitad anfordern.
  • Der Feed wird von einem speziellen Programm verarbeitet (analysiert). Ein Crawler lädt alle Bilder aus dem Feed herunter, fügt sie der Festplatte hinzu (genauer gesagt dem Netzwerkspeicher, mit dem Ihr Server verbunden ist) und schreibt alle Metainformationen zu den Waren in die Datenbank.
  • Dann startet ein weiterer Prozess - ein Indexer, der binäre 128-dimensionale Merkmalsvektoren für jedes Bild berechnet. Crawler und Indexer können in einem Modul oder Programm kombiniert werden. In der Vergangenheit hatten wir jedoch unterschiedliche Prozesse. Dies lag hauptsächlich an der Tatsache, dass wir anfänglich Deskriptoren (Hashes) für jedes auf einer großen Flotte von Maschinen verteilte Bild berechnet haben, da dies ein sehr ressourcenintensiver Prozess war. Wenn Sie nur mit neuronalen Netzen arbeiten, reicht die erste Maschine mit der GPU aus.
  • binäre Vektoren werden in die Datenbank geschrieben, alle Prozesse sind abgeschlossen und voila - Ihre Produktdatenbank ist für die weitere Suche bereit;
  • Ein kleiner Trick bleibt jedoch: Da in allen Geschäften unterschiedliche Kataloge mit unterschiedlichen Kategorien gespeichert sind, müssen Sie die Kategorien aller in Ihrer Datenbank enthaltenen Feeds mit den Detektorkategorien (genauer gesagt dem Klassifikator) von Waren vergleichen. Dies wird als Mapping-Prozess bezeichnet. Dies ist eine manuelle, aber sehr nützliche Routine, bei der der Bediener beim manuellen Bearbeiten einer regulären XML-Datei die Kategorien der Feeds in der Datenbank mit den Kategorien des Detektors vergleicht. Folgendes kommt heraus:

Bild
Beispiel für eine Kategoriezuordnungsdatei: Kategorisierungsmodul für Katalogkategorien

Erkennung und Klassifizierung


Um etwas zu finden, das dem entspricht, was unser Auge auf dem Foto gefunden hat, müssen wir dieses „Etwas“ erkennen (d. H. Das Objekt lokalisieren und auswählen). Bei der Entwicklung des Detektors haben wir einen langen Weg zurückgelegt, angefangen beim Erlernen der OpenCV-Kaskaden, die bei dieser Aufgabe überhaupt nicht funktioniert haben, bis hin zur modernen R-FCN- Erkennung und -Klassifizierungstechnologie und zum Klassifikator auf der Grundlage des neuronalen ResNet- Netzwerks .

Wir haben alle möglichen Bilder aus dem Internet als Daten für Schulungen und Tests verwendet (sogenannte Schulungs- und Testmuster):

  • Google-Suche / Yandex-Bilder;
  • mit Tags versehene Datensätze von Drittanbietern;
  • soziale Netzwerke;
  • Modemagazinseiten;
  • Internet-Shops von Kleidung, Schuhen, Taschen.

Das Markup wurde mit einem Samopisny-Tool durchgeführt, das Ergebnis des Markups waren Sätze von Bildern und * .seg-Dateien, in denen die Koordinaten der Objekte und Klassenbeschriftungen für sie gespeichert sind. Im Durchschnitt wurden 100 bis 200 Bilder pro Kategorie gekennzeichnet, die Gesamtzahl der Bilder in 205 Klassen betrug 65.000.

Nachdem die Schulungs- und Testmuster fertig sind, haben wir ein Double-Check-Markup durchgeführt, bei dem alle Bilder einem anderen Bediener übergeben wurden. Dies ermöglichte es, eine große Anzahl von Fehlern herauszufiltern, die die Trainingsqualität des neuronalen Netzwerks, dh des Detektors und des Klassifikators, stark beeinträchtigten. Dann fangen wir an, das neuronale Netzwerk mit Standardmitteln zu trainieren und "entfernen" den nächsten Schnappschuss des neuronalen Netzwerks "mit der Hitze der Hitze" in ein paar Tagen. Im Durchschnitt beträgt die Einarbeitungszeit des Detektors und Klassifikators bei einem Datenvolumen von 65.000 Bildern pro GPU der Bestellung Titan X ca. 3 Tage.

Das fertige neuronale Netzwerk muss irgendwie auf Qualität überprüft werden, das heißt, um zu bewerten, ob die aktuelle Version des Netzwerks besser als die vorherige geworden ist und wie viel. Wie wir es gemacht haben:

  • Das Testmuster bestand aus 12.000 Bildern und war genauso beschriftet wie das Trainingsmuster.
  • Wir haben ein kleines Tool geschrieben, das das gesamte Testmuster durch den Detektor lief und eine Tabelle dieses Typs erstellte (die Vollversion der Tabelle ist als Referenz verfügbar ).
  • Diese Tabelle wird Excel auf einer neuen Registerkarte hinzugefügt und manuell oder mithilfe der integrierten Excel-Formeln mit der vorherigen Tabelle verglichen.
  • Am Ausgang erhalten wir die Gesamt-TPR / FPR-Indikatoren des Detektors und Klassifikators im gesamten System in und für jede Kategorie separat.

Bild
Ein Beispiel eines Tabellenberichts über die Qualität des Detektors und Klassifikators

Ähnliches Bildsuchmodul


Nachdem wir die Kleidungsstücke auf dem Foto entdeckt haben, starten wir einen Mechanismus zum Suchen nach ähnlichen Bildern. So funktioniert es:

  • Für alle abgeschnittenen Bildfragmente (erkannte Güter) werden 128-Bit-Binärmerkmalsvektoren des neuronalen Netzwerks in Form und Farbe berechnet (aus denen sie aus den unten stehenden Vektoren stammen).
  • Die gleichen Vektoren, die zuvor bei der Indexierung für alle in der Datenbank gespeicherten Bilder von Waren berechnet wurden, sind bereits in den Arbeitsspeicher des Computers geladen (da für die Suche nach ähnlichen Bildern eine große Anzahl von Suchvorgängen und paarweisen Vergleichen erforderlich ist, wurde die gesamte Datenbank gleichzeitig in den Speicher geladen, wodurch eine Vergrößerung möglich wurde die Suchgeschwindigkeit ist Dutzende Male, während die Basis von ungefähr 100.000 Produkten nicht mehr als 2-3 GB RAM (RAM = 2) ansteigt;
  • Aus der Benutzeroberfläche oder aus fest codierten Eigenschaften stammen Suchkoeffizienten für diese Kategorie, z. B. aus der Kategorie „Kleid“, die wir mehr in Farbe als in Form suchen (z. B. 8-zu-2-Suche nach Farbe), und aus der Kategorie „Absatzschuhe“, die wir suchen 1-zu-1-Formfarbe, da hier Form und Farbe gleichermaßen wichtig sind;
  • dann werden die Vektoren für die Töpfe (Fragmente) aus dem Eingangsbild paarweise mit dem Bild von der Basis verglichen, wobei die Koeffizienten berücksichtigt werden (der Hamming-Abstand zwischen den Vektoren wird verglichen);
  • Infolgedessen wird für jedes ausgeschnittene Element eine Reihe ähnlicher Produkte aus der Datenbank gebildet, und jedem Element wird ein Gewicht zugewiesen (unter Verwendung einer einfachen Formel unter Berücksichtigung der Normalisierung, so dass alle Gewichte im Bereich von 0 bis 1 liegen), um die Ausgabe an die Schnittstelle sowie weitere zu ermöglichen Sortieren;
  • Eine Reihe ähnlicher Produkte wird in der Oberfläche über die Web-JSON-API angezeigt.

Neuronale Netze zur Bildung von Vektoren neuronaler Netze in Form und Farbe werden wie folgt gelehrt.

  1. Um das neuronale Netzwerk in Form zu lernen, nehmen wir alle markierten Bilder, schneiden die Fragmente im Markup aus und verteilen sie in Ordnern entsprechend der Klasse: dh alle Pullover in einem Ordner, alle T-Shirts im anderen und alle Schuhe mit hohen Absätzen im dritten usw. d. Als nächstes trainieren wir einen gewöhnlichen Klassifikator basierend auf diesem Beispiel. Auf diese Weise „erklären“ wir dem neuronalen Netzwerk, wie es die Form eines Objekts versteht.
  2. Um ein neuronales Netzwerk in Farbe zu lernen, nehmen wir alle markierten Bilder, schneiden die Fragmente durch Markieren aus und verteilen sie in Ordnern entsprechend der Farbe: Das heißt, wir legen alle T-Shirts, Schuhe, Taschen usw. in den Ordner „Grün“. Grüne Farbe (im Allgemeinen sammeln sich am Ende alle Objekte mit grüner Farbe an), im Ordner "Gestrippt" legen wir alle Dinge in einen Streifen und im Ordner "Rot-Weiß" alle roten und weißen Dinge. Als nächstes trainieren wir einen separaten Klassifikator für diese Klassen, so als ob das neuronale Netzwerk sein Verständnis der Farbe eines Dings „erklären“ würde.

Bild
Ein Beispiel für das Markieren von Bildern nach Farbe zum Erhalten von Merkmalsvektoren für neuronale Netze nach Farbe.

Interessanterweise funktioniert diese Technologie auch auf schwierigen Hintergründen, wenn Fragmente von Dingen nicht deutlich entlang der Kontur (Maske) ausgeschnitten werden, sondern entlang eines rechteckigen Rahmens, der vom Stripper bestimmt wurde.

Die Suche nach ähnlichen wird auf der Grundlage des Extrahierens von binären Merkmalsvektoren aus dem neuronalen Netz auf folgende Weise durchgeführt: Die Ausgabe der vorletzten Schicht wird genommen, komprimiert, normalisiert und binärisiert. In unserer Arbeit haben wir bis zu einem 128-Bit-Vektor komprimiert. Sie können ein wenig anders, zum Beispiel tun , wie durch Yahoo «beschrieben Tief das Erlernen von Binary Hash - Codes für die schnelle Bildsuche », aber die Essenz aller Algorithmen über eine - ähnliche Bilder gesucht werden , indem die Eigenschaften zu vergleichen, die in den Schichten des neuronalen Netzes arbeitet.

Als Technologie für die Suche nach ähnlichen Bildern verwendeten wir zunächst Hashes oder Bilddeskriptoren, die auf bestimmten mathematischen Algorithmen basieren (genauer berechnet), z. B. dem Sobel-Operator (oder Kontur-Hash), dem SIFT-Algorithmus (oder einzelnen Punkten), der Erstellung eines Histogramms oder einem Vergleich der Anzahl der Winkel im Bild . Diese Technologie funktionierte und ergab ein mehr oder weniger gesundes Ergebnis, aber nichts im Vergleich zu der Technologie, nach ähnlichen Bildern zu suchen, basierend auf den Eigenschaften, die durch das neuronale Netzwerk der Hashes ausgewählt wurden. Wenn Sie versuchen, den Unterschied in zwei Worten zu erklären, ist der Hash-basierte Bildvergleichsalgorithmus ein „Taschenrechner“, der so konfiguriert wurde, dass er Bilder mithilfe einer Formel vergleicht und kontinuierlich funktioniert. Ein Vergleich mit Hilfe von Zeichen aus einem neuronalen Netz ist "künstliche Intelligenz", von einer Person geschult, um eine bestimmte Aufgabe auf eine bestimmte Weise zu lösen. Wir können ein so unhöfliches Beispiel nennen: Wenn Sie mit einem schwarz-weiß gestreiften Pullover nach Hashes suchen, werden Sie mit größerer Wahrscheinlichkeit alle schwarz-weißen Dinge als ähnlich empfinden. Und wenn Sie über ein neuronales Netzwerk suchen, dann:

  • an den ersten Stellen finden Sie alle Pullover mit schwarzen und weißen Streifen,
  • dann alle schwarzen und weißen pullover
  • und dann alle gestreiften Pullover.

JSON-API für die einfache Interaktion mit jedem Gerät und Dienst


Wir haben eine einfache und bequeme WEB-JSON-API für die Kommunikation unseres Systems mit beliebigen Geräten und Systemen erstellt. Dies ist natürlich keine Innovation, sondern ein guter, starker Entwicklungsstandard.

Weboberfläche oder mobile Anwendung zum Anzeigen der Ergebnisse


Um die Ergebnisse visuell zu überprüfen und den Kunden das System zu demonstrieren, haben wir einfache Schnittstellen entwickelt:


Fehler, die im Projekt gemacht wurden


  • Zunächst ist es notwendig, die Aufgabe klarer zu definieren und anhand der Aufgabe Fotos zum Markieren auszuwählen. Wenn Sie nach UGC-Fotos (User Generated Content) suchen müssen, ist dies ein Fall und ein Markup-Beispiel. Wenn Sie nach Fotos aus Hochglanzmagazinen suchen müssen - dies ist ein anderer Fall, und wenn Sie nach Fotos suchen müssen, bei denen sich ein großes Objekt auf einem weißen Hintergrund befindet - ist dies eine separate Geschichte und ein völlig anderes Beispiel. Wir haben das alles in einem Stapel gemischt, was sich auf die Qualität des Detektors und des Klassifikators auswirkte.
  • Auf Fotos müssen Sie immer ALLE Objekte markieren, zumindest weil diese Ihrer Aufgabe zumindest irgendwie entsprechen. Wenn Sie beispielsweise eine ähnliche Auswahl an Kleidungsstücken auswählen, müssen Sie sofort alle Accessoires (Perlen, Brillen, Armbänder usw.) und den Kopf markieren Kopfbedeckungen usw. Denn jetzt, wo wir ein riesiges Trainingsset haben, müssen wir ALLE Fotos neu zuweisen, um eine weitere Kategorie hinzuzufügen, und dies ist eine sehr umfangreiche Arbeit.
  • Die Erkennung erfolgt wahrscheinlich am besten über das Maskennetzwerk, der Übergang zu Mask-CNN und eine moderne Lösung auf Basis von Detectron ist eine der Richtungen für die Entwicklung des Systems.
  • Es wäre schön, wenn Sie sofort entscheiden würden, wie Sie die Qualität der Auswahl ähnlicher Bilder bestimmen wollen - es gibt zwei Methoden: "mit dem Auge" und dies ist die einfachste und billigste Methode und die zweite - "wissenschaftliche" Methode, wenn Sie Daten von "Experten" (Personen) sammeln welche Ihren Suchalgorithmus ähnlich testen) und auf Basis dieser Daten ein Testmuster und einen Katalog für die Suche nach ähnlichen Bildern bilden. Diese Methode ist theoretisch gut und sieht (für Sie und Ihre Kunden) ziemlich überzeugend aus, in der Praxis ist ihre Implementierung jedoch schwierig und recht teuer.

Fazit und zukünftige Entwicklungspläne


Diese Technologie ist bereits einsatzbereit und fungiert nun bei einem unserer Kunden im Onlineshop als Empfehlungsservice. Vor kurzem haben wir begonnen, ein ähnliches System in einer anderen Branche zu entwickeln (das heißt, wir arbeiten jetzt mit anderen Warentypen).

Von den nächsten Plänen aus: Übertragung des Netzwerks auf Mask-CNN sowie Neukennzeichnung und zusätzliche Bildkennzeichnung, um die Qualität des Detektors und Klassifikators zu verbessern.

Abschließend möchte ich sagen, dass eine solche Technologie und neuronale Netze nach unseren Gefühlen im Allgemeinen in der Lage sind, bis zu 80% der komplexen und hochintelligenten Aufgaben zu lösen, mit denen sich unser Gehirn täglich befasst. Die Frage ist nur, wer als Erster diese Technologie einsetzt und einen Menschen von Routinearbeiten entlastet, wodurch er Raum für Kreativität und Entwicklung erhält, was unserer Meinung nach das höchste Ziel des Menschen ist!

Referenzliste



Jetzt auch beliebt: