EN JA ZH ES

Aprendizaje por transferencia para clasificación de imágenes con datos limitados - Guía de Fine-tuning

· 9 min de lectura

Qué es el aprendizaje por transferencia - Construir modelos precisos con datos limitados

El aprendizaje por transferencia utiliza el conocimiento de modelos preentrenados en conjuntos de datos a gran escala para completar nuevas tareas con datos limitados. Al usar un extractor de características entrenado en 14 millones de imágenes de ImageNet para una tarea de clasificación personalizada con solo unos cientos de imágenes, se puede lograr una precisión muy superior al entrenamiento desde cero en mucho menos tiempo.

Por qué funciona el aprendizaje por transferencia:

Las capas superficiales de CNN aprenden características genéricas (bordes, texturas, patrones de color), mientras que las capas profundas aprenden características específicas de la tarea. Las características de las capas superficiales son altamente transferibles entre diferentes tareas visuales, por lo que las capas superficiales del modelo preentrenado pueden reutilizarse directamente. Esto significa que la nueva tarea solo necesita aprender representaciones específicas en las capas profundas, reduciendo drásticamente los datos necesarios y el tiempo de entrenamiento.

Tres estrategias de aprendizaje por transferencia:

  • Extracción de características: Congelar el modelo preentrenado, entrenar solo la nueva cabeza de clasificación. La más rápida, adecuada para escenarios con muy pocos datos.
  • Fine-tuning: Usar pesos preentrenados como inicialización, entrenar adicionalmente todas o algunas capas. Mayor precisión pero requiere más datos.
  • Adaptación de dominio: Técnicas especiales para cerrar la brecha entre el dominio fuente y el objetivo. Adecuada cuando las características de imagen difieren significativamente.

Guía de selección de estrategia según cantidad de datos:

  • 50-200 imágenes: Extracción de características (congelar todas las capas, entrenar solo cabeza de clasificación)
  • 200-1000 imágenes: Fine-tuning de las últimas capas (congelar capas superficiales, entrenar capas profundas + cabeza)
  • Más de 1000 imágenes: Fine-tuning completo del modelo (todas las capas entrenables, con tasa de aprendizaje menor)

Fundamentos del fine-tuning - Implementación en PyTorch

El fine-tuning usa los pesos del modelo preentrenado como inicialización y realiza entrenamiento adicional en el nuevo conjunto de datos. Se reemplaza la cabeza de clasificación final para coincidir con el número de clases de la nueva tarea, luego se entrenan todas o algunas capas con datos específicos de la tarea.

Pasos de implementación:

1. Cargar modelo preentrenado: model = timm.create_model("efficientnet_b0", pretrained=True, num_classes=10) reemplaza automáticamente la capa final. 2. Preparar cargadores de datos con aumento de datos apropiado. 3. Configurar tasas de aprendizaje diferenciadas: tasa menor para capas preentrenadas (1e-5), tasa mayor para la nueva cabeza de clasificación (1e-3). 4. Entrenar y monitorear la pérdida de validación para prevenir sobreajuste.

Configuración de tasas de aprendizaje diferenciadas:

optimizer = torch.optim.AdamW([{"params": model.features.parameters(), "lr": 1e-5}, {"params": model.classifier.parameters(), "lr": 1e-3}])

Las capas preentrenadas usan 1/100 de la tasa de aprendizaje para evitar destruir características útiles ya aprendidas. Las nuevas capas usan la tasa estándar para convergencia rápida.

Estrategia de aumento de datos:

  • Aumento básico: volteo horizontal aleatorio, rotación aleatoria (±15°), jitter de color
  • Aumento avanzado: RandAugment, CutMix, MixUp (especialmente efectivo con menos de 500 imágenes)
  • El conjunto de validación no se aumenta, solo Resize y Normalize

Consejos de entrenamiento:

  • Usar programador de tasa de aprendizaje con recocido coseno para reducción suave
  • Parada temprana (patience=5-10) para prevenir sobreajuste
  • Recorte de gradientes (max_norm=1.0) para estabilizar el entrenamiento
  • Usar entrenamiento de precisión mixta (AMP) para acelerar 2x sin pérdida de precisión

Extracción de características - Entrenar solo la capa final

La extracción de características congela completamente los pesos del modelo preentrenado y solo entrena la capa de clasificación final para la nueva tarea. El costo computacional es menor que el fine-tuning y es especialmente efectiva cuando los datos son extremadamente limitados (50-200 imágenes) y el riesgo de sobreajuste es máximo.

Método de implementación:

