El aumento de datos (data augmentation) es una técnica utilizada para incrementar la cantidad y diversidad de datos de entrenamiento sin recolectar nuevos datos. Esto se logra aplicando transformaciones aleatorias a los datos existentes, lo que ayuda a mejorar la generalización del modelo y a reducir el sobreajuste (overfitting).

Conceptos Clave

  1. Aumento de Datos: Proceso de crear nuevas muestras de datos a partir de las existentes mediante transformaciones.
  2. Transformaciones Comunes: Incluyen rotaciones, traslaciones, escalados, recortes, cambios de brillo y contraste, entre otros.
  3. Beneficios: Mejora la robustez del modelo, reduce el sobreajuste y puede mejorar la precisión del modelo.

Transformaciones Comunes

Transformación Descripción
Rotación Gira la imagen en un ángulo aleatorio.
Traslación Desplaza la imagen en una dirección específica.
Escalado Cambia el tamaño de la imagen.
Recorte Corta una parte de la imagen.
Cambio de Brillo Ajusta el brillo de la imagen.
Cambio de Contraste Ajusta el contraste de la imagen.

Implementación en TensorFlow

TensorFlow proporciona varias herramientas para realizar aumento de datos, especialmente a través de la API tf.image y tf.keras.preprocessing.image.

Ejemplo Práctico

A continuación, se muestra un ejemplo de cómo aplicar aumento de datos utilizando tf.image y tf.keras.preprocessing.image.

Usando tf.image

import tensorflow as tf
import matplotlib.pyplot as plt

# Cargar una imagen de ejemplo
image_path = tf.keras.utils.get_file('cat.jpg', 'https://storage.googleapis.com/download.tensorflow.org/example_images/320px-Felis_catus-cat_on_snow.jpg')
image = tf.io.read_file(image_path)
image = tf.image.decode_jpeg(image)

# Aplicar transformaciones
rotated_image = tf.image.rot90(image)
flipped_image = tf.image.flip_left_right(image)
bright_image = tf.image.adjust_brightness(image, delta=0.1)
contrast_image = tf.image.adjust_contrast(image, contrast_factor=2)

# Mostrar imágenes
plt.figure(figsize=(10, 10))
plt.subplot(2, 2, 1)
plt.title('Rotated Image')
plt.imshow(rotated_image)
plt.subplot(2, 2, 2)
plt.title('Flipped Image')
plt.imshow(flipped_image)
plt.subplot(2, 2, 3)
plt.title('Bright Image')
plt.imshow(bright_image)
plt.subplot(2, 2, 4)
plt.title('Contrast Image')
plt.imshow(contrast_image)
plt.show()

Usando tf.keras.preprocessing.image

from tensorflow.keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img

# Crear un generador de datos con aumento
datagen = ImageDataGenerator(
    rotation_range=40,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    fill_mode='nearest'
)

# Cargar una imagen de ejemplo
img = load_img(image_path)  # Cargar imagen como PIL Image
x = img_to_array(img)  # Convertir a array Numpy
x = x.reshape((1,) + x.shape)  # Reconfigurar array

# Generar imágenes aumentadas
i = 0
for batch in datagen.flow(x, batch_size=1):
    plt.figure(i)
    imgplot = plt.imshow(array_to_img(batch[0]))
    i += 1
    if i % 4 == 0:
        break

plt.show()

Ejercicio Práctico

Ejercicio:

  1. Carga una imagen de tu elección.
  2. Aplica al menos tres transformaciones diferentes utilizando tf.image.
  3. Muestra las imágenes originales y transformadas.

Solución:

import tensorflow as tf
import matplotlib.pyplot as plt

# Cargar una imagen de ejemplo
image_path = 'ruta/a/tu/imagen.jpg'  # Reemplaza con la ruta a tu imagen
image = tf.io.read_file(image_path)
image = tf.image.decode_jpeg(image)

# Aplicar transformaciones
rotated_image = tf.image.rot90(image)
flipped_image = tf.image.flip_left_right(image)
bright_image = tf.image.adjust_brightness(image, delta=0.1)

# Mostrar imágenes
plt.figure(figsize=(10, 10))
plt.subplot(2, 2, 1)
plt.title('Original Image')
plt.imshow(image)
plt.subplot(2, 2, 2)
plt.title('Rotated Image')
plt.imshow(rotated_image)
plt.subplot(2, 2, 3)
plt.title('Flipped Image')
plt.imshow(flipped_image)
plt.subplot(2, 2, 4)
plt.title('Bright Image')
plt.imshow(bright_image)
plt.show()

Errores Comunes y Consejos

  • Error Común: Aplicar transformaciones que distorsionen demasiado la imagen, haciendo que los datos aumentados no sean representativos de los datos reales.

    • Consejo: Mantén las transformaciones dentro de un rango razonable para asegurar que las imágenes aumentadas sean útiles para el entrenamiento.
  • Error Común: No aplicar aumento de datos de manera consistente durante el entrenamiento y la validación.

    • Consejo: Asegúrate de aplicar las mismas transformaciones de aumento de datos durante el entrenamiento y la validación para mantener la consistencia.

Conclusión

El aumento de datos es una técnica poderosa para mejorar la robustez y la generalización de los modelos de aprendizaje automático. TensorFlow proporciona herramientas flexibles y fáciles de usar para implementar aumento de datos, lo que permite a los desarrolladores mejorar sus modelos sin necesidad de recolectar más datos. En el próximo módulo, exploraremos cómo trabajar con conjuntos de datos en TensorFlow para construir pipelines de datos eficientes.

© Copyright 2024. Todos los derechos reservados