Articles

The Complete Beginner’s Guide to Deep Learning: Convolutional Neural Networks and Image Classification

Posted by admin

„Eine Sache, die mir früh aufgefallen ist, ist, dass Sie nicht in ein Foto einfügen, was herauskommen wird. Oder umgekehrt, was herauskommt, ist nicht das, was Sie hineinlegen.“

― Diane Arbus

In Ihrem bevorzugten sozialen Netzwerk wird eine Benachrichtigung angezeigt, dass jemand ein Bild gepostet hat, auf dem Sie möglicherweise enthalten sind.

Richtig.

Es ist das schlechteste Bild von dir überhaupt.

GIF über GIPHY

Wie ist das passiert?

Bildklassifizierung!Das Convolutional Neural Network (CNN) ist eine Klasse von Deep Learning neuronalen Netzen. CNNs stellen einen großen Durchbruch in der Bilderkennung dar. Sie werden am häufigsten zur Analyse visueller Bilder verwendet und arbeiten häufig hinter den Kulissen der Bildklassifizierung. Sie sind im Kern von allem zu finden, vom Foto-Tagging von Facebook bis hin zu selbstfahrenden Autos. Sie arbeiten hart hinter den Kulissen in allen Bereichen, vom Gesundheitswesen bis zur Sicherheit.

Sie sind schnell und effizient. Aber wie funktionieren sie?

Bildklassifizierung ist der Prozess der Aufnahme einer Eingabe (wie ein Bild) und Ausgabe einer Klasse (wie „Katze“) oder einer Wahrscheinlichkeit, dass die Eingabe eine bestimmte Klasse ist („Es gibt eine 90% ige Wahrscheinlichkeit, dass diese Eingabe ist eine Katze“). Sie können ein Bild betrachten und wissen, dass Sie eine schreckliche Aufnahme Ihres eigenen Gesichts sehen, aber wie kann ein Computer das lernen?

Mit einem convolutional Neural network!

Ein CNN hat

  • Faltungsschichten
  • ReLU-Schichten
  • Pooling-Schichten
  • eine vollständig verbundene Schicht

Eine klassische CNN-Architektur würde ungefähr so aussehen:

Input ->Convolution ->ReLU ->Convolution ->ReLU ->Pooling ->
ReLU ->Convolution ->ReLU ->Pooling ->Fully Connected

A CNN convolves (not convolutes…) learned features with input data and uses 2D convolutional layers. This means that this type of network is ideal for processing 2D images. Im Vergleich zu anderen Bildklassifizierungsalgorithmen verwenden CNNs tatsächlich sehr wenig Vorverarbeitung. Dies bedeutet, dass sie die Filter lernen können, die in anderen Algorithmen von Hand erstellt werden müssen. CNNs können in unzähligen Anwendungen eingesetzt werden, von Bild- und Videoerkennung, Bildklassifizierung und Empfehlungssystemen bis hin zur Verarbeitung natürlicher Sprache und medizinischer Bildanalyse.

CNNs sind von biologischen Prozessen inspiriert. Sie basieren auf einigen coolen Forschungen von Hubel und Wiesel in den 60er Jahren über das Sehen bei Katzen und Affen. Das Muster der Konnektivität in einem CNN stammt aus ihrer Forschung zur Organisation des visuellen Kortex. Im Auge eines Säugetiers reagieren einzelne Neuronen nur im rezeptiven Bereich, einer eingeschränkten Region, auf visuelle Reize. Die Aufnahmefelder verschiedener Regionen überlappen sich teilweise, so dass das gesamte Sichtfeld abgedeckt ist. So funktioniert CNN!

Bild von NatWhitePhotography auf

