CNN-Bildklassifizierung | Bildklassifizierung mit CNN

Inhalt

Einführung

Konvolutionelle neuronale Netze (CNN): das Konzept hinter den jüngsten Fortschritten und Entwicklungen in der tiefes Lernen.

CNN hat neue Maßstäbe gesetzt und den Thron bestiegen, um die neueste Technologie zu werden. Computer Vision Technik. Unter den verschiedenen Arten von Neuronale Netze (andere umfassen rekurrente neuronale Netze (RNN), Langzeit-Kurzzeitgedächtnis (LSTM), künstliche neurale Netzwerke (ANN), etc.), CNNs sind mit Abstand die beliebtesten.

Diese konvolutionellen neuronalen Netzmodelle sind im Bilddatenraum allgegenwärtig. Sie funktionieren phänomenal gut bei Computer-Vision-Aufgaben wie der Bildklassifizierung, Objekterkennung, Bilderkennung, etc.

Dann, Wo können Sie Ihre CNN-Fähigkeiten üben?? Gut, Sie sind an der richtigen Stelle!

Es gibt mehrere Datensätze, die Sie nutzen können, um konvolutionelle neuronale Netze anzuwenden. Hier sind drei beliebte Datensätze:

mnist-1-3907316

In diesem Artikel, Wir werden Bildklassifizierungsmodelle mit CNN für jeden dieser Datensätze erstellen. Korrekt! Wir werden MNSIT erkunden, CIFAR-10 und ImageNet zum Verständnis, auf praktische Weise, wie CNN für die Bildklassifizierungsaufgabe funktioniert.

Sie können alles über Convolutional Neural Networks erfahren (CNN) in diesem kostenlosen Kurs: Konvolutionelle neuronale Netze (CNN) von Anfang an

Meine Inspiration zum Schreiben dieses Artikels ist es, der Community zu helfen, theoretisches Wissen praktisch anzuwenden. Dies ist eine sehr wichtige Übung, da es Ihnen nicht nur hilft, ein tieferes Verständnis des zugrunde liegenden Konzepts zu entwickeln, es werden Ihnen auch praktische Details vermittelt, die nur durch die Umsetzung des Konzepts erlernt werden können.

Wenn Sie neu in der Welt der neuronalen Netze sind, CNN, Bildklassifizierung, Ich empfehle Ihnen, diese ausgezeichneten detaillierten Tutorials zu befolgen:

Und wenn Sie Computer Vision und Deep Learning in der Tiefe erlernen möchten, Sie sollten sich unsere beliebten Kurse ansehen:

Inhaltsverzeichnis

  1. Verwenden von CNN zum Klassifizieren handgeschriebener Ziffern im MNIST-Datensatz
  2. Bildidentifikation aus dem CIFAR-10-Datensatz mit CNN
  3. Bildkategorisierung des ImageNet-Datensatzes mit CNN
  4. Wohin von hier aus?

Notiz: In diesem Artikel werde ich Keras verwenden, um die Bildklassifizierung mit CNN zu demonstrieren. Keras ist ein hervorragendes Framework zum Lernen, wenn Sie gerade erst mit Deep Learning beginnen..

Verwenden von CNN zum Klassifizieren handgeschriebener Ziffern im MNIST-Datensatz

mnist-8721761

MNIST (Nationales modifiziertes Institut für Standards und Technologie) ist ein bekannter Datensatz, der in verwendet wird Computer Vision die von Yann Le Cun et . gebaut wurde. Alabama. Es besteht aus Bildern, die handgeschriebene Ziffern (0-9), aufgeteilt in eine Menge von Ausbildung von 50,000 Bilder und ein Test-Set von 10,000 wo jedes Bild hat 28 x 28 Pixelbreite und -höhe.

Dieser Datensatz wird häufig verwendet, um einen Algorithmus zu üben, der für die Bildklassifizierung erstellt wurde., da der Datensatz recht einfach zu erobern ist. Deswegen, Ich empfehle, dass dies Ihr erster Datensatz ist, wenn Sie nur im Feld experimentieren.

MNIST wird standardmäßig mit Keras geliefert und Sie können die Zug- und Testdateien einfach mit wenigen Codezeilen laden:

aus keras.datasets importieren mnist

# Laden des Datensatzes
(X_Zug, y_train), (X_test, y_test) = mnist.load_data()
# lassen Sie uns die Form des Datensatzes ausdrucken
drucken("X_Zug-Form", X_train.shape)
drucken("y_Zugform", y_train.shape)
drucken("X_Testform", X_test.shape)
drucken("y_Testform", y_test.shape)

