In diesem Artikel konzentrieren wir uns auf einen der leistungsstärksten Algorithmen des Deep Learnings, das Convolutional Neural Network (CNN). Dabei handelt es sich um leistungsstarke Programmiermodelle, die eine Bilderkennung ermöglichen, indem sie jedem eingegebenen Bild automatisch eine seiner Klasse entsprechende Bezeichnung zuweisen.
Willkommen zur dritten Folge unseres Themas Deep Learning. Nachdem wir im ersten Teil Deep Learning und seine Anwendungen vorgestellt haben, haben wir uns im zweiten Teil mit der Struktur und Funktionsweise neuronaler Netze beschäftigt.
Los geht’s!
Inhaltsverzeichnis
CNN-Architektur
CNNs sind eine Unterkategorie der neuronalen Netze und gehören derzeit zu den leistungsfähigsten Modellen für die Bildklassifizierung.
Ihre Funktionsweise ist auf den ersten Blick recht einfach: Benutzer geben ein Bild in Form einer Pixelmatrix ein.
Diese hat 3 Dimensionen:
- Zwei Dimensionen für ein Graustufenbild.
- Eine dritte Dimension um die Grundfarben (Rot, Grün, Blau) darzustellen.
Im Gegensatz zu einem klassischen MLP-Modell (Multi Layers Perceptron), das nur eine Klassifizierungsschicht enthält, hat die Architektur des Convolutional Neural Network schon einen Convolutive Layer und besteht daher aus zwei verschiedenen Teilen:
- einem Konvolutionsteil: Damit werden spezifische Merkmale eines jeden Bildes extrahiert, indem sie komprimiert werden um die ursprüngliche Größe zu reduzieren. Das Eingangsbild wird durch eine Reihe von Filtern geleitet, wodurch neue Bilder entstehen, die Convolutional Layers genannt werden. Schließlich werden die resultierenden Layers zu Matrizen definierter Größe.
- einem Klassifizierungsteil : Die Matrizen definierter Größe werden dann als Eingabe in eine zweite Schicht bereitgestellt, die aus vollständig verknüpften Schichten besteht, die Multi Layers Perceptron (MLP für Mehrlagige Perzeptronen) genannt werden. So werden Merkmale der Matrizen kombiniert, um das Bild zu klassifizieren.
Convolutional Layer
Wozu gibt es Convolutional Layers?
Die Konvolution (engl. convolution) ist eine einfache mathematische Operation, die in der Regel für die Bildverarbeitung und -erkennung verwendet wird. Durch Konvolutionen wird ein Bild wie folgt gefiltert:
- Zunächst wird die Größe des Filterfensters, das sich oben links befindet, festgelegt.
- Das Filterfenster das das Feature darstellt, bewegt sich schrittweise von links nach rechts um eine zuvor festgelegte Anzahl von Einheiten, bis es am Ende des Bildes angelangt ist.
- Bei jedem erreichten Bildausschnitt wird eine Konvolution berechnet, die eine Merkmalskarte (Feature Map) ergibt, um zu wissen, wo sich die Features im Bild befinden: Je höher die Feature Map ist, desto präziser ähnelt der gefilterte Bildausschnitt dem Feature.
Beispiel für klassische Faltungsmatrizen
Im Conventional Layer eines Convolutional Neural Network durchläuft das eingegebene Bild eine Reihe von Faltungsmatrizen. So gibt es beispielsweise häufig verwendete Faltungsmatrizen, mit denen sich relevantere Merkmale als Pixel extrahieren lassen, wie die Kantendetektion (Kantenfilter) oder die Erkennung von geometrischen Formen. Die Auswahl und Anwendung der Faltungsmatrizen erfolgt automatisch durch das Modell.
Zu den bekanntesten Faltungsmatrizen gehören der Mittelwertfilter (berechnet für jedes Pixel den Mittelwert des Pixels mit seinen acht nächsten Nachbarn) oder auch der Gauß-Filter, um das Bildrauschen zu vermindern:
Hier ein Beispiel für die Auswirkungen dieser beiden unterschiedlichen Filter auf ein Bild mit starkem Rauschen (z. B. ein Foto, das wenig belichtet wurde). Allerdings wird das Bildrauschen oft zusammen mit der Bildschärfe reduziert:
Wie man sehen kann, reduziert der Gaußfilter im Gegensatz zum Mittelwertfilter das Rauschen, ohne dass die Schärfe dabei wesentlich verringert wird.
Neben der Filterfunktion ist der Convolutional Layer eines CNN auch interessant, weil man die Möglichkeit hat, einzigartige Merkmale zu extrahieren: Die Bilder werden so komprimiert, dass ihre ursprüngliche Größe durch Methoden der Unterabtastung wie Max-Pooling reduziert wird.
Methode der Unterabtastung: Max-Pooling
Max-Pooling ist ein Diskretisierungsprozess, das auf Beispiele basiert. Das Ziel? Die Unterabtastung der Eingabedarstellung (Bild, Hidden-Layer-Ausgabematrix, usw.) und die Reduzierung ihrer Dimension. Der Vorteil? Der Rechenaufwand wird durch die Verringerung der Anzahl der zu erlernenden Parameter reduziert und die Invarianz durch kleine Translationen gesichert (wenn eine kleine Translation das Maximum des abgetasteten Feldes nicht verändert, bleibt das Maximum jedes Feldes gleich und somit auch die neu erstellte Matrix).
Hier ein konkretes Beispiel für Max-Pooling: Stellen wir uns vor, wir haben eine 4×4-Matrix, die unsere ursprüngliche Eingabe darstellt, und einen Filter eines Fensters der Größe 2×2, den wir auf unsere Eingabe anwenden. Für jedes Feld, das der Filter abtastet, nimmt Max-Pooling das Maximum an. Dadurch entsteht gleichzeitig eine neue Ausgabematrix, in der jedes Element dem Maximum jedes abgetasteten Feldes entspricht.
So der Prozess:
So der Vorteil eines Convolutive Layer eines CNN: Im Gegensatz zu einem klassischen MLP-Modell erhält man durch den Convolutive Layer eine „Merkmalskarte“ (Feature Map) oder Faltungsmatrizen (Pixelmatrix rechts im Beispiel), die kleiner sind als das Eingangsbild. Die Anzahl der im Modell zu berechnenden Parameter wird stark reduziert.
Beispiel einer CNN-Architektur und ihr Ergebnis
Nach dem Convolutional Layer eines CNN folgt der Fully-connected Layer. Dies wird bei der Klassifizierung angewendet, die allen Modellen von neuronalen Netzen gemein ist. Der Fully-connected Layer entspricht einem mehrlagigen Perzeptron-Modell (MLP).
Seine Aufgabe: jedes Datenbeispiel nach Klassenzugehörigkeit zu sortieren.
Ein Algorithmus wird von den Perzeptronen verwendet, um ihre Gewichte (oder Netzwerkkoeffizienten) zu aktualisieren, nämlich der Backpropagation-Algorithmus, den wir später noch genauer betrachten werden.
Allgemein ist die Architektur eines Convolutional Neural Network wesentlich die gleiche:
- Convolutional Layer (CONV): Diese erste Schicht analysiert die eingegebenen Bilder analysieren und erkennt das Vorhandensein einer Reihe von Merkmalen. So erhält man eine Reihe von Feature Maps (siehe oben: Wozu gibt es Convolutional Layers denn?).
- Pooling Layer (POOL): Der Pooling Layer ist eine Operation, die normalerweise zwischen zwei Convolutional Layers angewandt wird. Sie erhält als Eingabe die Feature Maps, die als Ausgabe der Convolutional Layers gebildet werden. Sie reduziert die Größe der Bilder und erhält gleichzeitig ihre wesentlichsten Merkmale. Zu den am häufigsten verwendeten Methoden gehören das bereits erwähnte Max-Pooling und das Average Pooling, bei dem der Durchschnittswert des Filterfensters in jedem Schritt beibehalten wird.
Schließlich erhält man am Ende dieses Pooling Layers die gleiche Anzahl von Feature Maps wie am Eingang, jedoch deutlich komprimiert.
- Die Aktivierungsfunktion ReLU (Rectified Linear Units): Dadurch werden alle negativen Werte, die als Eingaben empfangen werden, durch Nullen ersetzt. So bleibt das Modell nicht linear, sondern wird damit komplexer.
- Fully Connected (FC) Layer: Diese Layer befinden sich am Ende der CNN-Architektur und sind vollständig mit allen Outputs verbunden (daher der Begriff „fully-connected”).
Der Fully Connected Layer erhält einen Vektor als Eingabe und wendet nacheinander eine Linearkombination und dann eine Aktivierungsfunktion an, um das Input-Bild zu klassifizieren (siehe folgendes Schema). Schließlich ergibt sich ein Vektor der Größe d, der der Anzahl der Klassen entspricht, wobei jede Komponente die Wahrscheinlichkeit darstellt, dass das Input-Bild zu einer Klasse gehört.
Implementierung eines mit Python vorab trainierten CNN:
Für praktische Anwendungen und angesichts der Komplexität, leistungsfähige „handgemachte” CNNs zu erstellen, werden wir vorab trainierte Netzwerke verwenden, die im Modul Torchvision verfügbar sind. Wir werden sehen, wie dieses in Python implementiert werden kann:
Anwendung eines CNN: Identifizierung beliebiger Bilder aus dem ImageNet-Dataset: zehn Millionen sortierte Bilder.
ImageNet ist eine Datenbank mit über zehn Millionen sortierten Bildern, die von der gleichnamigen Organisation für Forschungsarbeiten im Bereich Computer Vision produziert wird.
Hier ein Auszug aus diesem umfangreichen Dataset :
Vorbereitung: Als Erstes importieren wir jede Bibliothek, die wir später brauchen werden.
1. Schritt: Trainieren des vortrainierten Modells VGG16
2. Schritt: Importieren der 3 Bilder, die sortiert werden sollen
3. Schritt: Preprocessing der Bilder
4. Schritt: Vorhersage des Modells
Man kann sich auch die fünf Labels anzeigen lassen, die von dem Modell VGG16 als am wahrscheinlichsten eingestuft wurden:
→ VGG16 konnte also mit großer Sicherheit (95,6%) vorhersagen, dass es sich bei dem eingegebenen Bild nicht nur um einen Wolf handelte, sondern gab sogar die Rasse an, nämlich hier die eines grauen Ostwolfs (timber wolf). Beeindruckend, nicht wahr?
Das Funktionsprinzip eines CNN ist einfach zu verstehen, aber paradoxerweise bleibt die Implementierung eines solchen Verfahrens zur Klassifizierung von Bildern sehr komplex, da eine beträchtliche Anzahl von Parametern definiert werden muss: Anzahl, Größe, Verschiebung der Filter, Wahl der Pooling-Methode, Wahl der Anzahl der Layers, Anzahl der Neuronen pro Layer usw. Die meisten dieser Parameter sind jedoch nicht in der Lage, die Bilder zu klassifizieren.
Daher bietet Python über das Modul Torchvision die Möglichkeit, leistungsfähige, vorab trainierte CNN-Modelle wie VGG16, Resnet101 usw. zu nutzen.
In diesem Artikel haben wir die Funktionsweise und die Architektur von Convolutional Neural Networks beschrieben und uns dabei auf ihre Besonderheit, den Convolutive Layer, konzentriert.
Nun müssen wir noch diese Klassifizierung weiter verstehen: die Rückverbreitung des Backpropagation-Algorithmus. Keine Sorge, ein nächster Artikel zu diesem Thema kommt bald!
Ist ein Convolutional Neural Network Machine Learning oder Deep Learning ?
Ein Convolutional Neural Network (CNN) gehört zur Familie der künstlichen neuronalen Netzwerke und wird in der Regel dem Bereich des Deep Learning zugeordnet.
Machine Learning ist ein Oberbegriff, der sich mit Algorithmen und Techniken befasst, die es Computern ermöglichen, aus Daten zu lernen und Vorhersagen oder Entscheidungen zu treffen, ohne explizit programmiert zu werden. Es gibt verschiedene Ansätze im Machine Learning, darunter überwachtes Lernen, unüberwachtes Lernen und verstärkendes Lernen.
Deep Learning ist eine spezifische Methode des Machine Learnings, die auf künstlichen neuronalen Netzwerken mit vielen Schichten (daher der Begriff „tief“) basiert.
Diese Netzwerke können komplexe Muster und Zusammenhänge in Daten erkennen und lernen, indem sie hierarchische Darstellungen der Daten erzeugen.
Convolutional Neural Networks sind eine spezielle Art von künstlichen neuronalen Netzwerken, die besonders gut für die Verarbeitung von Daten mit räumlicher Struktur geeignet sind, wie zum Beispiel Bilder. CNNs verwenden Convolutional Layers, Pooling Layers und Fully Connected Layers, um Merkmale in den Daten zu extrahieren und Klassifizierungen oder Vorhersagen zu treffen.
Insgesamt kann man sagen, dass Convolutional Neural Networks eine Technik des Deep Learning sind, das wiederum ein Teilbereich des Machine Learnings ist.
Artikel 1 : Einführung in das Deep Learning
Artikel 2 : Neuronale Netze
Artikel 3 : Alles rund um Künstliche Intelligenz