paint-brush
Wie wir die Überprüfung von Autofotos automatisiert habenby@indrivetech
6,792
6,792

Wie wir die Überprüfung von Autofotos automatisiert haben

inDrive.Tech9m2023/07/05
Read on Terminal Reader
Read this story w/o Javascript

inDrive fordert Benutzer dazu auf, jeden Monat ein Foto von ihrem Auto zu machen. Unsere Moderatoren überprüfen die Vorher- und Nachher-Fotos manuell. Das Problem des aktuellen Ansatzes besteht darin, dass es schwieriger ist, die Anzahl der Moderatoren zu erhöhen, als die Infrastruktur zu vergrößern. Wir möchten dem Nutzer Hinweise geben, warum das bereitgestellte Foto nicht „passend“ ist.

People Mentioned

Mention Thumbnail
featured image - Wie wir die Überprüfung von Autofotos automatisiert haben
inDrive.Tech HackerNoon profile picture

In diesem Artikel erzähle ich Ihnen, wie wir den Verifizierungsprozess des Benutzerfahrzeugs automatisieren. Ich erzähle Ihnen, welche Komponenten wir verwenden und wie wir den Prozess organisieren.


Bei inDrive verwenden wir viele visuelle Inhalte. Wir sind in den unterschiedlichsten Regionen präsent, die durch unterschiedliche Denkweisen gekennzeichnet sind und in denen eine Fülle unterschiedlicher Dokumente verwendet werden: Reisepässe, Zertifikate und Fahrzeugpapiere.


Abgesehen davon gibt es noch die Fahrer selbst und ihre Fahrzeuge, mit denen man sich auseinandersetzen muss.


Wenn es um Reisekomfort und verbesserte Servicequalität für unsere Nutzer geht, sind Sicherheit und die Vermeidung unerwarteter Ereignisse von entscheidender Bedeutung. Zum Beispiel, wenn das Auto, das vorfährt, nicht das ist, das Sie gebucht haben.


Erfahren Sie, wie wir bei inDrive derzeit die regelmäßigen Fahrzeugüberprüfungen abwickeln. Sobald dies erledigt ist, überprüfen unsere Moderatoren manuell die Vorher- und Nachher-Fotos. Natürlich beinhaltet der Verifizierungsprozess auch andere Dinge, aber hier konzentrieren wir uns nur auf diesen Aspekt.


Das Problem des aktuellen Ansatzes besteht darin, dass es schwieriger ist, die Anzahl der Moderatoren zu erhöhen, als die Infrastruktur zu vergrößern. Vor allem, wenn es um den Umgang mit den persönlichen Daten der Nutzer geht.

Über die anstehende Aufgabe

Lassen Sie uns das Problem ganz einfach formulieren, als ob es sich um ein Kind handeln würde: Wir haben zwei Fotos von einem Auto – handelt es sich bei beiden um dasselbe Auto? Natürlich könnte jeder mit dieser Frage umgehen, aber die Sache wird viel komplizierter, wenn wir ein Vergleichskriterium hinzufügen.


Stellen Sie beispielsweise sicher, dass es sich nicht um einen Screenshot von einem Mobiltelefon handelt oder dass die Nummernschilder perfekt übereinstimmen.



Global kann dieses Problem auf verschiedene Arten gelöst werden: Verwendung von E2E-Modellen und Sätzen dieser Modelle.


Das E2E-Modell impliziert die Einbeziehung eines großen Modells (höchstwahrscheinlich eines neuronalen Netzwerks), das unsere Fragen basierend auf einem Bildpaar beantworten kann, z. B. „Ist es das gleiche Fahrzeug auf dem Foto oder nicht?“ oder „Stimmen die Nummernschilder überein?“ auf oder nicht?“ usw.


Das Problem bei solchen Modellen besteht darin, dass sie viele Daten zum Lernen benötigen und ihnen das Verständnis dafür fehlt, warum die Antwort so ist, wie sie ist.


Wenn wir beispielsweise einem Modell beibringen, anhand eines Fotospaars mit „Ja“/„Nein“ zu antworten, ist es nicht mehr möglich, die Gründe für die Antwort herauszufinden.


Die Nutzer werden also nicht verstehen können, was wir von ihnen wollen, und wir müssen Moderatoren einschalten.


Dieser End-to-End-Ansatz passt nicht zu uns. Wir möchten dem Benutzer Hinweise geben, warum das bereitgestellte Foto nicht „passt“: „Am besten machen Sie das Foto an einem gut beleuchteten Ort.“ „Es sieht so aus, als ob wir nicht das gesamte Auto sehen.“ das Bild“ oder „Das Kennzeichen stimmt nicht mit den bereitgestellten Informationen überein.“

