Autonomes Fahren: Formula Student Competition 2018 mit municHMotorsport - Teil 2
Willkommen zum zweiten Teil der Formula-Student-Blogreihe! 

Diese Blogreihe ist für alle, die schon immer einmal einen Blick hinter die Kulissen eines selbstständig organisierten studentischen Projekts werfen wollten, bei dem ein Rennfahrzeug im sechstelligen Bereich ohne jegliche Beaufsichtigung gebaut wird. Und dieses Fahrzeug auch noch autonom auf einer Rennstrecke mit 65km/h navigiert! 

Blog-Post Reihe municHMotorsport

  1. Was ist Formula Student Driverless und Anforderungsanalysen
  1. Formula Student Competition 2018 mit municHMotorsport - Teil 2
  1. Umfelderkennung mit Darknet YOLO
  1. Formula Student Competition 2018 mit municHMotorsport - Teil 3
  1. Modellbasierte Trajektorienplanung

Im ersten Beitrag der Serie über den Formula-Student-Wettbewerb hat Alexander Isenko schon ausführlich über die verschiedenen Anforderungsanalysen berichtet, die wir im Laufe des Projekts durchgeführt haben.
In diesem Blog-Post soll es speziell um die Umfelderkennung gehen. Zudem soll es euch ermöglicht werden, mit relativ geringem Aufwand unser System zu Hause nachzumachen und mit euren eigenen Daten zu testen. Hier kommt uns der minimalistische Ansatz wieder zu Gute, da lediglich eine Webcam und ein Laptop nötig sind. Für Real-time Performance ist zudem eine Grafikkarte nötig - GTX 1050 oder vergleichbar. 

System

Wichtig ist erstmal, uns mit der Software Pipeline des Gesamtsystems auszukennen. Bei der Umfelderkennung befinden wir uns ganz am Anfang und sitzen genau an der Schnittstelle zwischen unserer Sensorik und der Software. Hierbei gilt es, die Bilder aus unserem Kamerasystem möglichst schnell und effizient auf unserer Recheneinheit zu verarbeiten. Ziel dieser Verarbeitung ist es, Objekte auf den Farbbildern zu lokalisieren, zu klassifizieren und anschließend ihre Position bezüglich der Kamera zu schätzen.

Umfeldmodell

Die Rennstrecke wird von uns als 2D-Koordinatensystem abgebildet. In unserem Falle sind nur vier unterschiedliche Hindernisse möglich, deren genaue Abmaße uns bekannt sind. Der Ursprung ist im Falle des Kamerasystems die Kamera, für das gesamte System liegt dieser jedoch auf dem Center of Gravity - also den Massenschwerpunkt - des Fahrzeuges, lediglich mit der X-Achse in Längsrichtung und Y-Achse in Querrichtung.
Die Koordinaten der erkannten Objekte werden in Polarkoordinaten gespeichert, damit sie später verarbeitet und in eine lokale Karte eingefügt werden können.
Die Vereinfachung auf zwei Dimensionen erlaubt es uns, diverse Algorithmen leichter und effizienter zu gestalten. Da die meisten Strecken, auf denen wir fahren, keine starken Gefälle vorzeigen, führt dieses vereinfachte Modell auch nicht zu großen Fehlern.

Umfelderkennung

Darknet

Alternative-Deep-Learning-Objekterkennung
Für die Aufgabe, auf Farbbildern Objekte zu erkennen und zu klassifizieren, gibt es mehrere Algorithmen und neuronale Netze, die benutzt werden können. Zusätzlich dazu gibt es natürlich noch herkömmliche Methoden der Bildverarbeitung, die in Frage kommen.
Alternative Deep-Learning-Ansätze (DL), die wie Darknet YOLO auch in Echtzeit laufen könnten, waren zum Zeitpunkt unserer Entscheidung zum Design der Objekterkennung SSD und Faster R-CNN. Letzteres ist leider trotzdem zu langsam für unsere Anwendung, obwohl durch die Trennung der Lokalisierung und Klassifizierung auf zwei gekoppelte neuronale Netze eine höhere Genauigkeit erzielt wird.
SSD hingegen erweist eine ähnliche Genauigkeit wie YOLO bei erheblich niedriger Geschwindigkeit, wodurch es auch ausschied. Würde es nicht auf einen speziellen Branch von Caffe basieren, wäre die Nutzung von TensorRT möglich gewesen, um unter Umständen sogar schneller zu sein als YOLO
Die Entscheidung gegen herkömmliche Methoden ergab sich aus dem Grund, dass wir ein Objekterkennungsmodul entwerfen wollten, das möglichst robust gegenüber unterschiedlichen Wetter- und Witterungsbedingungen sein sollte. Mittels Supervised Learning ist es ausreichend, die Trainingsdatensätze bei unterschiedlichen Bedingungen aufzunehmen. Mit Data Augmentation können diese zudem programmatisch angereichert werden. Insgesamt können wir dadurch Zeit und Ressourcen sparen, die bei herkömmlichen Methoden wie Kantenerkennung in spezielle Farbfilter einfließen müssten. Zudem funktionieren diese nur bei bestimmten Bedingungen gut und nur Spezialisten können sie anpassen. Neue Bilder aufnehmen und in den Trainingsdatensatz einpflegen ist wesentlich einfacher und kann teamübergreifend erledigt werden.

You Only Look Once (YOLO): Unified, Real-time Object Detection

Bei YOLO wird basierend auf dem Output von einem Feature-Extractor-Netzwerk sowohl eine Klassifizierung über eine Softmax-Funktion, als auch eine multinomiale logistische Regression für die jeweilige Bounding Box durchgeführt. Beides passiert im sogenannten Region- (YOLOv2) oder YOLO-Layer (YOLOv3).
Die Erkennnung von Objekten bei beiden Ausführungen des YOLO-Algorithmus basieren auf der Feature Map, die vom Feature-Extractor-Netzwerk ausgegeben wird. 
Erwartet wird ein Input in Form M x N x D
Mit M und N wird der Grid bestimmt, auf dem die Erkennung durchgeführt wird. Auf der Grafik sieht man den Fall, in dem M = N = 19 gilt. Für jedes Kästchen im M x N Grid werden die Koordinaten - bx,by,bh,bwb_x, b_y, b_h, b_w - von genau einer Bounding Box für jeden Dimension Prior berechnet, die Wahrscheinlichkeit, dass diese Bounding Box ein Objekt ist objobj und für jede mögliche Klasse eine zugehörige Wahrscheinlichkeit cnc_n
Dimension Priors sind Rechtecke, die als Basis für die Bounding-Box-Regression dienen. Für bessere Ergebnisse beim Trainieren können diese auf die eigenen Daten mittels K-means clustering angepasst werden.
Die Form des Outputs des Feature Extractors kann anhand der Anzahl an Dimension Priors und unterschiedlichen Klassen berechnet werden: D=priors(classes+5)D = priors * (classes + 5)

Hier sollen einige dieser Werte an einer der Config-Dateien der YOLOv2 Architektur veranschaulicht werden:

#yolov2-voc.cfg 
...