Objekterkennung mit YOLO (You Only Look Once)

Dank Fortschritten im Bereich Machine Learning können Algorithmen inzwischen zuverlässig unterschiedlichste Objekte in Fotos und Videos erkennen. Einige Ansätze setzen dabei eher auf Genauigkeit, andere auf Geschwindigkeit. In diesem Artikel werfen wir einen genaueren Blick auf ein Modell namens YOLO und seine blitzschnelle Objekterkennung.

Was ist YOLO?

You Only Look Once (YOLO) ist ein System zur Echtzeit-Objekterkennung und wurde 2015 erstmals von Redmon et al. beschrieben. Die Autoren verbesserten den Algorithmus daraufhin stetig und veröffentlichten jährlich neue Versionen. Joseph Redmon, der Leiter des Projekts, äußerte jedoch bald Bedenken bezüglich der Einsatzmöglichkeiten dieser Technologie im Militär oder zur Überwachung, und stellte seine Forschungen ein.

2020 nahmen Bochkovskiy et al. das Projekt wieder auf und stellten das auf Redmons Algorithmus basierende YOLOv4 vor. Seitdem haben verschiedene Entwickler:innen den quelloffenen Code verbessert und neue Versionen veröffentlicht. Die momentan aktuelle Version ist YOLO v7.

Welche Vorteile bietet YOLO?

Der größte Unterschied zwischen YOLO und anderen Systemen für die Objekterkennung steckt bereits im Namen: Es genügt ein einziger Blick aufs Bild. Der Algorithmus demonstrierte bei seiner Veröffentlichung erstmals die Effektivität eines einstufigen Ansatzes. Andere Modelle setzten zu dieser Zeit auf einen langsameren, zweistufigen Prozess bestehend aus Lokalisierung und Identifizierung. 

YOLO hingegen ist äußerst schnell und kann je nach Hardware bis zu 45 Bilder pro Sekunde verarbeiten. Das bedeutet, dass es Videos mit entsprechender Framerate in Echtzeit verarbeiten kann. Außerdem gibt es eine YOLO-Variante, die auf Kosten der Genauigkeit bis zu 155 FPS erreicht.

Welche Nachteile hat YOLO?

Die Geschwindigkeit des YOLO-Algorithmus und ähnlicher einstufiger Modelle macht sie besonders geeignet für Anwendungsfälle wie das autonome Fahren, bei dem ins Bild eintretende Objekte so schnell wie möglich verarbeitet werden müssen. 

Die erste YOLO-Version hatte aber auch Nachteile gegenüber den damaligen zweistufigen Objekterkennungssystemen: Zum einen war die Lokalisierung fehleranfälliger als bei anderen Modellen, z. B. R-CNN. Zum anderen hatte YOLO Probleme mit der Erkennung sehr kleiner und nah beieinander liegender Objekte. Grund hierfür war, dass der Algorithmus nur ein Objekt pro Rasterzelle erkennen konnte. Die neueren Versionen schaffen immerhin fünf. 

Um zu verstehen, woran das liegt, müssen wir uns die Bildverarbeitung durch YOLO genauer ansehen.

Wie funktioniert die Objekterkennung mit YOLO?

YOLO verarbeitet Bilder in nur einem Durchlauf, der sich dennoch in Einzelschritte unterteilen lässt. Dabei sollte man beachten, dass der Algorithmus erst auf die zu erkennenden Objekte trainiert werden muss. In unserem Beispiel ist er in der Lage, die folgenden Objektklassen zu erkennen: Person, Stuhl, Laptop, Handy, Tasse, Topfpflanze und Vase (sowie einige andere Klassen, die aber nicht im Bild erscheinen, z. B. Vogel).

Unter Berücksichtigung dessen verarbeiten wir folgendes Beispielbild:

Input image for object detection with YOLO
  1. YOLO teilt das Bild zunächst in ein Raster ein. Der Einfachheit halber nehmen wir in diesem Beispiel ein Raster mit 4 x 4 Zellen.
  2. Jede Rasterzelle überprüft, ob sie ein Objekt (oder einen Teil davon) enthält und um welche Objektklasse es sich handelt. Ist ein Objekt vorhanden, zeichnet die Zelle zwei mögliche Begrenzungsrahmen darum.
  3. Zum Schluss werden die Begrenzungsrahmen auf einen pro Objekt reduziert. Übrig bleiben nur diejenigen, von denen das Modell glaubt, dass sie das Objekt am besten eingrenzen.
Three stages of the YOLO object detection algorithm

Der zuvor beschriebenen Probleme des YOLO-Algorithmus sind auf diese Vorgehensweise zurückzuführen: Jede Zelle muss entscheiden, ob sie ein Objekt enthält oder nicht, aber sehr kleine Objekte werden womöglich als Teil des Hintergrunds wahrgenommen und daher nicht als solche erkannt. 

Jede Zelle kann außerdem nur eine geringe Anzahl an Objekten umfassen. Befinden sich mehrere Objekte nah beieinander, erkennt YOLO daher mitunter nur eines davon. Beispielsweise konnte es in diesem Bild nur fünf der neun Vögel erkennen:

