YOLO ist ein Framework zur Objekterkennung, das von NutzerInnen etwa mit OpenCV sehr einfach genutzt werden kann. Bei ausreichender Rechenleistung ist YOLO in der Lage, in Echtzeit mit bis zu 30 FPS Objekte zu erkennen. Auch in Bezug auf die Genauigkeit werden bessere Ergebnisse erzielt als von anderen Netzwerken zur Objekterkennung. Dieser Wiki Artikel befasst sich mit der Funktionsweise bzw. dem Aufbau von YOLOv4 aus technischer Perspektive und erklärt das Zusammenspiel der verschiedenen Komponenten. Grundlage sind dabei im Wesentlichen die folgenden Paper:

Grundlegender Aufbau #

Vereinfachte Darstellung der YOLOv4-Architektur

Die obenstehende Abbildung zeigt vereinfacht dargestellt den Informationsfluss durch die verschiedenen Komponenten der Objekterkennung, wie aus einem Inputbild Bounding Boxes sowie zugehörige Klassen abgeleitet werden. Die drei Abschnitte Backbone, Neck und Head erfüllen dabei verschiedene Aufgaben, die nachfolgend weiter spezifiziert werden. YOLOv4 nutzt im Backbone CSP-Darknet53, im Neck Spatial Pyramid Pooling sowie Path Aggregation Networks und im Head bestehende Komponenten von YOLOv3 (Bochkovskiy, Wang, & Liao, 2020, S. 7). Die Funktionen der einzelnen Komponenten sowie deren Zusammenspiel wird nachfolgend weiter spezifiziert.

Backbone #

Allgemein werden die Netzwerke im Backbone dazu genutzt, mit Hilfe von Convolution und MaxPooling Schichten Features aus dem Input-Bild zu generieren und werden daher auch als Feature Extractor bezeichnet (Bochkovskiy et al., 2020, S. 2). Einige Beispiele sind VGG16, ResNet-50 oder ResNeXt50. YOLOv4 nutzt als Feature Extractor CSP-Darknet50, das zu den residualen Netzwerken zählt. Diese verbessern mit sogenannten Skipverbindungen den Informationsfluss und ermöglichen das Training von großen Netzwerken (He et al., 2015). Die Abkürzung CSP steht für Cross Stage Partial und meint die Methodik, dass jeweils nur ein Teil des Bildes durch Convolution bearbeitet und anschließend mit dem verbleibenden Teil wieder zusammen geführt wird. Vorteil davon ist ein besserer Informations- bzw. Gradientenfluss, der das Training des Netzwerks erheblich beschleunigt und die Ergebnisse verbessert (Wang et al., 2019, S. 4–6). Output vom Backbone zum Neck sind Feature-Maps, also die Ausgabe von Convolution Schichten.

Neck #

Das Neck stellt die Verbindung zwischen Backbone und Head dar und transformiert die Feature Maps weiter. Durch Path Aggregation Networks können einzelne zusammenhängende Instanzen und daraus die zugehörigen Bounding Boxes ermittelt werden. PANet nutzt eine Bottom-Up-Path-Aggregation sowie Adaptive-Feature-Pooling, um verschiedene Feature Ebenen miteinander zu kombinieren und daraus eine pixelgenaue Vorhersage der Instanzen treffen zu können (Liu et al., 2018, S. 3–5). Zweiter Bestandteil vom Neck ist das Spatial Pyramid Pooling, das Eingaben unabhängig von ihrer Größe durch 3-Level-Pooling zu Feature-Vektoren einheitlicher Länge transformiert. Hintergrund dieser Transformation ist, dass nachfolgende Dense-Schichten zur Klassifikation der gefundenen Instanzen eine konstante Größe benötigen, da die einzelnen Neuronen eine feste Anzahl an Gewichten haben (He et al., 2014, S. 1–2).

Head #

Im letzen Schritt der Objekterkennung müssen die gefundenen Instanzen einer oder mehreren Klassen zugeordnet werden. YOLOv4 nutzt dafür die bestehende Methodik aus YOLOv3. Auf Basis eines Multilabel-Klassifikationsproblems wird für jede Instanz bzw. Bounding Box die Wahrscheinlichkeit ausgegeben, dass die Klasse zu finden ist. Ein Objekt kann daher keiner, einer oder mehreren Klassen zugeordnet werden (bspw.
durch hierarchisch orientierte Klassen wie Apfel und Obst) (Redmon & Farhadi, 2018, S. 2). Endgültige Ausgabe vom Head ist daher ein Vektor je Objekt mit Wahrscheinlichkeiten für jede Klasse sowie den Koordinaten der zugehörigen Bounding Box.

Anwendung #

Vergleich der Objekterkennung durch YOLOv4 (links) und Frame Differencing (rechts)

Im Vergleich zu weitaus simpleren Verfahren zur Objekterkennung, wie etwa dem Frame Differencing, kann YOLOv4 in Bezug auf die Genauigkeit deutlich bessere Ergebnisse erzielen. Zudem besteht die Möglichkeit, einen Custom-Classifier zu trainieren. Dieser ist dann in der Lage, individuell gewählte Klassen von Objekten zu erkennen und ist nicht auf die vortrainierten Klassen beschränkt. Ein Link dazu findet sich untenstehend im weiterführenden Material.

Weiterführende Links:
– Custom YOLO Classifier trainieren: https://medium.com/analytics-vidhya/train-a-custom-yolov4-object-detector-using-google-colab-61a659d4868
– YOLOv4 Object Detection Tutorial: https://machinelearningknowledge.ai/yolov4-object-detection-tutorial-with-image-and-video/
– Projekt “Objekterkennung mit YOLOv4”: Objekterkennung mit YOLOv4

Schreibe einen Kommentar