3.17 - Proyecto final: detección de objetos multiclase usando Redes Convolucionales

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

Introducción

En la práctica anterior vimos cómo realizar la segmentación de imágenes usando Redes Convolucionales.

En este proyecto final de la sección veremos cómo usar estas Redes Convolucionales para resolver otra de las tareas fundamentales de la visión artificial: la detección de objetos.

En particular veremos cómo usar Keras y Python para implementar y entrenar una Red Convolucional capaz de detectar diferentes tipos de objetos, lo que se conoce como detección multiclase.

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

¿En qué consiste la detección de objetos multiclase?

En la detección de objetos nos interesa no solo saber cuál objeto está en la imagen (clasificación) sino también en qué ubicación se encuentra dentro de la imagen (regresión).

Al conocer la ubicación del objeto en la imagen lo que estaremos realizando será una tarea de detección. Además, si queremos detectar diferentes tipos de objetos, entonces debemos implementar un sistema de detección de objetos multiclase.

En este caso, además de la clasificación convencional (para definir la categoría a la que pertenece el objeto dentro de la imagen), se debe entrenar un modelo de regresión que aprenda a calcular las coordenadas del objeto dentro de la imagen.

El modelo contiene una Red Convolucional que aprende a extraer características relevantes de las imágenes, seguida de dos pequeñas Redes Neuronales:

El problema a resolver y el set de datos

Crearemos una Red Convolucional capaz de detectar tres diferentes tipos de objetos.

Para ello usaremos una variante del set Caltech101 con 2033 imágenes en total:

Además de las imágenes, se tendrá un archivo de anotaciones, que contiene tanto la categoría de cada objeto como sus coordenadas dentro de la imagen.

Pre-procesamiento de datos y sets de entrenamiento y validación

Usaremos la librería Numpy para convertir los datos (leídos originalmente en formato de listas) a formato de arreglos.

Por otra parte, usaremos el módulo LabelBinarizer de Scikit-Learn para convertir las categorías a su representación en el formato one-hot.

Finalmente, usaremos el módulo train_test_split (también de Scikit-Learn) para crear los sets de entrenamiento y prueba.

Creación del modelo

Tomaremos como base el modelo ResNet50, una variante de la red ResNet y que ya se encuentra pre-entrenada y disponible en la librería Keras. Para esto usaremos el módulo ResNet50.

Al igual que en prácticas anteriores, usaremos además los módulos Model, Dense y Flatten de Keras, que nos permitirán realizar la implementación completa de nuestra Red Convolucional.

Entrenamiento

Para el entrenamiento usaremos el optimizador Adam y como hiperparámetros definiremos un tamaño de lote de 32 y un total de 15 iteraciones.

Predicción y prueba del detector de objetos

Con el modelo entrenado podremos ponerlo a prueba para la detección de los diferentes tipos de objetos. Para ello haremos uso del método predict junto con las imágenes provenientes del set de entrenamiento.

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

Acabamos de implementar y entrenar una Red Convolucional para la detección de objetos multiclase, y hemos podido verificar que funciona bastante bien, pues el bounding box generado por el modelo se acerca con bastante precisión al definido originalmente en los sets de prueba y entrenamiento.

Y bien, con este proyecto culminamos la tercera sección del curso, en donde vimos todos los elementos asociados a las Redes Convolucionales.

Así que ya estamos listos para dar inicio a la cuarta sección del curso, en donde hablaremos de las Redes Neuronales Recurrentes y las Redes LSTM, especializadas en el procesamiento de secuencias.

En particular, en la próxima lección comenzaremos con una introducción a las Redes Recurrentes y el concepto de secuencia.

Ver todas las lecciones de este curso