Ein neuronales Netzwerk kann eine Katze auf einem Foto identifizieren, ein Sofa finden, die Videoaufzeichnung verbessern, ein Bild von Welpen oder eine einfache Skizze zeichnen. Wir sind schon daran gewöhnt. Nachrichten über neuronale Netze erscheinen fast täglich und sind alltäglich geworden. Grid Dynamics-Unternehmen stellen die Aufgabe nicht gewöhnlich, aber schwierig - dem neuronalen Netzwerk beizubringen, eine bestimmte Schraube in einem riesigen Katalog eines Online-Shops anhand eines Fotos zu finden. Die Aufgabe ist schwieriger als eine Katze zu finden.

Das Problem des Online-Shops für Schrauben ist auf Lager. Tausende oder Zehntausende von Modellen. Jede Schraube hat ihre eigene Beschreibung und Eigenschaften, daher gibt es keine Hoffnung auf Filter. Was zu tun ist? Manuell suchen oder im SB-Warenhaus in den Regalen suchen? In beiden Fällen ist es Zeitverschwendung. Infolgedessen wird der Klient müde und hämmert einen Nagel. Um ihm zu helfen, werden wir ein neuronales Netzwerk verwenden. Wenn sie Siegel oder Sofas finden kann, lassen Sie sie etwas Nützliches tun - nimmt Schrauben und Bolzen auf. Wie Sie einem neuronalen Netzwerk beibringen, Schrauben schnell und genau für einen Benutzer
auszuwählen ,
erfahren Sie im Protokoll des Berichts von
Maria Matskevichus , die bei
Grid Dynamics mit Datenanalyse und maschinellem Lernen befasst ist.
Eine kurze Demo von dem, was passiert ist Käuferprobleme
Stellen Sie sich vor - wir haben einen Tisch gekauft, aber eine kleine Schraube ging verloren, und ein Tisch kann ohne sie nicht zusammengebaut werden. Wir gehen auf der Suche in den Online-Shop und sehen 15.000 einzigartige Positionen, von denen jede möglicherweise unsere Schraube ist.
Wir gehen zu Filtern - es gibt ungefähr 10 davon, von denen jeder 5 bis 100 Attribute hat. Wählen Sie die Art des Hutes und die Farbe: Flacher Hut - Flaches und gelbes Kupfer - Messing. Wir erhalten die Ausgabe.

Was ist das? Das haben wir nicht gesucht. Entlassen Sie die Person, die für die Auslieferung verantwortlich ist!
Nach einer Weile wählen wir dennoch 2 geeignete Tischschrauben aus.

Am einfachsten bleibt es, die Beschreibung und die Eigenschaften zu entschlüsseln. Jeder Hersteller beschreibt die Schrauben auf seine Weise. Es gibt keine spezifischen Anforderungen für die Beschreibung der Parameter eines bestimmten Modells.
Alles, was dem Kunden Schwierigkeiten bereitet. Verlorene Zeit, Nerven und technische Unterstützung, die dem Kunden hilft, das gewünschte Modell zu finden. Nachdem unser Kunde - ein großes amerikanisches Unternehmen - diese Probleme des Käufers erkannt hatte, entschied er sich, dem Kunden eine schnelle, genaue und einfache Suche nach Fotos anstelle einer langsamen und nicht immer erfolgreichen semantischen Suche anzubieten.

Implementierungsschwierigkeiten
Wir haben die Aufgabe übernommen und festgestellt, dass es mehrere Probleme gibt.
Schrauben sehen gleich aus. Schau dir die Bilder an.

Dies sind verschiedene Schrauben. Wenn Sie die Fotos umdrehen, können Sie sehen, dass das wichtige Merkmal anders ist - Kopf.

Und auf diesem Foto?

Hier sind die Modelle gleich. Die Beleuchtung ist unterschiedlich, aber auf beiden Fotos gibt es ein Schraubenmodell.
Es gibt seltene Arten, die klassifiziert werden müssen. Zum Beispiel mit "Ohren" oder einem Ring.
Mindestanforderungen für die Verwendung der Anwendung. Der Benutzer kann ein Foto mit einem beliebigen Hintergrund, mit fremden Objekten, mit Schatten und mit schlechter Beleuchtung hochladen, und die Anwendung muss das Ergebnis liefern. Eine Schraube auf weißem Hintergrund ist eine Seltenheit.
Die Anwendung sollte in Echtzeit funktionieren. Der Benutzer wartet hier und jetzt auf das Ergebnis.
Wettbewerber. Kürzlich hat Amazon - ein Konkurrent unseres Kunden - seinen
Part Finder auf den Markt gebracht . Dies ist eine Anwendung, die nach Schrauben und Bolzen auf einem Foto sucht.