Photo of a flock of birds with corresponding bounding boxes

Trotz dieser Nachteile überzeugt YOLO als Objekterkennungssystem dank seiner Geschwindigkeit, für die zugleich kaum Präzision geopfert wird. Selbst mit hektischen Videos kommt es gut zurecht, wie dieser Clip demonstriert. Hier wurde YOLO v2 auf eine Szene aus dem Film “Skyfall” losgelassen.

So probieren Sie die Objekterkennung mit YOLO selbst aus

Um YOLO zu testen, benötigen Sie keine leistungsstarke Hardware, auch wenn Ihnen die Echtzeiterkennung einer 007-Verfolgungsjagd wohl verwehrt bleiben wird.

Auf Mac und Linux (Windows ist etwas komplizierter) können Sie mit dem folgenden Befehl das ursprüngliche GitHub-Projekt von Joseph Redmon klonen (falls Git nicht installiert ist, können Sie das Projekt als ZIP-Datei herunterladen und entpacken), um YOLO v3 auszuprobieren:

git clone https://github.com/pjreddie/darknet.git

(Keine Sorge, trotz der Bezeichnung “Darknet” hat das nichts mit dubiosen Online-Aktivitäten zu tun. Es handelt sich um ein quelloffenes Framework für neuronale Netzwerke, geschrieben in C und CUDA.)

Wechseln Sie als Nächstes in den Order darknet und bereiten Sie es für den Einsatz vor:

cd darknet
make

Laden Sie nun die Datei mit den vortrainierten Gewichten für den Algorithmus von Redmons Website herunter und legen Sie sie im Ordner darknet ab oder verwenden Sie den folgenden Befehl:

wget https://pjreddie.com/media/files/yolov3.weights

YOLO ist jetzt einsatzbereit!

Wenn Sie Ihre Bilddatei im Ordner data (ein Unterordner von darknet) ablegen, können Sie mit dem Befehl detect die Objekterkennung starten. (Ersetzen Sie einfach {filename.extension} mit dem Dateinamen und der -Endung Ihres Bildes, z. B. example.jpg.)

./darknet detect cfg/yolov3.cfg yolov3.weights data/{filename.extension}

Nach dem Durchlauf teilt YOLO Ihnen mit, wie lange es gebraucht hat, um Ihr Bild zu verarbeiten, und wie zuversichtlich der Algorithmus ist, dass alle Objekte erkannt wurden. Probieren Sie verschiedene Motive aus und beobachten Sie die Leistung des Modells. 

Übrigens kann YOLO auch Objekte in Zeichnungen erkennen, wobei die Fehlerquote dabei wesentlich höher ausfällt. Wenn Sie nach einer echten Herausforderung suchen, versuchen Sie den Algorithmus anhand eines selbst erstellten Datensatzes auf Illustrationen zu trainieren.

Drawings of objects being recognized by the YOLO algorithm

Alternativen zur Objekterkennung mit YOLO

Wie bereits erwähnt, gibt es für die Objekterkennung in Echtzeit diverse Alternativen zu YOLO. Das Scanbot SDK verwendet Computer Vision und Deep Learning, um Barcodes, Dokumente und Datenmuster zu erkennen. Hierfür kommen mehrere unterschiedliche, speziell auf unsere Anwendungsfälle trainierte Echtzeitdetektoren zum Einsatz, die wir teils selbst entworfen, teils auf bereits existierender Architektur aufgebaut haben. Wir können dadurch bestimmte Annahmen in die Modelle integrieren und sie kleiner, effizienter und schneller gestalten als allgemeine Objektdetektoren wie YOLO.

Wir haben unsere Modelle so entwickelt, dass sie auch auf leistungsschwachen Geräten funktionieren. Aus diesem Grund verwenden wir recheneffiziente Elemente wie separable convolutions. Unsere Lösungen nutzen für Computer Vision und Machine Learning einen Hybridansatz und verwenden ein oberflächliches Objekterkennungsmodell basierend auf CNN-Architektur. Dessen Ergebnisse werden abhängig von der jeweiligen Aufgabe durch unterschiedliche heuristische Verfahren verfeinert.

Unsere gezielt trainierten Algorithmen für die Objekterkennung sind Teil aller drei Scanbot SDKs: Barcode Scanner SDK, Document Scanner SDK und Data Capture SDK. Möchten Sie deren Computer Vision- und Deep Learning-Funktionalitäten für Ihren Anwendungsfall nutzen? Dann kontaktieren Sie gerne unsere Lösungsexpert:innen! Wir freuen uns darauf, Ihnen bei der Anpassung dieser Technologie an Ihren Anwendungsfall behilflich zu sein.

Bereit zum Ausprobieren?

Sprechen Sie mit unseren Lösungsexpert:innen! Gemeinsam finden wir eine Lösung für Ihre Anforderungen an die mobile Datenerfassung – oder Sie integrieren das Scanbot SDK gleich in Ihre eigene mobile App oder Webseite.

Jetzt testen