Modellqualität und Basis

Es ist uns sehr wichtig, dass das Modell bei unterschiedlichen Fahrzeugen nicht mit „Ja“ antwortet. Nennen wir diese Kennzahl „FPR“ (Falsch-Positiv-Rate) und zeigen damit den Prozentsatz der „Ja“-Antworten im Vergleich zu allen negativen Beispielen (bei denen die Fahrzeuge nicht übereinstimmen).


Lassen Sie uns nun eine weitere Metrik einführen – TPR – um das Verhältnis von „Ja“-Antworten zu allen positiven Antworten zu messen.


Im Grunde reichen diese beiden Metriken bereits aus, um unsere Aufgabe bei der Optimierung des Modells zu beschreiben: Den FPR zu minimieren und sicherzustellen, dass der TPR nicht zu stark verschlechtert wird.


Wir haben den Model-Set-Ansatz übernommen. Daher können wir alle unsere Ideen zum Grundgerüst der fertigen Lösung hinzufügen (dieses Grundgerüst wird als „Grundlinie“ bezeichnet). Lassen Sie uns untersuchen, wie es aussieht, und es in Teile zerlegen.



Tatsächlich besteht es aus mehreren Modellen, die am Eingang unabhängig voneinander zwei Bilder verarbeiten und am Ausgang das Kennzeichen des Fahrzeugs und seinen Vektor ausgeben. Als Ergebnis wird auf der Grundlage der verglichenen Details eine Überprüfungsentscheidung über die beiden überprüften Fotos getroffen.


Dies ist das Grundgerüst des Algorithmus, den wir verwenden, um mehrere andere Modelle hinzuzufügen und sie in verschiedenen Knoten unseres Modells zu platzieren. Zum Beispiel bei der Beurteilung der Qualität eines Fotos, seiner Klarheit, seines Lichts und seiner Sättigung.


Manchmal müssen wir Versuche erkennen, Fotos einzusenden, die nicht echt sind. Dazu fügen wir einen Präprozessor hinzu, der das Foto auf Spoofing-Angriffe überprüft.


Bei einem solchen Ansatz ist es entscheidend, klare Produktiterationszyklen zu haben und einen guten Testdatensatz zu generieren. Wir fügen ein neues Modell hinzu, um diese beiden Faktoren zu bewerten: „Löst es das zugewiesene Problem?“ und „Wie sehr verändert es die Metriken der vorherigen Lösung?“


Lassen Sie uns nun über die Grundbausteine der Lösung sprechen.

Erkennung und Segmentierung sind alles, was Sie brauchen

Werfen wir nun einen Blick auf die Terminologie. Im Folgenden erkläre ich die Bedeutung von Begriffen wie „Begrenzungsrahmen“ und „Segmentierungsmaske“.


Ein Begrenzungsrahmen ist eine rechteckige Form, die zum Umschließen eines bestimmten Objekts von Interesse verwendet wird. Wenn wir beispielsweise das Gesicht der Katze identifizieren möchten, würden wir einen Begrenzungsrahmen definieren, indem wir ihn rot umranden. Es wird durch die Koordinaten seiner Punkte unten links und oben rechts im Bild definiert.


Unter Segmentierung versteht man die Aufgabe, jedem einzelnen Pixel in einem Eingabebild eine Klassenbezeichnung zuzuweisen. Im Rahmen unserer Diskussion haben wir die Katze isoliert, indem wir sie vom Hintergrund segmentiert haben.



In unserem Modell interessiert uns der Hintergrund des Fahrzeugs nicht, da dieser keine relevanten Informationen für die Gestaltung unserer Ziellösung liefert. Das heißt aber nicht, dass wir keine Ideen haben, wie wir unsere Modelle durch die Verwendung von Hintergründen verbessern können.


Um die Herausforderung zu bewältigen, Fahrzeuge vom Hintergrund zu trennen, nehmen wir ein Modell der YOLO-Familie (You Only Look Once) und trainieren es, Autobilder zu segmentieren. Das Problem hierbei ist, dass wir eine große Anzahl von Fotos von Benutzern haben, auf denen mehr als ein Auto zu sehen ist.


