Llevar un modelo de visión por computadora a producción exige más que entrenar una red básica. Para mejorar una red neuronal convolucional aplicada a la detección de neumonía, existen tres palancas concretas que elevan el accuracy sin reescribir todo el sistema: aumento de datos, arquitecturas más profundas y transferencia de aprendizaje desde modelos preentrenados.
¿Qué es el data augmentation y cómo robustece tu modelo?
El data augmentation aplica transformaciones aleatorias a las imágenes del data set para que la red aprenda a reconocer patrones bajo distintas condiciones. Es la primera línea de defensa contra el sobreajuste cuando tienes pocas imágenes médicas.
En entrenamiento, las operaciones más útiles son:
- Random Resize Crop: toma un recorte aleatorio y lo entrega en 224 por 224 píxeles.
- Random Horizontal Flip: espeja la imagen de forma horizontal para duplicar variantes.
- Otras transformaciones que dependen del caso de uso clínico.
En validación cambian las reglas. Allí se usa Resize para llevar la imagen a 256 por 256 píxeles y luego Center Crop para obtener un recorte central de 224 por 224. Las transformaciones de entrenamiento y validación a veces coinciden, pero no siempre, y aquí es un buen ejemplo de cuándo conviene separarlas [0:45].
¿Para qué sirve el data augmentation? Sirve para crear variaciones artificiales de tus imágenes y enseñarle al modelo a generalizar mejor, reduciendo el riesgo de que memorice el set original.
¿Cómo afecta agregar más capas a una red neuronal convolucional?
Sumar bloques a la arquitectura aumenta la capacidad del modelo para detectar patrones complejos, aunque también su tiempo de entrenamiento. En la versión CNN 2, la red original (convolución, activación y pooling) se amplía con un segundo bloque idéntico, seguido de flatten, una capa lineal, una activación ReLU y la salida para dos clases: neumonía o persona sana [2:10].
El resultado es contundente. El entrenamiento tomó seis minutos y el accuracy pasó de 0.69 a 0.86 solo con ese bloque extra. La curva ROC también mejoró, con un área bajo la curva cercana a 0.9, lo que indica una mejor capacidad de discriminación entre clases [3:05].
¿Qué es transfer learning y cuándo usar ResNet 50?
Diseñar una red desde cero tiene valor pedagógico, pero en producción muchas veces conviene apoyarse en arquitecturas ya validadas. ResNet 50 es una de ellas: una red profunda con capas convolucionales, max pooling y una capa fully connected que produce el vector característico final.
La magia aparece al cargar pesos preentrenados. Esta práctica se llama transfer learning y consiste en transferir el conocimiento que la red adquirió en un dataset masivo a tu problema específico. ResNet 50 fue entrenada originalmente con ImageNet, un conjunto con mil categorías. Tú reutilizas esos filtros aprendidos y solo ajustas la capa final para que en lugar de clasificar mil clases, clasifique dos: persona sana o con neumonía [4:30].
La implementación se simplifica muchísimo. En vez de declarar capa por capa, basta con cargar el modelo desde TorchVision, leer cuántas características de entrada tiene la última capa, reemplazarla por una salida de dos clases y mover el modelo al dispositivo de cómputo.
¿Qué es transfer learning en pocas palabras? Es reutilizar una red ya entrenada en un problema grande, como ImageNet, para adaptarla a tu problema más pequeño cambiando solo las últimas capas.
¿Qué resultados entrega ResNet 50 con pesos preentrenados?
El entrenamiento con ResNet 50 tomó alrededor de ocho minutos y medio, un poco más por la profundidad de la red. A cambio, el accuracy saltó de 0.69 a 0.96 [6:15].
Las métricas acompañan el salto:
- F1 score alto en ambas clases.
- Matriz de confusión con valores fuertes en la diagonal.
- Curva ROC con área bajo la curva muy cercana a 1.
- Curvas de entrenamiento y validación pegadas entre sí, señal de que no hay sobreajuste evidente.
Un detalle operativo importante: cada vez que cambies de arquitectura, vuelve a ejecutar la celda donde se instancia el modelo. Si no lo haces, seguirás llamando a la red anterior y los resultados no van a cuadrar.
¿Cómo se guarda un modelo entrenado con transfer learning?
El proceso de guardado es idéntico al de cualquier modelo en PyTorch. No cambia por usar pesos preentrenados, así que puedes mantener el mismo flujo que ya conoces y revisar el notebook completo en la sección de recursos.
Resumen de mejoras y siguiente paso
Las tres palancas dejaron una progresión clara en el accuracy:
- Modelo base: 0.69.
- CNN con bloque adicional: 0.86.
- ResNet 50 con transfer learning: 0.96.
La pregunta natural que queda es qué está mirando exactamente la red para decidir si una radiografía muestra neumonía. Cuéntame en los comentarios qué arquitectura preentrenada te gustaría probar primero en tu propio proyecto.