Verspottend genaue, schnelle und leichte Barcode-Suche durch semantische Segmentierung

Objekte in Bildern suchen? Mit einem Trainingsmuster und einem Mindestmaß an Kenntnissen über neuronale Netze kann jeder Schüler heute eine Lösung mit einer bestimmten Genauigkeit erhalten. Die meisten neuronalen Netze, die zur Lösung dieses Problems verwendet werden, sind jedoch ziemlich tief und erfordern daher viele Daten für das Training. Sie arbeiten im Inferenzstadium relativ langsam (insbesondere wenn keine GPU auf dem Gerät vorhanden ist), wiegen viel und sind ziemlich energieintensiv. All dies kann in bestimmten Fällen sehr kritisch sein, vor allem für mobile Anwendungen.


Barcodes sind Objekte mit einer ziemlich einfachen Struktur. Im Laufe der Forschung konnten wir mit einem relativ originellen Ansatz sehr einfach (wir schlagen den Stand der Technik) und schnell genug (Echtzeit auf einer durchschnittlichen CPU) nach solchen einfachen Objekten suchen. Außerdem ist unser Detektor mit nur 30.000 Gewichten sehr leicht. Wir werden in diesem Artikel über die Ergebnisse unserer Forschung sprechen.


Bevor Sie jedoch über die Lösung sprechen, lohnt es sich, ein wenig in den Themenbereich einzutauchen, und vielleicht lohnt es sich, mit den Barcodes zu beginnen.


Was ist ein Barcode und warum danach suchen?


Barcodes ist ein generischer Name für eine Gruppe maschinenlesbarer Datenformate. Sie haben wahrscheinlich schon von Barcodes und QR-Codes gehört - dies sind nur Sonderfälle von Barcodes. In der modernen Welt finden sie sich auf Tickets, auf Waren in Geschäften, in offiziellen Dokumenten und an vielen anderen Orten.



Barcodes werden normalerweise in eindimensionale, durch schwarze und weiße Streifen dargestellte und zweidimensionale Barcodes unterteilt, die aus kleinen quadratischen oder rechteckigen Blöcken bestehen. Wie Sie in der Abbildung sehen können, sind sich die verschiedenen Typen im Allgemeinen sehr ähnlich.


Die Komplexität kann durch einige Arten von Barcodes dargestellt werden, für die keine Länge angegeben ist. Solche Barcodes können beliebig lang und gleichzeitig sehr dünn sein.



Das obige Beispiel ist künstlich, aber Barcodes mit ähnlichen Anteilen finden sich in realen Dokumenten, insbesondere in Rechnungen.


Und da es sich um maschinenlesbare Formate handelt, sollten sie von der Hardware relativ leicht erkannt werden können. Der erste Schritt auf dem Weg zur Erkennung ist jedoch die Suche. In diesem Artikel wird darauf eingegangen.


Es ist anzumerken, dass Laserscanner und viele Anwendungen die aktive Teilnahme einer Person implizieren - es ist notwendig, die Kamera / den Scanner deutlich auf den Barcode zu richten, damit er erkannt wird. In diesem Fall verschwindet die Notwendigkeit einer Suche natürlich. In diesem Szenario sind Benutzer jedoch gezwungen, zusätzliche Anstrengungen zu unternehmen, was nicht gut ist. Dieser Ansatz erlaubt auch nicht die Erkennung mehrerer Objekte im Bild, die auf nur eines beschränkt sind.


Erklärung des Problems und Qualitätsmetriken


Was möchten wir vom erstellten Barcode-Detektor?


  1. Das Auffinden aller Barcodes im Bild ist genau genug *
  2. Finden Sie lange und sehr schmale Barcodes
  3. Echtzeit auf CPU

* Es wird vorgeschlagen, das f-Maß für Objekte mit einem Schwellenwert von IoU = 0,5 als Hauptmetrik für die Genauigkeit zu verwenden. Wir werden uns auch mit Präzision, Rückruf und Erkennungsrate befassen.


Formale Definition von Metriken

Zunächst stellen wir das Konzept der IoU - Intersection over Union (auch als Jaccard Index bekannt) vor. Wahr haben ( G) und vorhergesagt ( F) Die Maske des Objekts, IoU, wird als Schnittfläche geteilt durch die Fläche der Vereinigung berechnet.

J(G,F)= frac|G capF||G cupF|



Es ist leicht zu erkennen, dass IoU Werte von 0 bis 1 annimmt. Basierend auf diesem Maß führen wir nun die Konzepte von Präzision, Rückruf, f-Maß und Erkennungsrate ein.