Um dieses Problem zu lösen, können wir den folgenden Ansatz anwenden:


  • Berechnen Sie den Abstand zwischen dem Schwerpunkt des Begrenzungsrahmens und der Mitte des Fotos.


  • Bestimmen Sie die Größe des Begrenzungsrahmens.


  • Sortieren Sie die Begrenzungsrahmen in aufsteigender Reihenfolge basierend auf dem Abstand von der Mitte und in absteigender Reihenfolge basierend auf der Größe des Rahmens.


  • Wählen Sie das erste Objekt in der sortierten Liste aus. Folglich erhalten wir den Begrenzungsrahmen, der der Bildmitte am nächsten liegt und gleichzeitig am größten ist.


Super, wir haben unseren ersten Input bekommen.



Der nächste Schritt besteht darin, das Kennzeichen des Fahrzeugs zu ermitteln. In fast allen Ländern befindet sich das Nummernschild auf der Vorderseite. Die seltenen Fälle, in denen sich Kfz-Kennzeichen an ungewöhnlichen Orten befinden, werden in diesem Artikel nicht behandelt.


Der gebräuchlichste Ansatz zur Ermittlung des Kfz-Kennzeichens besteht darin, den Begrenzungsrahmen zu erkennen und OCR auf den resultierenden Patch anzuwenden.


Aber wie unsere Experimente gezeigt haben, ist OCR viel weniger effektiv (und dauert bei manchen Modellen länger), wenn das Kennzeichen des Fahrzeugs nicht parallel zum Horizont verläuft.


Dies ist besonders relevant für unsere Daten, bei denen wir Fahrer bitten, Fotos aus einem bestimmten Winkel aufzunehmen.



Die Lösung, für die wir uns entschieden haben, bestand darin, die Zahl zu segmentieren und dann die erhaltene Konturlinie zu glätten. In unserem Fall wurde die Segmentierungsaufgabe ähnlich angegangen wie die Segmentierung von Fahrzeugen, mit folgendem Ergebnis:



Als nächstes haben wir mit der Maske eine Konturlinie gezeichnet und ConvexHull angewendet, um sie zu glätten. Dieser einfache Algorithmus glättet (begradigt) die Konkavitäten unserer Konturlinie und macht sie gerader. Dies kann als eine geringere Anzahl von Winkeln in einem Konturpolygon beschrieben werden.


In einer idealen Welt würden wir mit dieser Operation ein durch vier Punkte definiertes Rechteck erhalten.



Sobald wir die Ränder ausgerichtet haben, wiederholen wir die gleiche Übung mit der Perspektive, sodass die Registrierungsnummer glatt, gut dargestellt und deutlich sichtbar ist. Dieser Ansatz ist besonders hilfreich, wenn ein Auto sehr stark aus einem Winkel fotografiert wird, bei dem das Nummernschild kaum sichtbar ist.


Was ist eine Perspektivkorrektur? Ich erinnere mich aus meinem Algebra-Kurs, wie eine Rotationsmatrix funktioniert. Wenn Sie ein Quadrat im kartesischen Koordinatensystem nehmen und jede Koordinate mit einer Rotationsmatrix von 30 Grad multiplizieren, wird Ihr Quadrat im neuen Koordinatensystem um 30 Grad gedreht.



Hier beschäftigen wir uns mit einer ähnlichen Aufgabe: Nehmen wir die Konturlinie und verschieben wir alle Punkte in das neue Koordinatensystem. Das Problem besteht darin, eine geeignete Transformationsmatrix zu finden.


Da alle diese Algorithmen bereits gut etabliert sind, müssen wir nur noch sicherstellen, dass sie für die jeweilige Aufgabe richtig konfiguriert sind.



Das Ergebnis war einfach großartig. Dadurch erhöhte sich der TPR um fast 15 Prozentpunkte. Als Nächstes wenden wir eine leichte, hochwertige OCR-Software an, beispielsweise die PARSeq-Architektur.

Auto-Encoder

Dies ist derzeit die neueste neuronale Netzwerktechnologie zur Verarbeitung von Fahrzeugfotos. Einbettungen sind eine weit verbreitete Technik in verschiedenen Bereichen des maschinellen Lernens, einschließlich Suche, Empfehlungen und Datenkomprimierung.


Im Rahmen unserer Aufgabe werden Einbettungen eingesetzt, um die Ähnlichkeit zwischen Fahrzeugen zu beurteilen.


Schauen wir uns ein Beispiel an, bei dem ich mein Auto zuerst von der rechten Seite und dann von der linken Seite fotografiert habe. Jetzt kann ich die Einbettungen (Vektoren) für diese Bilder berechnen. Wenn diese Vektoren räumlich nahe beieinander liegen, deutet dies darauf hin, dass es sich um dasselbe Fahrzeug handelt.


