Convolutional Neural Network

convulationnal

In diesem Artikel konzentrieren wir uns auf einen der leistungsstärksten Algorithmen des Deep Learning, das Convolutional Neural Network (CNN). Dabei handelt es sich 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! 

modele cnn
Erkennung eines Weihnachtsmanns durch ein CNN-Modell

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 einfach: BenutzerInnen 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. Um in das Thema tiefer einzutauchen, kannst Du diesen Artikel lesen.
convolutional neural network
Darstellung der Architektur eines CNN

Convolutional Layer

Wozu gibt es Convolutional Layers denn?

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:

neural network
Darstellung des Verlaufs der Filterung bzw. des Filterfensters auf dem Bild.
  1. Erstens wird die Größe des Filterfensters, das sich oben links befindet, festgelegt.
  2. 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.
  3. 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:

CNN Deep learning
Effekt der Mittelwert- und Gaußfilter - DataScientest.

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:

convolutional neural network
Max-Polling-Prozess
Das Filterfenster bewegt sich um zwei Pixel nach rechts (Stride/Schritt = 2). Bei jedem Schritt wird den Operator arg max berechnet, der dem größten Wert der vier Pixelwerte entspricht.
reseau de neurones convolutif
Beispiel für einen Max-Pooling-Effekt.

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.

reseau de neurones
Darstellung eines mehrlagigen Perzeptrons

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. 

reseau de neurones
Beispiel einer CNN-Architektur

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.
ReLU Rectified Linear Units
Aktivierungsfunktion ReLU
  • 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.
couche fully connected
Neuronales Netzwerk mit zwei hidden Layers

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 :

Extrait de la base de données ImageNet
Auszug aus der Datenbank ImageNet

Vorbereitung: Als Erstes importieren wir jede Bibliotheken, 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

prediction algorithme
Darstellung der Vorhersage des Modells VGG16

Man kann sich auch die fünf Labels anzeigen lassen, die von dem Modell VGG16 als am wahrscheinlichsten eingestuft wurden:

prediction algorithme
die fünf wahrscheinlichsten Labels vom Modell VGG16
VGG16 konnte also mit großer Sicherheit (95,6%) vorhersagen, dass es sich bei dem eingegebenen Bild nicht nur um einen Wolf handelte, und 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!

Weiterlesen

Möchtest Du informiert bleiben?

Schreib uns Deine E-Mail-Adresse, damit wir Dir die neuesten Artikel zum Zeitpunkt der Veröffentlichung zusenden können!