Es sollen N Objekte in der Probe sein. Wir setzen den Schwellenwert IoU gleich einer festen Zahl t(z.B. 0,5). Für ein Objekt Gund Erkennung Fglaube das wenn J(G,F) getwurde das Objekt gefunden (1), andernfalls glauben wir, dass das Objekt nicht gefunden wurde (0). Dann Rückruf(t)definiert als der Anteil der gefundenen Beispielobjekte, Genauigkeit(t)- der Anteil der Erkennungen, die mindestens einem Probenobjekt entsprechen. Das f-Maß wird standardmäßig als harmonisches Mittel definiert 2Genauigkeit(t)Rückruf(t)/(Genauigkeit(t)+Rückruf(t)).


Es bleibt zu verstehen, was eine Erkennungsrate ist. Es sollen M Bilder mit Objekten im Beispiel sein. Wir berechnen die IoU zwischen den wahren und vorhergesagten Masken im Bild und schneiden auf ähnliche Weise die Schwelle des Bildes ab. Die Erkennungsrate ist der Bruchteil der Bilder, um den die Gesamt-IoU aller wahren Objekte mit der Gesamt-IoU aller vorhergesagten Objekte größer als ein gegebener Schwellenwert t ist.


In früheren Studien (zum Nachweis von Barcodes) ist es üblich, die Erkennungsrate zur Bewertung der Qualität zu verwenden. Betrachten wir jedoch diese Situation - es gibt ein sehr großes und ein sehr kleines Objekt im Bild, aber der Detektor hat große und keine kleinen gefunden. In diesem Fall signalisiert die Erkennungsrate nur dann einen Fehler, wenn der Schwellenwert sehr groß ist. tin der Nähe von 1. während Rückrufwird für beliebige Schwellenwerte nicht mehr als 0,5 sein tDas heißt, für ein solches Beispiel kann das f-Maß einen Fehler früher signalisieren (im Sinne einer niedrigeren Schwelle) t) als die Erkennungsrate.


Daher haben wir uns in unseren Experimenten auf das f-Maß verlassen und die Erkennungsrate verwendet, um sie mit der Arbeit der vergangenen Jahre zu vergleichen.


Inspiriert von Textdetektoren


Der vielleicht berühmteste und beliebteste Objektdetektor, wenn Geschwindigkeit wichtig ist, ist YOLO (Sie sehen nur einmal). Es gibt auch spätere Versionen von YOLOv2 und YOLOv3, aber im Allgemeinen eignet sich dieser Ansatz für mehr oder weniger quadratische Objekte. Beim Auffinden schmaler, aber sehr länglicher Objekte ist dieser Ansatz jedoch nicht so stark.


Also beschlossen wir, den anderen Weg zu gehen. Wie Sie leicht sehen können, sind die Linien mit Text im Bild auch sehr länglich und schmal, und die Aufgabe, Text in Bildern in der wissenschaftlichen Gemeinschaft zu finden, ist sehr beliebt (sicherlich beliebter als die Suche nach Barcodes), und verschiedene interessante Architekturen, die auf der Diagrammstruktur basieren, wurden dafür erfunden. Unsere Entscheidung basiert auf nur einer der Textsucharbeiten, in denen die PixelLink-Architektur vorgeschlagen wird.



Das Wesentliche des Ansatzes ist wie folgt: Lösen wir das Problem der Instanzsegmentierung wie folgt:


  1. Für jedes Pixel lösen wir das Problem der binären Klassifizierung (Text / nicht Text).
  2. Für jedes Pixel werden 8 Links (Links) mit seinen Nachbarn vorhergesagt. Kommunikation bedeutet, dass dieses Pixelpaar zu einem Objekt (einer Instanz) gehört.
  3. Nachdem wir eine Text- / Nicht-Textsegmentierungskarte und Karten mit Links aus dem Bild erhalten haben, stellen wir ein Diagramm zusammen, in dem die Eckpunkte Pixel sind, deren Textklasse vorhergesagt wird und die Kanten Links sind.
  4. In diesem Diagramm finden wir verbundene Komponenten.
  5. Wählen Sie um jede angeschlossene Komponente das minimale umschließende Rechteck aus (z. B. mit OpenCV), das die endgültige Erkennung darstellt.

Dieser Vorgang ist grafisch dargestellt, die Abbildung stammt aus dem Originalartikel .



Dieser Ansatz für die Suche nach Text liefert ziemlich anständige Ergebnisse, die mit dem Stand der Technik vergleichbar sind.