Congelar todos los parámetros y luego reemplazar la capa final. Usar requires_grad=False para congelar todas las capas, luego reemplazar model.fc con una nueva capa Linear que coincida con el número de clases. Solo los parámetros de la nueva capa se actualizan, reduciendo drásticamente el tiempo de entrenamiento y los requisitos de memoria.

Ejemplo de código:

model = timm.create_model("resnet50", pretrained=True)

for param in model.parameters(): param.requires_grad = False

model.fc = nn.Linear(model.fc.in_features, num_classes)

Ventajas de la extracción de características:

  • Entrenamiento rápido: solo actualiza la capa final, se completa en minutos en GPU
  • Bajo riesgo de sobreajuste: muy pocos parámetros entrenables, difícil de sobreajustar incluso con pocos datos
  • No requiere GPU: el entrenamiento del clasificador después de la extracción de características puede completarse rápidamente en CPU

Limitaciones:

  • Precisión limitada cuando el dominio objetivo difiere mucho de ImageNet (imágenes médicas, satelitales, etc.)
  • No puede adaptar representaciones de características específicas de la tarea
  • Techo de precisión de clasificación inferior al fine-tuning

Estrategia mixta - Descongelamiento progresivo:

Primero entrenar la cabeza de clasificación en modo de extracción de características hasta convergencia, luego descongelar progresivamente las capas profundas para fine-tuning. Este enfoque progresivo es más estable que el fine-tuning de todas las capas a la vez, especialmente adecuado para cantidades medias de datos (200-500 imágenes).

Selección de arquitectura de modelo - ResNet, EfficientNet, ViT

La selección del modelo base para aprendizaje por transferencia requiere equilibrar precisión, velocidad de inferencia y tamaño del modelo. A continuación comparamos las principales opciones disponibles en 2025, cubriendo escenarios de despliegue prácticos bajo diferentes restricciones de hardware.

ResNet:

Arquitectura con conexiones residuales propuesta en 2015, es el modelo estándar para aprendizaje por transferencia. ResNet-50 tiene 25.6 millones de parámetros y es el más ampliamente utilizado. Estructura simple, bien optimizada en todos los frameworks. Precisión Top-1 en ImageNet entre 76-80% según la variante. Velocidad de inferencia rápida, adecuada para despliegue en producción.

EfficientNet:

Logra el equilibrio óptimo precisión-eficiencia mediante escalado compuesto (escalando simultáneamente profundidad, ancho y resolución). EfficientNet-B0 (5.4 millones de parámetros) destaca en despliegue móvil. B3-B4 logran buen equilibrio entre precisión y velocidad. 4-8x más pequeño que ResNet con la misma precisión.

Vision Transformer (ViT):

Arquitectura basada en autoatención que destaca en conjuntos de datos grandes. ViT-Base (86 millones de parámetros) supera a CNN con datos suficientes. Pero tiende al sobreajuste en conjuntos de datos pequeños (<1000 imágenes), no adecuado para modo de extracción de características. La variante DeiT mejora el rendimiento con pocos datos mediante destilación de conocimiento.

Guía de selección:

  • Menos de 500 imágenes: EfficientNet-B0 o ResNet-34 (pocos parámetros, difícil de sobreajustar)
  • 500-5000 imágenes: EfficientNet-B3 o ResNet-50 (equilibrio entre precisión y generalización)
  • Más de 5000 imágenes: ViT-Base o EfficientNet-B5 (aprovecha al máximo los datos grandes)
  • Despliegue en edge: MobileNetV3 o EfficientNet-Lite (prioridad en velocidad de inferencia)

Adaptación de dominio y técnicas prácticas

La efectividad del aprendizaje por transferencia depende de la similitud de dominio entre los datos de preentrenamiento y la tarea objetivo. Esta sección presenta estrategias para cuando la brecha de dominio es grande, y técnicas prácticas para maximizar el rendimiento del aprendizaje por transferencia en proyectos reales.

El problema de la brecha de dominio:

Al aplicar modelos entrenados en ImageNet a imágenes médicas o satelitales, el rendimiento disminuye debido a las enormes diferencias en las características de las imágenes. Las imágenes médicas suelen ser en escala de grises con patrones de textura completamente diferentes a las imágenes naturales. Las imágenes satelitales también tienen perspectiva, resolución y distribución de color muy diferentes a las fotos cotidianas.

Estrategias de respuesta:

  • Preentrenamiento en dominio intermedio: Primero preentrenar en un conjunto de datos grande más cercano al dominio objetivo, luego hacer fine-tuning a la tarea objetivo. Por ejemplo, imágenes médicas pueden preentrenarse primero en conjuntos de datos de rayos X.
  • Preentrenamiento autosupervisado: Usar métodos autosupervisados como MAE, DINO en datos sin etiquetar del dominio objetivo para aprender características específicas del dominio.
  • Alineación por aumento de datos: Diseñar estrategias de aumento que simulen las características del dominio objetivo (como escala de grises y ajuste de contraste para imágenes médicas).

