Die Datenaugmentation ist eine leistungsstarke Technik, die beim Training von neuronalen Netzwerken eingesetzt wird, insbesondere in der Bildklassifikation, der Computer Vision, der Verarbeitung natürlicher Sprache, der Spracherkennung usw. Dieser Prozess verbessert die Fähigkeit des Modells, auf neue, unbekannte Daten zu generalisieren, wodurch es robuster und effektiver in realen Anwendungen wird. Dieser Artikel zeigt ein Beispiel, wie man diese nützliche Technik mit TensorFlow für die Bildklassifikation verwenden kann.
Was ist Datenaugmentation?
Datenaugmentation ist eine Technik zur Erstellung zusätzlicher Trainingsdaten aus bereits vorhandenen Daten. Dabei werden verschiedene Transformationen auf die Eingangsdaten angewendet, um die Größe und Vielfalt des Trainingsdatensatzes künstlich zu erweitern. Tiefe neuronale Netzwerke erfordern das Training auf umfangreichen Datensätzen, um die besten Ergebnisse zu erzielen. Wenn der ursprüngliche Trainingsdatensatz jedoch nur eine begrenzte Anzahl an Bildern enthält, wird es notwendig, Techniken zur Datenaugmentation anzuwenden, um die Leistung des Modells zu verbessern.
Warum ist Datenaugmentation notwendig?
Beim Erstellen von Machine-Learning-Modellen ist das Problem begrenzter Ausgangsdaten ziemlich häufig. Je genauer die Trainingsstichprobe dem allgemeinen Satz von Bildern entspricht, die in Ihr System eingegeben werden, desto höher wird die maximal erreichbare Qualität des Ergebnisses sein.
Datenaugmentation hilft bei:
- Vermeidung von Overfitting: Durch die Einführung von Variationen in den Trainingsdaten sind Modelle weniger wahrscheinlich dazu geneigt, die Trainingsbeispiele auswendig zu lernen und können besser auf neue, unbekannte Daten generalisieren.
- Verbesserung der Modellrobustheit: Augmentierte Daten können helfen, Modelle widerstandsfähiger gegenüber Variationen und Störungen in realen Daten zu machen.
- Erhöhung der Datensatzgröße: Sie vergrößert effektiv die Größe des Trainingsdatensatzes, was besonders nützlich sein kann, wenn der ursprüngliche Datensatz klein ist.
Daher ist eine sorgfältig zusammengestellte Trainingsstichprobe eine sehr spezifische technische Aufgabe. In vielen solchen Fällen ist es sinnvoll, eine Technik namens Datenaugmentation zu verwenden.
Wie verwendet man Datenaugmentation in TensorFlow?
In TensorFlow gibt es viele Augmentierungsoptionen. Die beliebtesten sind: horizontales und vertikales Spiegeln, zufälliger Zuschnitt (Random Crop) und Farbänderung. Es gibt verschiedene Kombinationsmöglichkeiten, um ein Beispiel zu nennen: gleichzeitiges Ausführen von Rotation und zufälligem Skalieren. Darüber hinaus kann man den Sättigungswert und den Wert aller Pixel (die Komponenten S und V des HSV-Farbraums) variieren. Insbesondere kann man diese Komponenten auf eine Potenz aus dem Intervall von 0,25 bis 4 anheben, mit einem Koeffizienten aus dem Intervall von 0,7 bis 1,4 multiplizieren oder ihnen einen Wert aus dem Intervall von -0,1 bis 0,1 hinzufügen. Ebenso kann man dem Farbtonwert aller Pixel (Komponente H im HSV-Farbraum) einen Wert aus dem Intervall von -0,1 bis 0,1 hinzufügen. Ähnliche Transformationen können auch auf Bildfragmente angewendet werden. Lassen Sie uns versuchen, die Augmentierungspipeline in TensorFlow praktisch für Bilder zu erstellen.
Wie richtet man alle notwendigen Bibliotheken ein?
Wie üblich beginnen wir mit dem Import aller wesentlichen Bibliotheken. TensorFlow enthält praktischerweise alle Werkzeuge, die für die Datenaugmentation benötigt werden. Die Abbildung zeigt Beispiele für die notwendigen Importe zur Implementierung von Augmentierungstechniken.
import tensorflow as tf from keras.layers.preprocessing.image_preprocessing import HORIZONTAL, VERTICAL
Wie implementiert man Datenaugmentation mit Python?
self._data_augmentation = tf.keras.Sequential([ tf.keras.layers.experimental.preprocessing.RandomRotation(), tf.keras.layers.experimental.preprocessing.RandomContrast(), tf.keras.layers.experimental.preprocessing.RandomFlip(HORIZONTAL), tf.keras.layers.experimental.preprocessing.RandomFlip(VERTICAL), tf.keras.layers.experimental.preprocessing.RandomZoom(), tf.keras.layers.experimental.preprocessing.CenterCrop(), tf.keras.layers.experimental.preprocessing.Rescaling() ])
Dieses Code-Snippet erstellt eine Pipeline zur Datenerweiterung unter Verwendung der Keras-API von TensorFlow. Im ersten Schritt initialisiert es ein sequenzielles Modell, um Schichten zu stapeln. Dann werden mehrere Vorverarbeitungsschichten hinzugefügt: RandomRotation, um Bilder zufällig zu drehen, RandomContrast, um den Kontrast anzupassen, RandomFlip, um Bilder horizontal und vertikal zu spiegeln, RandomZoom, um sie zu vergrößern, CenterCrop, um den zentralen Bereich zu beschneiden, und Rescaling, um die Pixelwerte zu normalisieren. Diese Transformationen erhöhen die Vielfalt des Trainingsdatensatzes und verbessern die Robustheit des Modells.
Wann wird Datenaugmentation im Code verwendet?
Die Augmentationstechnologie wird direkt nach der Definition der Eingabeschicht eingesetzt, wodurch sichergestellt wird, dass alle Eingabebilder die angegebenen Transformationen durchlaufen, bevor sie in die nachfolgenden Schichten des Modells eingespeist werden. Dies erhöht die Vielfalt der Trainingsdaten, was das Modell robuster macht und ihm ermöglicht, besser auf neue, unbekannte Daten zu generalisieren. Im aktuellen Beispiel ist die Eingabeschicht ein Bild mit 3 Farbkanälen (RGB):
def _build_model(self, ef=0): inp = tf.keras.layers.Input(shape=(*self._img_size_list, 3)) x = self._data_augmentation(inp)
Diese Eingabeschicht wird dann durch die Datenaugmentierungspipeline geleitet, die verschiedene Transformationen auf die Eingabebilder anwendet, sobald das Modell initialisiert wird.
Wie sieht es vorher und nachher aus?
In der Praxis wird die Augmentationstechnologie normalerweise nicht für ein einzelnes Bild, sondern für den gesamten Datensatz gleichzeitig verwendet. Aber zu Visualisierungszwecken wird unten ein Beispiel für die Verwendung dieser Technologie für ein zufälliges Bild gezeigt. Die Abbildung veranschaulicht die Auswirkungen des Augmentierungsprozesses auf ein Beispielbild und zeigt die Unterschiede vor und nach der Augmentierung:
Im augmentierten Bild wurden mehrere zufällige Modifikationen vorgenommen, einschließlich Anpassungen des Kontrasts, vertikale und horizontale Spiegelungen, Drehungen und andere Transformationen. Diese Veränderungen erhöhen die Vielfalt des Trainingsdatensatzes, wodurch das Modell robuster wird und in der Lage ist, verschiedene reale Szenarien zu bewältigen.
Fazit
In diesem Beispiel haben wir eine Bildaugmentierungspipeline mit TensorFlow implementiert. Diese Technik ermöglicht es, Ihren Datensatz erheblich zu erweitern, sodass er besser für das Training robuster neuronaler Netzwerke geeignet ist. Durch die Anwendung verschiedener Transformationen können Sie aus einem einzelnen Eingabebild eine Vielzahl unterschiedlicher Bilder erzeugen. Beispielsweise können Sie aus einem Originalbild etwa 20-30 verschiedene Variationen erstellen. Ein Datensatz mit 100 Bildern pro Klasse kann so auf 2.000-3.000 Bilder pro Klasse erweitert werden. Diese erweiterte Datensatzgröße ist in der Regel ausreichend, um neuronale Netzwerke effektiv zu trainieren und sicherzustellen, dass das Modell gut auf neue, unbekannte Daten generalisieren kann. Darüber hinaus können Sie die Anzahl der in jeder Phase erzeugten augmentierten Bilder anpassen, um den Datensatz für Ihre spezifische Aufgabe zu optimieren und die Gesamtleistung Ihres Modells zu verbessern.