Wir kehren jetzt zu den Barcodes zurück. Wir haben uns gefragt - brauchen wir diese Links wirklich? Schließlich sind Barcodes im Gegensatz zum Text in den allermeisten Fällen weit voneinander entfernt. Tatsächlich müssen gemäß der Spezifikation viele Arten von Barcodes eine gewisse Lücke zu den nächstgelegenen benachbarten Objekten aufweisen.
Im Allgemeinen haben wir entschieden, dass wir keine besonderen Links benötigen, und den Ansatz wie folgt geändert:


  1. Wir lösen das Problem der semantischen Segmentierung - für jedes Pixel bestimmen wir die Klasse des Barcodes / Nicht-Barcodes.
  2. Wir erstellen ein Diagramm mit Eckpunkten in Pixel, für die die Art des Barcodes bestimmt wird. Anstatt nach Links zu suchen, betrachten wir als Kanten eine Verknüpfung zwischen einem Paar benachbarter Pixel des Barcode-Typs.
  3. In diesem Diagramm finden wir verbundene Komponenten.
  4. Wählen Sie um jede angeschlossene Komponente das minimale umschließende Rechteck aus, das die endgültige Erkennung darstellt.

Also haben wir uns für das allgemeine Lösungsschema entschieden. Die Absätze 2 bis 4 können als trivial angesehen werden. Lassen Sie uns jedoch erläutern, wie die semantische Segmentierung genau behandelt wird.


Netzwerkarchitektur für die semantische Segmentierung


Ein bisschen Geschichte, die häufig verwendet wird


Im Allgemeinen wird die semantische Segmentierung mithilfe neuronaler Netze seit etwa 2013 seit dem Aufkommen von U-Net durchgeführt. In U-Net wurde die räumliche Auflösung zuerst im Encoder allmählich verringert, dann im Decoder allmählich erhöht. Außerdem wurden Verbindungen von Zwischen-Encoder-Attributen zu Zwischen-Decoder-Attributen übersprungen. Wenig später traten erweiterte Windungen auf (siehe Abbildung unten), die eine bessere Qualität ergaben, jedoch mehr Speicher und Berechnungen für die Verarbeitung erforderten. Nun, am Ende gab es einen Ansatz namens Deeplabv3 +, der beide Ansätze kombinierte und zum Zeitpunkt dieses Schreibens unter den von Menschen entworfenen Architekturen auf dem neuesten Stand war (eigentlich dank Neural Architecture Search, zum Beispiel effektivere Lösungen).


Lassen Sie uns etwas mehr auf die erweiterte Faltung eingehen, weil Bei der endgültigen Entscheidung werden wir uns auf seine Eigenschaften verlassen.


Die normale Faltung funktioniert so



Während die erweiterte Faltung unten gezeigt wird (im Bild beträgt der erweiterte Faktor 2)



Möglicherweise stellen Sie fest, dass die konventionelle Faltung tatsächlich ein Sonderfall der erweiterten Faltung ist (mit Dilatationsfaktor 1).


Im Allgemeinen ist eine Diskussion über Lösungen für die semantische Segmentierung ein Thema für einen separaten, ziemlich großen Artikel. Ich wollte nur eine kleine Erinnerung machen, in der es am wichtigsten ist, sich mit dem erweiterten Faltungsgerät zu befassen. Wenn Sie mit der semantischen Segmentierung noch nicht vertraut sind, finden Sie hier die beste dem Autor bekannte Übersicht. Um jedoch zu verstehen, was als Nächstes passieren wird, ist keine Einarbeitung erforderlich.


Wenn alles so einfach wäre ...


Die Hauptanforderung für unser neuronales Netzwerk ist neben der Qualität die Geschwindigkeit. In unseren Daten gibt es Barcodes, die im Verhältnis zur Bildgröße so klein sind, dass die Mindestauflösung, mit der es sinnvoll ist, ein neuronales Netzwerk zu betreiben, mindestens 512 x 512 und vorzugsweise 1024 x 1024 betragen sollte. Gleichzeitig muss die CPU nicht länger als 100 ms auf dem Image (und auch auf einem Kern!) Arbeiten. In Bezug auf die Anforderungen an die Eingangsauflösung und die Gesamtbetriebszeit ist die Aufgabe nicht sehr trivial. Mit solch strengen Einschränkungen ist die Verwendung starker, tiefer Architekturen nicht möglich. Fairerweise haben wir die Anforderung von 100 ms auf einem Kern noch nicht erfüllt, aber die endgültige Lösung funktioniert 40 ms auf 4 Kernen (Intel Core i5, 3,2 GHz).


