Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Herausforderung: Aufbau eines CNN | Convolutional Neural Networks
Computer Vision Essentials
course content

Kursinhalt

Computer Vision Essentials

Computer Vision Essentials

1. Einführung in die Computer Vision
2. Bildverarbeitung mit OpenCV
3. Convolutional Neural Networks
4. Objekterkennung
5. Überblick Über Fortgeschrittene Themen

book
Herausforderung: Aufbau eines CNN

Convolutional Neural Networks (CNNs) werden aufgrund ihrer Fähigkeit, hierarchische Merkmale zu extrahieren, häufig für die Bildklassifikation eingesetzt. In dieser Aufgabe implementieren und trainieren Sie ein VGG-ähnliches CNN mit TensorFlow und Keras auf dem CIFAR-10-Datensatz. Der Datensatz besteht aus 60.000 Bildern (32×32×3), die zu 10 verschiedenen Klassen gehören, darunter Flugzeuge, Autos, Vögel, Katzen und weitere.

Dieses Projekt führt Sie durch das Laden des Datensatzes, die Vorverarbeitung der Bilder, die Definition des CNN-Modells, das Training sowie die Auswertung der Modellleistung.

1. Datenvorverarbeitung für CNNs

Vor dem Training eines CNN ist die Vorverarbeitung der Daten ein entscheidender Schritt, um eine bessere Leistung und schnellere Konvergenz zu gewährleisten. Gängige Methoden der Vorverarbeitung sind:

  • Normalisierung: Bei dieser Methode werden die Pixelwerte der Bilder von einem Bereich zwischen 0 und 255 auf einen Bereich zwischen 0 und 1 skaliert. Dies wird häufig als x_train / 255.0, x_test / 255.0 implementiert;

  • One-Hot-Encoding: Labels werden häufig in One-Hot-codierte Vektoren für Klassifikationsaufgaben umgewandelt. Dies erfolgt typischerweise mit der Funktion keras.utils.to_categorical, die ganzzahlige Labels (z. B. 0, 1, 2, usw.) in einen One-Hot-codierten Vektor transformiert, wie etwa [1, 0, 0, 0] für ein Klassifikationsproblem mit 4 Klassen.

2. Aufbau der CNN-Architektur

Eine CNN-Architektur besteht aus mehreren Schichten, die verschiedene Aufgaben zur Merkmalsextraktion und Vorhersage übernehmen. Zentrale CNN-Schichten können wie folgt implementiert werden:

Convolutional Layer (Conv2D)

Hinweis

Den Parameter input_shape müssen Sie nur in der Eingabeschicht angeben.

Pooling-Schicht (MaxPooling2D)

Flatten-Schicht

Dense-Schicht

Hinweis

Die abschließende Dense-Schicht besitzt in der Regel so viele Einheiten wie Klassen vorhanden sind und verwendet eine Softmax-Aktivierungsfunktion, um eine Wahrscheinlichkeitsverteilung über die Klassen auszugeben.

3. Modellkompilierung

Nach der Definition der Architektur muss das Modell kompiliert werden. In diesem Schritt werden die Verlustfunktion, der Optimierer und die Metriken festgelegt, die das Modell während des Trainings leiten. Die folgenden Methoden werden häufig bei CNNs verwendet:

Optimierer (Adam)

Der Optimierer passt die Gewichte des Modells an, um die Verlustfunktion zu minimieren. Der Adam-Optimierer ist aufgrund seiner Effizienz und der Fähigkeit, die Lernrate während des Trainings anzupassen, sehr beliebt.

Verlustfunktion (Kategorische Kreuzentropie)

Für Mehrklassenklassifikation wird typischerweise die kategorische Kreuzentropie als Verlustfunktion verwendet. Dies kann wie folgt implementiert werden:

Metriken

Die Modellleistung wird anhand von Metriken für Klassifikationsaufgaben überwacht, wie Genauigkeit, Präzision, Recall usw. Diese können wie folgt definiert werden:

Kompilieren

4. Training des Modells