Neben Amazona hatten wir zwei Start-up-Wettbewerber mit eigenen Lösungen für den Kunden. Wir mussten nicht nur Amazon, sondern auch Startups schlagen, was nicht schwierig war. Einer der Wettbewerber schlug die Idee vor, die 20 beliebtesten Schrauben zu verwenden und die
Objekterkennung darauf zu trainieren. Bei der Frage, was passieren wird, wenn die neuronalen Netze 100, 1000 oder alle 15 000 Schrauben vom Standort des Kunden abgeben, wie die Objekterkennung funktioniert und wo so viele Daten zu erhalten sind, hat der Wettbewerber keine Antwort gefunden.
Lösung
Es sollte skalierbar sein und nicht von der Anzahl der Schraubenarten und der Größe des Katalogs abhängen. Um das Problem zu lösen, haben wir beschlossen, eine Schraube als eine Reihe von Merkmalen oder Attributen zu betrachten. Jedes Attribut ist eine Reihe von Attributen.

Folgende Eigenschaften ausgewählt:
- Hutkopf (32 Attribute);
- Außenbeschichtung - Finish (15 Attribute);
- Punkt - Spitze (12 Attribute);
- Thread-Abdeckung - Thread-Abdeckung (4 Attribute).
Wir haben die Karte aller Zeichen untersucht und festgestellt, dass zur Beschreibung von 15.000 verschiedenen Schrauben nur 50 benötigt werden. Sie bestehen aus einer Kombination verschiedener Zeichen mit unterschiedlichen Attributen. Es sind 50 Schrauben und eine Münze erforderlich, um den Maßstab der Schraube auf dem Foto zu messen.
Also beschlossen sie. Wir haben uns für die Idee entschieden. Weitere Daten sind erforderlich.
Daten
Wir haben Daten vom Kunden erhalten und waren etwas verärgert. Katalogdaten - Fotografien von Objekten auf weißem Hintergrund.

Sie entsprechen jedoch nicht ganz den Daten, die der Antrag verarbeiten wird. Der Benutzer möchte einen beliebigen Hintergrund verwenden, Bilder in seiner Handfläche aufnehmen oder einen Bolzen mit den Fingern halten. Die Daten, auf denen das Netzwerk trainiert wird, stimmen nicht mit dem tatsächlichen Bild überein.
Dann beschlossen wir, dem Rat von
Richard Soker zu folgen.
Anstatt einen Monat lang eine Lehrmethode ohne Lehrer zu lernen, ist es einfacher, sich eine Woche Zeit zu nehmen, die Daten zu markieren und den Klassifikator zu trainieren.
Also haben wir viele farbige Hintergründe auf den Drucker gedruckt, diese 50 Schrauben gekauft und die Trainingsdaten auf den Hintergründen fotografiert. So haben wir alle möglichen Optionen für die Oberflächen von Tischen und Teppichen.

Nach dem Sammeln der Daten besteht der nächste Schritt darin, zu verstehen, wo sich der Bolzen auf dem Bild befindet, wenn überhaupt.
Lokalisierung
Wir haben zwei Ansätze zur Lokalisierung untersucht:
Objekterkennung und
semantische Segmentierung .
Die Objekterkennung gibt das Feld mit der minimalen Fläche um das Objekt zurück.
Die semantische Segmentierung gibt die Maske zurück. In unserem Fall ist die Maske besser geeignet. Es behält seine Form bei, entfernt den Hintergrund und überschüssige Schatten und ermöglicht es Ihnen, Schrauben besser zu klassifizieren als die Objekterkennung.

Die Aufgabe der semantischen Segmentierung besteht darin, die Wahrscheinlichkeit ihrer Zugehörigkeit zu einer Klasse für jedes Pixel zurückzugeben. Um ein solches Modell zu trainieren, sind beschriftete Daten erforderlich. Wir haben die Anwendung
„labelme“ verwendet , mit der wir die Probe markiert haben. Wir haben ungefähr tausend Masken mit einer Münze und einer Schraube.

Modell
Wir haben
U-Net genommen . Dieses Netzwerk ist bei Kaggle sehr beliebt, und wir sind es jetzt auch.