Aber Einbettungen bieten eine weitere nützliche Eigenschaft, die im Produkt verwendet werden kann: Wenn Ihr Einbettungsmodell gut funktioniert, können Sie unter den Einbettungsbeispielen nach dem suchen, was am nächsten kommt. Beispielsweise um nicht eindeutige Fahrzeuge im System zu finden.


Beim Training unseres Einbettungsmodells mithilfe von InDrive-Daten haben wir sorgfältige Vorsichtsmaßnahmen getroffen. Wir haben sorgfältig alle personenbezogenen Daten aus den Fotos entfernt und sichergestellt, dass der Datensatz normalisiert wurde und Bilder aus allen Ländern, in denen wir tätig sind, und mit unterschiedlichen Qualitätsstufen umfasst.


Dieser Ansatz zielt darauf ab, die Diskriminierung von Personen zu verhindern, die möglicherweise keinen Zugang zu teuren Smartphones für die Aufnahme hochwertiger Fotos haben.


Folglich wurde ein nach Fahrzeugmarke und Marke gruppierter Datensatz erhalten. Nach mehreren Versuchen wurde uns klar, dass wir vorerst auf einen Farbvergleich der Fahrzeuge verzichten müssen.


Bei der Auswahl der Architektur für unser Modell suchten wir nach einem Rückgrat, das ein Gleichgewicht zwischen Leistung und Recheneffizienz schafft. Es war wichtig, die Verwendung eines übermäßig großen Backbones zu vermeiden, da dies die Grundlaufzeit erheblich verlangsamen könnte.


Nach sorgfältiger Überlegung haben wir uns fürefficientnet_b2 als unsere Backbone-Architektur entschieden, ergänzt durch die Nutzung des Additive Angular Margin Loss für maschinelle Lernzwecke.


Das Ziel unseres Modells besteht darin, Vektordarstellungen zu erlernen, bei denen Fahrzeuge derselben Marke und desselben Modells, wie beispielsweise alle Audi A4, im Vektorraum nahe beieinander positioniert sind.


Im Gegensatz dazu wären Audi A5 etwas weiter entfernt von Audi A4 positioniert, aber immer noch näher als beispielsweise ein Toyota Camry.


Schauen wir uns nun einige Beispiele für Fahrzeugvergleiche an:



Oben haben wir zwei identische Autos, unten zwei verschiedene. Schauen wir uns die Ähnlichkeitswerte noch einmal an: Das obere Paar hat einen Wert von 0,989, während das untere Paar einen Wert von 0,697 hat. Durch die Festlegung eines Schwellenwerts von 0,98 können wir Fahrzeuge als identisch einstufen.


Es ist jedoch wichtig zu beachten, dass unser Modell noch nicht einwandfrei funktioniert. Wir haben eine Voreingenommenheit in Bezug auf den betreffenden Faktor:




Das Modell liefert ein Ergebnis von 0,751, wobei wir für verschiedene Fahrzeuge idealerweise einen Wert nahe Null anstreben.


Das Hauptproblem ergibt sich hier aus dem Training unseres Modells anhand von Datensätzen, die sich hauptsächlich auf Fahrzeugmodelle und -marken konzentrieren. Folglich ist das Modell in der Lage, zwischen verschiedenen Fahrzeugen zu unterscheiden, es hat jedoch Schwierigkeiten, Unterschiede innerhalb von Fahrzeugklassen zu bewerten.


Das zweite Problem, auf das wir gestoßen sind, besteht darin, dass das Fahrzeug möglicherweise aus verschiedenen Winkeln angezeigt wird, was sich aufgrund des begrenzten Datensatzes negativ auf die Qualität unserer Einbettungen auswirkt.


Im ersten Schritt fügen wir auf Kundenseite Masken hinzu und weisen den Fahrer darauf hin, wie er ein Foto von seinem Auto machen soll. Der zweite Schritt besteht darin, verschiedene Teile des Fahrzeugs zu erkennen, um es im Raum zu positionieren und seine Rotation abzuschätzen.



Hier können viele Heuristiken entwickelt werden, um den richtigen Drehwinkel zu wählen. Und was am wichtigsten ist: Diese Modelle können später zur Bewertung des Fahrzeugzustands wiederverwendet werden. Aber das ist eine Geschichte für ein anderes Mal.


Gepostet von Ilya Kaftanov .