Mathematik | Informatik

 

Jonas Kühne, 2001 | Meisterschwanden, AG

 

Bildklassifikation mithilfe von künstlichen neuronalen Netzen ist weit verbreitet. Wir kommen mit diesem Teilgebiet des maschinellen Lernens täglich in Kontakt, beispielsweise beim Freischalten des Mobiltelefons durch Gesichterkennung. Für die Erstellung und das Training solcher Netze gibt es bereits unzählige einsatzbereite Bibliotheken. Die meisten wurden von grossen Softwarefirmen wie Google für die Anwendung in Python entwickelt. Doch was steckt in diesen Bibliotheken und wie funktionieren sie? Diesen Fragen geht diese Arbeit auf den Grund, indem ein Modell zur Bildklassifikation von Materialien von Grund auf entwickelt und implementiert wird. Anschliessend wird das Modell mit einem aus einer dieser Bibliotheken verglichen.

Fragestellung

Kann ein einzelner, nicht professioneller Programmierer ein Modell zur Bildklassifikation entwickeln, welches in Sachen Erkennungsrate und Trainingsdauer mit einem in TensorFlow, der Bibliothek von Google, erstellten Modell mithalten kann?

Methodik

Das eigene künstliche neuronale Netz wurde in Java geschrieben. Das Netz besteht aus drei hintereinander geschalteten Blöcken, bestehend aus Convolutional-Layer, Activation-Layer (ReLU), Batchnormalisierungs-Layer und Pooling-Layer (Maxpooling), sowie einem Dense-Layer, welcher pro Materialklasse einen Knoten besitzt. Für den Vergleich wurden zwei Modelle in TensorFlow aufgebaut. Eines der beiden wurde, wie jenes in Java, von Grund auf trainiert. Es besitzt einen fast identischen Aufbau. Das andere verwendet Transfer Learning, als Basis diente das ImageNetV2-Modell von Google. Für beide wurde zudem der Einfluss von CUDA (Berechnungen auf GPU statt CPU) auf die Trainingsdauer ermittelt. Der für das Training eingesetzte Datensatz war bei allen Modellen identisch und wurde grösstenteils durch einen Internet-Crawler beschafft. Das resultierte in 600 Bildern pro Materialklasse. Diese wurden anschliessend in zwei Datensätze aufgeteilt. Der grössere, welcher 500 Bilder enthält, wurde für das Training der Modelle eingesetzt und durch das Anwenden von Data Augmentation künstlich vergrössert. Für die Java-Version wurden die Daten durch Operationen wie beispielsweise Spiegeln statisch vervierfacht. Bei der TensorFlow-Variante wurde ein Feature genutzt, welches für jede Trainingsepoche aus jedem Bild einen zufälligen Bildausschnitt entnimmt. Auf den restlichen Daten, welche daher für das Modell jeweils unbekannt waren, wurden die Erkennungsraten gemessen.

Ergebnisse

Das Java-Modell erreichte eine Erkennungsrate von 68.9%, das TensorFlow-Modell ohne Transfer Learning 71.6% und jenes mit Transfer Learning 86.0%. Die Trainingsdauer für das Java-Modell betrug 4.6 Tage. Die Modelle in TensorFlow benötigten ohne CUDA und ohne Transfer Learning 1.9 Tage, mit Transfer Learning 42 Minuten. Mit CUDA betrug die Trainingsdauer ohne Transfer Learning 13.2 Stunden, mit Transfer Learning 19 Minuten. Daher kann das eigene Modell mit jenem aus TensorFlow ohne Transfer Learning in Sachen Erkennungsrate knapp mithalten, ist allerdings allen Modellen in der Trainingsdauer stark unterlegen. Der Einsatz von CUDA konnte die Trainingsdauer jeweils um einen Faktor von ca. 3.6 verringern.

Diskussion

Beim Vergleich mit jenem TensorFlow-Modell, welches ohne Transfer Learning trainiert wurde, schnitt das Java-Modell in der Erkennungsrate überraschend gut ab. Das zeigt, dass im Grundkonzept mit Ausnahme der Data Augmentation keine grossen Unterschiede herrschen. Die grosse Differenz bei der Trainingsdauer lässt sich in erster Linie durch eine hohe Parallelisierung der Prozesse in der TensorFlow-Bibliothek erklären. Zudem ist TensorFlow unterhalb der sichtbaren Python-Struktur zum Teil in C++ geschrieben. Diese Sprache erlaubt eine deutlich schnellere Ausführung des Codes. Ebenfalls wurde dieser, im Gegensatz zu jenem in Java, unter enormem Zeitaufwand optimiert. Das sind gleichzeitig auch die Punkte, welche am selber entwickelten Modell verbessert werden könnten. Bei einer höheren Paralellisierung wäre zudem ebenfalls eine Implementation von CUDA möglich.

Schlussfolgerungen

Die bereits existierenden Bibliotheken, namentlich TensorFlow, können von der in dieser Arbeit in Java erstellten Struktur bei der Trainingsdauer und der Erweiterbarkeit nicht konkurriert werden. Die Erkennungsrate des Java-Modells liegt, wenn kein Transfer Learning verwendet und die statische Data Augmentation berücksichtigt wird, nur leicht unter jener des TensorFlow-Modells. Des Weiteren optimiert der Einsatz von Transfer Learning sowohl die Erkennungsrate wie auch die Trainingsdauer deutlich und CUDA senkt die Trainingsdauer ebenfalls stark.

 

 

Würdigung durch den Experten

Dr. Christian Frank

Jonas Kühne hat ein System zur Erkennung von Materialien in Bildern von Grund auf entwickelt, ohne existierende Bibliotheken oder Bilddatensätze zur Hilfe zu nehmen. Dieses Vorgehen hat zu einem sehr tiefgehenden Verständnis des Fachgebiets der Künstlichen Intelligenz und von Convolutional Neural Networks geführt. Die eigene Implementation schneidet im Vergleich mit existierenden Bibliotheken wie TensorFlow sehr gut ab. Zudem konnten in der Arbeit grosse Verbesserungen durch die künstliche Variierung des eigenen Bilddatensatzes mit Data Augmentation sowie Transfer Learning realisiert werden.

Prädikat:

hervorragend

Sonderpreis Weizmann Institut – International Summer Science Institute (ISSI)

 

 

 

Berufsschule Lenzburg
Lehrerin: Beatrix Mader Lazic, Véronique Fischer Fischlin