Image

Computer Vision Toolbox von MATLAB im Test

MATLAB hat viele verschiedene Toolboxen für unterschiedliche Anwendungen, wie zum Beispiel Signalverarbeitung, Regelungstechnik, KI oder Bildverarbeitung. Um herauszufinden wie einfach und schnell diese anzuwenden sind, wurde anhand eines praktischen Beispiels ein kleines Projekt erstellt, dass die Toolboxen für Bildverarbeitung, Computervision und Deep Learning verwendet. 


Im Projekt geht es darum, einem Roboter oder Greifarm über eine Kamera die genauen Positionen von Äpfeln anzuzeigen, welche vom Baum gefallen sind, um diese anschliessend aufzulesen. Dafür muss von dem Gerät zuerst erkannt werden, was in einem Bild ein Apfel ist und was nicht.

Mithilfe von MATLAB wurden Bilder von unterschiedlichen Äpfeln verarbeitet um Trainingsdaten für zwei verschiedene von MATLAB implementierenden Objekt-Detektoren zu erhalten. Danach sollten diese Detektoren Äpfel auf dem Boden erkennen können. Dies wurde getestet, indem die Daten der Detektoren von einem Webcaminput und der Kamera eines Smartphones über das MATLAB Mobile ausgewerteten wurden.  Es ist uns gelungen, in kurzer Zeit und mit wenig Trainingsdaten zwei funktionierende Objekt-Detektoren zu erstellen, zu evaluieren und anzuwenden.

Abbildung 1: Ablauf für die Erkennung von Äpfeln

Preprocessing

Kontrast 

Um einen guten und einheitlichen Kontrast zu bekommen, wird im Allgemeinen die Helligkeit aller Pixel mit einem Histogramm analysiert. In einem Histogramm werden die Pixel nach ihrem Wert und ihrer Anzahl sortiert. Mit dem Histogramm kann man einfach erkennen, ob das Bild eher dunkel oder hell ist. Damit alle Bilder gleich hell und einen gleichen Kontrast bekommen, werden die unteren 1% auf das Minimum und die oberen 1% auf das Maximum verschoben. Dabei werden auch alle Pixel auf die ganze Helligkeit verteilt, was dazu führt, dass dunkle Bilder heller werden und umgekehrt. Um an die Helligkeit eines Bildes im RGB-Format zu kommen, muss man es zuerst in den HSV-Farbraum umwandeln. Das V ist dann direkt der Wert der Helligkeit der Pixel. Wenn man den V Wert angepasst hat, kann man das Bild wieder in RGB umwandeln.

Abbildung 2: Histogramm der Helligkeit vor (links) und nach (rechts) der Kontrastanpassung
Abbildung 3: Bild links Original, Bild rechts mit Kontrastanpassung
Abbildung 4: Bild links Original, Bild rechts mit Kontrastanpassung

Grössenanpassung

Die Grösse der Bilder muss angepasst werden, da der Eingang der Objekt-Detektoren kleiner ist als die Bilder. Der Eingang des Objekt-Detektors ist 704x1280, was auf die grösste mögliche Auflösung der Webcam angepasst ist. Die Trainingsdaten wurden mit einem Smartphone aufgenommen und haben eine Auflösung von bis zu 2112x4608.  Um die Eingangsgrösse nicht zu überschreiten, muss die Grösse der Trainingsdaten angepasst werden.  Um mehr Trainingsdaten zu erhalten, wurden die Bilder zugeschnitten oder die Äpfel im Bild wurden vergrössert, indem die Ränder abgeschnitten wurden. Die vollständige Grössenanpassung auf 704x1280 wird entweder im Trainingsdaten-Augmentierer oder in dem Objekt-Detektor gemacht.

Detektoren und Training

Trainingsdaten