Técnicas prácticas:

  • Calentamiento de tasa de aprendizaje: Aumentar linealmente la tasa de aprendizaje durante el primer 5-10% de los pasos de entrenamiento para evitar que gradientes grandes iniciales destruyan las características preentrenadas
  • Suavizado de etiquetas: Usar suavizado de etiquetas de 0.1 para reducir el sobreajuste y mejorar la generalización
  • Aumento en tiempo de prueba (TTA): Aplicar múltiples aumentos a la entrada durante la inferencia y promediar las predicciones, puede mejorar la precisión un 1-3%
  • Ensamble de modelos: Combinar múltiples modelos fine-tuned de diferentes arquitecturas para mejorar aún más la precisión

Proyecto práctico - Construir un clasificador con 100 imágenes

Guía paso a paso: construir un clasificador de imágenes con aproximadamente 100 imágenes, con ejemplos de código. Usando clasificación binaria como caso práctico, demostramos el flujo de trabajo completo de aprendizaje por transferencia.

Preparación de datos:

Preparar 50 imágenes por clase, 100 en total. Dividir en entrenamiento:validación = 8:2, obteniendo 80 imágenes de entrenamiento y 20 de validación. La estructura de directorios sigue la convención estándar con subdirectorios por clase bajo las carpetas train y val.

Código de entrenamiento completo:

import timm, torch

model = timm.create_model("efficientnet_b0", pretrained=True, num_classes=2)

optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4)

scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=20)

Configuración de entrenamiento:

  • Número de epochs: 20-30 (con parada temprana)
  • Tamaño de batch: 16 (batch pequeño para conjuntos de datos pequeños)
  • Optimizador: AdamW (weight_decay=0.01)
  • Función de pérdida: CrossEntropyLoss (con suavizado de etiquetas 0.1)

Resultados esperados:

Usando fine-tuning de EfficientNet-B0, una tarea de clasificación binaria con 100 imágenes típicamente puede alcanzar 90-95% de precisión de validación. Comparado con entrenamiento desde cero (típicamente 60-70%), el aprendizaje por transferencia aporta una mejora de precisión del 20-30%. El tiempo de entrenamiento es de aproximadamente 5-10 minutos en una sola GPU.

Recomendaciones de despliegue:

  • Usar TorchScript u ONNX para exportar el modelo para despliegue en producción
  • La cuantización (INT8) puede reducir el tamaño del modelo 4x y acelerar la inferencia 2-3x
  • Considerar TensorRT u OpenVINO para optimización de inferencia

Artículos relacionados

Aumento de datos para aprendizaje automático - Técnicas prácticas de augmentación de imágenes

Guía sistemática de técnicas de Data Augmentation esenciales para clasificación de imágenes y detección de objetos. Desde transformaciones geométricas hasta métodos de mezcla con implementaciones.

Visión general de la detección de objetos - Comparación de arquitectura y rendimiento de YOLO, SSD y Faster R-CNN

Explicación sistemática de la detección de objetos con aprendizaje profundo. Cubre los principios de YOLO, SSD y Faster R-CNN, compromisos velocidad-precisión y criterios de selección prácticos con benchmarks concretos.

Fundamentos de NeRF - Reconstrucción 3D de escenas a partir de imágenes

Explicación detallada de Neural Radiance Fields (NeRF), desde el renderizado volumétrico hasta métodos de aceleración como Instant NGP y 3D Gaussian Splatting, incluyendo flujos de trabajo prácticos.

Cómo funcionan los modelos de difusión - Análisis técnico de Stable Diffusion

Desde los principios de los modelos de difusión hasta la arquitectura de Stable Diffusion. Cubre DDPM, difusión latente, CFG, técnicas de aceleración y métodos de control prácticos.

Aplicaciones de GAN en imágenes - De la superresolución a la transferencia de estilo

Explicación sistemática de las aplicaciones prácticas de GAN en procesamiento de imágenes. Cubre superresolución, transferencia de estilo, restauración de imágenes, generación de rostros y soluciones de despliegue.

Superresolución con aprendizaje profundo - De SRCNN a Real-ESRGAN

Análisis completo de la superresolución de imágenes con aprendizaje profundo, desde el trabajo pionero de SRCNN hasta el manejo de degradación real de Real-ESRGAN, con guía de despliegue práctico.

Términos relacionados