Eine vollständige Anleitung zum Verständnis von CNNs, ihrer Auswirkung auf die Bildanalyse und einiger wichtiger Strategien zur Bekämpfung von Überanpassung für robuste convolutional neural network – vs. Deep-Learning-Anwendungen.
Was ist ein Convolutional Neural Network (CNN)?
Ein Convolutional Neural Network (CNN), auch ConvNet genannt, ist ein spezieller Typ von Deep-Learning-Algorithmus, der hauptsächlich für Aufgaben entwickelt wurde, die Objekterkennung erfordern, einschließlich Bildklassifizierung, -erkennung und -segmentierung. CNNs werden in einer Vielzahl praktischer Szenarien eingesetzt, beispielsweise in autonomen Fahrzeugen, Sicherheitskamerasystemen und anderen.
Die Bedeutung von CNNs
Es gibt mehrere Gründe, warum CNNs in der modernen Welt wichtig sind, wie im Folgenden hervorgehoben wird:
- CNNs unterscheiden sich von klassischen Algorithmen des maschinellen Lernens wie SVMs und Entscheidungsbäumen durch ihre Fähigkeit, Features in großem Maßstab autonom zu extrahieren. Dadurch entfällt die Notwendigkeit der manuellen Feature-Entwicklung und die Effizienz wird gesteigert.
- Die Faltungsschichten verleihen CNNs ihre translationsinvarianten Eigenschaften und ermöglichen ihnen, Muster und Merkmale aus Daten zu erkennen und zu extrahieren, unabhängig von Variationen in Position, Ausrichtung, Maßstab oder Translation.
- Eine Vielzahl vorab trainierter convolutional neural network -Architekturen, darunter VGG-16, ResNet50, Inceptionv3 und EfficientNet, haben eine erstklassige Leistung gezeigt. Diese Modelle können durch einen als Feinabstimmung bezeichneten Prozess mit relativ wenigen Daten an neue Aufgaben angepasst werden.
- Über die Bildklassifizierung hinaus sind CNNs vielseitig und können in zahlreichen anderen Bereichen eingesetzt werden, etwa in der Verarbeitung natürlicher Sprache, der Zeitreihenanalyse und der Spracherkennung.
Inspiration hinter CNN und Parallelen zum menschlichen visuellen System
Convolutional neural network wurden von der geschichteten Architektur des menschlichen visuellen Kortex inspiriert. Im Folgenden sind einige wichtige Ähnlichkeiten und Unterschiede aufgeführt:
- Hierarchische Architektur: Sowohl CNNs als auch der visuelle Kortex haben eine hierarchische Struktur, wobei einfache Merkmale in frühen Schichten extrahiert und komplexere Merkmale in tieferen Schichten aufgebaut werden. Dies ermöglicht zunehmend ausgefeiltere Darstellungen visueller Eingaben.
- Lokale Konnektivität: Neuronen im visuellen Kortex verbinden sich nur mit einem lokalen Bereich des Inputs, nicht mit dem gesamten Gesichtsfeld. Ebenso sind die Neuronen in einer CNN-Schicht durch die Faltungsoperation nur mit einem lokalen Bereich des Inputvolumens verbunden. Diese lokale Konnektivität ermöglicht Effizienz.
- Translationsinvarianz: Neuronen des visuellen Kortex können Merkmale unabhängig von ihrer Position im Gesichtsfeld erkennen. Pooling-Schichten in einem CNN bieten ein gewisses Maß an Translationsinvarianz, indem sie lokale Merkmale zusammenfassen.
- Mehrere Feature-Maps: In jeder Phase der visuellen Verarbeitung werden viele verschiedene Feature-Maps extrahiert. CNNs ahmen dies durch mehrere Filter-Maps in jeder Faltungsschicht nach.
- Nichtlinearität: Neuronen im visuellen Kortex weisen nichtlineare Reaktionseigenschaften auf. CNNs erreichen Nichtlinearität durch Aktivierungsfunktionen wie ReLU, die nach jeder Faltung angewendet werden.
CNNs ahmen das menschliche visuelle System nach, sind jedoch einfacher, verfügen nicht über dessen komplexe Rückkopplungsmechanismen und basieren auf überwachtem statt unüberwachtem Lernen. Trotz dieser Unterschiede treiben sie die Fortschritte in der Computervision voran.
Schlüsselkomponenten eines CNN
Das Convolutional Neural Network besteht aus vier Hauptteilen.
Aber wie lernen CNNs mit diesen Teilen?
Sie helfen den CNNs dabei, die Funktionsweise des menschlichen Gehirns nachzuahmen, um Muster und Merkmale in Bildern zu erkennen:
- Faltungsschichten
- Rectified Linear Unit (kurz ReLU)
- Pooling-Ebenen
- Vollständig verbundene Schichten
In diesem Abschnitt wird anhand des folgenden Beispiels der Klassifizierung einer handgeschriebenen Ziffer auf die Definition jeder dieser Komponenten eingegangen.
Faltungsschichten
Dies ist der erste Baustein eines CNN. Wie der Name schon sagt, wird die wichtigste mathematische Aufgabe Faltung genannt. Dabei wird eine gleitende Fensterfunktion auf eine Matrix von Pixeln angewendet, die ein Bild darstellen. Die auf die Matrix angewendete gleitende Funktion wird Kernel oder Filter genannt und beide Begriffe können synonym verwendet werden.
In der Faltungsschicht werden mehrere Filter gleicher Größe angewendet und jeder Filter dient dazu, ein bestimmtes Muster im Bild zu erkennen, wie etwa die Krümmung der Ziffern, die Kanten, die gesamte Form der Ziffern und mehr.
Einfach ausgedrückt verwenden wir in der Faltungsebene kleine Gitter (Filter oder Kernel genannt), die sich über das Bild bewegen. Jedes kleine Gitter ist wie eine Minilupe, die nach bestimmten Mustern im Foto sucht, wie Linien, Kurven oder Formen. Während es sich über das Foto bewegt, erstellt es ein neues Gitter, das hervorhebt, wo es diese Muster gefunden hat.
Beispielsweise kann ein Filter gut gerade Linien finden, ein anderer Kurven usw. Durch die Verwendung mehrerer verschiedener Filter kann sich das CNN einen guten Überblick über alle unterschiedlichen Muster verschaffen, aus denen das Bild besteht.
Betrachten wir dieses 32×32-Graustufenbild einer handgeschriebenen Ziffer. Die Werte in der Matrix dienen der Veranschaulichung.
Betrachten wir auch den für die Faltung verwendeten Kernel. Es handelt sich um eine Matrix mit einer Dimension von 3×3. Die Gewichte jedes Elements des Kernels werden im Raster dargestellt. Nullgewichte werden in den schwarzen Rastern und Einsen in den weißen Rastern dargestellt.
Müssen wir diese Gewichte manuell finden?
Im wirklichen Leben werden die Gewichte der Kernel während des Trainingsprozesses des neuronalen Netzwerks bestimmt.
Mit diesen beiden Matrizen können wir die Faltung durch Anwenden des Skalarprodukts durchführen und wie folgt vorgehen:
- Wenden Sie die Kernelmatrix von der oberen linken Ecke nach rechts an.
- Führen Sie eine elementweise Multiplikation durch.
- Summieren Sie die Werte der Produkte.
- Der resultierende Wert entspricht dem ersten Wert (obere linke Ecke) in der gefalteten Matrix.
- Verschiebt den Kernel im Hinblick auf die Größe des gleitenden Fensters nach unten.
- Wiederholen Sie die Schritte 1 bis 5, bis die Bildmatrix vollständig abgedeckt ist.
Die Dimension der gefalteten Matrix hängt von der Größe des gleitenden Fensters ab. Je höher das gleitende Fenster, desto kleiner die Dimension.
Ein anderer Name, der in der Literatur mit dem Kernel in Verbindung gebracht wird, ist „Feature-Detektor“, da die Gewichte fein abgestimmt werden können, um bestimmte Merkmale im Eingabebild zu erkennen.
Zum Beispiel:
- Durch die Mittelung benachbarter Pixel kann der Kernel verwendet werden, um das Eingabebild unscharf zu machen.
- Zur Kantenerkennung wird das Subtrahieren benachbarter Kernel verwendet.
Je mehr Faltungsschichten das Netzwerk hat, desto besser kann die Schicht abstraktere Merkmale erkennen.
Aktivierungsfunktion
Nach jedem Faltungsvorgang wird eine ReLU-Aktivierungsfunktion angewendet. Diese Funktion hilft dem Netzwerk, nichtlineare Beziehungen zwischen den Merkmalen im Bild zu lernen, wodurch das Netzwerk robuster beim Erkennen verschiedener Muster wird. Sie hilft auch, die Probleme des verschwindenden Gradienten zu mildern.
Pooling-Schicht
Das Ziel der Pooling-Schicht besteht darin, die wichtigsten Merkmale aus der gefalteten Matrix zu ziehen. Dies geschieht durch die Anwendung einiger Aggregationsoperationen, die die Dimension der Merkmalszuordnung (gefaltete Matrix) reduzieren und somit den beim Trainieren des Netzwerks verwendeten Speicher verringern. Pooling ist auch für die Vermeidung von Überanpassung relevant.
Die am häufigsten angewendeten Aggregationsfunktionen sind:
- Max Pooling, also der Maximalwert der Feature-Map
- Das Sum Pooling entspricht der Summe aller Werte der Feature-Map
- Beim Average Pooling handelt es sich um den Durchschnitt aller Werte.
Nachfolgend sehen Sie eine Illustration der vorherigen Beispiele:
Außerdem wird die Dimension der Feature-Map kleiner, wenn die Pooling-Funktion angewendet wird.
Die letzte Pooling-Schicht flacht ihre Feature-Map ab, sodass sie von der vollständig verbundenen Schicht verarbeitet werden kann.
Vollständig verbundene Schichten
Diese Schichten befinden sich in der letzten Schicht des Convolutional Neural Network und ihre Eingaben entsprechen der abgeflachten eindimensionalen Matrix, die von der letzten Pooling-Schicht generiert wird. Aus Gründen der Nichtlinearität werden auf sie ReLU-Aktivierungsfunktionen angewendet.
Schließlich wird eine Softmax-Vorhersageebene verwendet, um Wahrscheinlichkeitswerte für jedes der möglichen Ausgabelabels zu generieren, und das endgültige vorhergesagte Label ist das mit dem höchsten Wahrscheinlichkeitswert.
Überanpassung und Regularisierung in CNNs
Overfitting ist eine häufige Herausforderung bei Modellen des maschinellen Lernens und CNN-Deep-Learning-Projekten. Es passiert, wenn das Modell die Trainingsdaten zu gut lernt („auswendig lernen“), einschließlich des Rauschens und der Ausreißer. Ein solches Lernen führt zu einem Modell, das bei den Trainingsdaten gut funktioniert, bei neuen, unbekannten Daten jedoch schlecht.
Dies kann beobachtet werden, wenn die Leistung bei Trainingsdaten im Vergleich zur Leistung bei Validierungs- oder Testdaten zu gering ist. Nachfolgend sehen Sie eine grafische Darstellung:
Deep-Learning-Modelle, insbesondere Convolutional Neural Networks (CNNs), sind aufgrund ihrer hohen Komplexität und ihrer Fähigkeit, detaillierte Muster in großen Datenmengen zu erlernen, besonders anfällig für Überanpassung.
Um Überanpassung in CNNs zu verhindern, können verschiedene Regularisierungstechniken angewendet werden. Einige davon werden im Folgenden dargestellt:
- Dropout: Dabei werden während des Trainingsprozesses zufällig einige Neuronen gelöscht, wodurch die verbleibenden Neuronen gezwungen werden, aus den Eingabedaten neue Funktionen zu erlernen.
- Batch-Normalisierung: Die Überanpassung wird bis zu einem gewissen Grad reduziert, indem die Eingabeebene durch Anpassen und Skalieren der Aktivierungen normalisiert wird. Dieser Ansatz wird auch verwendet, um den Trainingsprozess zu beschleunigen und zu stabilisieren.
- Pooling-Ebenen: Damit können die räumlichen Dimensionen des Eingabebildes reduziert werden, um dem Modell eine abstrahierte Darstellungsform bereitzustellen und so die Gefahr einer Überanpassung zu verringern.
- Vorzeitiges Stoppen: Dabei wird die Leistung des Modells anhand von Validierungsdaten während des Trainingsprozesses kontinuierlich überwacht und das Training gestoppt, sobald sich der Validierungsfehler nicht mehr verbessert.
- Rauscheinfügung: Bei diesem Prozess wird während des Trainings den Eingaben oder Ausgaben verborgener Schichten Rauschen hinzugefügt, um das Modell robuster zu machen und eine schwache Generalisierung zu verhindern.
- L1- und L2-Normalisierungen: Sowohl L1 als auch L2 werden verwendet, um der Verlustfunktion eine Strafe basierend auf der Größe der Gewichte hinzuzufügen. Genauer gesagt fördert L1 sparsame Gewichte, was zu einer besseren Merkmalsauswahl führt. Andererseits fördert L2 (auch Gewichtsabfall genannt) kleine Gewichte, wodurch verhindert wird, dass sie zu viel Einfluss auf die Vorhersagen haben.
- Datenerweiterung: Dabei handelt es sich um den Prozess der künstlichen Vergrößerung der Größe und Vielfalt des Trainingsdatensatzes durch die Anwendung zufälliger Transformationen wie Drehung, Skalierung, Spiegelung oder Zuschneiden auf die Eingabebilder.
Praktische Anwendungen von CNNs
Convolutional Neural Networks haben den Bereich der Computervision revolutioniert und zu bedeutenden Fortschritten in vielen realen Anwendungen geführt. Nachfolgend finden Sie einige Anwendungsbeispiele.
- Bildklassifizierung: Convolutional Neural Networks werden zur Bildkategorisierung verwendet, wobei Bilder vordefinierten Kategorien zugeordnet werden. Ein Anwendungsfall für ein solches Szenario ist die automatische Fotoorganisation auf Social-Media-Plattformen.
- Objekterkennung: CNNs können mehrere Objekte in einem Bild identifizieren und lokalisieren. Diese Fähigkeit ist in vielen Szenarien der Regalscannung im Einzelhandel von entscheidender Bedeutung, um nicht vorrätige Artikel zu identifizieren.
- Gesichtserkennung: Dies ist auch einer der Hauptanwendungsbereiche von CNNs. Diese Technologie kann beispielsweise in Sicherheitssysteme integriert werden, um den Zugang anhand von Gesichtsmerkmalen effizient zu kontrollieren.
Für eine praxisorientiertere Implementierung lehrt unser Convolutional Neural Networks (CNN) mit TensorFlow-Tutorial, wie man CNNs in Python mit Tensorflow Framework 2 erstellt und implementiert.
Deep Learning Frameworks für CNNs
Das schnelle Wachstum des Deep Learning ist hauptsächlich auf leistungsstarke Frameworks wie Tensorflow, Pytorch und Keras zurückzuführen, die das Trainieren von Convolutional Neural Networks und anderen Deep Learning-Modellen erleichtern.
Lassen Sie uns einen kurzen Überblick über jedes Framework geben.
Tensorflow
TensorFlow ist ein Open-Source-Framework für Deep Learning, das von Google entwickelt und 2015 veröffentlicht wurde. Es bietet eine Reihe von Tools für die Entwicklung und Bereitstellung von maschinellem Lernen. Unsere Einführung in Deep Neural Networks bietet einen umfassenden Leitfaden zum Verständnis von Deep Neural Networks und ihrer Bedeutung in der modernen Deep-Learning-Welt der künstlichen Intelligenz sowie reale Implementierungen in Tensorflow.
Keras
Keras ist ein hochrangiges Framework für neuronale Netzwerke in Python, das schnelles Experimentieren und Entwickeln ermöglicht. Es ist Open Source und kann in anderen Frameworks wie TensorFlow, CNTK und Theano verwendet werden. Unser Kurs „ Bildverarbeitung mit Keras in Python“ lehrt, wie man Bildanalysen mit Keras und Python durchführt, indem man Convolutional Neural Networks konstruiert, trainiert und auswertet natural language processing.
Pytorch
Es wurde 2017 von der KI-Forschungsabteilung von Facebook veröffentlicht, ist für Anwendungen in der Verarbeitung natürlicher Sprache konzipiert und ist für seine dynamischen Rechengraphen und Speichereffizienz bekannt. Wenn Sie sich für die Verarbeitung natürlicher Sprache interessieren, ist unser NLP mit PyTorch: Ein umfassender Leitfaden ein guter Ausgangspunkt.
Jedes Projekt ist anders. Die Entscheidung hängt daher davon ab, welche Eigenschaften für einen bestimmten Anwendungsfall am wichtigsten sind. Um Ihnen dabei zu helfen, bessere Entscheidungen zu treffen, bietet die folgende Tabelle einen kurzen Vergleich dieser Frameworks und hebt ihre einzigartigen Funktionen hervor.
Tensorflow | Pytorch | Keras | |
API-Ebene | Beide(Hoch und Tief) | Niedrig | Hoch |
Die Architektur | Nicht einfach zu bedienen | Komplex, weniger lesbar | Einfach, prägnant, lesbar |
Datensätze | Große Datensätze, hohe Leistung | Große Datensätze, hohe Leistung | Kleinere Datensätze |
Debuggen | Schwieriges Debuggen | Gute Debugging-Funktionen | Einfaches Netzwerk, daher ist Debugging nicht oft erforderlich |
Vortrainierte Modelle? | Ja | Ja | Ja |
Popularität | Zweitbeliebtester der drei | Drittbeliebtester der drei | Am beliebtesten der drei |
Geschwindigkeit | Schnell und leistungsstark | Schnell und leistungsstark | Langsam, geringe Leistung |
Geschrieben in | C++, CUDA, Python | Lua | Python |
Fazit
Dieser Artikel bietet einen vollständigen Überblick darüber, was ein CNN im Deep Learning ist, und erklärt, welche entscheidende Rolle es bei der Bilderkennung und -klassifizierung spielt.
Zunächst wurde hervorgehoben, dass sich das Design von CNNs am menschlichen visuellen System inspirierte. Anschließend wurden die Schlüsselkomponenten untersucht, die diesen Netzwerken das Lernen und die Erstellung von Vorhersagen ermöglichen.
Das Problem der Überanpassung wurde als erhebliche Herausforderung für die Generalisierungsfähigkeit von CNNs anerkannt. Um dieses Problem zu mildern, wurden verschiedene relevante Strategien zur Minderung der Überanpassung und zur Verbesserung der Gesamtleistung von CNNs skizziert.
Abschließend wurden einige wichtige Deep-Learning-CNN-Frameworks erwähnt, zusammen mit den jeweiligen besonderen Merkmalen und einem Vergleich zwischen ihnen.
Möchten Sie tiefer in die Welt der KI und des maschinellen Lernens eintauchen? Bringen Sie Ihr Fachwissen auf die nächste Ebene, indem Sie sich noch heute für den Kurs „Deep Learning mit PyTorch“ anmelden .