CNNs haben eine Eingabeebene, eine Ausgabeebene und versteckte Ebenen. Die verborgenen Schichten bestehen normalerweise aus Faltungsschichten, ReLU-Schichten, Pooling-Schichten und vollständig verbundenen Schichten.

  • Faltungsebenen wenden eine Faltungsoperation auf die Eingabe an. Dadurch werden die Informationen an die nächste Schicht weitergegeben.
  • Pooling kombiniert die Ausgänge von Clustern von Neuronen zu einem einzigen Neuron in der nächsten Schicht.
  • Vollständig verbundene Schichten verbinden jedes Neuron in einer Schicht mit jedem Neuron in der nächsten Schicht.

In einer Faltungsschicht erhalten Neuronen nur Eingaben von einem Teilbereich der vorherigen Schicht. In einer vollständig verbundenen Schicht erhält jedes Neuron Eingaben von jedem Element der vorherigen Schicht.

Ein CNN extrahiert Features aus Bildern. Dadurch entfällt die Notwendigkeit einer manuellen Merkmalsextraktion. Die Features sind nicht trainiert! Sie werden gelernt, während das Netzwerk an einer Reihe von Bildern trainiert. Dies macht Deep-Learning-Modelle für Computer-Vision-Aufgaben äußerst genau. CNNs lernen Feature-Erkennung durch Dutzende oder Hunderte von versteckten Schichten. Jede Ebene erhöht die Komplexität der erlernten Features.

GIF über GIPHY

Ein CNN

  • beginnt mit einem Eingabebild
  • wendet viele verschiedene Filter an, um eine Feature-Map zu erstellen
  • wendet eine ReLU funktion zur Erhöhung der Nichtlinearität
  • wendet eine Pooling-Ebene auf jede Feature-Map an
  • glättet die gepoolten Bilder zu einem langen Vektor.
  • gibt den Vektor in ein vollständig verbundenes künstliches neuronales Netzwerk ein.
  • verarbeitet die Features über das Netzwerk. Die letzte vollständig verbundene Ebene bietet die „Abstimmung“ der Klassen, nach denen wir suchen.
  • trainiert durch Vorwärtsausbreitung und Rückpropagation für viele, viele Epochen. Dies wiederholt sich, bis wir ein genau definiertes neuronales Netzwerk mit trainierten Gewichten und Merkmalsdetektoren haben.

Was bedeutet das?

Ganz am Anfang dieses Prozesses wird ein Eingabebild in Pixel zerlegt.

GIF über GIPHY

