Maschinelles Lernen VS Deep Learning Insect Classifiers

Wo ist meine Hunde- und Katzenmappe?

Klassisches maschinelles Lernen und Deep Learning haben fantastische Anwendungen. Eine dieser Anwendungen ist die Mehrklassenklassifizierung, bei der die letzte Schicht mehr als einen Knoten- (oder Neuronen-) Prädiktor haben kann. Der beliebteste Klassifikator für mehrere Klassen im maschinellen Lernen ist beispielsweise der MNIST-Ziffernklassifikator, während es für vertiefendes Lernen die Must-Try-Version von MNIST gibt, bei der es sich um den Klassifikator für Hunde und Katzen handelt.

Welches ist nun das beste, um andere Objekttypen vorherzusagen, zum Beispiel Insekten? So nahm ich sieben Klassen von Insekten (eigentlich waren es sechs, weil Spinnen keine Insekten, sondern Spinnentiere sind. Entschuldigen Sie meine Biologenfreunde). Die sieben ausgewählten Klassen sind: Käfer, Kakerlaken, Libellen, Fliegen, Spinnen, Termiten und Thripse.

Schöne sieben Tiere, nicht wahr?

Der Datensatz enthält insgesamt 1445 Bilder für den Trainingsabschnitt mit einer unausgeglichenen Verteilung, was bedeutet, dass es einige Klassen mit mehr Bildern als andere gibt. Der Validierungssatz enthält 600 Bilder, was eine Verteilung von 60 bis 40 Prozent zwischen Trainingssatz und Validierungssatz ergibt. Alle Bilder stammen von der InsectImages-Website. Sie können dort also weitere Klassen prüfen. In der Vergangenheit habe ich versucht, eine Vorverarbeitung für die Feature-Extraktion mit mehreren Auflösungen und eine SVM-Klassifizierung (Single Vector Machine) anzuwenden - die gegen alle Klassifizierer. Die SVM mit Multiresolution-Ansatz erzielte jedoch in der Testphase ein so schlechtes Ergebnis von nur 24%. Die Thripse wurden nicht in den Prozess einbezogen und nur sechs Klassen wurden trainiert.

Die Veröffentlichung neuer Bibliotheken für Ai-Praktizierende wie Fastai eröffnete uns neue Möglichkeiten, Modelle mit unstrukturierten Daten wie diesen hier vorgestellten zu trainieren. Fastai verfügt sowohl über maschinelles Lernen als auch über Deep Learning-Bibliotheken, die auf der Unterstützung von Pytorch und CUDA aufbauen. Mit all diesen Fähigkeiten habe ich versucht, den Datensatz erneut zu klassifizieren, indem ich einen Vergleich zwischen einem klassischen neuronalen Netzwerk mit nicht mehr als 6 Schichten und dem auf resnet 34 basierenden Lernansatz für den Transfer anstellte.

Vorverarbeitung

Bilder können entweder in Graustufen oder in einem bestimmten Farbschema wie beispielsweise RGB vorliegen. Wenn ein Bild in Graustufen ist, hat es nur einen Kanal, das heißt, es besteht nur aus einer NxM-Matrix. Auf der anderen Seite hat ein Bild mit einem Farbschema mindestens drei Kanäle - rot, grün und blau für den RGB-Fall - diese Kanäle können in einer einzigen dreidimensionalen Matrix mit der Breite kombiniert werden, die auch als Tensor bezeichnet wird. Informationen zu Höhe und Farbkanal. Zur Verdeutlichung ist ein eindimensionales Array ein Tensor vom Rang 1, ein zweidimensionales Array oder eine zweidimensionale Matrix ein Tensor vom Rang 2 (z. B. unsere Graustufenbilder) und ein dreidimensionales Array oder eine dreidimensionale Matrix ein Tensor vom Rang 3.

In der Phase des maschinellen Lernens wurden alle Bilder, die Tensoren vom Rang 3 sind, serialisiert. Dies bedeutet, dass sie in einer Reihe oder einem Tensor des Rangs 1 gestreckt wurden. Somit wurde jedes Pixel zu einem Merkmal, das das neuronale Netz speist, und die Ordnerstruktur wurde zu den Bezeichnungen des Klassifikators in einer One-Hot-Codierung, bei der Klassennamen in Zahlen von 0 bis 6 umgewandelt wurden, eine für jede Klasse in dem Ordner. Außerdem wurde der Datensatz auch gemäß dem Mittelwert und der Standardabweichung normalisiert.

