13. Juli 2020 / von Nicolai Minter, Moritz Klein

Obejkterkennung -

mit Hochgeschwindigkeit

on Edge!

Wie man Objekte in Videos trotz niedriger Rechenleistung in Echtzeit erkennt

Objekterkennung – Was ist das?

Als Objekterkennung wird das Erkennen von einem oder mehreren Objekten in einem Bild bezeichnet. Diese Technologie wird unter anderem für das autonome Fahren eingesetzt, um mögliche Hindernisse und Verkehrszeichen zu identifizieren. In der Industrie können damit zum Beispiel oberflächliche Defekte an Produkten festgestellt werden.

In den meisten Fällen werden erkannte Objekte mithilfe einer “Bounding Box” gekennzeichnet, welche das Objekt idealerweise vollständig einrahmt.

Eine beispielhafte Vorhersage ist in Abbildung 1 zu sehen. In diesem Verkehrsbild werden insgesamt vier Objekte lokalisiert, die jeweils einer der Klassen Car, Bike oder Pedestrian zugeordnet werden. Die Klassen sind die Menge der Objekte, die man voneinander unterscheiden möchte.

Objekterkennung bei Verkehrsüberwachung
Abbildung 1: Objekte bei der Verkehrsüberwachung

Wie geht das überhaupt?

Zur Objekterkennung brauchen wir ein Modell mit Ein- und Ausgabe. Hier ist die Eingabe ein Bild (bzw. eine Sequenz von Bildern bei Videos). Die Eingabe durchläuft das Modell in vielen Schritten. Am Ende erhalten wir von dem Modell eine Ausgabe. Bei der Objekterkennung wären dies Bounding-Boxes und entsprechende Klassen.
Es gibt viele Möglichkeiten ein Modell zu erstellen. Bei der Bildverarbeitung hat sich vor allem Deep Learning bzw. Convolutional Neural Networks (CNN) durchgesetzt. CNNs sind Modelle, die durch biologische Prozesse inspiriert wurden. CNNs versuchen zuerst, einfache Eigenschaften aus Bildern zu extrahieren und diese später zu komplexeren Strukturen zusammenzufügen. So werden beispielsweise anfangs Kanten erkannt, diese Kanten formen Linien, welche wiederum Formen bilden.

Einen genaueren Einblick von CNNs kannst Du hier und hier erwerben.

Womit geht das schnell?

Für die folgenden Use Cases stand vor allem das Kriterium Performanz im Vordergrund. Konkret heißt das, die Objekterkennung energiesparend auf ressourcenarmen Geräten mit hohem Durchsatz (viele Bilder pro Sekunde) auszuführen. Dazu setzen wir unter anderem auf den Nvidia Technologiestack: Transfer Learning Toolkit (TLT), TensorRT, DeepStream und das Entwicklerboard der Nvidia Jetson Familie, den Jetson Nano.

Um ein neues Modell zu trainieren, werden in der Regel viele Daten benötigt, da es sich um statistische Verfahren handelt, die erst bei einer großen Menge an Daten zuverlässig Muster erkennen. Hat man allerdings bereits ein Modell zum Erkennen von PKWs zur Hand, kann es durch kleine Modifikationen auch LKWs erkennen. Das PKW Modell erkennt bereits Eigenschaften wie einen Reifen und kann das gelernte Wissen auf LKW-Reifen transferieren. Dieser Prozess wird auch als Transfer Learning bezeichnet und wird unter anderem verwendet, wenn nur wenige Daten vorhanden sind. Wir haben das Transfer Learning Toolkits (TLT) verwendet, um ein zuvor trainiertes Modell auf unsere Daten anzupassen.

TensorRT / Pruning entfernt Sektionen aus dem Modell, die wenig bis keine Auswirkung auf die Ausgabe haben. Dies verringert zwar geringfügig die Genauigkeit, dafür erhalten wir ein kleineres Modell, welches sich schneller ausführen lässt. 
Nun kann man sich die Frage stellen, warum es nicht sinnvoll ist, von Anfang an ein kleines Modell zu erstellen. Es hat sich als schwer erwiesen, ein kleines Modell zu trainieren, das am Ende die Genauigkeit von einem ehemals großen anschließend gepruntem Modell erzielt. Das hängt damit zusammen, dass anfangs Modelle zufällig initialisiert werden. Das ist mit dem Ziehen von Lottokarten zu vergleichen: Hat man viele Karten (großes Modell), hat man eine bessere Chance zu gewinnen. Hat man dahingegen nur wenige (kleines Modell), muss man großes Glück haben, eine Richtige zu haben.1

DeepStream kann verwendet werden, um Videos und oder Kameraeingaben zu verarbeiten, in ein Modell einzugeben und anschließend die Ergebnisse darzustellen. DeepStream ist unter anderem für den Jetson optimiert. Dieser ist ein energiesparender Computer, der nicht die Rechenkraft eines üblichen Servers zur Verfügung stellt und daher bei der Echtzeitanalyse neue Herausforderungen birgt.