Bei einem Schwarzweißbild werden diese Pixel als 2D-Array interpretiert (z. B. 2×2 Pixel). Jedes Pixel hat einen Wert zwischen 0 und 255. (Null ist komplett schwarz und 255 ist komplett weiß. Die Graustufen existieren zwischen diesen Zahlen. Basierend auf diesen Informationen kann der Computer mit der Arbeit an den Daten beginnen.

Für ein Farbbild ist dies ein 3D-Array mit einer blauen Ebene, einer grünen Ebene und einer roten Ebene. Jede dieser Farben hat ihren eigenen Wert zwischen 0 und 255. Die Farbe kann durch Kombinieren der Werte in jeder der drei Ebenen gefunden werden.

Faltung

Der Hauptzweck des Faltungsschritts besteht darin, Merkmale aus dem Eingabebild zu extrahieren. Die Faltungsschicht ist immer der erste Schritt in einem CNN.

Sie haben ein Eingabebild, einen Merkmalsdetektor und eine Merkmalskarte. Sie nehmen den Filter und wenden ihn Pixelblock für Pixelblock auf das Eingabebild an. Sie tun dies durch die Multiplikation der Matrizen.

Angenommen, Sie haben eine Taschenlampe und ein Blatt Luftpolsterfolie. Ihre Taschenlampe leuchtet eine 5-Blase x 5-Blase Bereich. Um das gesamte Blatt zu betrachten, würden Sie Ihre Taschenlampe über jedes 5×5-Quadrat schieben, bis Sie alle Blasen gesehen haben.

Foto von stux auf

Das Licht der Taschenlampe hier ist Ihr Filter und die Region, über die Sie gleiten, ist das Aufnahmefeld. Das Licht, das über die empfänglichen Felder gleitet, ist deine Taschenlampe, die sich faltet. Ihr Filter ist ein Array von Zahlen (auch Gewichte oder Parameter genannt). Die Entfernung, in der das Licht von Ihrer Taschenlampe gleitet (bewegen Sie Ihren Filter jeweils über eine Reihe von Blasen? Zwei?) wird der Schritt genannt. Ein Schritt von einem bedeutet beispielsweise, dass Sie Ihren Filter jeweils um ein Pixel verschieben. Die Konvention ist ein Schritt von zwei.

Die Tiefe des Filters muss mit der Tiefe der Eingabe übereinstimmen, wenn wir also ein Farbbild betrachten, wäre die Tiefe 3. Das macht die Abmessungen dieses Filters 5x5x3. In jeder Position multipliziert der Filter die Werte im Filter mit den ursprünglichen Werten im Pixel. Dies ist elementweise Multiplikation. Die Multiplikationen werden summiert, wodurch eine einzige Zahl entsteht. Wenn Sie in der oberen linken Ecke Ihrer Luftpolsterfolie begonnen haben, ist diese Zahl repräsentativ für die obere linke Ecke. Jetzt bewegen Sie Ihren Filter an die nächste Position und wiederholen den Vorgang rund um die Luftpolsterfolie. Das Array, mit dem Sie enden, wird als Feature-Map oder Aktivierungs-Map bezeichnet! Sie können mehr als einen Filter verwenden, um räumliche Beziehungen besser zu erhalten.

GIF über GIPHY

Sie geben Parameter wie die Anzahl der Filter, die Filtergröße, die Architektur des Netzwerks usw. an. Das CNN lernt die Werte der Filter während des Trainingsprozesses selbst. Sie haben viele Optionen, mit denen Sie arbeiten können, um den bestmöglichen Bildklassifikator für Ihre Aufgabe zu erstellen. Sie können die Eingabematrix mit Nullen auffüllen (Zero Padding), um den Filter auf angrenzende Elemente der Eingabebildmatrix anzuwenden. Auf diese Weise können Sie auch die Größe der Feature-Maps steuern. Das Hinzufügen von Zero Padding ist eine breite Faltung. Das Hinzufügen von Null-Padding ist eine enge Faltung.

So erkennen wir Bilder! Wir betrachten nicht jedes einzelne Pixel eines Bildes. Wir sehen Merkmale wie einen Hut, ein rotes Kleid, ein Tattoo und so weiter. Es gibt so viele Informationen, die zu jeder Zeit in unsere Augen gelangen, dass wir unmöglich mit jedem einzelnen Pixel davon umgehen können. Wir erlauben unserem Modell, dasselbe zu tun.

Das Ergebnis ist die gefaltete Feature-Map. Es ist kleiner als das ursprüngliche Eingabebild. Dies macht es einfacher und schneller zu handhaben. Verlieren wir Informationen? Einige, ja. Gleichzeitig besteht der Zweck des Merkmalsdetektors jedoch darin, Merkmale zu erkennen, was genau dies tut.

Wir erstellen viele Feature-Maps, um unsere erste Faltungsebene zu erhalten. Auf diese Weise können wir viele verschiedene Funktionen identifizieren, mit denen das Programm lernen kann.

Merkmalsdetektoren können mit unterschiedlichen Werten eingerichtet werden, um unterschiedliche Ergebnisse zu erhalten. Beispielsweise kann ein Filter angewendet werden, der ein Bild schärfen und fokussieren oder ein Bild verwischen kann. Das würde allen Werten die gleiche Bedeutung beimessen. Sie können Kantenverbesserung, Kantenerkennung und mehr durchführen. Sie würden dies tun, indem Sie verschiedene Feature-Detektoren anwenden, um verschiedene Feature-Maps zu erstellen. Der Computer kann bestimmen, welche Filter am sinnvollsten sind, und sie anwenden.

Der Hauptzweck besteht darin, Features in Ihrem Bild zu finden, sie in eine Feature-Map einzufügen und trotzdem die räumliche Beziehung zwischen Pixeln beizubehalten. Das ist wichtig, damit die Pixel nicht durcheinander geraten.

Lassen Sie uns dieses Zeug visualisieren!

Sag hallo zu meinem kleinen Freund:

Photo by Kirgiz03 on

We’re going to use this guy for our input image.

We’ll make him black and white

Let’s define and visualize our filters

import numpy as npfilter_vals = np.array(, , , ])print('Filter shape: ', filter_vals.shape)