Vorverarbeitung beim maschinellen Lernen. Serialisierung der Daten.

Die Normalisierung führt zu einer visuellen Verzerrung des Datensatzes, erleichtert jedoch die Gewichtsberechnung, da Ausreißer entfernt werden und die Werte in einen steuerbaren Bereich passen.

Normalisierte Bilder

Die Implementierung des neuronalen Netzes selbst dauert nicht mehr als den Vorverarbeitungsschritt. Wir legen die Architektur fest, definieren die Modelldaten und Metriken und beginnen mit einer einzelnen Zeile die Trainingsphase.

Implementierung eines neuronalen Netzwerks.

Das neuronale Tieflernnetz oder das neuronale Faltungsnetz verwendet jedoch einen eingebauten Fastai-Vorverarbeitungsschritt, der Transformationen genannt wird. Für den Deep-Learning-Ansatz werden die Bilder also so wie sie sind direkt eingespeist, und es kann eine Erweiterung wie Scheren, Zoomen und Zuschneiden hinzugefügt werden, indem einfach optionale Parameter zu den Modelldaten über das Objekt tfms_from_model (resnet34, sz, aug_tfms) hinzugefügt werden = transforms_side_on, max_zoom = 1.1).

Tiefes Lernen: Nur drei Zeilen machten den gesamten Trainingsprozess.

Ergebnisse

Das maschinelle Lernmodell mit Eingabe, einer linearen Ebene mit einer Log-Softmax-Funktion, konnte in der Validierungsphase eine Genauigkeit von 45% erreichen. Obwohl es ein schlechtes Ergebnis zu sein scheint, ist es fast doppelt so genau wie mein erster Versuch mit SVM, der nur 24% ergab. Es ist wichtig daran zu erinnern, dass es sich um eine sehr einfache Implementierung eines neuronalen Netzes handelt, das unstrukturierte komplexe Daten klassifiziert. Darüber hinaus verfügt die Fastai-Bibliothek über viele weitere Optimierungsoptionen, um das Modell an das gewünschte Ziel anzupassen.

ML Neural Net liefert nur maximal 5 Epochen und eine Genauigkeit von 47%.ML Vorhersage nach 64 Iterationen. Der Optimierer war SGD.

Um die Ergebnisse zu konfrontieren, können wir sie mit den tatsächlichen Klassen vergleichen:

Tatsächliche Klassen, die vorhergesagt werden sollten.

Wir können auch die Verwirrungsmatrix überprüfen, um zu sehen, wie sich das neuronale Netz insgesamt auf die 600 Validierungsbilder ausgewirkt hat. Die meisten seiner korrekten Vorhersagen betrafen Käfer (122 / 138–89%), während sich das neuronale Netz für die anderen wie folgt verhält:

Schabe - 23/72: 32%

Libellen - 41/96: 42%

Fliegen - 16/55: 29%

Spinnen - 22/87: 25%

Termiten - 61/121: 50%

Thrips - 1/32: 3%

Die Ergebnisse zeigten eine typische Überanpassungssituation während der Trainingseinheit, da sich der Verlust Werten von 8e-9 (ein lokales Minimum) näherte und allmählich bis 6e-5 anstieg. Er ist jedoch weiterhin sehr zufriedenstellend, basierend auf den kurzen Minuten, die für den Versuch benötigt wurden. Daher kann eine Feinabstimmung vorgenommen werden, um das Modell effektiver zu machen, z. B. durch Einbetten einer Matrix, um verborgene Features zu erweitern, die wir in unseren Daten nicht untersucht haben. Dies ist jedoch nur eine Idee, die in einem weiteren Experiment durchgeführt werden kann.

Gesamtergebnisse für die 600 Validierungsbilder für das maschinelle Lernmodell.

