L'augmentació de dades és una tècnica essencial en l'aprenentatge automàtic, especialment en el camp de la visió per computador. Consisteix a generar noves mostres de dades a partir de les existents aplicant diverses transformacions. Això ajuda a millorar la generalització dels models i a reduir el sobreajustament (overfitting).

Objectius d'aquest tema

  • Entendre què és l'augmentació de dades i per què és important.
  • Aprendre les tècniques comunes d'augmentació de dades.
  • Implementar augmentació de dades utilitzant TensorFlow.

Què és l'augmentació de dades?

L'augmentació de dades implica aplicar transformacions aleatòries a les dades d'entrenament per crear noves mostres. Aquestes transformacions poden incloure rotacions, translacions, canvis d'escala, reflexions, etc. L'objectiu és augmentar la diversitat del conjunt de dades d'entrenament sense necessitat de recollir noves dades.

Beneficis de l'augmentació de dades

  • Millora la generalització: Ajuda el model a generalitzar millor a noves dades no vistes.
  • Redueix el sobreajustament: En augmentar la diversitat del conjunt de dades, es redueix la probabilitat que el model s'ajusti massa a les dades d'entrenament.
  • Augmenta la quantitat de dades: Genera noves mostres a partir de les existents, la qual cosa és especialment útil quan es disposa de poques dades.

Tècniques comunes d'augmentació de dades

A continuació es presenten algunes de les tècniques més comunes d'augmentació de dades:

  1. Rotació: Girar la imatge un cert nombre de graus.
  2. Translació: Desplaçar la imatge en una direcció determinada.
  3. Escalat: Canviar la mida de la imatge.
  4. Reflexió horitzontal/vertical: Reflectir la imatge al llarg de l'eix horitzontal o vertical.
  5. Tallat (cropping): Tallar una part de la imatge.
  6. Canvi de brillantor/contrast: Ajustar la brillantor o el contrast de la imatge.
  7. Soroll: Afegir soroll aleatori a la imatge.

Implementació d'augmentació de dades amb TensorFlow

TensorFlow proporciona diverses eines per implementar augmentació de dades de manera eficient. Utilitzarem tf.image per aplicar transformacions a les imatges.

Exemple pràctic

A continuació es mostra un exemple pràctic d'augmentació de dades utilitzant TensorFlow:

import tensorflow as tf
import matplotlib.pyplot as plt

# Carregar una imatge d'exemple
(image, label), _ = tf.keras.datasets.cifar10.load_data()
image = image[0]

# Funció per mostrar imatges
def show_images(images):
    plt.figure(figsize=(10, 10))
    for i, img in enumerate(images):
        plt.subplot(3, 3, i + 1)
        plt.imshow(img)
        plt.axis('off')
    plt.show()

# Aplicar augmentació de dades
def augment_image(image):
    image = tf.image.random_flip_left_right(image)
    image = tf.image.random_flip_up_down(image)
    image = tf.image.random_brightness(image, max_delta=0.1)
    image = tf.image.random_contrast(image, lower=0.9, upper=1.1)
    image = tf.image.random_saturation(image, lower=0.9, upper=1.1)
    image = tf.image.random_hue(image, max_delta=0.1)
    return image

# Generar imatges augmentades
augmented_images = [augment_image(image) for _ in range(9)]

# Mostrar les imatges originals i augmentades
show_images([image] + augmented_images)

Explicació del codi

  1. Carregar la imatge: Utilitzem el conjunt de dades CIFAR-10 per obtenir una imatge d'exemple.
  2. Funció per mostrar imatges: Definim una funció show_images per mostrar les imatges en una graella.
  3. Funció d'augmentació: La funció augment_image aplica diverses transformacions aleatòries a la imatge.
  4. Generar imatges augmentades: Generem diverses versions augmentades de la imatge original.
  5. Mostrar les imatges: Utilitzem la funció show_images per visualitzar les imatges originals i augmentades.

Exercici pràctic

Exercici 1: Augmentació de dades amb transformacions addicionals

Implementa una funció d'augmentació de dades que inclogui les següents transformacions addicionals:

  • Rotació aleatòria
  • Translació aleatòria
  • Escalat aleatori
import tensorflow as tf
import matplotlib.pyplot as plt

# Carregar una imatge d'exemple
(image, label), _ = tf.keras.datasets.cifar10.load_data()
image = image[0]

# Funció per mostrar imatges
def show_images(images):
    plt.figure(figsize=(10, 10))
    for i, img in enumerate(images):
        plt.subplot(3, 3, i + 1)
        plt.imshow(img)
        plt.axis('off')
    plt.show()

# Funció d'augmentació amb transformacions addicionals
def augment_image(image):
    image = tf.image.random_flip_left_right(image)
    image = tf.image.random_flip_up_down(image)
    image = tf.image.random_brightness(image, max_delta=0.1)
    image = tf.image.random_contrast(image, lower=0.9, upper=1.1)
    image = tf.image.random_saturation(image, lower=0.9, upper=1.1)
    image = tf.image.random_hue(image, max_delta=0.1)
    image = tf.image.rot90(image, k=tf.random.uniform(shape=[], minval=0, maxval=4, dtype=tf.int32))
    image = tf.image.random_crop(image, size=[24, 24, 3])
    image = tf.image.resize(image, [32, 32])
    return image

# Generar imatges augmentades
augmented_images = [augment_image(image) for _ in range(9)]

# Mostrar les imatges originals i augmentades
show_images([image] + augmented_images)

Solució

La solució implementa les transformacions addicionals de rotació, translació i escalat. La funció tf.image.rot90 s'utilitza per rotar la imatge, tf.image.random_crop per tallar una part de la imatge i tf.image.resize per ajustar la mida de la imatge.

Resum

En aquest tema, hem après què és l'augmentació de dades, per què és important i com implementar-la utilitzant TensorFlow. Hem explorat diverses tècniques d'augmentació de dades i hem vist exemples pràctics de com aplicar-les. L'augmentació de dades és una eina poderosa per millorar la generalització dels models i reduir el sobreajustament.

© Copyright 2024. Tots els drets reservats