3.16 - Práctica 3: Segmentación de imágenes con Redes Convolucionales

Lección 16 de la sección “Redes Convolucionales” del curso Fundamentos de Deep Learning con Python.

Introducción

En la lección anterior hablamos de GoogLeNet y ResNet y vimos el impresionante desempeño que tienen al momento de clasificar imágenes.

Así que en esta tercera práctica pondremos a prueba lo aprendido hasta el momento para implementar y entrenar la Red Convolucional U-Net para resolver un problema común en el procesamiento de imágenes y la visión artificial: la segmentación.

Contenido exclusivo suscriptores

Suscríbete y accede al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

¿Qué es la segmentación de imágenes?

Es uno de los principales problemas a resolver en la visión por computador. Consiste en generar particiones sobre imágenes en múltiples segmentos u objetos. Es decir en clasificar cada pixel de la imagen en una categoría diferente.

A diferencia de la clasificación de imágenes, en el caso de la segmentación la salida es una imagen (y no una categoría).

Estas son, entre otras, algunas aplicaciones de la segmentación de imágenes:

La segmentación con Redes Convolucionales

En la clasificación convencional, la imagen de entrada se procesa hasta obtener un vector que luego es clasificado con una red neuronal. Por otra parte, en la segmentación es necesario preservar la información espacial y por tanto no se usan capas fully connected.

Las capas convolucionales permiten aprender las características para el proceso de segmentación. Pero esta representación compacta debe ser convertida nuevamente a una imagen con la segmentación resultante, para lo cual se requiere un proceso inverso al realizado por las capas convolucionales.

Así que para realizar la segmentación con Redes Convolucionales se requiere una arquitectura que combine un codificador y un decodificador capaz de procesar la imagen y posteriormente crear la máscara de segmentación resultante.

El problema a resolver y el set de datos

El set de datos contiene imágenes de animales (entrada) cada una de ellas con una máscara de segmentación (salida).

La máscara contiene tres posibles categorías para los pixeles:

Para leer este set de datos haremos uso de Numpy.

El modelo: U-Net

Aunque existen varias arquitecturas, usaremos una versión simplificada de U-Net, desarrollada en 2015 para la segmentación de imágenes médicas.

En particular, para la implementación de este modelo haremos uso del módulo layers de la librería Keras.

Entrenamiento y segmentación de imágenes

Al igual que en las prácticas anteriores, usaremos los métodos compile y fit para compilar y entrenar nuestro modelo.

Como optimizador usaremos el algoritmo RMSPROP, un total de 10 iteraciones y un tamaño de lote de 32.

Con el modelo entrenado podremos llevar a cabo la segmentación de imágenes. Para ello haremos uso del método predict de Keras junto con el método argmax de Numpy, con lo cual obtendremos la máscara de segmentación resultante para la imagen que estemos procesando.

Contenido exclusivo suscriptores

Recuerda suscribirte para acceder al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

Conclusión

Con esta práctica ya hemos usado las Redes Convolucionales para resolver otro de los problemas típicos de la visión artificial: la segmentación de imágenes.

Así que ya estamos listos para realizar el proyecto final de esta sección del curso, en donde nos enfocaremos en la tercera tarea más importante de la visión artificial. Entonces en la próxima lección veremos cómo realizar la detección de objetos con Redes Convolucionales.

Ver todas las lecciones de este curso