Es überrascht nicht, dass das Deep-Learning-Modell auch mit einem so kleinen Datensatz wie diesem ein viel besseres Ergebnis erzielt. Nach dem Einstellen der Gewichte für Teile des Netzes wurde eine Genauigkeit von 77,7% erreicht. Das Basismodell ist eine vorgefertigte Resnet-34-Architektur mit 34 Schichten. Im ersten Durchgang werden alle Aktivierungen des Netzwerks (Gewichte) ursprünglich beibehalten und nur die letzte Schicht wird für unseren Zweck modifiziert. Dies kann durch Hinzufügen des Parameters precompute = True zum Lernobjekt (dem neuronalen Netzwerk auf Fastai) erfolgen. Nach dem ersten Durchgang mit 3 Epochen beginnt die Abstimmungsphase, indem die Lernrate von 0,1 auf 0,01 geändert wird, sodass der zweite Durchgang mit 3 Epochen durchgeführt werden kann. Das Kriterium dafür war die vorherige Erfahrung mit diesem Datensatz. Die Lernrate sollte mindestens zehnmal abfallen. Dank der Fastai-Tools muss man jedoch kein Bauchgefühl in dieser Angelegenheit entwickeln. Die Methode learn.lr_find () und ihr Plot mit learn.sched_plot () helfen dabei, ein besser geeignetes Lernen für Zieldaten zu definieren. Das neue Lernen kann mit kleinen Epochen von 1 bis 5 getestet werden, um zu überprüfen, ob es eine Konvergenz durch den Zerfall von Trainingsverlust und Validierungsverlust gibt. Die Lernrate wird so gewählt, dass sie eine Größenordnung höher ist als diejenige, die einen minimalen Trainingsverlust ergibt. Wenn die Beschreibungsstrategie funktioniert, können wir einen Schritt weiter gehen und mit der Methode learn.unfreeze () alle Aktivierungen (Gewichte) ändern, indem wir verschiedene Teile des neuronalen Netzes mit unterschiedlichen Lernraten trainieren. Anstatt einen einzelnen Wert zu analysieren, können wir eine Reihe von Lernraten festlegen, um das Modell zu trainieren (lr = np.array ([5e-4,1e-3,1e-2]). Schließlich trägt die Testzeit-Vergrößerungstechnik learn.TTA () in Kombination mit der stochastischen Gradientenabnahme mit Neustarts (cycle_len und cycle_mult) dazu bei, die Leistung des Modells zu verbessern, indem den Daten verschiedene Transformationstypen hinzugefügt werden, um die Generalisierung des Modells zu optimieren. Obwohl dies sehr technisch klingt, wird jeder dieser Schritte in der Regel in einer einzigen Codezeile geschrieben, wodurch es einfacher wird, den Abstimmungsprozess Schritt für Schritt zu verfolgen.

Ähnlich wie beim neuronalen Netz können wir die Verwirrungsmatrix für unser Deep-Learning-Modell auf den 600 Validierungsbildern überprüfen. Die folgenden Ergebnisse sind für alle getesteten Klassen im Vergleich zum vorherigen Versuch viel gleichmäßiger und genauer verteilt:

Käfer - 130/138: 94%

Schabe - 52/72: 72%

Libellen - 88/96: 91%

Fliegen - 22/55: 40%

Spinnen - 22/87: 81%

Termiten - 86/121: 71%

Thrips - 17/32: 53%

Letzter Schritt im Deep Learning-Netzwerk. Die resnet 34-Architektur wurde mit einem Transfer-Lernansatz verwendet.Gesamtergebnisse für die 600 Validierungsbilder für das tiefverdienende Modell.Vorhersagen für das Deep-Learning-Modell

Diese Modelle haben daher mit sehr wenig Training und wenig Tuning gute Ergebnisse erzielt, so dass beide verbessert werden können. Das gesamte Training, die Validierung und der Test wurden mit Rohdaten durchgeführt, und obwohl eine Vorverarbeitung angewendet wurde, wurden die Bilder eingespeist, da sie ohne Hintergrund- oder Vordergrundsegmentierung aufgenommen wurden. Schließlich ist die Fastai-Bibliothek in ihrer zweiten Version. In dieser Arbeit wurde die Pre-Alpha-Version angewendet (0.7X). Die zweite Version von Fastai (1.0X) hat sich als effektiver erwiesen.

Dieses Experiment wurde auf zwei Notizbüchern aus Fastai-Kursen durchgeführt: Hunde gegen Katzen Jupyter-Notizbuch (DL 1, Lektion 1) und MNIST (ML1, Lektion 4). Wenn Sie Originaldateien testen möchten, probieren Sie bitte die oben genannten Fastai-Kurse aus.

Bitte beziehen Sie sich auf den Python-Code, der in dieser Arbeit verwendet wird:

GitHub

Sie können die Fastai-Bibliothek lokal oder online einblenden:

Fastai-Installationsthreads

Erkunden Sie andere Insektenklassen bei Insect Images:

Insektenbilder

Witenberg S R Souza,

MS in Mechatronischen Systemen an der Universität von Brasilia

https://www.linkedin.com/in/witenberg/