Um die Objekt-Detektoren zu trainieren braucht man möglichst viele Trainingsdaten. Das ist aber nicht immer möglich und daher werden dieselben Daten zufällig verändert, um die Objekt-Detektoren trotzdem robuster zu trainieren zu können. Für Bilder gibt es viele Möglichkeiten sie zu verändern ohne ihren Inhalt unkenntlich zu machen. Zum Beispiel kann Sättigung, Kontrast oder Helligkeit leicht verändert werden und man kann immer noch erkennen, was das Bild zeigt. Oder man kann das Bild einfach Drehen, Spiegeln oder Verzerren und man erhält neue brauchbare Daten, um die Objekt-Detektoren zu trainieren. 

Als Erstes werden neue Bilder gemacht, welche mit der Hilfe der MATLAB App «Image Labeler» mit Bounding-Boxes und Labels versehen werden. Die Bounding-Boxes markieren wo ein Apfel im Bild ist. Diese Trainingsdaten werden in Datastores gespeichert, um möglichst wenig Speicher beim Trainieren zu verbrauchen.

Danach wird eine Callback-Funktion erstellt, in dem die Trainingsdaten auf die richtige Grösse zugeschnitten werden und zufällig augmentiert werden. Die Callback-Funktion wird jedes Mal aufgerufen, wenn beim Trainieren auf den Datastore zugegriffen wird. Somit bleibt das Trainieren effizient und benötigt weniger Speicher. Die zufällige Augmentierung der Bilder ist: Farbwert, Kontrast, Helligkeit, Rotation, Skalierung und Scherung. Wichtig ist auch, dass die Bounding-Boxes ebenfalls mitverändert werden. Zum Schluss werden die Bilder auf die richtige Grösse skaliert und die zu kleinen Bounding-Boxes gelöscht. Das führt dazu, dass zu kleine Äpfel nicht mehr erkannt werden, dafür werden die Anchor-Boxes einheitlicher, was die Genauigkeit erhöht. 

Abbildung 5: Trainingsbilder mit Bounding-Boxes nach zufälligen Veränderungen

ACFObjectDetector

Der «ACFObjectDetector» ist ein Objekt Detektor, welcher mit aggregate channel features Objekte in Bilder finden kann. Dieser Detektor funktioniert nach den Prinzipien aus der Arbeit von Dollár et al. (1) Grob erklärt werden sogenannte Channels aus den Bildern erstellt., Ein Channel kann zum Beispiel eine Farbe sein oder aber auch von Gaussschen Filtern erstellt werden, wie Kanten und Rändern. Aus den Channels werden Features abgeleitet, mit denen Decision Trees trainiert werden, um Objekte in Bildern zu identifizieren.

Abbildung 6: Aufbau des ACF-Detektors aus Dollár et al. (1)

Mit der Funktion «trainACFObjectDetector» wird der ACF-Detektor trainiert., Es wurde mit 10 Stages und den augmentierten Trainingsdaten trainiert und anschliessend mit der «detect» Funktion versucht, Äpfel in Bildern zu erkennen. Falls welche erkannt wurden, erhält man die Bounding-Boxes und ihre Confidence.

Abbildung 7: links: Histogramm der detektierten Äpfel über ihre Confidence / rechts: Bild in dem Äpfel erkannt wurden, aber nur ab Confidence über 25 markiert wurden

Nach dem Trainieren kann der Detektor auswerten, um zu sehen wie gut er ist. Dafür wurden wieder die augmentierten Trainingsdaten genommen, da sie sich bei jeder Verwendung leicht verändern. Idealerweise sollte man aber neue Testdaten verwenden, um einen besseren Überblick zu erhalten. 

Mithilfe der Funktion «evaluateObjectDetection» kann man recht einfach Objekt-Detektoren auswerten. Die Funktion erstellt direkt Daten, mit denen man die Genauigkeit des Detektors ablesen kann. Dafür kann man eine Precision und Recall Plot erstellen. Die Precision wird aus true positive (TP) und false positive (FP) berechnet: Precision = TP / (TP + FP). Der Recall aus true positive (TP) und false negative (FN): Recall = TP / (TP + FN).

Es hat sich herausgestellt, dass der ACF-Detektor kein besonders guter Äpfelerkenner ist. Das könnte daran liegen das die Äpfel in ihrer Grösse stark abweichen und auch unterschiedliche Farben und Formen haben. Auch ein Grund könnte sein, das mit sehr wenig Trainingsdaten trainiert wurde.

