Projekt Objekt- und Gestenerkennung - HTWK Smart Driving
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Fakultät Informatik und Medien Projekt Objekt- und Gestenerkennung Pylonenerkennung für den Formular Student Wettbewerb Autoren: Sandra Hinze sandra.hinz@stud.htwk-leipzig.de Julius Seiffert julius.seiffert@stud.htwk-leipzig.de Thomas Grund thomas.grund@stud.htwk-leipzig.de Betreuer: Prof. Dr. Kiran Varanasi Letzte Änderung: 27. März 2020 Version 1.0
Projektarbeit Pylonenerkennung Inhaltsverzeichnis 1. Einleitung (Hinz) 4 2. Datensätze (Hinz) 6 2.1. Datengenerierung (Hinz) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1.1. Real-World Daten (Hinz) . . . . . . . . . . . . . . . . . . . . . . . 6 2.1.2. Synthetische Daten (Hinz) . . . . . . . . . . . . . . . . . . . . . . . 7 2.2. Labeling Formate (Grund) . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2.1. YOLO-Darknet Format (Grund) . . . . . . . . . . . . . . . . . . . 9 2.2.2. PASCAL VOC Tensorflow Format (Grund) . . . . . . . . . . . . . 9 2.3. Labeling der Daten (Hinz) . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.4. Erweiterung der Datensätze . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4.1. Ergänzung von Regentropfen auf der Linse (Seiffert) . . . . . . . . 12 2.4.2. Transformationen der Datensätze (Grund) . . . . . . . . . . . . . . 12 3. YOLOv2 mit Darkflow (Grund) 15 3.1. Voraussetzungen (Grund) . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2. Aufbau/Funktionsweise (Grund) . . . . . . . . . . . . . . . . . . . . . . . 16 3.3. Konfiguration (Grund) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.4. Training (Grund) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4. YOLOv3 (Seiffert) 20 4.1. Funktionsweise (Seiffert) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.1.1. Bounding Box Prediction (Seiffert) . . . . . . . . . . . . . . . . . . 20 4.1.2. Class Prediction (Seiffert) . . . . . . . . . . . . . . . . . . . . . . . 21 4.1.3. Erkennung kleiner Objekte (Seiffert) . . . . . . . . . . . . . . . . . 21 4.2. Implementation (Seiffert) . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.2.1. Voraussetzungen (Seiffert) . . . . . . . . . . . . . . . . . . . . . . . 21 4.2.2. Konfiguration (Seiffert) . . . . . . . . . . . . . . . . . . . . . . . . 22 4.3. Training (Seiffert) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5. Auswertung und Vergleich der Netze 24 5.1. Hardware(Seiffert) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.2. Training(Seiffert) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.2.1. Trainingsergebnisse YOLOv2 (Seiffert und Grund) . . . . . . . . . 24 5.2.2. Trainingsergebnisse YOLOv3 (Seiffert) . . . . . . . . . . . . . . . . 26 5.3. Testdaten mit transformierten Bilder (Grund) . . . . . . . . . . . . . . . . 30 5.4. Trainingsdaten ohne transformierten Bilder (Grund) . . . . . . . . . . . . 31 6. Zusammenfassung (Seiffert) 32 A. Anhang 33 A.1. Vergleichsbilder von Trainingsdaten (mit transfomierten Bildern) . . . . . 33 A.2. Vergleichsbilder von Trainingsdaten (ohne transfomierten Bildern) . . . . 35 |2
Autor: Sandra Hinz Projektarbeit Pylonenerkennung 1. Einleitung (Hinz) Im Wahlpflichtfach Objekt- und Gestenerkennung bestand die Aufgabe sich im Rahmen eines Projektes mit der Verwendung von Methoden des maschinellen Lernens zu beschäf- tigen. Durch die Mitarbeit der Projektmitglieder im Smart Driving Team der HTWK Leipzig, welches sich unter anderem mit Themen des autonomen Fahrens auseinander- setzt, ergab sich eine vergleichsweise spezielle Problemstellung. Das HTWK Smart Dri- ving Team arbeitet seit einiger Zeit mit dem Team der TU Chemnitz zusammen, welches ursprünglich dieses Jahr am Formular Student Wettbewerb teilnehmen wollte. Wie auch bei vielen anderen Wettbewerben, werden Pylonen auch beim Formular Student Wett- bewerb zur Kennzeichnung von Start und Ziel und der Begrenzung der Strecke genutzt. Da es sich in diesem Jahr auch um das autonome Fahren drehen sollte, erfüllen die Py- lonen einen weiteren Zweck: Sie kennzeichen durch verschiedene Farben ob es sich um die linke oder rechte Fahrbahnseite handelt. Aus den verschiedenen Anwendungszwecken der Pylonen ergeben sich also 4 verschiedene Arten die es zu erkennen gilt, wie man in der folgenden Abbildung erkennen kann. Abbildung 1: Verschiedene Arten von Pylonen [1] Die gelben und blauen Pylonen werden dabei für die Streckenbegrenzung und die Kennzeichnung der Fahrbahnseite genutzt. Die großen orangenen Pylonen dienen zur Kennzeichnung von Start und Ziel, die kleinen orangenen Pylonen für die Kennzeich- nung von besonderen Flächen, wie zum Beispiel einem Parkplatz. Da es sich dabei um eine Art Wettrennen handelt, ist der Anspruch des Wettbewerbes natürlich die Pylo- nenerkennung in Echtzeit auszuführen, da die Bilder von der Kamera des Fahrzeugs geliefert werden. Da allerdings die Hardware des Fahrzeuges, welches vom Team der TU Chemmnitz entwickelt wird noch nicht verfügbar ist und es erst einmmal nur darum ging, dass die Teammitglieder auf dieser Arbeit aufbauen können, wurde beschlossen die Erkennung auf Bilder und Videos verschiedener Datensätze zu beschränken. Dementspre- chend dienen als Testdaten keine in Echtzeit generierten Bilder einer Kamera sondern Eingabedaten die schon vorhanden sind, auch wenn bei der Realisierung der Pylone- nerkennung trotzdem ein Augenmerk darauf gelegt wurde, dass die Verwendung auch |4
Autor: Sandra Hinz Projektarbeit Pylonenerkennung bei einer Problemstellung in Echtzeit möglich wäre. Um ebenfalls dem Anspruch nach maschinellem Lernen bei der Projektarbeit gerecht zu werden, wird die Erkennung der Pylonen durch verschiedene künstliche neuronale Netze realisiert, die miteinander vergli- chen werden. Dabei handelt es sich um einen Vergleich von YOLOv2 mit Tensorflow und YOLOv3 mit Darknet. Vor allem beim Training der Netze muss dabei auf verschiede- ne Schwierigkeiten des Anwendungsszenarios geachtet werden. Dazu zählt beispielsweise der Umgang mit diversen Wetterverhältnissen, die für Tropfen auf der Linsen oder ei- ner Überbelichtung des Bildes und somit einer schlechteren Erkennbarkeit der Pylonen führen könnte. |5
Autor: Sandra Hinz Projektarbeit Pylonenerkennung 2. Datensätze (Hinz) Ein entscheidender Punkt bei der Verwendung von künstlichen neuronalen Netzen ist das Trainieren, damit das Netz später selbstständig in der Lage ist die jeweiligen Pylonen zu erkennen. Dazu werden möglichst viele gelabelte Bilder benötigt, welche die jeweiligen Pylonenarten beinhalten. Ursprünglich sollte dafür ein Trainingsdatensatz der Hochschu- le München verwendet werden, welcher Aufnahmen enthält die bei einem vorangegange- nen Formular Student Wettbewerb entstanden sind. Dementsprechend beinhalten diese Bilder alle Pylonen, die für das Training benötigt werden. Auch wenn der Datensatz auf Anfrage frei verfügbar sein sollte, war die Beschaffung dieses Datensatzes hoffnungslos und führte auch nach Wochen zu keinem Erfolg. Da auch das Team der TU Chemnitz noch keine der Pylonen vor Ort hatte, was das Erzeugen von Testdaten ermöglicht hätte, erfolgte das Training des Netzes mit eigenhändig generierten Daten. Zusätzlich wurde der KITTI Datensatz verwendet um Overfitting zu vermeiden. 2.1. Datengenerierung (Hinz) Da für die gewählte Problemstellung keine geeigneten Trainigsdatensätze existieren oder sie nicht frei verfügbar sind mussten die Daten eigenständig generiert werden, um einen ausreichend großen Trainingsdatensatz zusammenzustellen. Neben vorhandenen real- world Daten, wurden dafür auch synthetische Daten genutzt. 2.1.1. Real-World Daten (Hinz) Da es wichtig ist die charakteristischen Merkmale und Proportionen der beim Wettbe- werb verwendeten Pylonen beizubehalten, können also keine Daten beziehungsweise Da- tensätze verwendet werden in denen eine beliebige Art von Pylonen vorkommen. Auch wenn grundsätzlich kein fertiger Trainingsdatensatz mit den benötigten Pylonenarten vorhanden ist, gibt es dennoch viele Videos [2, 3, 4] von vorangegangenen Formular Stu- dent Wettbewerben. Dementsprechend sind in den Videos [2, 3, 4] die vorgeschriebenen Pylonen vorhanden, die zum Trainig des Netzes benötigt werden. Um sich dies zunutze zu machen, wurden die Videos [2, 3, 4] in ihre einzelnen Frames zerlegt. Als Ergebnis davon entstand eine Vielzahl an Bildern, die für die Generierung des Trainigsdatensatzes genutzt werden konnte. Dieses Verfahren wurde auf 3 Videos [2, 3, 4] angewendet um eine Auswahl an Bilder mit verschiedenen Lichtverhältnissen und Blickwinkeln zu erzeugen. Eine Auswahl der aus den Wettbewerbsvideos erzeugten Bilder ist in Abbildung 3 zu sehen. Damit eine größere Anzahl an Trainingsdaten zur Verfügung steht wurden unter anderem auch die aus real-world Daten generierten Bilder weiteren Transformationen unterzogen. Dazu mehr in Abschnitt 3.3. |6
Autor: Sandra Hinz Projektarbeit Pylonenerkennung (a) AMZ 1 [2] (b) AMZ 2 [3] (c) Revolve NTNU [4] Abbildung 2: Generierte Bilder aus den Videos 2.1.2. Synthetische Daten (Hinz) Da eine relativ große Anzahl an Trainigsdaten nötig ist, um ein künstliches neuronales Netz zu trainieren wurden neben den realistischen Daten auch synthetische generiert. Dies wurde zum einem mit dem Gazebo Simulator realisiert, zum anderem mit Blender. Gazebo ist ein 3D Robotik Simulator, der unter anderem als eine Schnittstelle zwischen einem autonomen Fahrzeug und einer simulierten Umgebung am PC dienen kann, um beispielsweise die Funktionalität von Algorithmen zu testen. Der Fokus liegt also weni- ger auf der ästhetischen und realistischen Darstellung von Umgebungen, sondern eher auf der Praktikabilität. Trotzdem hatte Gazebo bei der Generierung der synthetischen Daten einen Vorteil: die benötigten Arten von Pylonen waren als Objekte vorhanden und konnten so einfach in eine Umgebung platziert werden, um neue Daten zu erzeugen. Dementsprechend musste nicht gesondert auf die Einhaltung der Proportionen und cha- rakteristischen Merkmale der Pylonen geachtet werden. Abbildung 4 ist ein Beispielbild, erzeugt mit dem Gazebo Simulator. Abbildung 3: Generiertes Bild mit dem Gazebo Simulator |7
Autor: Sandra Hinz Projektarbeit Pylonenerkennung Neben der Generierung von synthetischen Bildern mit dem Gazebo Simulator wurden ebenfalls Bilder mit Blender erzeugt, damit eine größere Variabilität der Bilder in Hin- blick auf Belichtung und Aufnahmewinkel möglich ist. Das größte Problem stellte dabei die Einhaltung der Proportionen dar, da diese erst in Blenderunits umgerechnet werden mussten. Auch die Modellierung der Pylonen an sich und eine möglichst realistische Farb- gebung, um die charakteristischen Merkmale zu berücksichtigen stellten eine Herausfor- derung dar. Schlussendlich konnten dennoch gute Ergebnisse erzielt werden. Die fertig modellierten Pylonen wurden dann in unterschiedlichen Anordnungen positioniert und aus jeweils 3 verschiedenen Kameraperspektiven aufgenommmen, um damit nochmal auf mögliche Schwierigkeiten bei der Pylonenerkennung, wie Verdeckungen oder eine große Entfernung der Pylone zur Kamera einzugehen. Bei den verschiedenen Anordnungen der Pylonen wurde zum Beispiel darauf geachtet, vermeintlich schlecht differenzierbare Py- lonen in ein Bild zu bringen, wie die kleinen und großen orangenen Pylonen. Außerdem wurden zwei verschiedene Hintergründe für die synthetische Umgebung gewählt, da sich diese auf die Belichtung der Pylonen in der Umgebung auswirken. Zusätzlich wurden mehrfach die Lichtquellen in der 3D-Welt modifiziert, um weitere Testbilder zu erhalten die beispielsweise extrem dunkel sind und somit schlecht erkennbare Pylonen darstellen, oder sehr hell sind um einen eventuellen Schattenwurf zu berücksichtigen. In Abbildung 5 sind ausgewählte, mit Blender erzeugte Bilder des Trainingsdatensatzes sichtbar. (a) Pylonenarten (b) Fernaufnahme (c) Differenzierbarkeit bei gleicher Farbe (d) Geringe Beleuchtung Abbildung 4: Generierte Bilder mit Blender |8
Autor: Sandra Hinz Projektarbeit Pylonenerkennung 2.2. Labeling Formate (Grund) Durch den Vergleich von YOLOv2 mit Darkflow (d.h mit Tensorflow) und YOLOv3 mit Darknet, gibt es auch zwei verschiedene Labeling-Formate (YOLO und PASCAL VOC). 2.2.1. YOLO-Darknet Format (Grund) Das YOLO-Darknet Format ist das Standardformat für ein YOLO-Netz. Es hat die For- mat Labelnummer X-Koordinate Y-Koordinate Breite Höhe Dabei ist die Labelnummer ∈ {0..3} und hat in diesem Projekt die folgende Bedeutung: • Labelnummer 0: Blauer Pylon • Labelnummer 1: Gelber Pylon • Labelnummer 2: Kleiner roter Pylon • Labelnummer 3: Großer roter Pylon Die X- und Y-Koordinate markiert den Mittelpunkt einer Bounding-Box einer Koor- dinate ∈ R im Intervall [0, 1]. D.h. ein Punkt wird immer relativ zum gesamten Bild definiert. Hierbei ist die Koordinate P(0,0) die linke obere Ecke des Bildes und P(1,1) die rechte untere Ecke. Daraus eribt sich, dass der Mittelpunkt des Bildes bei P(0.5,0.5) liegt. Auch die Werte für Breite und Höhe sind relative Werte im Intervall [0, 1]. Die Bounding- Box wird mit den Angaben von Breite und Höhe vom Mittelpunkt der angegebenen X- und Y-Koordinate relativ zu der absoluten Breite und Höhe des Bildes gespannt. Durch diesen sehr einfachen Aufbau und auch weil die Werte relativ zu den Dimensionen des Bildes abgespeichert werden, werden die Transformationen (siehe weiter unten) auf die YOLO-Darknet Labels angewendet. 2.2.2. PASCAL VOC Tensorflow Format (Grund) Im Gegensatz zum YOLO-Format, welches in einer einfachen Textdatei gespeichert wird, werden die Bildinformationen und Boundingbox-Informationen bei PASCAL VOC in ei- ner XML-Datei gespeichert. Ein weiterer Unterschied ist, dass Angaben zum Bild, wie Pfad und Dimensionen, in der Datei mit enthalten sind. Außerdem müssen für die La- bels kein Mapping vorgenommen werden, weil diese als Klarnamen hinterlegt sind. Die Bounding-Boxen sind definiert als Pixelkoordinaten für die obere linke Ecke und die unterere Rechte Ecke. Ein Minimalbeispiel ist im Listing 1 abgebildet. |9
Autor: Sandra Hinz Projektarbeit Pylonenerkennung Da das manuelle Setzen der Labels und die Generierung/Transformationen der Bilder/- Boundingboxen im YOLO-Format vorgenommen werden, wurde im Rahmen des Pro- jekts noch ein Python Notebook für das Konvertieren von YOLO nach PASCAL VOC bereitgestellt.1 < annotation > < folder >{ path to image folder } < filename > name . jpg < path >{ path to image folder } < source > < database > Unknown < size > < width >960 < height >1080 < depth >3 < segmented >0 < object > < name > yellowcone < pose > Unspecified < truncated >0 < difficult >0 < bndbox > < xmin >685 < ymin >490 < xmax >714 < ymax >548 Listing 1: PASCAL VOC Minimalbeispiel 2.3. Labeling der Daten (Hinz) Neben der Generierung der Daten für den Trainingsdatensatz ist es natürlich auch nötig die Daten zu labeln, damit das künstliche neuronale Netz überhaupt dazu in der Lage ist aus den gegebenen Bildern zu lernen. Dafür muss jedes Bild von Hand annotiert werden. Da beim Formular Student Wettbewerb vier verschiedene Pylonenarten verwendet wer- den, handelt es sich um die gleiche Anzahl an Klassen die beim Labeling berücksichtig werden müssen und durch verschiedenfarbige Bounding Boxen repräsentiert werden. Ei- ne Bounding Box markiert dabei eine Pylone entsprechend ihrer Klassenzugehörigkeit. Ursprünglich wurde für das Annotieren der Daten das MM-Label-Tool2 genutzt. Es wur- de schon vorher zur Annotierung der Trainingsdaten des Formular Students Wettbewerb 1 Python Notebook zum Konvertieren von YOLO nach PASCAL VOC: https://gitlab.imn. htwk-leipzig.de/tgrund/pyloten/blob/master/src/4_convert_labels.ipynb 2 MM-Label-Tool: https://github.com/ddavid/MM-label-tool | 10
Autor: Sandra Hinz Projektarbeit Pylonenerkennung vom Team der Hochschule München genutzt und liefert die benötigten Daten im richtigen Format: dem YOLO-Darknet Format. Allerdings traten bei der Benutzung verschiedene Komplikationen auf, wie zum Beispiel die Verschiebung der Bounding Boxen um einen bestimmten Faktor was zur Folge hatte, dass diese nicht mehr mit der Position der Pylo- nen übereinstimmten. Deswegen erfolgte ein Wechsel auf das OpenLabeling-Tool3 , auch wenn folglich ein Großteil der Bilder erneut annotiert werden mussten. Da im Projekt zwei verschiedene Netze betrachtet werden besteht ein weiterer Vorteil des schlussendlich gewählten Tools darin, dass es die benötigten Output-Datein sowohl im YOLO-Darknet Format, als auch im PASCAL VOC (Darkflow) Format erzeugt, welches im Rahmen des Projektes ebenfalls benötigt wird. In Abbildung 6 ist das OpenLabeling-Tool mit bereits gesetzten BoundingBoxen für ein Bild des Trainingsdatensatzes sichtbar. Abbildung 5: Annotiertes Bild es Trainingsdatensatzes im OpenLabeling Tool Nach der Annotierung der generierten Bilder, wurden zusätzlich verschiedene Trans- formationen angewendet um eine noch größere Vielfalt an Eingabedaten zu ermöglichen, welche in den folgenden Abschnitten thematisiert werden. Zusammen mit dem KITTI Datensatz, der zur Vermeidung von Overfitting hinzugezogen wurde, entstand letztlich ein Trainigsdatensatz der 8153 Bilder beinhaltet. 2.4. Erweiterung der Datensätze Um die Datensätze zu ergänzen wurden mehrere Methoden verwendet um die einzelnen Daten zu manipulieren. Hierbei wurden Transformationen auf die Bilde vorgenommen und Tropfen auf die Linse der Kamera eingefügt. 3 OpenLabeling-Tool: https://github.com/Cartucho/OpenLabeling | 11
Autor: Sandra Hinz Projektarbeit Pylonenerkennung 2.4.1. Ergänzung von Regentropfen auf der Linse (Seiffert) Um möglichst realistische Bilder mit Tropfen auf der Kameralinse zu erstellen wurde im Rahmen des Projekts ein Pix2Pix GAN4 entwickelt, welches bei normalen Bildern Tropfen auf die Linse generieren soll. Hierzu wurde ein Python-Notebook verwendet, welches ursprünglich von Tensorflow selbst entwickelt wurde. Das GAN wurde mit dem Datensatz aus dem Projekt https://github.com/rui1996/DeRaindrop trainiert, welches ursprünglich dazu gedacht war aus Bildern mit Tropfen auf der Linse, diese Tropfen zu entfernen. Das Ergebnis des Netzwerkes war leider nicht so realistisch wie erwartet. Hierfür haben vermutlich Trainingsdaten auf den Anwendungsdaten gefehlt, die aber leider nicht er- stellt werden konnten. Dennoch konnte man die Daten gut für das Training der Netzwerke verwenden, da auf den erstellten Bildern ein deutliches Rauschen und einige Schlieren auf den Bildern zu erkennen war, welche auch auf in dem Anwendungsfall einer Kamera im Fahrzeug vorkommen kann. (a) Bild vor dem Regen (b) Bild nach dem Regen Abbildung 6: Ergebnisse des GANs 2.4.2. Transformationen der Datensätze (Grund) Auf alle Datensätze werden verschiedene Transformationen angewendet. Diese können und werden auch kombiniert, um mehr Datensätze zu erzeugen. Für jede dieser Aufga- 4 Pix2PixGan: https://smart-driving.htwk-leipzig.de/git/tgrund/pyloten/blob/master/src/ pix2pix.ipynb | 12
Autor: Sandra Hinz Projektarbeit Pylonenerkennung ben, als für Verringerung der Auflösung5 , Rotation6 und Zuschneiden7 , wurde ein Python Notebook erstellt. Die Transformationen werden auf die YOLO-Label angewendet. Verringerung der Auflösung (Grund) Dank des YOLO-Darknet-Formats ist die Verringerun der Auflösung trivial, denn die Labels müssen nicht angepasst werden. Dafür wird die Auflösung jedes Bild mithilfe von OpenCV verringert (siehe Abbildung 7). Dafür wird der Befehl cv2.resize(cv_img, dim, interpolation = cv2.INTER_AREA) verwendet. Hierbei ist cv_img das Original- bild, dim die neue Größe des Ergebnisbildes und die Interpolations-Methode cv2.INTER_AREA. Die Interpolations-Methode cv.INTER_AREA ist am genauesten, aber auch am langsams- tens. Da keine Echtzeitverarbeitung notwendig ist, ist diese tatsächlich auch zu bevorzu- gen. Standardmäßig wird jedes Bild um die Faktoren 0.75, 0.5, 0.25 und 0.125 verringert. Das neue Bild erhält den Namen {Name des Originalbildes}_rs_{Faktor ohne "0."} Abbildung 7: Verringerung der Auflösung auf 12.5% Rotation (Grund) Die Datensätze werden um einen Winkel ϕ gedreht, wobei ϕ ∈ {90, 180, 270}. Mithilfe von numpy kann das Bild mithilfe von np.rot90(cv_img, -(rotate_degree / 90)) gedreht werden (siehe Abbildung 8). Die Variable cv_img enthält wieder das Originalbild und rotage_degree enthält dabei den Wert von ϕ. Die Labels werden um den Drehwinkel ϕ im mathematischen Drehsinn gedreht. Man muss dabei beachten, dass der Ursprung im YOLO-Format bei (0.5,0.5)∈ R2 liegt. Die Drehung erfolgt für jeden Punkt mit der Abbildung 5 Verringerung der Auflösung: https://gitlab.imn.htwk-leipzig.de/tgrund/pyloten/blob/master/ src/1_resize_yolo_datasets.ipynb 6 Rotation: https://gitlab.imn.htwk-leipzig.de/tgrund/pyloten/blob/master/src/2_rotate_ yolo_datasets.ipynb 7 Zuschneiden: https://gitlab.imn.htwk-leipzig.de/tgrund/pyloten/blob/master/src/3_crop_ yolo_datasets.ipynb | 13
Autor: Sandra Hinz Projektarbeit Pylonenerkennung Dϕ : R2 → R2 mit ∀x ∈ R2 : Dϕ (x) = (x1 cos ϕ − x2 sin ϕ, x1 sin ϕ + x2 cos ϕ) Das neue Bild erhält den Namen {Name des Originalbildes}_rotate_{Winkel} Abbildung 8: Rotation um 90 Grad Zuschneiden (Grund) Das Zuschneiden der Datensätze wurde für das Trainieren der Netze nicht mehr ver- wendet. Allerdings wurden Vorbereitungen getroffen, um gegebenenfalls automatisch YOLO-Datensätze zuschneiden zu können (siehe Abbildung 10). Hierfür werden die Bil- der in vier Quadranten aufgeteilt (siehe Abbildung 9). Hierfür werden die Startpunkte der Grenzen mit {(0.0, 0.0), (0.5, 0.0), (0.0, 0.5), (0.5, 0.5)} angegeben und ein Offset mit 0.5. Der Offset wird mit jedem Punkt addiert, um die Endpunkte der Grenzen zu be- stimmen. | 14
Autor: Thomas Grund Projektarbeit Pylonenerkennung Abbildung 9: Aufteilung in Quadranten Nach dem zusammenschneiden, werden alle Punkte aller Boundingboxen überprüft, um festzustellen, ob mindestens ein Punkt einer Boundingbox in dem Bildausschnitt liegt. Das ist notwendig, um die Ecken der Boundingbox auf den Bildausschnitt zu reduzieren. Abbildung 10: Zugeschnitten (auf linken unteren Bereich) 3. YOLOv2 mit Darkflow (Grund) YOLOv2 (You Only Look Once version 2) ist ein Convolutional Neural Network (CNN), welches besonders für Anwendungen in Echtzeit konzipiert wurde und schneller ist als andere CNNs die zur Erscheinung (25. Dezember 2016) existierten [5]. Darkflow ist die YOLOv2 Implementierung mit Tensorflow. Die Arbeitshypothese ist, dass diese Imple- mentierung langsamer sein sollte als Darknet mit YOLOv3 [6]. Der Vorteil ist allerdings, dass es auf allen Systemen gleichermaßen gut verwendet werden kann und leicht zu por- tieren ist, weil es mit Python benutzt/implementiert wird. Die Darkflow Implementation kann unter https://github.com/thtrieu/darkflow be- zogen werden (Zugegriffen am 21.03.20). | 15
Autor: Thomas Grund Projektarbeit Pylonenerkennung 3.1. Voraussetzungen (Grund) Um den Darkflow-Code verwenden zu können, müssen vorher einige Voraussetzungen erfüllt werden. Hierbei ist es egal, ob diese unter Windows, Linux oder Mac eingerichtet werden: • Python 3.5 oder Python 3.6 • Tensorflow (GPU-Version mit CUDA) • OpenCV • Numpy 3.2. Aufbau/Funktionsweise (Grund) Die YOLO-Architektur besteht aus 24 Convolutional-Layer gefolgt von 2 Fully-Connected- Layer (siehe Abbildung 11). Im Gegensatz dazu entfallen diese Fully-Connected Layer bei YOLOv2. Abbildung 11: YOLO Layer - der grau eingefärbte Bereich fehlt bei YOLOv2 [7] Weitere Unterschiede zu YOLO in YOLOv2 sind: Bach Normalisierung Batch Normalisierung ist eine Technik zur Verbesserung der Geschwindikeit, Leistung und Stabilität. Sie wird zur Normalisierung der Eingabeschicht durch Anpassung und Skalierung der Aktivierungen verwendet [8]. High Resolution Classifier (448x448 statt 256x256) Nach dem Training mit 224224 Bildern verwendet YOLOv2 auch 448448 Bilder zur Feinabstimmung des Klassifikationsnetzes für 10 Epochen auf ImageNet[5]. | 16
Autor: Thomas Grund Projektarbeit Pylonenerkennung Anchor-Boxen In YOLO werden die Bounding-Boxen geschätzt, was dazu führt, dass die Erhöhung der Anzahl der Schätzung zu einem ungenaueren Ergebnis führen kann. In YOLOv2 werden hingegen die Faltungen mit Anchor-Boxen vorgenommen (siehe Abbildung 12). Anchor Boxen funktionieren so, dass sie für jeden Klassifikator (Label) eine Repräsenta- tion zu idealer Lokalisierung, Form und Größe des gesuchten Objektes enthält [9]. Für jede Anchor-Box wird ermittelt, welche Bounding-Box die höchste Überlappung geteilt durch die Nicht-Überlappung vorzuweisen hat (genannt Intersection Over Union). Un- terhalb eines Schwellwertes wird mitgeteilt, dass kein Objekt gefunden wurde. Das hat den Vorteil, dass immer die beste Schätzung genommen wird und dadurch sichergestellt wird, dass bei der Erhöhung der Epochen beim Training die Genauigkeit nicht abnehmen kann. (a) Schätzung der Bounding-Boxen (YOLO) (b) Convolution mit Anchor-Boxen (YOLOv2) Abbildung 12: YOLOv2 vs YOLO - Schätzung Bounding-Boxen Fine-Grained Features Die 1313 Feature-Map-Ausgabe ist für die Erkennung großer Objekte ausreichend. Um kleine Objekte gut zu erkennen, werden die 2626512 Feature-Maps aus früheren Ebenen in 13132048 Feature-Maps abgebildet und dann zur Erkennung mit den ursprünglichen 1313 Feature-Maps verkettet [5]. Multiskalierungs-Training Ein großer Vorteil der YOLOv2-Architektur ist es, dass nur Convolutional- und Pooling- Layer verwendet weden. Dadurch lässt sich die Größe des Modells im laufenden Betrieb verändern und es ist nicht nötig, die Eingabebilder alle in dieselbe Größe zu bringen. | 17
Autor: Thomas Grund Projektarbeit Pylonenerkennung 3.3. Konfiguration (Grund) Das Netz wurde mit einer angepassten Konfiguration trainiert, wofür die Datei yolov2-tiny.cfg8 als Grundlage herangezogen wurde. Die Datei ist im unteren Bereich derart angepasst, dass es für vier Klassen optimiert ist (siehe Listing 2). [ convolutional ] size =1 stride =1 pad =1 filters =45 # ( num * ( classes + 5) ) -> 5 * (5 + 5) activation = linear [ region ] anchors = 1.08 ,1.19 , 3.42 ,4.41 , 6.63 ,11.38 , 9.42 ,5.11 , 16.62 ,10.52 bias_match =1 classes =4 # 4 cones coords =4 num =5 softmax =1 jitter =.2 rescore =1 Listing 2: Angepasster Bereich der Datei yolov2-tiny Passend zu der yolov2-tiny.cfg Konfigurationsdatei, existiert eine minimale weights- Datei. Diese ist kaum vortrainiert, basiert auf dem Darknet Referenz Modell, ist viel kleiner und viel schneller als die vortrainierten Gewichte. Dafür ist es weniger akkurat [10]. Allerdings wollen wir das Netz auch komplett mit eigenen Daten trainieren und auch nur für die vier Labelarten, die wir definiert haben. Die Namen und Reihenfolge der Labels muss als Datei (siehe Listing 3) beim Trainieren mit angegeben werden. bluecone yellowcone smallredcone bigredcone Listing 3: Inhalt der label.txt 3.4. Training (Grund) Abgesehen von der Label-Definition, der Gewichte, Der Bilder, der Labels und der Kon- figuration, können noch weitere Parameter eingestellt werden. Dazu zählen: –batch: Wie viele Bilder parallel auf einmal bearbeitet wird. –gpu: Wie viel Prozent der Gesamt-GPU verwendet wird. 8 Online Zugriff unter: https://github.com/pjreddie/darknet/blob/master/cfg/yolov2-tiny.cfg | 18
Autor: Thomas Grund Projektarbeit Pylonenerkennung Diese beiden Parameter müssen beim Trainieren so angepasst werden, dass das Netz überhaupt trainiert wird, denn bei zu hohen Einstellungen bricht der Vorgang sofort ab, wenn dadurch die Grafikkarte zu sehr beansprucht wird. Zu niedrige Werte allerdings erhöhen die Trainingszeiten enorm. Wenn man alle Daten und Pfade zusammennimmt, dann kann das Netz entweder mit einem eigenen Python-Skript trainiert werden oder einfach über die Konsole (siehe Listing 4). python flow -- model ./ cfg / yolov2 - tiny -4 c . cfg -- load ./ weights / yolov2 - tiny . weights -- labels labels . txt -- train -- annotation train / all / annotations -- dataset train / all / images -- gpu 0.75 -- batch 16 > output . txt Listing 4: Befehl zum Trainieren des YOLOv2 Netzes | 19
Autor: Julius Seiffert Projektarbeit Pylonenerkennung 4. YOLOv3 (Seiffert) YOLOv3 ist eine Weiterentwicklung des YOLOv2 CNN und basiert auf dem Darknet Netzwerk. Es soll bis zu 1000 mal schneller als R-CNN und bis zu 100 mal schneller als Faster R-CNN sein, was sehr gut für die Echtzeiterkennung in der Problemstellung ist. Die Weiterentwicklung von YOLOv3 bringt insbesondere den Vorteil, dass auch die Genauigkeit für die Erkennung von kleineren Objekten verbessert wurde. Diese war leider in der vorherigen Versionen sehr schlecht. 4.1. Funktionsweise (Seiffert) YOLOv3 benutzt Darknet53 und damit 53 Convoutional Layer. Es benutzt somit 34 Layer mehr, als YOLOv2, was die Genauigkeit erhöht. Zusätzlich zu den Layern, gibt es auch noch Skip Connections, wie man es auch aus ResNet kennt. Abbildung 13: Darknet53[11] 4.1.1. Bounding Box Prediction (Seiffert) Wie auch in YOLOv2 werden in YOLOv3 AnchorBoxes für die Schätzung der Bounding Boxen verwendet. Hierbei sind die Anchorboxen der Initialwert zur Berechnung der Höhe und Breite der Bounding Boxen, wie man in 5 sieht. b . w = exp ( x [ index + 2* stride ]) * biases [2* n ] / w; b . h = exp ( x [ index + 3* stride ]) * biases [2* n +1] / h ; Listing 5: Berechnung der Bounding Boxen | 20
Autor: Julius Seiffert Projektarbeit Pylonenerkennung 4.1.2. Class Prediction (Seiffert) YOLOv3 verwendet eine Multilabel Klassifikation, da es Bounding Boxen geben kann die mehrere Objekte umfassen. Hierzu wurde der Softmax Layer weggelassen, da dieser Ansatz davon ausgeht, dass jede Box genau eine Klasse besitzt. Mit Hilfe von unabhän- gigen Klassifizierungen, kann ein Objekt mit unterschiedlichen Klassen erkannt werden. 9 Abbildung 14: Berechnung der unabhängigen Label[12] 4.1.3. Erkennung kleiner Objekte (Seiffert) Im Gegensatz zu den bisherigen YOLO Ansätzen, hat YOLOv3 die Erkennung von klei- neren Objekten deutlich verbessert. Hierzu wurden Skip Connections eingeführt, welche bessere Informationen zu kleineren Objekten aus früheren feature maps zur Berechnung einer neuen Map verwendet. Leider leidet die Performance der Erkennung von größeren Objekten darunter. 4.2. Implementation (Seiffert) Bei der Implementation wurde das Projekt https://github.com/AlexeyAB/darknet benutzt und auf die gewünscht Anwendung konfiguriert. Die ausführliche Dokumenta- tion und die zusätzlichen grafischen Validierungstools waren ausschlaggebend für diese Implementierung des Netzwerkes. 4.2.1. Voraussetzungen (Seiffert) Da das YOLOv3 Netzwerk größtenteils in C++ implementiert wurde, braucht es für die Kompilierung mindestens die CMake Version 3.8. Für die Bildverarbeitung wird 9 Beispielsweise kann ein Frau als Person und Frau erkannt werden. In dem Anwendungsfall dieses Projektes ist das weniger relevant. | 21
Autor: Julius Seiffert Projektarbeit Pylonenerkennung OpenCV verwendet. Hier wird mindestens die Version 2.4 benötigt, damit das Darknet Netzwerk ausgeführt werden kann. Für die Hardwarebeschleunigung wird eine nvidia Grafikkarte benötigt. Um die Grafi- kleistung nutzen zu können, muss außerdem das CUDA Toolkit 10.0, sowie mindestens cuDNN 7.0 für das CUDA Toolkit 10.0 installiert werden. 4.2.2. Konfiguration (Seiffert) Wie auch bei YOLOv2 gibt es auch in diesem Projekt das YOLOv3 und das YOLOv2- tiny Netzwerk, welches eine kleinere Konfiguration besitzt und damit schneller zu trai- nieren ist. [ net ] batch =24 subdivisions =4 width =416 height =416 channels =3 max_batches = 8000 policy = steps Listing 6: Konfiguration YOLOv3-tiny In Listing 6 werden die wichtigsten Parameter des Konfigurationfiles gezeigt. Diese soll- ten individuell nach Anzahl der Klassen und Ergebnisse des Trainings angepasst werden. batch beschreibt die Größe der Batchsize, d.h die Anzahl der Bilder, die für eine Kon- figuration geladen werden. subdevisions teilt den Batch in die gegebene Anzahl. Diese Anzahl wird dann an die GPU zum verarbeiten gesendet.10 width, heigth beschreiben die Größe der Bilder, die geladen werden. Diese werden au- tomatisch auf diese Größe skaliert und müssen nicht zuvor umgewandelt werden. Die beiden Parameter müssen den Faktor 16 beinhalten. channels steht für die Anzahl der Farbkanäle. Bei dem Parameter 3 ist dies RGB. Bei 1 wären dies Graustufen. max_batches steht für die maximale Anzahl an Iterationen, die zum lernen verwendet werden. (wird in anderen Netzwerken auch Epochen genannt) policy ist der Parameter für die Richtlinie in der die Lernrate verändert wird. Mit dem Argument ßteps"wird die Lernrate bei bestimmten Iteration verändert. 10 In dieser Konfiguration haben wir eine Batchsize von 24 und dazu 4 Subdevisions. Es werden daher 24/4 Bilder gleichzeitig an die Grafikkarte gesendet. | 22
Autoren: Thomas Grund Projektarbeit Pylonenerkennung 4.3. Training (Seiffert) Für das Training werden müssen in einer Textdatei die Pfade zu jedem Bild angegeben werden. Hierbei müssen die Label Dateien in dem gleichen Ordner liegen wie die Bild- dateien und jedes Label muss den gleichen Namen haben wie die zugehörige Bilddatei. ./ darknet detector train data / cones . data cfg / yolov3 - tiny - cone . cfg yolov3 - tiny . conv .15 - map Listing 7: Befehl zum Trainieren des Netzwerks Der Befehl in Listing 7 startet das Training des Netzwerks. Der Pfad "data/cones.data"gibt die Datei mit den Pfaden zu den Dateien der Trainings- und Validierungsdaten, sowie zu der Datei mit den Klassennamen der Label an. Der Pfad "cfg/yolov3-tiny-cone.cfg"gibt den Pfad zur Konfigurationsdatei des Netzwerks an. Die Datei "yolov3-tiny.conv.15"beinhaltet die vordefinierten Gewichtungen zu dem Netz- werk. Mit diesen Gewichtungen wird das Training gestartet. Das Flag -map gibt ein Diagramm zum Verlauf des Trainings aus. Das Netzwerk speichert nach einer bestimmten Anzahl von Epochen immer eine Da- tei mit dem Zwischenstand, damit bei einem Systemausfall das Training nicht von vorne begonnen werden muss. | 23
Autoren: Thomas Grund Projektarbeit Pylonenerkennung 5. Auswertung und Vergleich der Netze 5.1. Hardware(Seiffert) Um die Netze möglichst objektive zu bewerten, wurden diese mit der gleichen Hard- warekonfiguration trainiert und ausgewertet. Der Rechner auf dem die Netze trainiert wurden beinhaltet folgendes: • GPU: nVidia GTX1070 TI • CPU: AMD Ryzen 5 2600 • RAM: 16GB DC • OS1: Ubuntu 19.06 (YOLOv3) • OS2: Windows 10 Pro (YOLOv2) Es gestaltete sich als schwierig YOLOv3 unter Windows zu kompilieren, da hier das Zu- sammenspiel zwischen CUDA, openCV und cmake nicht reibungslos funktioniert. Daher wurde YOLOv3 unter Ubuntu und nicht unter Windows trainiert. 5.2. Training(Seiffert) Das das Training der beiden Netze auf der gleichen Hardware passierte, kann man die Netze gut gegenüberstellen. Auffällig war, dass das Training des YOLOv3 Netzes die in der Konfigurationsdatei angepassten 8.000 Iterationen problemlos innerhalb von 2 Stunden trainiert hat. Das YOLOv2 Netz hingegen hat weiter bis zu 80.000 Iterationen trainiert, was ca. 20 Stunden gedauert hat. Hier lässt sich sagen, dass das YOLOv2 Netz um einiges länger braucht, um die Gewichtungen zu trainieren. 5.2.1. Trainingsergebnisse YOLOv2 (Seiffert und Grund) Bei den Trainingsergebnissen in YOLOv2 konnte leider nicht die mAP während des Trainings ausgegeben werden. Somit kann hier nur auf die Loss Daten eingegangen werden. | 24
Autoren: Thomas Grund Projektarbeit Pylonenerkennung Abbildung 15: Trainingsergebnisse mit AMZ1, AMZ2, AMZ3(Grund) In Abbildung 15 wurden nur die Trainingsdaten aus den AMZ Ordnern verwendet. Hier gab es noch keine Transformationen auf die Daten. Die Loss Rate war ungefähr bei 8. In anderen Trainingssätzen kann hier eine Rate von 0.5 erreicht werden. Die Loss Rate galt es zu verbessern mit Hilfe eines erweiterten Datensatz. Abbildung 16: Trainingsergebnisse mit allen Daten (Grund) In Abbildung 16 wurden alle Trainingsdaten mit den Transformationen und dem KIT- TI Datensatz zum verhindern des Overfittings benutzt. Wie man sehen kann wurde das Netz auch deutlich länger trainiert, bis zu 10.000 Iterationen. Hier ist auffällig, dass sich die Loss Rate bei 8.000 Iterationen nicht mehr verbessert hat. Somit ist vermutlich ein längeres Training nicht sinnvoll. Die Loss Rate hat sich hier sogar noch einmal verschlechtert auf 20. | 25
Autoren: Thomas Grund Projektarbeit Pylonenerkennung Abbildung 17: Trainingsergebnisse mit ohne Transformationen(Grund) Zum Schluss wurde noch ein Versuch unternommen das Training zu verbessern. Der Trainingsverlauf wird hier in Abbildung 17 beschrieben. Hier wurden die Transformatio- nen der Daten herausgenommen. Auffällig war hier die deutliche Verbesserung der Loss Rate auf 5. Was eine deutliche Verbesserung auf die vorherigen Datensätze aufweist. 5.2.2. Trainingsergebnisse YOLOv3 (Seiffert) Die Trainingsergebnisse variieren stark, abhängig von den genutzten Trainingsdaten. | 26
Autoren: Thomas Grund Projektarbeit Pylonenerkennung Abbildung 18: Trainingsergebnisse mit AMZ1, AMZ2, AMZ3 Zuerst wurde das Netz nur mit den gelabelten Bildern aus AMZ1, AMZ2 und AMZ3 trainiert. Wie in Figure 18 zu sehen ist, gingen die Loss Werte am Ende gegen 0 und die mAP Werte waren bei 36%. Dies sind noch keine optimalen Ergebnisse, daher sollten die Netze mit mehr Daten und vollständig gelabelten Daten trainiert werden. Das Ziel war ein Ergebnis von mindestens 70 Prozent. Das Training wurde mit zusätzlichen Real-World Daten und synthetischen Daten wie- derholt. | 27
Autoren: Thomas Grund Projektarbeit Pylonenerkennung Abbildung 19: Trainingsergebnisse mit allen Daten, ohne KITTI Erstaunlicherweise wurden die Werte des Trainings nicht besser, sondern viel schlech- ter, wie Figure 19. Die Loss Werte waren bei 3.0 und die mAP hat sich seit der 6.000ten Epoche nicht über 13% verbessert. In einem Testvideo fiel auf, dass es noch zu vielen Overfitting Fehlern kam, welche es zu vermeiden galt. Der komplette Datensatz wurde mit dem KITTI-Datensatz erweitert, in dem es kei- ne Pylonen gab. | 28
Autoren: Thomas Grund Projektarbeit Pylonenerkennung Abbildung 20: Trainingsergebnisse mit allen Daten und KITTI Leider hatte dies fast keinen Einfluss auf die Qualität des Trainings. Deutlich wurde eine zunehmende Verbesserung der Loss Werte diese ist von 3.0 auf 2.5 gesunken. | 29
Autoren: Thomas Grund Projektarbeit Pylonenerkennung 5.3. Testdaten mit transformierten Bilder (Grund) Nach dem Training wurden beide Netze auf einen gemeinsamen Testdatensatz angewen- det, der sich aus allen Bildquellen zusammensetzt (siehe Abbildung. 21). Das Ergebnis fällt für beide Netze sehr schlecht aus (YOLOv2: mAP 0.022% und YOLOv3: mAP 13.4%), wobei das YOLOv3 Netz noch etwas besser abschneidet. Besonders hervorzu- heben ist die sehr hohe Anzahl an False Positives für das YOLOv2 Netz (siehe Abbil- dung 22(a)). Außerdem finden beide Netze keine roten Pylonen und das unabhängig der Größe (siehe Abbildung 22(a) und 22(b), wobei Klassen mit 0 Treffern weggelassen wurden). Abbildung 21: Ground Truth: Anzahl der Labels nach Klassen (a) YOLOv2 (b) YOLOv3 Abbildung 22: YOLOv2 und YOLOv3 - Detection Results mit transformierten Bilder Einen Auszug der gelabelten Daten kann im Anhang den Abbildungsgruppen 25, 26, 27, 28 und 29 gefunden werden. | 30
Autoren: Thomas Grund Projektarbeit Pylonenerkennung 5.4. Trainingsdaten ohne transformierten Bilder (Grund) Nach dem Training wurden beide Netze auf einen gemeinsamen Testdatensatz angewen- det, der sich aus den Bildquellen ohne Transformationen zusammensetzt (siehe Abbil- dung. 23). Die Ergebnisse sind zwar etwas besser als vorher, allerdings immernoch so schlecht, dass die trainierten Netze nicht praktikabel sind (siehe Abbildung 24). Abbildung 23: Ground Truth: Anzahl der Labels nach Klassen (a) YOLOv2 (b) YOLOv3 Abbildung 24: YOLOv2 und YOLOv3 - Detection Results ohne transformierte Bilder Einen Auszug der gelabelten Daten kann im Anhang den Abbildungsgruppen 30, 31, 32, 33 und 34 gefunden werden. | 31
Autoren: Hinz, Seiffert und Grund Projektarbeit Pylonenerkennung 6. Zusammenfassung (Seiffert) Das Projekt war erfolgreich im Sinne des didaktischen Verständnisses mit der Thematik der Convolutional Neural Networks, jedoch weniger im Bereich der produktiven Anwen- dung. Aufgrund der Test- und Trainingsergebnisse kann man darauf schließen, dass die Test- daten leider zu unpassend gewählt waren. Es wurde versucht mittels einfachen Bildern aus Videodateien in YouTube und simulierten Daten ein Neuronales Netz zu erstellen. Hierbei wurden auch viele Methoden zur Vervielfältigung und Erweiterung der Daten angewandt. Leider hatte dies nur wenig Erfolg. Auch der Versuch den Trainingsdatensatz mit Trainingsdaten aus verschiedenen Quellen zu erweitern ist leider fehlgeschlagen. Ein sinnvollerer Ansatz wäre die Erstellung von Trainingsdaten mit der Kamera und der Bildqualität, die in der Anwendung schlussendlich auch verwendet werden soll. Hier sollte auch eine Erweiterung der Daten mit den Methoden, die in diesem Dokument vorgestellt wurden einen besseren Erfolg erzielen. Zum Vergleich der beiden Netze YOLOv2 mit Darkflow und YOLOv3 mit Darknet lässt sich sagen, dass die Verbesserung des Netzes deutlich sichtbar ist. Während mit YOLOv2 die Testergebnisse sehr schlecht waren, waren sie mit YOLOv3 deutlich besser. Leider waren sie nicht so gut, dass das Netz in der Praxis verwendet werden kann. Auch das Trainieren des YOLOv3 Netzes ging schneller als das Netz der Version 2. Vermutlich kommt es daher, da die Grafikprozessorleistung mit dem Darknet Netzwerk vollkommen ausgeschöpft werden konnte. Mit Sicherheit können die Ergebnisse der Netze auch in diesem speziellen Anwendungs- fall verbessert werden. Die Ergebnisse sollten auf keinen Fall als Beweis dafür angesehen werden, dass YOLO in diesem Anwendungsgebiet nicht praktikabel ist. Hierfür waren leider nicht die technischen Voraussetzungen, sowie die Zugänglichkeit von weiteren und sinnvolleren Datenquellen gegeben. | 32
Autoren: Hinz, Seiffert und Grund Projektarbeit Pylonenerkennung A. Anhang A.1. Vergleichsbilder von Trainingsdaten (mit transfomierten Bildern) (a) YOLOv2 (b) YOLOv3 Abbildung 25: YOLOv2 vs YOLOv3 - Vergleich all_fern_sun_rs_75.jpg (a) YOLOv2 (b) YOLOv3 Abbildung 26: YOLOv2 vs YOLOv3 - Vergleich bmz0007_rs_75.jpg | 33
Autoren: Hinz, Seiffert und Grund Projektarbeit Pylonenerkennung (a) YOLOv2 (b) YOLOv3 Abbildung 27: YOLOv2 vs YOLOv3 - Vergleich gazebo000053.jpg (a) YOLOv2 (b) YOLOv3 Abbildung 28: YOLOv2 vs YOLOv3 - Vergleich racecar0001.jpg (a) YOLOv2 (b) YOLOv3 Abbildung 29: YOLOv2 vs YOLOv3 - Vergleich racecar0168_rs_25.jpg | 34
Autoren: Hinz, Seiffert und Grund Projektarbeit Pylonenerkennung A.2. Vergleichsbilder von Trainingsdaten (ohne transfomierten Bildern) (a) YOLOv2 (b) YOLOv3 Abbildung 30: YOLOv2 vs YOLOv3 - Vergleich bmz0008.jpg (a) YOLOv2 (b) YOLOv3 Abbildung 31: YOLOv2 vs YOLOv3 - Vergleich bmz37.jpg | 35
Autoren: Hinz, Seiffert und Grund Projektarbeit Pylonenerkennung (a) YOLOv2 (b) YOLOv3 Abbildung 32: YOLOv2 vs YOLOv3 - Vergleich bmz0073.jpg (a) YOLOv2 (b) YOLOv3 Abbildung 33: YOLOv2 vs YOLOv3 - Vergleich gazebo000039.jpg | 36
Autoren: Hinz, Seiffert und Grund Projektarbeit Pylonenerkennung (a) YOLOv2 (b) YOLOv3 Abbildung 34: YOLOv2 vs YOLOv3 - Vergleich racecar0002.jpg B. Glossar Blender: Eine freie 3D-Grafiksuite die das modellieren, texturieren und animieren von Körpern ermöglicht. CNN : Convolutional Neural Network - eine Klassifizierung von Neuronalen Netzen, die auf dem Konzept der Faltungen aus der Bildverarbeitung basieren. GAN: Generative Adversarial Networks Gazebo: Ein Open-Source 3D Robotik Simulator. KITTI Datensatz: Datensatz, der eine Vielzahl an Bildern von Straßen und verschiede- nen Verkehrssituationen beinhaltet. mAP: mean average Precesion Overfitting: Korrektur eines Modells an einem vorgegebenen Datensatz. In Bezug auf das maschinelle Lernen bedeutet es, dass nicht vorhandene Muster im Datensatz erkannt werden und das Lernen negativ beeinflussen, was zu falschen Ergebnissen führt. YOLO: You only look once - ist ein CNN, welches für Echtzeitanwendungen konzipiert wurde. | 37
Autoren: Hinz, Seiffert und Grund Projektarbeit Pylonenerkennung Literatur [1] (2020) FSG Competition Handbook 2020. htt- ps://www.formulastudent.de/fileadmin/user_upload/all/2020/rules/FSG20_Competition_Handbook [Zugegriffen: 20.03.2020]. [2] (2017) Autonomous Racing: AMZ Driverless with flüela. htt- ps://youtu.be/FbKLE7uar9Y. [Zugegriffen: 20.03.2020]. [3] (2018) Learning-based motion planning for AMZ Driverless. htt- ps://youtu.be/aCDPwZZm9C4. [Zugegriffen: 20.03.2020]. [4] (2019) Revolve NTNU: Autonomous Racecar. https://youtu.be/_2T3MFnWG7A. [Zugegriffen: 20.03.2020]. [5] J. Redmon und A. Farhadi, “YOLO9000: Better, Faster, Stronger,” ar- Xiv:1612.08242 [cs], Dez. 2016. [6] “Comparison of YOLO in Darknet versus YOLO in Darkflow,” https://www.linkedin.com/pulse/comparison-yolo-darknet-versus-darkflow- rasmus-kromann. [7] J. Redmon, S. Divvala, R. Girshick, und A. Farhadi, “You Only Look Once: Unified, Real-Time Object Detection,” arXiv:1506.02640 [cs], Mai 2016. [8] S. Ioffe und C. Szegedy, “Batch normalization: Accelerating deep network training by reducing internal covariate shift,” 2015. [9] A. Christiansen, “Anchor Boxes — The key to quality object detec- tion,” https://medium.com/@andersasac/anchor-boxes-the-key-to-quality-object- detection-ddf9d612d4f9, Mai 2019. [10] “YOLO: Real-Time Object Detection,” https://pjreddie.com/darknet/yolov2/. [11] (2018) YOLOv3: An Incremental Improvement. htt- ps://pjreddie.com/media/files/papers/YOLOv3.pdf. [Zugegriffen: 26.03.2020]. [12] (2019) YOLO, YOLOv2 and YOLOv3: All You want to know. https://medium.com/@amrokamal_47691/yolo-yolov2-and-yolov3-all-you-want- to-know-7e3e92dc4899. [Zugegriffen: 26.03.2020]. | 38
Sie können auch lesen