Hier ist die X-Form (Merkmale) und und (Zielsetzung) für Trainings- und Validierungsdaten:

X_Zug-Form (60000, 28, 28) 
y_Zugform (60000,) 
X_Testform (10000, 28, 28) 
y_Testform (10000,)

Vor dem Training eines CNN-Modells, Lass uns ein Basismodell bauen Vollständig verbundenes neuronales Netzwerk für den Datensatz. Die grundlegenden Schritte zum Aufbau eines Bildklassifikationsmodells unter Verwendung eines rotes neuronales Sohn:

  1. Reduzieren Sie die Abmessungen des Eingabebilds auf 1D (Pixel breit x Pixel hoch)
  2. Bildpixelwerte normalisieren (Teilen durch 255)
  3. One-Hot-Kodierung der kategorialen Spalte
  4. Erstellen Sie eine Modellarchitektur (sequentiell) mit dichten Schichten
  5. Trainieren Sie das Modell und treffen Sie Vorhersagen

Dann, wir zeigen Ihnen, wie Sie ein neuronales Netzmodell für MNIST . erstellen können. Ich habe die relevanten Teile des Codes zum besseren Verständnis kommentiert:

Nach dem Ausführen des obigen Codes, festgestellt, dass wir eine gute Validierungsgenauigkeit von etwa 97% leicht.

Lassen Sie uns den obigen Code ändern, um a zu erstellen CNN Modell.

Einer der Hauptvorteile der Verwendung von CNN gegenüber NN besteht darin, dass die Eingabebilder nicht auf 1D abgeflacht werden müssen, da sie mit 2D-Bilddaten arbeiten können. Dies hilft, die Eigenschaften zu erhalten „räumlich“ der Bilder.

Hier ist der vollständige Code für das CNN-Modell:

Obwohl unsere maximale Validierungspräzision mit einem einfachen neuronalen Netzwerkmodell rund war 97%, Das Modell von CNN kann mehr als 98% mit einer einzigen Faltungsschicht.

dwd-5880365

Sie können fortfahren und weitere Conv2D-Ebenen hinzufügen, und spielen auch mit den Hyperparametern des CNN-Modells.

Bildidentifikation aus dem CIFAR-10-Datensatz mit CNN

MNIST ist ein anfängerfreundlicher Datensatz in Computer Vision. Es ist einfach, eine Punktzahl von mehr als zu erreichen 90% bei der Validierung mit einem CNN-Modell. Aber, Was ist, wenn Sie kein Anfänger sind und etwas Herausforderndes brauchen, um Ihre Konzepte in die Praxis umzusetzen??

Das ist, wo die CIFAR-10-Datensatz betritt die Szene!

1_sgochnlz-qfesdyjadgxnw-5399297

So arbeiten die Entwickler hinter CIFAR (Kanadisches Institut für fortgeschrittene Forschung) den Datensatz beschreiben:

Der CIFAR-10-Datensatz besteht aus 60.000 Farbbilder von 32 x 32 In 10 Lektionen, mit 6.000 Bilder pro Klasse. Es gibt 50.000 Trainingsbilder und 10.000 Testbilder.

Die wichtigen Punkte, die diesen Datensatz vom MNIST unterscheiden, sind:

  • Die Bilder sind in CIFAR-10 gefärbt, verglichen mit der Schwarz-Weiß-Textur von MNIST
  • Jedes Bild ist von 32 x 32 Pixel
  • 50.000 Trainingsbilder und 10.000 Testbilder

Jetzt, Diese Bilder wurden bei unterschiedlichen Lichtverhältnissen und aus verschiedenen Blickwinkeln aufgenommen, und da es sich um farbige Bilder handelt, Sie werden sehen, dass es viele Variationen in der Farbe ähnlicher Objekte gibt (zum Beispiel, die Farbe des Meerwassers). Wenn Sie das einfache verwenden CNN Architektur, die wir im obigen MNIST-Beispiel gesehen haben, Sie erhalten eine niedrige Validierungsgenauigkeit von etwa 60%.

Aus diesem Grund empfehle ich CIFAR-10 als guten Datensatz, um Ihre Hyperparameter-Tuning-Fähigkeiten für CNN zu üben.. Das Gute ist, dass, wie MNIST, CIFAR-10 ist auch in Keras . erhältlich.

Sie können den Datensatz einfach mit dem folgenden Code laden:

aus keras.datasets importieren cifar10
# Laden des Datensatzes 
(X_Zug, y_train), (X_test, y_test) = cifar10.load_data()