Abbildung 8: Precision und Recall Kurve des ACF-Detektors
Abbildung 9: Detektierte Äpfel aus den augmentierten Trainingsdaten, mit ihren Confidences, durch den ACF-Detektor

YOLOv4ObjectDetector

Der YOLOv4 (You Only Look Once version 4) Objekt Detektor ist ein Deep Learning Network, das auf Objekterkennung mit Bounding-Boxes in real-time spezialisiert ist (2). Als Backbone gibt es verschiedene vortrainierte Netzwerke wie: CSPResNext50, CSPDarknet53 oder EfficientNet-B3. Mit den Neck werden die Features aus dem Backbone vermischt und kombiniert damit der Head die Objekte detektieren kann. Der Neck besteht aus einem spatial pyramid pooling (SPP) und einem path aggregation network (PAN). Als Head wird YOLOv3 eingesetzt, welcher mit Anchor-Boxes die Objekte erkennen kann. 

Der «YOLOv4ObjectDetector» von MATLAB kommt mit zwei vortrainierten Backbones die am COCO Datenset trainiert wurden. In diesem Projekt wurde das «tiny-yolov4-coco» gewählt, dass kleiner und dadurch schneller ist. 

Abbildung 10: Aufbau eines Objekt Detektors aus Bochkovskiy et al. (2)

Um einen YOLOv4-Detektor in MATLAB zu generieren, muss zuerst die Anchor-Boxes berechnet, die Inputsize definieret und ein vortrainierter Backbone ausgewählt werden. Als Backbone wurde das «tiny-yolov4-coco» von MATLAB ausgewählt, eine andere Möglichkeit wäre auch «csp-darknet53-coco». Die Anzahl der Anchor-Boxes ist vom Backbone abhängig, in diesem Fall sind es 6 Stück. Die Grösse wird aus den Bounding-Boxes der Trainingsdaten berechnet, nachdem sie auf den Inputsize runterskaliert wurden. Der Inputsize muss durch 32 teilbar sein und da die Webcam eine Auflösung von 720x1280 hat, wurde 704x1280 gewählt.

Für das Trainieren wurden die gleichen augmentierten Trainingsdaten verwendet wie bei dem ACF-Detektor. Die Trainingseinstellungen wurden grösstenteils auf ihren default Werten belassen, die «MiniBachSize» wurde auf 1 gesetzt, da mit sehr wenig Trainingsdaten gearbeitet wurde und es die besten Resultate hervorgebracht hatte. «MaxEpoch» wurde auf 120 gesetzt, damit das Trainieren nicht zu lange geht.

Das Verifizieren des YOLOv4 Objekt-Detektors wurde gleich gemacht wie beim ACF-Detektor, damit man sie einfacher vergleichen kann. Die Resultate zeigen deutlich, dass durch den leistungsfähigen YOLOv4 Detektor deutlich besser Äpfel erkannt werden können. Schwierigkeiten hat der Detektor aber noch wenn die Äpfel verdeckt werden oder zu klein im Bild sind. Zum Teil werden Äpfel auch doppelt erkannt, was aber mit der Funktion «selectStrongestBbox» einfach zu beheben ist.

Abbildung 11: Precision und Recall Kurve des YOLOv4-Detektors
Abbildung 12: Detektierte Äpfel aus den augmentierten Trainingsdaten mit ihren Confidence durch den YOLOv4-Detektor

Anwendungen

Webcam

Um eine Live-Erkennung von Äpfeln zu erstellen, ist die Computer Vision Toolbox von MATLAB hilfreich. Mit der Funktion «videoinput» ist es auf einfache Art möglich, die Webcam auszulesen und die einzelnen Bilder mit den Objekt-Detektoren zu untersuchen sowie gefundene Äpfel zu markieren. Danach kann man die Bilder anzeigen lassen und hat so wieder ein Live Video mit markierten Äpfeln. Leider ist die Verarbeitung relativ langsam, da nicht mit einer GPU gearbeitet wurde, hat das Video nur etwa 5 Bilder pro Sekunde.

