Einleitung
Data Augmentation ist eine bewährte Methode in der Computer Vision, um die Leistungsfähigkeit von neuronalen Netzwerken zu verbessern. Durch gezielte Veränderungen der Trainingsdaten entstehen synthetische Variationen, die das Modell robuster und generalisierungsfähiger machen – insbesondere bei kleinen oder einseitigen Datensätzen.
Dieses Tutorial zeigt die gebräuchlichsten Techniken der Data Augmentation und deren praktische Umsetzung mit TensorFlow/Keras.
Zielsetzung der Data Augmentation
- Verbesserung der Robustheit gegenüber Variationen (z. B. Drehung, Verschiebung, Helligkeit)
- Vermeidung von Overfitting durch vielfältigere Trainingsdaten
- Möglichkeit zur Erweiterung kleiner Datensätze ohne zusätzliche Beschaffung realer Daten
Häufig eingesetzte Augmentierungstechniken
Technik | Beschreibung |
---|---|
Random Flip | Spiegelung des Bildes (horizontal, vertikal) |
Random Rotation | Zufällige Drehung um einen bestimmten Winkelbereich |
Random Zoom | Vergrößern oder Verkleinern des Bildausschnitts |
Random Translation | Verschiebung entlang der x- und y-Achse |
Random Contrast | Veränderung des Bildkontrasts |
Random Brightness | Veränderung der Helligkeit |
Implementierung mit TensorFlow/Keras
1. Data Augmentation als Pipeline
In TensorFlow/Keras lässt sich eine Augmentierungs-Pipeline einfach als Sequential
-Modell definieren:
import tensorflow as tf
data_augmentation = tf.keras.Sequential([
tf.keras.layers.RandomFlip("horizontal"),
tf.keras.layers.RandomRotation(0.2),
tf.keras.layers.RandomZoom(0.1),
tf.keras.layers.RandomTranslation(0.1, 0.1),
tf.keras.layers.RandomContrast(0.1),
], name="data_augmentation")
2. Anwendung der Augmentierung – Zwei Varianten
Variante A: Manuell in der Daten-Pipeline
train_dataset_augmented = train_dataset.map(lambda x, y: (data_augmentation(x, training=True), y))
Die Augmentierung erfolgt hier explizit beim Laden der Daten. Vorteil: Kontrolle über Trainings- und Validierungsdaten bleibt klar getrennt.
Variante B: Direkte Einbindung ins Modell
inputs = tf.keras.Input(shape=(150,150,3))
x = data_augmentation(inputs)
x = base_model(x) # z. B. MobileNetV2 oder anderes CNN
...
model = tf.keras.Model(inputs, outputs)
Hier wird Data Augmentation direkt im Modell als Schicht verarbeitet. Vorteil: Einfache Handhabung, GPU-beschleunigt, automatische Trennung Training/Validierung.
Besonderheiten beim Training
- Augmentierung wird nur im Trainingsmodus angewendet (
training=True
). - Validierungs- und Testdaten werden nicht verändert, um faire Evaluation sicherzustellen.
- Augmentierung wird on-the-fly durchgeführt – keine zusätzlichen Dateien oder Speicher notwendig.
Visualisierung augmentierter Bilder
Zur Überprüfung der Augmentierung kann eine Stichprobe visuell geprüft werden:
import matplotlib.pyplot as plt
for image, label in train_dataset.take(1):
augmented_image = data_augmentation(image, training=True)
plt.imshow(augmented_image[0].numpy().astype("uint8"))
plt.title("Augmentiertes Bild")
plt.axis("off")
plt.show()
Fazit
Data Augmentation ist eine unverzichtbare Technik im Deep Learning für Computer Vision. Sie verbessert nicht nur die Generalisierungsfähigkeit von Modellen, sondern ermöglicht auch, mit begrenzten Daten leistungsfähige Netzwerke zu trainieren. TensorFlow/Keras bietet dafür eine intuitive, leistungsfähige Schnittstelle, sowohl als eigenständige Pipeline als auch als integrierte Modellkomponente.
Weiterführend
Für spezialisierte Anwendungsfälle (z. B. medizinische Bildgebung, Objekterkennung) können auch externe Bibliotheken wie imgaug
, Albumentations
oder tf.image
verwendet werden, die erweiterte Augmentierungsmöglichkeiten bieten. Ein Vergleich dieser Ansätze wird in einem separaten Beitrag behandelt.