Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Redes convolucionales (CNN), Unidad 7 — Entrenamiento de CNN, 7.1 — Preparación de datos visuales ·

Batch de imágenes

Batch de imágenes: Preparación para entrenar CNN

Introducción

La preparación adecuada de los datos es un paso crucial en el entrenamiento de modelos de redes convolucionales (CNN). El "batch" de imágenes representa la cantidad de ejemplos que se procesan juntos en una iteración durante el entrenamiento. En este artículo, exploraremos cómo preparar eficientemente batches de imágenes para entrenar CNNs.

Explicación principal con ejemplos

La preparación de datos es crucial para asegurar que los modelos CNN aprendan a través de múltiples muestras representativas. Esto implica normalizar las imágenes, asegurarse de que tengan dimensiones consistentes y agruparlas en batches. A continuación se muestra un ejemplo de cómo preparar una lista de archivos de imagen para un batch:

import os

def cargar_batch_de_imagenes(ruta_directorio, tamaño_corte=(256, 256), cantidad=32):
    """
    Carga y ajusta las imágenes en batches.
    
    :param ruta_directorio: Ruta al directorio con las imágenes.
    :param tamaño_corte: Tamaño deseado de las imágenes cortadas (ancho, alto).
    :param cantidad: Cantidad de imágenes por batch.
    :return: Lista de imágenes ajustadas a tamaño y un label list (si se está etiquetando).
    """
    import cv2
    from PIL import Image
    
    imagenes = []
    labels = []  # Asumiendo que cada imagen tiene una etiqueta
    
    for i, nombre_archivo in enumerate(os.listdir(ruta_directorio)):
        ruta_completa = os.path.join(ruta_directorio, nombre_archivo)
        
        if not os.path.isfile(ruta_completa):
            continue
        
        # Leer la imagen
        image = cv2.imread(ruta_completa)
        image = Image.fromarray(image)
        
        # Ajustar el tamaño de la imagen
        image = image.resize(tamaño_corte, resample=Image.BILINEAR)
        imagenes.append(np.array(image))
        labels.append(i)  # Etiquetas están en una lista paralela
    
    return np.array(imagenes), np.array(labels)

# Ejemplo de uso:
batch_imagenes, batch_etiquetas = cargar_batch_de_imagenes('ruta/del/directorio')

Errores típicos / trampas

  1. Dimensiones inconsistentes: Asegúrate de que todas las imágenes en un batch tengan el mismo tamaño. Diferentes tamaños pueden causar errores durante la formación del modelo.
  2. Normalización inadecuada: No normalizar correctamente las imágenes puede afectar negativamente al rendimiento y a la convergencia del modelo. Es común usar escalamiento unitario (-1, 1) o normalización estándar (0, 1).
  3. Etiquetas no enlazadas: Asegúrate de que las etiquetas estén correctamente enlazadas con los datos correspondientes. Si una imagen se mueve o cambia la posición en el batch, las etiquetas también deben moverse.

Checklist accionable

  1. Verifica que todas tus imágenes tengan las mismas dimensiones.
  2. Normaliza las imágenes a un rango de valor especificado (por ejemplo, -1 a 1).
  3. Asegúrate de que los datos y las etiquetas estén correctamente enlazados.
  4. Utiliza bibliotecas como OpenCV para cargar eficientemente las imágenes.
  5. Implementa la función cargar_batch_de_imagenes y adapta el tamaño del batch a tus necesidades.

Cierre

Siguientes pasos

  • Aplicación de técnicas avanzadas: Asegúrate de que todas tus imágenes estén preparadas correctamente antes de comenzar con el entrenamiento. La preparación adecuada puede mejorar significativamente los resultados.
  • Pruebas y ajustes: Realiza pruebas con diferentes configuraciones de tamaño del batch para ver cómo afectan a la velocidad y al rendimiento del modelo.
  • Documentación: Documenta cada paso de preparación y ajuste realizado en el proceso, lo que facilitará futuras iteraciones y mantenimientos.

Siguiendo estos pasos, podrás preparar eficientemente tus datos para entrenar modelos CNN con mayor precisión y eficiencia.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).