MATLAB Mobile

Für eine weitere Anwendung ist auch das Smartphone interessant, da es eine Kamera hat und sehr mobil ist. Um einen MATLAB Code auf dem Smartphone auszuführen, gibt es das MATLAB Mobile. Damit kann man auch auf das MATLAB Drive zuzugreifen und es gibt weitere Funktionen, mit denen man Fotos mit der Smartphonekamera erstellen kann. Daher wurde ein kleines Programm für das MATLAB Mobile geschrieben, welches ein Foto macht und es mittels einem Objekt Detektor, der auf dem Drive gespeichert ist, nach Äpfeln untersucht. Am Schluss kann man das gemachte Foto mit den markierten Äpfeln auf dem Smartphone ansehen. 

Fazit

Mit MATLAB lässt sich in kurzer Zeit ein Projekt realisieren da es viele fertige Funktionen beinhaltet, welche die meisten Aufgaben mit flexiblen Einstellungen erfüllen können. Auch gibt es für jede Funktion eine Dokumentation und oft auch Beispiele wie man sie anwenden kann. Dennoch sind diese Dokumentationen nicht immer sehr detailreich und erklären gerade mal was man machen kann und nicht weshalb. Das ist insbesondere bei komplexen und grossen Funktionen wie die Trainingsfunktionen der Objektdetektoren ein Problem. Dennoch lassen sich mit Hilfe der Beispiele, relativ schnell Objektdetektoren für Bilder oder Videos erstellen, auch mit verhältnismässig wenig Trainingsdaten.

Glossar

Anchor-Boxes  

Aus den Trainingsdaten berechnet, gibt die Grösse des zu findenden Objekts für den Objekt-Detektor an.

Backbone  

Teil eines Objekt-Detektors, ist für die Features Extraktion zuständig.

Bounding-Boxes  

Rahmen der möglichst eng das Objekt umrandet.

Callback-Funktion  

Eine Funktion, die von einer anderen Funktion ausgeführt wird, nachdem diese ausgeführt wurde.

Channels  

Ist meistens ein Teil des Bildes wie z.B. ein Farbkanal wie RGB oder eine durch Filter generierte Kantenvorhebung.

Confidence  

Wie zuversichtlich der Objekt-Detektor ist, ob er ein Objekt korrekt gefunden hat.

Datastores  

Eine Datensammlung, die sehr gross sein kann und mit der man trotzdem ihre Daten verarbeiten kann, ohne dass der Speicher überfühlt wird.

Decision Trees  

Hierarchische Entscheidungsstruktur, die auf trainierten Entscheidungsregeln Definitionen hervorbringt.

 

Deep Learning Network  

Ein aus künstlichen neuronalen Netzwerken maschinell lernendes Netzwerk, das statistische Merkmale finden kann.

Features  

Diese werden aus Channels durch Training generiert und sind Merkmale, die den Objekt-Tedektoren helfen, Objekte zu finden.

Head  

Ist der letzte Teil eines Detektors und versucht aus den Daten des Neck die Objekte zu finden.

Neck  

Vermischt die Daten aus dem Backbone mit Netzwerken und gibt sie dem Head weiter.

Precision  

Genauigkeit eines Objekt-Detektors, misst wie viele aller gefundenen Objekte auch tatsächlich richtige Objekte sind.

Recall  

Genauigkeit eines Objekt-Detektors misst wie viele über dem Schwellwert der Confidence gefundenen Objekte auch tatsächlich richtige Objekte sind.

Stages  

Die Training Stages geben an wie lange trainiert werden soll.

Verwendete MATLAB Toolboxen

-         Image Processing Toolbox

-         Computer Vision Toolbox

-         Deep Learning Toolbox

-         Computer Vision Toolbox Model for YOLO v4 Object Detection

-         Image Acquisition Toolbox

Verweise

1. Piotr Dollar, Ron Appel, Serge Belongie, and Pietro Perona. Fast Feature Pyramids for Object Detection. 2009.

2. Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao. YOLOv4: Optimal Speed and Accuracy of Object Detection. 2020.