U-Net ist eine erfolgreiche Implementierung von Encoder-Decoder.
- Ein Konstruktionspfad oder Encoder . Dies ist der Teil von U-Net, der versucht, den gesamten Datensatz darzustellen, der als Vektordarstellung in einem stärker komprimierten Raum vorliegt. Sie lernt diese Zeichen und findet die wichtigsten.
- Ein expandierender Pfad oder Decoder . Versucht, eine Feature-Map zu dekodieren und zu verstehen, wo sich das Objekt im Bild befindet.
Wir haben uns für das Modell entschieden. Nun wählen wir die Verlustfunktion aus, deren Wert wir im Lernprozess minimieren werden.
Verlustfunktion
Die klassische Option für die Segmentierung ist der
Würfelkoeffizient :
Dies ist das harmonische Mittel zwischen Präzision und Rückruf. Das harmonische Mittel bedeutet, dass wir den Fehler der ersten Art und den Fehler der zweiten Art gleichermaßen abwägen. Unsere Daten sind nicht ausgewogen und dies ist für uns nicht sehr geeignet.

Es gibt immer viel Hintergrund und das Objekt selbst reicht nicht aus. Daher bietet das Modell immer eine sehr hohe Präzision und einen sehr geringen Rückruf. Um die Fehler der ersten und zweiten Art auf unterschiedliche Weise abzuwägen, haben wir uns für den
Tversky-Index entschieden :
$$ Anzeige $$ S (P, G, α, β) = \ frac {| P \ cdot G |} {| P \ cdot G | + α | P / G | + β | G / P |} $$ $$ anzeigen
Der Tversky-Index hat zwei Koeffizienten, α und β, die die beiden Fehler unterschiedlich wiegen. Wenn wir α = β = 0,5 nehmen, erhalten wir den gleichen Würfelkoeffizienten. Wenn wir andere Parameter auswählen, erhalten wir den
Jaccard-Index - eines der Maßstäbe für die Ähnlichkeit von Objekten. Für α = β = 1 ist der Tversky-Index gleich dem Jaccard-Index.
Sie können auch Fβ-Score erhalten. Für α + β = 1 entspricht der Tversky-Index dem Fβ-Score.
Um α und β auszuwählen, haben wir mehrere Experimente durchgeführt. Sie stellten die Hypothese auf, dass das
Modell für Fehler der zweiten Art härter bestraft würde . Es ist nicht so schlimm, wenn ein Modell ein Hintergrundpixel als Objektpixel klassifiziert. Wenn sich um das Objekt ein kleiner Hintergrundrahmen befindet, ist dies normal. Wenn das Modell jedoch ein Schraubenpixel als Hintergrundpixel klassifiziert - Löcher auf der Schraube erscheinen, wird es ungleichmäßig, was unsere Klassifizierung beeinträchtigt.
Daher haben wir beschlossen, den Parameter β zu erhöhen und näher an 1 und den Parameter α an 0 zu bringen.

Das Bild zeigt, dass die beste Maske mit β = 0,7 und α = 0,3 erhalten wurde. Wir haben uns entschlossen, damit aufzuhören und das Modell auf alle unsere Daten zu trainieren.
Schulung
Die Lernstrategie ist ziemlich schwierig. Da wir die Daten in persönlicher Zeit manuell markiert haben, haben wir uns für eine Funktion von U-Net entschieden. Es segmentiert jede neue Klasse auf einem neuen Kanal - fügt einen neuen Kanal hinzu und ein Objekt wird darauf lokalisiert.
Daher gab es in unserer Ausbildung kein einziges Bild, das sowohl eine Münze als auch einen Bolzen enthielt. Alle Bilder enthielten eine Klasse: 10% - Münzen, 90% - Schrauben.

Dies ermöglichte es, die Anstrengungen korrekt zu verteilen und Zeit für eine Münze zu sparen - es ist eine, aber die Form ist einfach. Wir haben leicht gelernt, es zu segmentieren, wodurch wir 90% unserer Bemühungen auf Schrauben übertragen konnten. Sie haben unterschiedliche Formen und Farben, und es ist wichtig zu lernen, wie man sie segmentiert.
Unser Netzwerk hat gelernt, auch diejenigen Instanzen zu segmentieren, die nicht in unserer Stichprobe enthalten waren. Zum Beispiel fehlten Bolzen mit ungewöhnlicher Form, aber das Modell segmentierte sie auch gut. Sie lernte, die Anzeichen von Schrauben und Bolzen zu verallgemeinern und diese für neue Daten zu verwenden, was großartig ist.

Klassifizierung
Dies ist die nächste Stufe nach der Lokalisierung des Objekts. Nur wenige Menschen trainieren Faltungs-Neuronale Netze, um Objekte zu klassifizieren. Oft verwenden sie
Transfer-Lernen . Schauen wir uns die Architektur eines Faltungsnetzwerks an und erinnern uns dann kurz daran, was Transferlernen ist.

