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.
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.
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.
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.
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.
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.
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.
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.
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
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