Das Training eines CNN umfasst das Einspeisen der Eingabedaten in das Netzwerk, das Berechnen des Verlusts und das Aktualisieren der Gewichte mittels Backpropagation. Der Trainingsprozess wird durch die folgenden zentralen Methoden gesteuert:

  • Anpassen des Modells: Die Methode fit() wird verwendet, um das Modell zu trainieren. Diese Methode erhält die Trainingsdaten, die Anzahl der Epochen und die Batch-Größe. Zusätzlich kann ein optionaler Validierungsanteil angegeben werden, um die Leistung des Modells auf unbekannten Daten während des Trainings zu bewerten:

  • Batch-Größe und Epochen: Die Batch-Größe bestimmt die Anzahl der Stichproben, die verarbeitet werden, bevor die Modellgewichte aktualisiert werden, und die Anzahl der Epochen gibt an, wie oft der gesamte Datensatz durch das Modell geleitet wird.

5. Auswertung

Klassifikationsbericht

sklearn.metrics.classification_report() vergleicht wahre und vorhergesagte Werte aus dem Testdatensatz. Es enthält Präzision, Recall und F1-Score für jede Klasse. Die Methoden benötigen jedoch nur Klassenlabels, daher nicht vergessen, diese aus Vektoren zurückzukonvertieren ([0,0,1,0] -> 2):

Auswertung

Nach dem Training des Modells wird dieses auf dem Testdatensatz ausgewertet, um seine Generalisierungsfähigkeit zu beurteilen. Die Auswertung liefert Metriken, die bereits in der Methode .compile() erwähnt wurden. Die Auswertung erfolgt mit .evaluate():

Konfusionsmatrix

Um tiefere Einblicke in die Modellleistung zu erhalten, kann die Konfusionsmatrix visualisiert werden. Sie zeigt die wahren Positiven, falschen Positiven, wahren Negativen und falschen Negativen Vorhersagen für jede Klasse. Die Konfusionsmatrix kann mit TensorFlow berechnet werden:

Diese Matrix kann anschließend mithilfe von Heatmaps visualisiert werden, um zu beobachten, wie gut das Modell für jede Klasse arbeitet:

1. Laden und Vorverarbeiten des Datensatzes

  • Importieren des CIFAR-10-Datensatzes aus Keras;

  • Normalisieren der Pixelwerte auf den Bereich [0,1] für eine bessere Konvergenz;

  • Umwandeln der Klassenlabels in das one-hot encoded-Format für die kategoriale Klassifikation.

2. Definition des CNN-Modells

Implementierung einer VGG-ähnlichen CNN-Architektur mit den folgenden Schlüsselschichten: VGG like architecture

Convolutional Layers:

  • Kernelgröße: 3×3;

  • Aktivierungsfunktion: ReLU;

  • Padding: 'same'.

Pooling Layers:

  • Pooling-Typ: max pooling;

  • Pooling-Größe: 2×2.

Dropout-Schichten (Verhindern von Overfitting durch zufälliges Deaktivieren von Neuronen):

  • Dropout-Rate: 25%.

Flatten-Schicht – Umwandlung von 2D-Feature-Maps in einen 1D-Vektor für die Klassifikation.

Vollständig verbundene Schichten – Dense Layers für die finale Klassifikation, mit einer ReLU- oder Softmax-Ausgabeschicht.

Kompilieren des Modells mit:

  • Adam optimizer (für effizientes Lernen);

  • Categorical cross-entropy als Verlustfunktion (für Mehrklassenklassifikation);

  • Accuracy metric zur Leistungsbewertung (die Klassen sind ausgeglichen, weitere Metriken können hinzugefügt werden).

3. Trainieren des Modells

  • Festlegen der Parameter epochs und batch_size für das Training (z. B. epochs=20, batch_size=64);

  • Festlegen des Parameters validation_split, um den Prozentsatz der Trainingsdaten als Validierungsdaten zu definieren, um die Modellleistung auf unbekannten Bildern zu verfolgen;

  • Speichern des Trainingsverlaufs zur Visualisierung von Genauigkeits- und Verlusttrends.

4. Auswertung und Visualisierung der Ergebnisse

  • Testen des Modells auf den CIFAR-10-Testdaten und Ausgeben der Genauigkeit;

  • Plotten von Trainingsverlust vs. Validierungsverlust zur Überprüfung von Overfitting;

  • Plotten von Trainingsgenauigkeit vs. Validierungsgenauigkeit zur Sicherstellung des Lernfortschritts.

COLAB CNN PROJEKT

question-icon

Geben Sie die Teile des Schlüssels ein (Sie haben diese nach Abschluss des Projekts erhalten)

1.  2.  3.  4.  5.
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 7

Fragen Sie AI