Leider passten nicht alle Architekturen, die wir für die semantische Segmentierung kennen, kategorisch in diese Einschränkungen. Wir hatten also die Wahl: Entweder ist nicht bekannt, wie man etwas völlig Neues erfindet, oder wir versuchen, eine der populären Architekturen so weit wie möglich zu vereinfachen. Wir hatten keine brillanten Ideen, also haben wir uns für Letzteres entschieden.


Inspiriert vom Context Aggregation Network


Dilatierte Faltungen haben die folgenden nützlichen Eigenschaften: Wenn Sie sie nacheinander mit einem exponentiell ansteigenden erweiterten Faktor anwenden, wächst das Empfangsfeld exponentiell (während es bei normalen Faltungen linear wächst).



Die Abbildung ( Quelle ) zeigt den exponentiellen Anstieg des Empfangsfeldes des neuronalen Netzwerks bei sequentieller Anwendung einer erweiterten Faltung. (a) F1 wird aus F0 durch Faltung mit Dilatation = 1 erhalten, Empfangsfeld = 3 × 3 für jedes Element in F1 (b) F2 wird aus F1 durch Faltung mit Dilatation = 2 erhalten, Empfangsfeld = 7 × 7 für jedes Element in F2 (c) F3 erhalten aus F2 unter Verwendung einer Faltung mit Dilatation = 4, Empfangsfeld = 15 × 15 für jedes Element in F3


In dem Artikel "Multi-Scale Context Aggregation by Dilated Convolutions" wurde ein spezieller Block (von den Autoren des Context Module genannt) erfunden, der auf dieser Eigenschaft basiert und zum Sammeln von Informationen aus dem Kontext des aktuellen Pixels verwendet wird. In diesem Artikel wird dieser Block über einem Netzwerk verwendet, das bereits weiß, wie das Segmentierungsproblem gelöst werden kann, um diese Vorhersagen mithilfe von Kontextinformationen zu verfeinern.


Wir haben uns für dieses Kontextmodul entschieden, verwenden es jedoch nicht, um die Vorhersagen eines vorhandenen guten Modells zu verbessern, sondern als Hauptbestandteil des Faltungsnetzwerks, das dieses Problem lösen wird. Im Allgemeinen ist unsere Architektur wie folgt aufgebaut (siehe Tabelle):


  1. Downscale-Modul - anfängliche Faltung, um die einfachsten Funktionen zu extrahieren und die Auflösung zu reduzieren.
  2. Das Kontextmodul besteht im Wesentlichen aus einer Reihe erweiterter Windungen, die das Empfangsfeld schnell vergrößern und so Attribute aus einem größeren Kontext sammeln.
  3. Die letzte Schicht (1x1-Faltung) empfängt eine Wahrscheinlichkeitskarte für die semantische Segmentierung von Barcode / Nicht-Barcode. Wenn wir zwischen der Art der erkannten Barcodes unterscheiden möchten, werden zusätzlich N Kanäle vorhergesagt (siehe unten).


Das heißt, in der resultierenden Architektur wird eine konstant kleine Anzahl von C = 24 Kanälen in jeder Schicht verwendet, die ersten 3 Faltungen verringern die Auflösung, nachfolgende Faltungen (Kontextmodul) erhöhen das Empfangsfeld jedes Elements der Merkmalskarte.


Die Architektur-Hyperparametertabelle gibt unter anderem an, ob die Faltung auf der aktuellen Schicht trennbar ist. Trennbare Faltungen ergeben theoretisch eine Beschleunigung in der Größenordnung von k ^ 2 im Vergleich zu einer herkömmlichen Faltung, wobei k die Filtergröße ist. In der Praxis kann die Beschleunigung viel geringer sein (alles hängt von der Bildauflösung, der Anzahl der Eingabe- und Ausgabefilter ab).


Anfangs haben wir versucht, alle Windungen trennbar zu machen, aber dadurch ist die Qualität stark gesunken. Dann haben wir beschlossen, nur die ersten drei Windungen trennbar zu machen, die mit höheren Bildauflösungen funktionieren und dementsprechend mehr Berechnungen erfordern als nachfolgende Windungen. Gleichzeitig ist die Qualität eines solchen Ersatzes bereits leicht gesunken. Insgesamt beschleunigte sich das neuronale Netz aufgrund der Trennbarkeit um weitere 20%.