Dann, Wir zeigen Ihnen, wie Sie ein anständiges CNN-Modell bauen können (um die 78-80% in der Validierung) für CIFAR-10. Beachten Sie, wie die Werte der Formen aktualisiert wurden von (28, 28, 1) ein (32, 32, 3) je nach größe der bilder:

Das habe ich im Modell geändert:

  • Die Anzahl der Conv2D-Ebenen wurde erhöht, um ein tieferes Modell zu erstellen
  • Größere Anzahl von Filtern, um mehr Funktionen zu kennen
  • hinzugefügter Abbruch für Regulierung
  • Dichtere Schichten hinzugefügt

Genauigkeit des Trainings und der Validierung in allen Altersstufen:

screenshot-from-2020-02-06-12-03-34-5292096

Sie können diese Leistung leicht in den Schatten stellen, indem Sie das ältere Modell tunen. Sobald Sie CIFAR-10 . beherrschen, In Keras ist auch CIFAR-100 erhältlich, mit dem Sie mehr üben können. Da hat es 100 Lektionen, Es wird keine leichte Aufgabe sein!

Kategorisieren von ImageNet-Bildern mit CNN

Nachdem Sie nun MNIST und CIFAR-10 gemeistert haben, Lass uns dieses Problem auf eine höhere Ebene bringen. Hier, wir werden uns den berühmten ImageNet-Datensatz ansehen.

imagenet-title-pic-6861924

ImageNet ist der Datenbank Hauptgrund hinter dem ImageNet Large-Scale Reconnaissance Challenge (ILSVRC). Das ist wie bei Olympia Computer Vision. Das ist der Wettbewerb, der es geschafft hat CNN zum ersten Mal und jedes Jahr beliebt, Top-Forschungsteams aus Industrie und Wissenschaft konkurrieren mit ihren besten Algorithmen zu Computer-Vision-Aufgaben.

Über den ImageNet-Datensatz

Der ImageNet-Datensatz hat mehr als 14 Millionen Bilder, handbeschriftet in 20.000 Kategorien.

Was ist mehr, im Gegensatz zu den MNIST- und CIFAR-10-Datensätzen, die wir bereits besprochen haben, die Bilder in ImageNet haben eine Auflösung anständig (224 x 224) und das fordert uns heraus: 14 Millionen Bilder, jeder von 224 von 224 Pixel. Die Verarbeitung eines Datensatzes dieser Größe erfordert viel Rechenleistung an CPUs, GPU und RAM.

Der Nachteil: das ist vielleicht zu viel für einen alltäglichen Laptop. Dann, Was ist die Problemumgehung? Wie kann ein Enthusiast mit dem ImageNet-Datensatz arbeiten??

Hier kommt der Imagenette-Datensatz von Fast.ai ins Spiel.

Imagenette ist ein Datensatz, der aus der großen Bildersammlung von ImageNet stammt. Der Grund für die Einführung von Imagenette ist, dass Forscher und Studenten mit Bildern auf ImageNet-Ebene üben können, ohne so viele Computerressourcen zu benötigen..

In den Worten von Jeremy Howard selbst:

"Mir (Jeremy Howard, nämlich) Ich habe Imagenette in erster Linie entwickelt, weil ich einen kleinen Vision-Datensatz wollte, mit dem ich schnell sehen kann, ob meine Algorithmus-Ideen eine Chance haben, zu funktionieren. Sie tun es normalerweise nicht, Aber das Testen auf Imagenet dauert lange, bis ich es herausgefunden habe, zumal ich mich für Algorithmen interessiere, die besonders gut in der Ende des Trainings.

Aber ich denke, das kann auch für andere ein nützlicher Datensatz sein „.

Und das werden wir auch zum Üben nutzen!

1. Laden Sie den Imagenette-Datensatz herunter

So erhalten Sie den Datensatz (Befehle für Ihr Terminal):

$ wget https://s3.amazonaws.com/fast-ai-imageclas/imagenette2.tgz
$ tar -xf imagenette2.tgz

Nachdem Sie den Datensatz heruntergeladen haben, Sie werden feststellen, dass Sie zwei Ordner haben: „Bahn“ Ja „val“. Diese enthalten jeweils das Trainings- und Validierungsset. In jedem Ordner, es gibt separate Ordner für jede Klasse. Hier ist die Zuordnung der Klassen:

Diese Klassen haben dieselbe ID im ursprünglichen ImageNet-Datensatz. Jede der Klassen hat ungefähr 1000 Bilder, somit, allgemein, ist ein ausgewogener Datensatz.

ddd-6836177

2. Laden von Bildern mit ImageDataGenerator

