Trainingsdatensatz künstlich vergrößern (Data Augementation)

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

TechnikBeschreibung
Random FlipSpiegelung des Bildes (horizontal, vertikal)
Random RotationZufällige Drehung um einen bestimmten Winkelbereich
Random ZoomVergrößern oder Verkleinern des Bildausschnitts
Random TranslationVerschiebung entlang der x- und y-Achse
Random ContrastVeränderung des Bildkontrasts
Random BrightnessVerä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.

Nach oben scrollen