Lección 7 del curso Clasificación de Imágenes con Deep Learning.
En la lección anterior vimos cómo implementar un clasificador de imágenes usando Redes Convolucionales entrenadas desde cero. Y vimos que aunque este enfoque tiene el potencial de alcanzar un alto desempeño durante la clasificación, también tiene varias limitaciones, como la necesidad de afinar los hiper-parámetros del modelo, así como la necesidad de recolectar un set de entrenamiento con varios miles o cientos de miles de imágenes junto con elevados costos computacionales.
Así que en esta lección veremos cómo usar la librería PyTorch para implementar dos clasificadores de imágenes usando el enfoque de transferencia de aprendizaje, una técnica de Deep Learning que para el caso de la clasificación de imágenes permite eliminar casi por completo las limitaciones del entrenamiento desde cero vistas en la lección anterior.
Comencemos entonces entendiendo el principio de funcionamiento de los dos principales enfoques de transferencia de aprendizaje que podemos usar al momento de implementar clasificadores de imágenes y veamos en detalle el modelo a usar y cómo implementar el pre-procesamiento de los datos:
Contenido exclusivo para suscriptores
Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.
En esencia la transferencia de aprendizaje con Redes Convolucionales para la clasificación de imágenes consiste en tomar un modelo pre-entrenado y especializarlo en nuestro set de datos. Y para ello podemos usar dos enfoques:
- Congelar los bloques extractores de características del modelo pre-entrenado y ajustar y entrenar únicamente las capas de clasificación.
- O ajustar las capas de clasificación y afinar la totalidad del modelo pre-entrenado pero sólo por unas cuantas iteraciones
En la práctica estos dos enfoques suelen arrojar muy buenos resultados para una gran variedad de problemas. Además, lo interesante de todo esto es que no resulta necesario que el modelo que usemos haya sido pre-entrenado con imágenes similares a las que tenemos sen nuestro set de datos.
Así que teniendo claro el principio de funcionamiento de estos dos enfoques de transferencia de aprendizaje, veamos cómo usar la librería PyTorch y el modelo pre-entrenado «EfficientNet» para implementar la primera estrategia:
Contenido exclusivo para suscriptores
Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.
Como acabamos de ver la implementación de esta primera estrategia realmente es muy simple y todo se puede realizar con funciones propias de PyTorch.
En este caso tan sólo fue necesario entrenar 3.843 parámetros (del total de casi 4 millones) correspondientes a la capa «fully connected» del modelo. Y con esto hemos alcanzado un puntaje F1 global con el set de prueba de 0.94 (o 94%) que es mucho mejor que el que obtuvimos en la lección anterior cuando entrenamos el modelo desde cero (82%).
Siguiendo esta misma lógica, veamos cómo implementar la segunda estrategia de transferencia de aprendizaje para clasificar nuestras imágenes (la afinación del modelo pre-entrenado):
Contenido exclusivo para suscriptores
Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.
En este caso acabamos de ver que el modelo a afinar requiere realizar tan sólo 5 iteraciones de entrenamiento para ajustar los casi 4 millones de parámetros. Estos parámetros son el resultado de sumar los parámetros del bloque extractor de características pre-entrenado y de la capa de salida (clasificador) modificada.
Y después de tan sólo 5 iteraciones hemos logrado obtener un modelo con un excelente desempeño (F1-score) sobre el set de prueba: 0.99 (o 99%), que es muy superior al obtenido con el enfoque que vimos hace un momento o con el clasificador implementado en la lección anterior.
Así que en la práctica, la transferencia de aprendizaje es la estrategia que siempre sugiero priorizar al momento de implementar un clasificador de imágenes.
Teniendo claro cómo funciona y cómo se implementa cada una de estas estrategias de transferencia de aprendizaje, en la siguiente lección veremos otra alternativa muy usada al momento de construir clasificadores de imágenes y que muchas veces permite obtener modelos mucho más robustos capaces de generalizar adecuadamente y con un muy buen desempeño. Entonces hablaremos de la técnica de «image augmentation».
Todas las lecciones del curso Clasificación de Imágenes con Deep Learning