Es bleibt der letzte ungeklärte Moment - was bedeutet die Zahl N in der letzten Schicht? N ist verantwortlich für die Anzahl der verschiedenen Arten von Objekten (in unserem Fall Barcodes), die wir unterscheiden möchten. Wenn wir den einfachsten Fall betrachten - wenn Sie nur Objekte finden müssen und deren Typ nicht bestimmen müssen (dies ist ein Barcode und egal was passiert) - können Sie N = 0 in Betracht ziehen. Wenn wir immer noch zwischen Arten von Barcodes unterscheiden wollen (dies ist ein Barcode vom Typ [so und so]), werden in der letzten Schicht N Kanäle hinzugefügt, in denen die Wahrscheinlichkeiten eines bestimmten Typs vorhergesagt werden. Nachdem wir die Erkennung in Form des Rechtecks ​​erhalten haben, in dem sich der Barcode befindet, können wir die Wahrscheinlichkeiten der Klassen in diesem gefundenen Rechteck mitteln, anhand derer wir den Typ des gefundenen Barcodes ermitteln können.


Ergebnisse


Nachdem Sie eine Lösung erhalten haben, sollten Sie sich immer umschauen und die Qualität der Lösung mit früheren Studien vergleichen. Im Allgemeinen ist die Suche nach Barcodes nicht sehr beliebt. In den letzten 10 Jahren wurden nur 1-2 Artikel pro Jahr veröffentlicht (wie Sie wissen, besteht der einfachste Weg, den Stand der Technik zu übertreffen, darin, die unpopuläre Aufgabe zu finden, die uns letztendlich gelungen ist. .). Die folgende Tabelle vergleicht sich mit anderen Ansätzen für zwei Datensätze, für die wir bessere Ergebnisse erzielt haben.



Exzellenz ist natürlich nicht besonders beeindruckend, aber immer noch präsent. Das Hauptmerkmal der gefundenen Lösung ist jedoch nicht genau, sondern die Geschwindigkeit - im Vergleich zu demselben YOLO auf derselben GPU (GTX 1080) und bei einer höheren Bildauflösung arbeitet unsere Methode ~ 3,5-mal schneller.



Neben dem Geschwindigkeitsvorteil gibt es einen Gewichtsvorteil des endgültigen Modells. Der Detektor hat ~ 30.000 Skalen, während die überwiegende Mehrheit der modernen Faltungsnetzwerke (sogar für mobile Geräte geschärft) Millionen von Parametern aufweist. Die endgültige Lösung wiegt noch weniger als LeNet mit ~ 60.000 Parametern.


Fazit


Tatsächlich basiert diese Arbeit auf zwei einfachen Ideen:


  1. Erkennung durch semantische Segmentierung.
  2. Verwendung einer Sequenz erweiterter Faltung mit einer kleinen Anzahl von Kanälen für das schnellstmögliche Wachstum des Empfangsfeldes.

Das Ergebnis war eine sehr leichte und schnelle Architektur, die dennoch recht gute Ergebnisse zeigte (und sogar SOTA bei der unpopulären Aufgabe, Barcodes zu finden, besiegte). Darüber hinaus ist die Anwendung dieses Ansatzes nicht auf Barcodes beschränkt. Wir haben dieselbe Architektur verwendet, um Text zu finden, nach Visitenkarten und Pässen zu suchen und gute Ergebnisse für diese Aufgaben zu erzielen.


Es ist jedoch anzumerken, dass dieser Ansatz in dieser Form Einschränkungen aufweist. Wenn sich zwei Objekte desselben Typs sehr nahe befinden, bleiben sie zu einem zusammen. Vielleicht werden wir Ihnen in der nächsten Serie erklären, wie Sie mit einem solchen Problem umgehen können.


Basierend auf den Ergebnissen von Experimenten mit Barcodes haben wir einen Artikel geschrieben , der auf der ICDAR2019 in Sydney vorgestellt wird.


Literatur


  1. Ein Artikel mit den Ergebnissen unserer Experimente und einer Vielzahl von Details. Universeller Barcode-Detektor über semantische Segmentierung
  2. Ein ausgezeichneter Übersichtsartikel über die Entwicklung von Architekturen für die semantische Segmentierung. Link
  3. PixelLink: Erkennen von Szenentext über Instanzsegmentierung
  4. In diesem Artikel geht es um die Verwendung einer erweiterten Faltung, um Vorhersagen zu verbessern, indem Informationen aus dem Kontext gesammelt werden. Multi-Scale-Kontextaggregation durch erweiterte Faltungen

Forschungsgruppe Computer Vision

Source: https://habr.com/ru/post/de455764/


All Articles