Keras hat diese nützliche Funktion zum Laden großer Bilder (wie die, die wir hier haben) ohne RAM-Maximierung, mache es in kleinen Chargen. ImageDataGenerator in Kombination mit fit_generator bietet diese Funktionalität:

Der ImageDataGenerator selbst leitet die Klassenbezeichnungen und die Anzahl der Klassen aus den Ordnernamen ab.

screenshot-from-2020-02-06-11-25-54-6363232

3. Erstellen eines grundlegenden CNN-Modells für die Bildklassifizierung

Lassen Sie uns ein grundlegendes CNN-Modell für unseren Imagenette-Datensatz erstellen (zum Zweck der Klassifizierung von Bildern):

Wenn wir die Validierungspräzision des Vorgängermodells vergleichen, werde das erkennen, obwohl es eine tiefere Architektur ist als die, die wir bisher verwendet haben, wir können nur eine Validierungsgenauigkeit von etwa 40-50%.

mmm-7938868

Das kann viele Gründe haben, da unser Modell nicht komplex genug ist, um die zugrunde liegenden Muster der Bilder zu lernen, oder vielleicht sind die Trainingsdaten zu klein, um genau zwischen den Klassen zu verallgemeinern.

Steig auf: Transfer-Lernen.

4. Uso de Transfer Learning (VGG16) um die Genauigkeit zu verbessern

VGG16 ist eine CNN-Architektur, die der erste Zweitplatzierte in der 2014 ImageNet-Herausforderung. Es wurde von der Visual Graphics Group in Oxford entworfen und hat 16 Schichten insgesamt, mit 13 Faltungsschichten. Wir werden die zuvor trainierten Gewichte dieses Modells laden, damit wir die nützlichen Funktionen, die dieses Modell gelernt hat, für unsere Aufgabe verwenden können..

VGG16 Gewichte herunterladen

aus keras.applications importieren VGG16

# include top sollte False sein, um die Softmax-Schicht zu entfernen
pretrained_model = VGG16(include_top=Falsch, Gewichte="imagenet")
pretrained_model.summary()

Hier ist die Architektur des Modells:

mmm-1-7044075

Generieren Sie Funktionen aus VGG16

Lassen Sie uns nützliche Funktionen extrahieren, die VGG16 bereits aus den Bildern in unserem Datensatz kennt:

aus keras.utils importieren nach_categorical
# Zug- und Val-Merkmale extrahieren
vgg_features_train = pretrained_model.predict(Bahn)
vgg_features_val = pretrained_model.predict(val)
# OHE-Zielspalte
train_target = to_categorical(train.labels)
val_target = to_categorical(Wertetiketten)
Sobald die oben genannten Funktionen bereit sind, Wir können sie verwenden, um ein grundlegendes Fully Connected zu trainieren Rotes Neuron und Keras:

Beachten Sie, wie schnell Ihr Modell zu konvergieren beginnt. Alleine 10 Epochen, hat eine Validierungsgenauigkeit von mehr als 94%. Ist es nicht erstaunlich?

screenshot-from-2020-02-06-11-56-11-9911896

Falls Sie den Imagenette-Datensatz beherrschen, Fastai hat auch zwei Varianten veröffentlicht, die Klassen enthalten, die Sie nur schwer klassifizieren können:

  • Imagewoof: 10 Arten von Hunderassen, ein schwieriger zu klassifizierendes Problem
  • Imagen Net („wang“): Eine Kombination aus Imagenette und Imagewoof und ein paar Tricks, die das Problem komplizierter machen

Wohin von hier aus?

Zusätzlich zu den oben genannten Datensätzen, Sie können auch die folgenden Datensätze verwenden, um Computer Vision Algorithmen. Eigentlich, betrachte es als Herausforderung. Können Sie Ihr Wissen über CNN anwenden, um die Benchmark-Punktzahl in diesen Datensätzen zu übertreffen??

  • Mode MNIST – Datensatz ähnlich wie MNIST für Bekleidung und Bekleidung. Statt Ziffern, die bilder zeigen eine art von kleidung (T-Shirt, Hose, Handtasche, etc.)
  • Caltech 101 – Ein weiterer herausfordernder Datensatz, den ich für die Bildklassifizierung gefunden habe

Ich schlage das auch vor, bevor Sie sich für Transfer-Lernen entscheiden, Versuchen Sie, Ihre grundlegenden CNN-Modelle zu verbessern. Sie können von VGG16-Architekturen lernen, ZFNet, etc. für einige Hinweise zum Hyperparameter-Tuning und Sie können dasselbe verwenden ImageDataGenerator um Ihre Bilder zu vergrößern und die Größe des Datensatzes zu erhöhen.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.

Datenlautsprecher