Filter shape: (4, 4)

und wir sehen:

Filter 1: 



]

Hier ist eine Visualisierung unserer vier Filter

Definieren wir nun eine Faltungsebene (ich liebe PyTorch gerade, also verwenden wir das hier.)

Wir werden sehen

Net(
(conv): Conv2d(1, 4, kernel_size=(4, 4), stride=(1, 1), bias=False)
)

Fügen Sie ein wenig mehr Code hinzu

Dann ein wenig mehr

Und wir können die Ausgabe einer Faltungsschicht visualisieren, bevor eine ReLU-Aktivierungsfunktion angewendet wird!

erstellen Sie einen benutzerdefinierten Kernel mit einem Sobel-Operator als Kantenerkennungsfilter. Der Sobel-Filter wird sehr häufig bei der Kantenerkennung verwendet. Es macht einen guten Job, Intensitätsmuster in einem Bild zu finden. Das Anwenden eines Sobel-Filters auf ein Bild ist eine Möglichkeit, die Ableitung des Bildes separat in x- oder y-Richtung zu approximieren.

Wir konvertieren unseren kleinen Kerl zum Filtern in Graustufen

gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)plt.imshow(gray, cmap='gray')

Los geht’s!

Möchten Sie die Mathematik überprüfen? Werfen Sie einen Blick auf Einführung in Convolutional Neural Networks von Jianxin Wu

ReLU-Schicht

Die ReLU-Schicht (Rectified Linear Unit) ist ein weiterer Schritt zu unserer Faltungsschicht. Sie wenden eine Aktivierungsfunktion auf Ihre Feature-Maps an, um die Nichtlinearität im Netzwerk zu erhöhen. Dies liegt daran, dass Bilder selbst sehr nichtlinear sind! Es entfernt negative Werte aus einer Aktivierungszuordnung, indem es sie auf Null setzt.

Faltung ist eine lineare Operation mit Dingen wie elementweiser Matrixmultiplikation und Addition. Die realen Daten, die unser CNN lernen soll, sind nichtlinear. Wir können das mit einer Operation wie ReLU erklären. Sie können andere Operationen wie tanh oder sigmoid verwenden. ReLU ist jedoch eine beliebte Wahl, da es das Netzwerk schneller trainieren kann, ohne dass die Generalisierungsgenauigkeit erheblich beeinträchtigt wird.

Schauen Sie sich C.-C. Jay Kuo Convolutional Neural Networks mit einem mathematischen Modell zu verstehen.

Möchten Sie tiefer graben? Versuchen Sie Kaiming He, et al. Tief in Gleichrichter eintauchen: Übertreffen der Leistung auf menschlicher Ebene bei der ImageNet-Klassifizierung.

Wenn Sie ein wenig mehr Informationen über die absoluten Grundlagen der Aktivierungsfunktionen benötigen, finden Sie das hier!

So sieht unser kleiner Kumpel aus, nachdem eine ReLU-Aktivierungsfunktion alle negativen Pixelwerte schwarz gemacht hat

viz_layer(activated_layer)

Related Post

Leave A Comment