expand
ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

course content

Kursinhalt

Computer Vision Essentials

Computer Vision Essentials

1. Einführung in die Computer Vision
2. Bildverarbeitung mit OpenCV
3. Convolutional Neural Networks
4. Objekterkennung
5. Überblick Über Fortgeschrittene Themen

book
Herausforderung: Aufbau eines CNN

Convolutional Neural Networks (CNNs) werden aufgrund ihrer Fähigkeit, hierarchische Merkmale zu extrahieren, häufig für die Bildklassifikation eingesetzt. In dieser Aufgabe implementieren und trainieren Sie ein VGG-ähnliches CNN mit TensorFlow und Keras auf dem CIFAR-10-Datensatz. Der Datensatz besteht aus 60.000 Bildern (32×32×3), die zu 10 verschiedenen Klassen gehören, darunter Flugzeuge, Autos, Vögel, Katzen und weitere.

Dieses Projekt führt Sie durch das Laden des Datensatzes, die Vorverarbeitung der Bilder, die Definition des CNN-Modells, das Training sowie die Auswertung der Modellleistung.

1. Datenvorverarbeitung für CNNs

Vor dem Training eines CNN ist die Vorverarbeitung der Daten ein entscheidender Schritt, um eine bessere Leistung und schnellere Konvergenz zu gewährleisten. Gängige Methoden der Vorverarbeitung sind:

  • Normalisierung: Bei dieser Methode werden die Pixelwerte der Bilder von einem Bereich zwischen 0 und 255 auf einen Bereich zwischen 0 und 1 skaliert. Dies wird häufig als x_train / 255.0, x_test / 255.0 implementiert;

  • One-Hot-Encoding: Labels werden häufig in One-Hot-codierte Vektoren für Klassifikationsaufgaben umgewandelt. Dies erfolgt typischerweise mit der Funktion keras.utils.to_categorical, die ganzzahlige Labels (z. B. 0, 1, 2, usw.) in einen One-Hot-codierten Vektor transformiert, wie etwa [1, 0, 0, 0] für ein Klassifikationsproblem mit 4 Klassen.

2. Aufbau der CNN-Architektur

Eine CNN-Architektur besteht aus mehreren Schichten, die verschiedene Aufgaben zur Merkmalsextraktion und Vorhersage übernehmen. Zentrale CNN-Schichten können wie folgt implementiert werden:

Convolutional Layer (Conv2D)

Hinweis

Den Parameter input_shape müssen Sie nur in der Eingabeschicht angeben.

Pooling-Schicht (MaxPooling2D)

Flatten-Schicht

Dense-Schicht

Hinweis

Die abschließende Dense-Schicht besitzt in der Regel so viele Einheiten wie Klassen vorhanden sind und verwendet eine Softmax-Aktivierungsfunktion, um eine Wahrscheinlichkeitsverteilung über die Klassen auszugeben.

3. Modellkompilierung

Nach der Definition der Architektur muss das Modell kompiliert werden. In diesem Schritt werden die Verlustfunktion, der Optimierer und die Metriken festgelegt, die das Modell während des Trainings leiten. Die folgenden Methoden werden häufig bei CNNs verwendet:

Optimierer (Adam)

Der Optimierer passt die Gewichte des Modells an, um die Verlustfunktion zu minimieren. Der Adam-Optimierer ist aufgrund seiner Effizienz und der Fähigkeit, die Lernrate während des Trainings anzupassen, sehr beliebt.

Verlustfunktion (Kategorische Kreuzentropie)

Für Mehrklassenklassifikation wird typischerweise die kategorische Kreuzentropie als Verlustfunktion verwendet. Dies kann wie folgt implementiert werden:

Metriken

Die Modellleistung wird anhand von Metriken für Klassifikationsaufgaben überwacht, wie Genauigkeit, Präzision, Recall usw. Diese können wie folgt definiert werden:

Kompilieren

4. Training des Modells