In den frühen Schichten lernt das Netzwerk, Grenzen und Winkel zu erkennen. Später erkennt es einfache Formen: Rechtecke, Kreise, Quadrate. Je näher an der Spitze, desto mehr erkennt es die charakteristischen Merkmale der Daten, auf denen es trainiert wird. Ganz oben erkennt das Modell Klassen.
Die meisten Objekte der Welt bestehen aus einfachen Formen und haben gemeinsame Merkmale. Sie können an einem Netzwerk teilnehmen, das für eine große Datenmenge geschult ist, und diese Attribute für unsere Klassifizierung verwenden. Das Netzwerk wird an einem kleinen Datensatz ohne großen Ressourcenaufwand trainiert. Das haben wir getan.

Sobald Sie sich für die allgemeine Technologie des Transfer-Lernens entschieden haben, müssen Sie ein vorab geschultes Modell auswählen.
Modellauswahl
Unsere Anwendung arbeitet in Echtzeit. Das Modell sollte leicht und mobil sein - nur wenige Parameter haben, aber genau sein. Um diese beiden Faktoren zu berücksichtigen, haben wir ein wenig Genauigkeit zugunsten der Leichtigkeit geopfert. Aus diesem
Grund haben wir nicht das genaueste, sondern das leichteste Modell ausgewählt -
Xception .

In Xception wird anstelle der üblichen Faltung -
Faltung -
Trennbare Faltung verwendet. Daher ist Xception leichter als andere Netzwerke, beispielsweise mit VGG.

Die gewöhnliche Faltung führt sowohl eine interkanalige als auch eine interdimensionale Faltung durch. Und trennbare Faltungsanteile: zuerst interdimensionale Faltung -
Tiefenweise und dann Zwischenkanal. Die Ergebnisse kombinieren.
Xception führt eine trennbare Faltung aus, liefert zwar das gleiche gute Ergebnis wie die normale Faltung, es gibt jedoch weniger Parameter.

Wir ersetzen die Werte in den Formeln zur Berechnung der Parameter, beispielsweise für 16 Filter. Für die normale Faltung müssen Sie die Parameter siebenmal häufiger berechnen als für die trennbare Faltung. Aus diesem Grund ist Xception genauer und weniger.

Schulung
Zuerst haben wir uns entschlossen, eine Basislinie zu erstellen und das Modell im Originalbild zu trainieren. Wir hatten 4 Klassifikatoren und jeder war für ein bestimmtes Attribut verantwortlich. Das Ergebnis war unbefriedigend.

Dann trainierten sie das Modell auf der Box, die die Objekterkennung zurückgab. Die Genauigkeit für die Thread-Abdeckung wurde deutlich erhöht. Für die übrigen Klassifikatoren ist das Ergebnis jedoch ebenfalls unbefriedigend.

Dann beschlossen sie, den Klassifizierern nur den Teil der Schraube zu geben, den sie klassifizieren möchten und werden. Kopf nur Hüte geben, Tipp - nur eine Speerspitze. Dazu nahmen wir Masken, erhielten eine Kontur, um die ein Rechteck der minimalen Fläche eingekreist war, und berechneten den Drehwinkel.

Derzeit wissen wir noch nicht, auf welcher Seite sich der Schraubenkopf und die Spitze befinden. Um das herauszufinden, schnitten sie die Schachtel in zwei Hälften und schauten auf das Quadrat.

Der Bereich, der den Kopf enthält, ist immer größer als der Bereich, der die Spitze enthält. Beim Vergleich der Fläche bestimmen wir, in welchem Teil, in welchem Teil der Schraube. Es hat funktioniert, aber nicht in allen Fällen.

Wenn die Länge der Schraube mit dem Durchmesser der Kappe vergleichbar ist, wird anstelle eines Rechtecks ein Quadrat erhalten. Wenn wir es drehen, erhalten wir ein Bild wie bei Nummer 3. Das Modell klassifiziert diese Option nicht gut.
Dann nahmen wir alle langen Schrauben, berechneten die Drehwinkel für sie und bauten das flache neuronale Netzwerk des
Rotationsnetzes auf , das die Schraube nimmt und den Drehwinkel vorhersagt.

Dann wurde dieses Hilfsmodell für kleine kurze Schrauben und Bolzen verwendet. Wir haben ein gutes Ergebnis erzielt - alles funktioniert, kleine Schrauben drehen sich auch. In diesem Stadium wird der Fehler praktisch auf Null reduziert. Wir haben diese Daten genommen, die Klassifikatoren trainiert und festgestellt, dass sich die Genauigkeit für jeden der Klassifikatoren mit Ausnahme von Finish signifikant erhöht hat. Das ist großartig - wir arbeiten weiter.

