Projekt Objekt- und Gestenerkennung - HTWK Smart Driving

Die Seite wird erstellt Rafael Kirsch
 
WEITER LESEN
Projekt Objekt- und Gestenerkennung - HTWK Smart Driving
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
Projekt Objekt- und Gestenerkennung - HTWK Smart Driving
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
Projekt Objekt- und Gestenerkennung - HTWK Smart Driving
Projektarbeit Pylonenerkennung

B. Glossar                                37

                                          |3
Projekt Objekt- und Gestenerkennung - HTWK Smart Driving
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
Projekt Objekt- und Gestenerkennung - HTWK Smart Driving
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
Projekt Objekt- und Gestenerkennung - HTWK Smart Driving
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