We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

Programmierung - Bildverarbeitung (Programmierung)

00:00

Formal Metadata

Title
Programmierung - Bildverarbeitung (Programmierung)
Title of Series
Number of Parts
79
Author
License
CC Attribution 4.0 International:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Identifiers
Publisher
Release Date
Language
Production Year2023
Production PlaceHeinrich-Heine-Universität Düsseldorf

Content Metadata

Subject Area
Genre
Abstract
In diesem Video lernst du den CIFAR-10 Datensatz kennen. Er besteht genau wie MNIST aus Bildern, die in 10 Klassen eingeteilt sind. Die Bilder sind etwas größer als bei MNIST und in Farbe. Wir schauen uns den Aufbau eines CNN mit Convolutional und Fully-Connected Layers an und interpretieren deren Parameter und Dimensionen. Anschließend trainieren, validieren und testen wir das CNN mit CIFAR-10. Lernziele: Du beschreibst den CIFAR-10 Datensatz und den Aufbau von Farbbildern Du erklärst den Aufbau eines CNN und fügst Layers mit "models.Sequential.add" hinzu Du berechnest die Parameter und Dimensionen von verschiedenen Schichten eines CNN Du trainierst und testest ein CNN
Keywords
Artificial neural networkJSONXMLComputer animation
Image processingFixpunkt <Datensicherung>Shape (magazine)Row (database)Kernel (computing)Cellular automatonObject (grammar)Computer animationXML
Kernel (computing)Cellular automatonImage processingFixpunkt <Datensicherung>Structural loadShape (magazine)Row (database)PixelTestdatenPixelBounded setSanitary sewerArtificial neural networkRow (database)Computer programmingVorverarbeitungObject (grammar)Matrix (mathematics)PositionSocial classComputer animation
Cellular automatonKernel (computing)Fixpunkt <Datensicherung>Image processingStructural loadCNNSanitary sewerElement (mathematics)SquareVolumenvisualisierungCodeHöheZusammenhang <Mathematik>PixelSocial classParameter (computer programming)InformationPredictionVector graphicsKanteFactorizationForm (programming)CNNDigital filterComputer animation
Cellular automatonKernel (computing)Structural loadFixpunkt <Datensicherung>Image processingCNNRow (database)Scientific modellingWeightRow (database)TestdatenCurve fittingParameter (computer programming)ValidationCodeScale (map)Computer animation
CNNMoment (mathematics)Kernel (computing)Cellular automatonImage processingFixpunkt <Datensicherung>Structural loadPixelMoment (mathematics)Propositional formulaTestdatenVariable (mathematics)ValidationScientific modellingAlgebraic closurePredictionComputer animation
Kernel (computing)Cellular automatonFixpunkt <Datensicherung>Image processingStructural loadBIND <Programm>PixelJSONComputer animation
Computer animationXML
Transcript: German(auto-generated)
Herzlich willkommen. In diesem Tutorial wirst du sehen, wie ein neuronales Netz so trainiert
werden kann, dass es Objekte in Bildern erkennen kann. Als Grundlage für dieses Tutorial verwenden wir den Kifar-10-Datensatz. Der Kifar-10-Datensatz ist ein umfangreicher Datensatz von 60.000 Farbbildern, die in 10 Klassen unterteilt sind. Jede Klasse umfasst 6.000 Bilder von Objekten, die in der realen Welt
vorkommen, darunter Flugzeuge, Autos, Tiere oder Schiffe. Der Unterschied zwischen dem Kifar-10-Datensatz und dem MNIST-Datensatz besteht darin, dass Kifar-10 Farbbilder von unterschiedlichen Objekten enthält. Ein weiterer Unterschied ist, dass in Kifar-10 die Bilder 32 x 32 Pixel groß sind. Diese Unterschiede machen
den Kifar-10-Datensatz zu einer größeren und komplexeren Herausforderung für neuronale Netze. Doch bevor wir an die Programmierung eines solchen gehen, laden wir erst einmal die Trainings- und Validationsdaten. Wie du hier sehen kannst, haben wir die Trainings-
und Validationsdaten geladen. Leider fehlen uns Testdaten. Um aber auf Testdaten zugreifen zu können, verwenden wir schlichtweg die Trainingsdaten. Dazu kannst du den
50.000 Elemente enthalten, können wir diese verwenden, um ab dem 40.000. Element einen Cut zu setzen. Das heißt, unser Trainings-Datensatz wird auf 40.000 Elemente beschränkt. Die oberen 10.000 Elemente, das heißt die Elemente ab dem 40.000. Element, werden
dazu verwendet, um zu testen. Weiterhin sollte dir die Normalisierung von Bildern bekannt sein. Die Normalisierung ist eine gängige Vorverarbeitung von Bildern, um diese verständlicher für das neuronale Netz zu gestalten. Um die Daten zu normalisieren, teilen wir durch den größten Farbwert. Nachdem wir die Daten normalisiert haben,
kannst du dir wieder den allgemeinen Aufbau mit Shape anschauen. Wie du sehen kannst, beinhalten die Trainingsdaten nunmehr 40.000 Elemente. Die Validations- und Testdaten jeweils 10.000. Ebenso kannst du sehen, dass die Bilder 32x32 Pixel groß sind. Die
Farbkanäle, Rot, Grün und Blau, bilden jeweils einzelne Elemente in dieser Bildmatrix. Die 3 am Ende gibt den Farbwert bzw. die Dimensionalität der Farbkanäle an. Kommen wir nun zum Aufbau der Farbbilder. Auch hier kannst du dir ein interaktives
Beispiel anschauen. Der Kiffer 10 Datensatz enthält Farbbilder, die in der Regel eine Größe von 32x32 Pixel haben. Jedes Bild wird durch 3 Farbkanäle dargestellt, Rot, Grün und Blau. Jeder Kanal wird als eine Matrix von 32x32 Werten repräsentiert,
wobei jeder Wert die Intensität der entsprechenden Farbe an einer bestimmten Position im Bild angibt. Auch bei den normalisierten Farbbildern reichen die Farbrate für jeden Kanal von 0 bis 1, wobei 0 für das Fehlen der Farbe und 1 für die maximale Intensität steht. Durch Kombinationen der 3 Kanäle können die Farben jedes Pixels im
Bild dargestellt werden. CNNs sind eine Art von künstlichen neuronalen Netzen, die besonders gut für die Verarbeitung von Bildern geeignet sind. Ein CNN besteht aus verschiedenen Schichten, die nacheinander auf das Bild angewendet werden. Betrachten wir
dazu einmal das gesamte Modell. Wie du siehst, ist das Modell wieder sequenziell aufgebaut, das heißt, dass die Schichten aufeinander aufbauen und jeweils einander bedingen. Die ersten Schichten eines CNNs werden oft auch als convolutional layers bezeichnet. Diese
Schichten suchen im Bild nach bestimmten Mustern, wie z.B. Ecken, Kanten oder Formen und speichern diese Merkmale als Ergebnis ab. Im Codein du siehst, wird in den ersten Conf2D Schicht das Eingabebild durch 32 sogenannte Filter bearbeitet. Ein Filter ist wie eine kleine Schablone, die auf das Bild gelegt wird und bestimmte Muster sucht. Ein
Filter kann z.B. nach vertikalen oder horizontalen Kanten suchen oder nach anderen spezifischen Mustern. Die Größe des Filters in diesem Code beträgt 3 mal 3 Pixel. Das Conf2D geht also pixelweise durch das Bild und versucht in jedem Abschnitt von 3 mal 3
Pixel ein Muster zu erfinden. Dabei wird für jeden Abschnitt ein neues Ergebnis berechnet, das ein Merkmal des Bildes darstellt. Nach der ersten Schicht kommt ein Max-Pooling2D. Diese Schicht verkleinert das Bild, indem sie die Ergebnisse der vorherigen Schicht zusammenfasst. Dabei wird das Bild in Quadrate von 2 mal 2 Pixel aufgeteilt und für jedes
Quadrat der höchste Wert genommen. Durch diese Zusammenfassung wird das Bild vereinfacht und es werden unwichtige Details entfernt. In der zweiten Schicht wird das Bild wieder durch Filter geschickt, die auf die Merkmale der ersten Schicht aufbauen. Es werden diesmal
64 Filter verwendet, um noch spezifischere Merkmale zu finden. Kommen wir zu den Fully Connected Schichten. Nach den Convolutional Schichten folgen in der Regel Fully Connected Schichten, die die Merkmale klassifizieren und zur Ausgabe führen. In diesem Zusammenhang bedeutet Fully Connected, dass jedes Neuron in einer Schicht mit jedem Neuron in der
darauffolgenden Schicht verbunden ist, also Informationen an jedes Neuron der nächsten Schicht weiter gibt. In diesem Code wird eine Flattenschicht verwendet, um die Ausgabe der vorherigen Schicht in einen Vektor umzuwandeln. Das kannst du damit vergleichen, dass das Bild wie bei einem Aktenvernichter zeilenweise zerschnitten und in der
zwei Dense Schichten weiterverarbeitet und in die letzte Dense Schicht aus zehn Neuronen weitergereicht. Die Softmax Aktivierungsfunktion wird verwendet, um die Wahrscheinlichkeiten der Vorhersagen der zehn möglichen Klassen zu normalisieren und die Ergebnisse interpretierbarer
zu gestalten. Betrachten wir das Modell in der Zusammenfassung. Wenn du dir das Modell ansiehst, wirst du vielleicht verwirrt sein, weil die Dimensionalität der Eingabedaten für jede Schicht abnimmt. Ebenso könnte es aber auch sein, dass du nicht ganz verstehst,
wie eine convolutionale Schicht ihre Parameter erzeugt, daher hier eine kurze Erklärung, um das CNN besser zu interpretieren. Betrachte zu Beginn die erste Convolution to D Schicht mit 896 Parametern. Die Anzahl der Parameter an dieser Schicht hängt
von unterschiedlichen Faktoren ab, wie der Größe der Filter, der Anzahl der Filter und der Größe des Eingabebildes. Das abgebildete CNN erzeugt für die ersten Conv to D Schicht 32 Filter mit einer Größe von 3 x 3 Pixeln und ein Eingabeformat von 32 x 32 x 3 Pixeln. Drei für die Farbkanäle RGB. Jeder Filter hat also
eine Größe von 3 x 3 x 3, also 27 Elementen. Da jeder Filter mit jedem Abschnitt im Bild getestet werden muss, ergibt das insgesamt 32 x 27, also 864 Parameter. Zusätzlich gibt
es noch einen Bias-Wert für jeden Filter. Daher haben wir insgesamt 864 x 62 x 896 Parameter für die erste Conv to D Schicht. Die Dimensionalität der Eingabe verändert sich im CNN, weil es Filter auf die Eingabe anwendet, welche die Größe und damit die
Dimensionalität der Eingabe verändert. In diesem CNN wird eine Eingabe von 32 x 32 x 3 Pixeln, also Breite x Höhe x Anzahl der Farbkanäle, verwendet. In der ersten Conv to D Schicht werden 32 Filter mit der Größe von 3 x 3 auf die Eingabe angesetzt.
Dies führt zu 32 Ausgaben oder auch Feature Maps genannt, die jeweils eine Größe von 30 x 30 Pixeln haben. Der Grund dafür ist, dass die Filter die Render des Eingabebildes nicht überschreiten können und somit eine Ausgabe, die kleiner ist als die Eingabe,
erzeugen. Anschließend wird eine Max-Pooling 2D Schicht mit einem 2 x 2 Pixelgroßen Fenster verwendet, um die Dimensionalität der Ausgabe zu reduzieren. Diese Schicht extrahiert den größten Wert aus jedem 2 x 2 Pixelbereich der Eingabe und gibt eine Ausgabe zurück, die ein Viertel so groß ist wie die Eingabe. Der Grund dafür ist,
dass jeweils die einzelnen Dimensionen halbiert werden. In diesem Fall wird die Ausgabe von 30 x 30 Pixeln auf 15 x 15 Pixeln verkleinert. In diesem Code-Abschnitt siehst du, wie das CNN trainiert wird, um Bilder zu klassifizieren. Anfänglich
wird der Datensatz in drei Teile aufgeteilt. Trainings, Validierungs und Testdaten. In diesem Abschnitt kommen die drei Teile des Datensatzes tatsächlich zum Einsatz. Die Trainingsdaten werden verwendet, um das Modell zu trainieren. Das Modell nutzt diese Daten, um seine Gewichte und Parameter anzupassen, um eine möglichst gute Leistung
auf den Trainingsdaten zu erzielen. Die Validierungsdaten werden verwendet, um die Leistung des Modells zu bewerten, während es trainiert wird. Das Modell nutzt diese Daten, um die Hyperparameter und die Architektur des Modells zu optimieren und eine Überanpassung an die Trainingsdaten zu vermeiden. Die Validierungsdaten helfen
dabei, die beste Modellkonfiguration auszuwählen. Die Testdaten hingegen werden verwendet, um die endgültige Leistung des Modells auf unbekannten Daten zu bewerten. Diese Daten wurden während des Trainings und der Validierung nicht verwendet und dienen als objektiver Maßstab für die Leistung des Modells. Durch die Verwendung von Trainings, Validierungs- und Testdaten können wir sicherstellen, dass das Modell nicht nur
auf den Trainingsdaten, sondern auch auf unbekannten Daten gut abschneidet. Es ist wichtig, dass diese drei Datensätze getrennt und unabhängig voneinander gestaltet werden, um eine objektive Bewertung des Modells zu gewährleisten. Durch die Verwendung von Trainings, Validierungs- und Testdaten können wir
der hier gezeigte Code sollte dir aus Woche 11 bekannt sein. Bevor wir das Modell trainieren,
erzeugen wir eine Trainingsumgebung. Dazu kompilieren wir das Modell gemeinsam mit einem Optimizer einer Lossfunktion. Die Modellkontrolle wird in der nächsten Woche Mit FIT können wir dann tatsächlich das Modell trainieren. Wie du siehst, verwenden wir hier die Trainings- und Validationsdaten. Da wir unser Modell nicht nur über eine Epoche trainieren
wollen, sondern über mehrere, verwenden wir hier fünf Epochen. Am Ende des Trainings wird eine Historie zurückgegeben. Diese Historie können wir verwenden, um zu begutachten, wie das Modell trainiert hat. Das Training selber kann einige Zeit in Anspruch nehmen.
Nachdem das Modell also fertig trainiert ist, können wir uns die Historie ansehen. Wie du hier sehen kannst, verändert sich der Loss entsprechend der Epochen. Training Loss
bezieht sich auf die Fähigkeit des Modells, auf den Daten zu lernen. Auf Daten, auf denen es trainiert wurde. Je niedriger der Training Loss, desto besser lernt das Modell auf
Unbekannten Daten ist ein aufregender Moment. Denn es gibt ja einen Einblick in die tatsächliche Leistungsfähigkeit des Modells. Nach dem Training und der Validierung ist es Zeit, das Modell zu testen, indem wir es auf einen Satz von Daten anwenden, die das CNN nie zuvor gesehen hat. Die Idee dahinter ist, herauszufinden, ob das Modell in der Lage
ist, gut zu generalisieren. Also ob es in der Lage ist, nützt sich im Muster in Bildern zu erkennen, die es zuvor noch nicht gesehen hat. Wenn das Modell eine hohe Genauigkeit auf diesen unbekannten Daten aufweist, dann kannst du ziemlich sicher sein, dass das Modell gut funktioniert. Und ob es tatsächlich in der Lage ist, die gewünschten Muster
in den Bildern zu erkennen. Wenn du dich erinnerst, die Testdaten wurden nicht während des Trainings und auch nicht während der Validierung verwendet. Wir können sie daher verwenden, um unser Modell final zu evaluieren. Wie du siehst, erzielt unserem Modell eine Genauigkeit von 67,41%. Das heißt, unser Modell ist nicht perfekt,
es hat aber schon etwas gelernt. Wie auch in dem MNes Beispiel kannst du das Modell direkt bitten, Vorhersagen zu treffen. Wie du siehst, ist das Modell in der Lage, unbekannte Daten zu beschriften. Das heißt, Aussagen darüber zu treffen, was in den Bildern enthalten sein soll. Schauen wir uns dafür zwei Beispiele an. In diesem
Beispiel wird eigentlich ein Pferd gezeigt. Unser trainiertes CNN ist sich aber sehr sicher, dass das gezeigte Bild ein Vogelbild enthält. Damit sind wir auch schon am Abschluss
dieses Tutorials. Durch diese Tatsache, dass wir die Tatsache in der Tatsache zu beobachten haben, haben wir auch schon ein Konvolutional Neural Network trainiert. Ebenso hast du gesehen, wie es in der Lage ist Bilder richtig und falsch zu klassifizieren. Bis dahin.