Computer VisionDeep LearningMachine LearningProject

Entwicklung eines selbstfahrenden Autos – Tag #7 & #8


Heute haben wir erfolgreich die Schwierigkeiten bezüglich dem Finden von Regionen überwunden und das Ganze nicht wie angedacht mit einer SVM und EA oder Partikel Schwarm Kombination, sondern mit relativ einfachen Heuristiken. Nachdem relativ schnell klar war, dass der SVM+EA Ansatz zu langsam sein würde, haben wir uns durch einige relativ alte Paper gelesen, in welchen versucht wurde Schilder basierend auf Farbe, Größe und Form zu erkennen und zu klassifizieren. Viele dieser Paper haben einige dieser Features kombiniert, um möglichst wenig falsch erkannte Schilder zu bekommen. Das bedeutet in den meisten Fällen natürlich einen Haufen an Berechnungen, die wir gar nicht brauchen, weil unser CNN sowieso die Schilder dann erkennen soll und wir nur interessante Regionen extrahieren wollen. Die Grundidee dieser Paper war also wie für unser Vorhaben gemacht. Wir implementierten also voller Vorfreude ein simples Farben basiertes Vorgehen und kamen damit auf eine Bearbeitungsdauer auf der CPU von rund 20ms pro 1289×720 Bild.

Das war selbst schneller als wir uns erhofft hatten und das ganze ohne Multithreading oder sonstige Performance-Kniffe, obwohl diese relativ einfach hinzuzufügen wären! Wow! Im Grunde macht unser Algorithmus jetzt nichts anderes als

  • Zuerst nach grünlichen, bläulichen, usw. Pixel zu suchen, um dann
  • im zweiten Schritt alle gefundenen Regionen mit DBSCAN zu clustern (Bounding Box der Cluster).
  • Damit wir im nächsten Schritt Regionen aus diesen Clustern generieren können.
  • Im letzten Schritt wenden wir dann noch ein paar Heuristiken und Non-Maximum-Suppression an, um die Anzahl der gefundenen Regionen zu reduzieren.

Als Heuristik entfernen wir alle Regionen, die kleiner als 15×15 px sind, weil diese vom NN sowieso selten richtig erkannt werden und alle Regionen, die größer sind als 150×150 px. Zusätzlich kommen noch ein paar andere kleine Heuristiken zum Einsatz wie etwa das Entfernen von Schildern, die in Bodennähe sind (konkret: region.y > 5/6*image_height, dann wir die Box entfernt). Im finalen Code am Ende werdet ihr dann auch sehen welche sonstigen kleinen Heuristiken wir angewandt haben. Der grundlegende benutzte Algorithmus, den wir jetzt abgewandelt verwenden war inspiriert von Broggi et al. 1

Im Anschluss noch einige Beispiel Bilder mit extrahierten Regionen (weiße Rechtecke):

Vorher Nachher

Nachfolgend findet ihr den exakten Algorithmus um bläuliche, rötliche, etc. pixel zu finden (basierend auf OpenCV 3 und C++):

Trotz dieser großen Fortschritte bleibt eine Herausforderung bestehen: Das Finden von weißen/grauen Schildern ist noch sehr fehlerbehaftet und problematisch. Es ist ziemlich schwer solche Regionen zuverlässig zu extrahieren ohne gleich 100 verschiedene Regionen mit zu extrahieren, weil die Wolken, die Straße, Häuser und der Gehweg meistens auch weißlich/gräulich sind. Aber darum kümmern wir uns nächstes Mal!

1.
Broggi A, Cerri P, Medici P, Porta P, Ghisio G. Real time road signs recognition. In: Intelligent Vehicles Symposium, 2007 IEEE (p. 981-986); 2007.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.