Was haben wir gemacht?

Im Folgenden möchten wir unsere zwei Anwendungsfälle vorstellen. In dem Ersten ging es darum, ein Objekt in mehreren kleineren Videos zu erkennen, in dem Zweiten ging es darum verhältnismäßig kleine Objekte in großen Bildern zu erkennen.

Use Case I – Cody

Für den ersten Anwendungsfall haben wir als Objekt unseren Accsonaut Cody verwendet. Das Ziel war es, auf dem Jetson mehrere kleinere Videos zu verarbeiten und dennoch eine gute Performanz bei der Objekterkennung zu haben. Dazu haben wir mithilfe von TLT ein Modell trainiert. Dieses Modell wurde anschließend gepruned, damit es für Echtzeit Objekterkennung auf dem Jetson geeignet ist. Anschließend wurde es erneut trainiert, danach in ein TensorRT Modell umgewandelt und am Ende in Deepstream eingebunden. Nach vielen Versuchen konnten wir schlussendlich Cody parallel in 8 Videos auf dem Jetson erkennen. Dabei hatten wir einen Durchsatz von ungefähr 23 Bilder pro Sekunde. Im Vergleich: Ein normaler Kinofilm hat 24 Bilder pro Sekunde. 

Objekterkennung Plüsch-Accsonaut
Abbildungen 2 & 3:
Henri Rössler
Objekterkennung Plüsch-Accsonaut
Gefundene Codys
Nicole Heinze
Objekterkennung Background Substraction
Abbildung 4: Background Subtraction - Wo ist Cody?
Moritz Klein

Use Case II – Kleine Accsonauten

Für den zweiten Anwendungsfall sollten sich bewegende Accsonauten schon von Weitem erkannt werden.

Heutige Modelle generieren anfangs viele Bounding Boxen, um das Bild so abzutasten und alle Objekte zu finden. Ist Cody jedoch weit von der Kamera entfernt, nimmt er nur einen kleinen Teil im Bild ein. Bei einer Größe von weniger als 32×32 Pixeln gelten die Objekte als Small und die CNNs finden und klassifizieren diese nicht mehr zuverlässig.2

Jedoch ist es für den Anwendungsfall gar nicht notwendig, alle Objekte zu erkennen. Sondern lediglich solche, die sich bewegen. Dank dieser netten Eigenschaft können wir zum Finden eine Background Subtraction verwenden. Eine naive Background Subtraction subtrahiert zwei Bilder voneinander, sodass gleiche Pixel sich gegenseitig ausradieren und nur noch die Veränderungen zu sehen sind. Das kann dann wie Abbildung 4 aussehen.

Anschließend wird lediglich die Veränderung (weiße Pixel) aus dem Originalbild herausgeschnitten und vom CNN klassifiziert.

Lessons Learned

Trade off zwischen Genauigkeit und Performanz

Das Prunen mit TensorRT stellt den Anwender vor einen Trade Off: mehr Genauigkeit oder Performanz? Wir haben verschiedene Aggresivitätslevel getestet. Das beliebte CNN ResNet183 erreichte so zwischen 5.3 FPS / 88% Genauigkeit und 24.6 FPS / 67% Genauigkeit. Was am Ende eine höhere Priorität hat, ist von Anwendungsfall zu Anwendungsfall unterschiedlich.

Viele Wege führen nach Rom: Jeden Use-Case individuell betrachten

Jedoch zeigt der zweite Use-Case auch, dass es noch weitere Möglichkeiten gibt, um den Durchsatz zu verbessern. Erfordert das Projekt überhaupt nicht, dass zu jedem Videoframe alle Objekte erkannt werden oder nur jene, die sich bewegen? Dann kann eine Background Subtraction helfen. Ist das relevante Objekt grün? So kann auf lediglich einem der RGB-Channel gearbeitet werden. 

Umgang mit Überanpassung

In der Entwicklung der Modelle gab es aber auch Probleme, wie unter anderem die Überanpassung von Daten. Dies trat vor allem im Use Case 1 auf, wo Cody in all möglichen grünen und grauen Objekten erkannt wurde. Da dies in anderen Fällen, wie zum Beispiel im Straßenverkehr, schlimme Konsequenzen mit sich bringen kann, haben wir das Thema sehr ernst genommen. Letztendlich hat es für unseren Fall ausgereicht mehr Bilder zu verwenden sowie die Bilder zu augmentieren. Konkret heißt das, wir haben künstlich Filter (Regen, Nebel, Verzerren, …) hinzugefügt, um zusätzliche Abenteuer von Cody abzudecken.

Quellen

1 – https://arxiv.org/abs/1803.03635 – The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks 
2 – https://arxiv.org/abs/1908.03673Recent Advances in Deep Learning for Object Detection
3 –
https://arxiv.org/abs/1512.03385 – Deep Residual Learning for Image Recognition

Autoren

Weitere Artikel

Das könnte Sie auch interessieren