Aber aus irgendeinem Grund startete Finish nicht. Wir haben die Fehler untersucht und das Bild gesehen.

Das gleiche Schraubenpaar unter verschiedenen Lichtbedingungen und verschiedenen Kameraeinstellungen unterscheidet sich in der Farbe. Dies kann nicht nur das Modell, sondern auch die Person verwirren. Grau kann rosa werden, Gelb kann orange werden. Erinnern Sie sich an das blau-goldene Kleid - die gleiche Geschichte. Die reflektierende Oberfläche der Schraube ist irreführend.
Wir haben ähnliche Fälle im Internet untersucht und chinesische Wissenschaftler gefunden, die versuchten, Autos nach Farben zu klassifizieren und das gleiche Problem für Autos hatten.

Als Lösung haben chinesische Wissenschaftler ein flaches Netzwerk geschaffen. Seine Funktion besteht aus zwei Zweigen, die am Ende verkettet sind. Diese Architektur heißt
ColorNet .

Wir haben eine Lösung für unsere Aufgabe implementiert und die Genauigkeit um fast das Zweifache erhöht. Mit solchen Ergebnissen und Modellen können Sie arbeiten und genau die Schraube aus der Tabelle im Katalog des Online-Shops suchen.

Wir hatten nur 4 Klassifikatoren für 4 Attribute, und es gibt viele andere. Sie müssen also eine Art Filter erstellen, der die Katalogdaten auf eine bestimmte Weise filtert.
Filtern
Jeder Klassifikator gibt ein Soft Label und eine Klasse zurück. Wir haben die Werte der Soft-Tags und unserer Datenbank genommen, einige
Punkte gezählt
und alle Tags für jedes Feature multipliziert.

Die Punktzahl zeigt das Vertrauen aller Klassifizierer, dass diese Kombination von Merkmalen höchstwahrscheinlich erscheint. Je höher die Punktzahl, desto wahrscheinlicher ist es, dass die Schraube aus dem Katalog und die Schraube auf dem Bild ähnlich sind.
Pipeline
Es stellte sich heraus, eine solche Anwendung.

- Eingabe : Beginnen Sie mit einem Rohbild.
- Lokalisierung : Bestimmen Sie, wo sich der Bolzen oder die Schraube befindet und wo sich die Münze befindet.
- Transformation und Rotation .
- Klassifizierung : Wir schneiden alles sorgfältig ab, klassifizieren und bestimmen die Größe.
- Filtern .
- Beenden Sie zu einer bestimmten SKU-Position.
So implementieren Sie ein komplexes Projekt
Iss den Elefanten in Teilen . Teilen Sie das große Problem in Teile.
Beschriften Sie Daten, die die Realität widerspiegeln. Haben Sie keine Angst vor Datenmarkierungen - dies ist der sicherste Weg, um schnell die maximale Qualität des Modells sicherzustellen. Datensynthesemethoden führen normalerweise zu schlechteren Ergebnissen als die Verwendung realer Daten.
Probieren Sie es aus . Bevor wir viele Modelle erstellt haben, haben wir kleine Datenblöcke genommen, sie mit unseren Händen beschriftet und die Funktionsweise jeder Hypothese getestet. Erst danach trainierten sie U-Net, Klassifikatoren, Rotation.
Das Rad nicht neu erfinden . Oft hat das Problem, mit dem Sie konfrontiert sind, bereits eine Lösung. Schauen Sie im Internet nach, lesen Sie Artikel - finden Sie etwas!
Die Geschichte unserer Visual Search-Anwendung handelt nicht nur von der Klassifizierung von Schrauben. Es geht darum, wie man ein komplexes Projekt erstellt, das keine Analoga enthält, aber selbst wenn es solche gibt, erfüllen sie nicht die Anforderungen, die wir für die Anwendung festgelegt haben.
Weitere Informationen zu Grid Dynamics-Projekten und anderen Herausforderungen für das Data Science-Team finden Sie im
Technologie-Blog des Unternehmens.
Berichte mit einer solchen Tendenz - die Verwendung von Algorithmen für maschinelles Lernen in realen Nicht-Standard-Projekten - suchen wir nur nach UseData Conf . Hier erfahren Sie mehr darüber, an welchen Bereichen wir am meisten interessiert sind.
Senden Sie Bewerbungen, wenn Sie wissen, wie man den Modellen einen Streich spielt, damit sie fliegen. Wenn Sie wissen, dass Konvergenz keine Geschwindigkeit garantiert, und bereit sind, Ihnen zu sagen, worauf es ankommt, warten wir am 16. September auf Sie.