Das Training eines CNN umfasst das Einspeisen der Eingabedaten in das Netzwerk, das Berechnen des Verlusts und das Aktualisieren der Gewichte mittels Backpropagation. Der Trainingsprozess wird durch die folgenden zentralen Methoden gesteuert:

  • Anpassen des Modells: Die Methode fit() wird verwendet, um das Modell zu trainieren. Diese Methode erhält die Trainingsdaten, die Anzahl der Epochen und die Batch-Größe. Zusätzlich kann ein optionaler Validierungsanteil angegeben werden, um die Leistung des Modells auf unbekannten Daten während des Trainings zu bewerten:

  • Batch-Größe und Epochen: Die Batch-Größe bestimmt die Anzahl der Stichproben, die verarbeitet werden, bevor die Modellgewichte aktualisiert werden, und die Anzahl der Epochen gibt an, wie oft der gesamte Datensatz durch das Modell geleitet wird.

5. Auswertung

Klassifikationsbericht

sklearn.metrics.classification_report() vergleicht wahre und vorhergesagte Werte aus dem Testdatensatz. Es enthält Präzision, Recall und F1-Score für jede Klasse. Die Methoden benötigen jedoch nur Klassenlabels, daher nicht vergessen, diese aus Vektoren zurückzukonvertieren ([0,0,1,0] -> 2):

Auswertung

Nach dem Training des Modells wird dieses auf dem Testdatensatz ausgewertet, um seine Generalisierungsfähigkeit zu beurteilen. Die Auswertung liefert Metriken, die bereits in der Methode .compile() erwähnt wurden. Die Auswertung erfolgt mit .evaluate():

Konfusionsmatrix

Um tiefere Einblicke in die Modellleistung zu erhalten, kann die Konfusionsmatrix visualisiert werden. Sie zeigt die wahren Positiven, falschen Positiven, wahren Negativen und falschen Negativen Vorhersagen für jede Klasse. Die Konfusionsmatrix kann mit TensorFlow berechnet werden:

Diese Matrix kann anschließend mithilfe von Heatmaps visualisiert werden, um zu beobachten, wie gut das Modell für jede Klasse arbeitet:

1. Laden und Vorverarbeiten des Datensatzes

  • Importieren des CIFAR-10-Datensatzes aus Keras;

  • Normalisieren der Pixelwerte auf den Bereich [0,1] für eine bessere Konvergenz;

  • Umwandeln der Klassenlabels in das one-hot encoded-Format für die kategoriale Klassifikation.

2. Definition des CNN-Modells

Implementierung einer VGG-ähnlichen CNN-Architektur mit den folgenden Schlüsselschichten: VGG like architecture

Convolutional Layers:

  • Kernelgröße: 3×3;

  • Aktivierungsfunktion: ReLU;

  • Padding: 'same'.

Pooling Layers:

  • Pooling-Typ: max pooling;

  • Pooling-Größe: 2×2.

Dropout-Schichten (Verhindern von Overfitting durch zufälliges Deaktivieren von Neuronen):

  • Dropout-Rate: 25%.

Flatten-Schicht – Umwandlung von 2D-Feature-Maps in einen 1D-Vektor für die Klassifikation.

Vollständig verbundene Schichten – Dense Layers für die finale Klassifikation, mit einer ReLU- oder Softmax-Ausgabeschicht.

Kompilieren des Modells mit:

  • Adam optimizer (für effizientes Lernen);

  • Categorical cross-entropy als Verlustfunktion (für Mehrklassenklassifikation);

  • Accuracy metric zur Leistungsbewertung (die Klassen sind ausgeglichen, weitere Metriken können hinzugefügt werden).

3. Trainieren des Modells

  • Festlegen der Parameter epochs und batch_size für das Training (z. B. epochs=20, batch_size=64);

  • Festlegen des Parameters validation_split, um den Prozentsatz der Trainingsdaten als Validierungsdaten zu definieren, um die Modellleistung auf unbekannten Bildern zu verfolgen;

  • Speichern des Trainingsverlaufs zur Visualisierung von Genauigkeits- und Verlusttrends.

4. Auswertung und Visualisierung der Ergebnisse

  • Testen des Modells auf den CIFAR-10-Testdaten und Ausgeben der Genauigkeit;

  • Plotten von Trainingsverlust vs. Validierungsverlust zur Überprüfung von Overfitting;

  • Plotten von Trainingsgenauigkeit vs. Validierungsgenauigkeit zur Sicherstellung des Lernfortschritts.

COLAB CNN PROJEKT

question-icon

Geben Sie die Teile des Schlüssels ein (Sie haben diese nach Abschluss des Projekts erhalten)

1.  2.  3.  4.  5.
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 7
Wir sind enttäuscht, dass etwas schief gelaufen ist. Was ist passiert?
some-alt