Aumento de Datos en Imágenes con PyTorch y CUDA

Clase 3 de 19Curso de Transfer Learning con Pytorch y OpenAI

Resumen

La técnica de data augmentation es una herramienta poderosa para mejorar el rendimiento de modelos de aprendizaje profundo cuando se trabaja con datasets limitados. Esta estrategia permite maximizar la información disponible en conjuntos de datos pequeños, generando variaciones de las imágenes existentes para entrenar modelos más robustos y precisos.

¿Por qué necesitamos data augmentation en datasets pequeños?

Cuando trabajamos con datasets de imágenes reducidos (como el mencionado con aproximadamente 400 imágenes por clase), nos enfrentamos a un problema fundamental: la falta de diversidad en los datos no permite que el modelo capture todas las características relevantes. Esto puede llevar a un sobreajuste (overfitting) donde el modelo memoriza los ejemplos de entrenamiento en lugar de aprender patrones generalizables.

El data augmentation resuelve este problema mediante la aplicación de transformaciones a las imágenes existentes, creando efectivamente nuevos ejemplos de entrenamiento sin necesidad de recolectar más datos. Estas transformaciones preservan la información semántica de la imagen (lo que representa) mientras alteran aspectos como orientación, tamaño, recorte y otros atributos visuales.

Configuración del entorno para PyTorch

Antes de implementar técnicas de data augmentation, necesitamos configurar nuestro entorno:

  1. Instalación de dependencias: Si estás trabajando en Google Colab, PyTorch ya viene preinstalado. Para entornos locales, debes instalarlo con:
pip install torch torchvision torchaudio
  1. Importación de librerías necesarias:
import torch
import torchvision
# Otras librerías para manipulación y visualización de imágenes
  1. Habilitación de CUDA para procesamiento en GPU:
# Habilitar CUDA para paralelizar procesos en GPU
torch.backends.cudnn.enabled = True

# Definir el dispositivo a utilizar
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

¿Qué técnicas de data augmentation podemos aplicar?

El data augmentation ofrece múltiples operaciones morfológicas que podemos aplicar a nuestras imágenes. Algunas de las más comunes incluyen:

Padding (agregado de bordes)

Consiste en añadir un borde alrededor de la imagen original con una cantidad específica de píxeles. Esto puede ayudar al modelo a ser más robusto ante variaciones en la posición de los objetos.

Resize (cambio de tamaño)

Modificar las dimensiones de la imagen original. Esto ayuda al modelo a reconocer objetos independientemente de su tamaño en la imagen.

Random crop (recorte aleatorio)

Realizar recortes aleatorios de la imagen original. Por ejemplo, si la imagen muestra un casco, un recorte podría enfocarse solo en una parte del mismo. Esto enseña al modelo a reconocer objetos incluso cuando están parcialmente visibles.

Cambios de perspectiva

Alterar la perspectiva desde la que se ve el objeto, lo que ayuda al modelo a reconocer objetos desde diferentes ángulos.

Rotaciones aleatorias

Girar la imagen en diferentes ángulos, lo que permite al modelo identificar objetos independientemente de su orientación.

¿Cómo implementar data augmentation en PyTorch?

La implementación en PyTorch es sencilla gracias a las funciones predefinidas en torchvision.transforms:

from torchvision import transforms

# Transformaciones para el conjunto de entrenamiento
train_transforms = transforms.Compose([
    transforms.RandomResizedCrop(224),  # Recorte aleatorio con redimensionamiento
    transforms.RandomHorizontalFlip(),  # Volteo horizontal aleatorio
    transforms.ToTensor(),  # Conversión a tensor
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # Normalización
])

# Transformaciones para el conjunto de validación (generalmente menos agresivas)
val_transforms = transforms.Compose([
    # Otras transformaciones específicas para validación
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

Es importante destacar que podemos aplicar diferentes transformaciones a los conjuntos de entrenamiento y validación. Generalmente, las transformaciones para validación son menos agresivas, ya que queremos evaluar el modelo en condiciones más cercanas a las reales.

Conversión a tensor y normalización

Dos pasos fundamentales en el proceso son:

  1. Conversión a tensor: Las imágenes deben convertirse a tensores para ser procesadas por PyTorch. Un tensor es esencialmente un vector o conjunto de vectores multidimensional, el tipo de dato nativo con el que trabaja PyTorch.

  2. Normalización: Aplicamos normalización para estandarizar los valores de píxeles según una media y desviación estándar predefinidas. Esto ayuda a que el modelo converja más rápidamente durante el entrenamiento.

El data augmentation es una técnica esencial que permite maximizar el valor de datasets pequeños, generando variaciones significativas que ayudan a entrenar modelos más robustos y precisos. Con las herramientas proporcionadas por PyTorch, su implementación resulta accesible incluso para quienes están comenzando en el campo del aprendizaje profundo.

¿Has utilizado alguna vez técnicas de data augmentation en tus proyectos? Comparte tu experiencia en los comentarios y cuéntanos qué transformaciones te han resultado más efectivas para tus casos de uso específicos.