1 Introducción

Las herramientas computaciones han venido avanzando a pasos agigantados en la última década, lo cual ha permitido que los diferentes dispositivos electrónicos a los que tenemos acceso permitan tener a disposición una mayor cantidad de recursos ocupando a la vez una menor cantidad de espacio y a un costo significativamente menor en comparación con los primeros dispositivos que salieron al mercado, dando la posibilidad a las masas y a pequeñas empresas de acceder a varios de estos instrumentos tecnológicos, y así, permitiendo la elaboración de proyectos más complejos con ayuda de estos implementos.

Con esto, aprovechando las herramientas tecnológicas que se tienen a la mano, se va a abordar el problema de analizar un conjunto de imágenes para determinar si las personas que están retratadas en estas están empleando gafas, y para conseguir esto se van a apelar a una técnica de aprendizaje estadístico muy usada hoy en día para el trabajo con imágenes y videos: las redes neuronales convolucionales, las cuales, en particular, son muy útiles para llevar a cabo tareas de clasificación de imágenes.

2 Documentación

Para poder llevar a cabo la clasificación de imágenes de personas según si están luciendo gafas o no, es necesario contar con varios centenares de fotos de personas que permitan alimentar el algoritmo. Además, se debe tener en cuenta que van a existir dos conjuntos de imágenes diferentes: uno de entrenamiento, que contiene aproximadamente dos mil imágenes y con el cual se podrá generar el algoritmo que realice la clasificación; y otro de validación, compuesto por seiscientas cuarenta imágenes, y con el cual se puede verificar si el algoritmo entrenado con el conjunto anterior hace la tarea para la cual fue creado adecuadamente.

Así, es necesario crear estas dos bases de datos, y para conseguirlo, se emplearon las siguientes tres fuentes de imágenes:

3 Herramientas y materiales

3.1 Materiales principales

Para la realización de este informe técnico, así como el planteamiento de la mayoría de los modelos predictivos que se presentarán más adelante se empleó la versión 4.0.5 de \(\color{#00008b}{\textsf{R}}\), el cual es un software de programación especializado en estadística y ciencia de datos. Además, para la escritura del código de este lenguaje se empleó la versión 2021.09.1 del entorno de desarrollo integrado \(\color{#1ac5ff}{\textsf{R}}\)\(\color{#696969}{\textsf{Studio}}\). Por otro lado, para el procesamiento de las imágenes, de manera que tuvieran un formato adecuado para poder entrenar al algoritmo de clasificación y también la creación del mismo modelo, se usó a \(\color{cyan}{\textsf{Python}}\), que es un lenguaje de programación muy popular y con uso en diversas áreas como la ciencia de datos. Para ello, se usaron dos entornos: el primero es \(\color{#1ac5ff}{\textsf{R}}\)\(\color{#696969}{\textsf{Studio}}\) (para el procesamiento de las imágenes) y el segundo es \(\color{orange}{\textsf{Colaboratory}}\). Asimismo, se debe destacar que se usó al repositorio en línea \(\textsf{GitHub}\) para poder guardar y compartir el código entre los autores de este trabajo, así como \(\textsf{Google Drive}\) para el almacenamiento de las diferentes imágenes.

3.2 Materiales secundarios

Vale la pena mencionar los paquetes de \(\color{#00008b}{\textsf{R}}\) que más se emplearon en el marco de este trabajo para conseguir el desarrollo del modelo predictivo del número de vehículos registrados en el RUNT en el 2018:

  • \(\color{purple}{\texttt{caret}}\). Versión 6.0-90 de octubre de 2021. Este paquete de \(\color{#00008b}{\textsf{R}}\) resalta como el más importante de todos, puesto que con él fue posible desarrollar algunos de los modelos que se presentarán más adelante. Este paquete es útil para la creación de modelos de clasificación y regresión, así como para la generación de gráficos que permitan estudiar los resultados que se obtienen con sus funciones. Este un paquete desarrollado por el R Core Team (el equipo base que ayuda a desarrollar y mantener al lenguaje R), Max Kuhn, Jed Wing, Steve Weston, Andre Williams, Chris Keefer, Allan Engelhardt, Tony Cooper y Breton Kenkel, entre otros.

  • \(\color{purple}{\texttt{DT}}\). Versión 0.20 Este paquete de \(\color{#00008b}{\textsf{R}}\) permite formatear tablas creadas con código de \(\color{#00008b}{\textsf{R}}\) para luego ser presentadas con un estilo sobrio, elegante y sencillo, de forma que los lectores puedan entender amigablemente las tablas presentadas.

  • \(\color{purple}{\texttt{tidyverse}}\). Versión 1.3.1. Este es un paquete de \(\color{#00008b}{\textsf{R}}\) desarrollado por Hadley Wickham que incluye otros paquetes como \(\texttt{dplyr}\) y \(\texttt{ggplot2}\), que fueron usados con frecuencia en este trabajo y que facilitan el manejo, análisis, transformación de bases de datos, así como la creación de gráficos elegantes y llamativos.

  • \(\color{purple}{\texttt{cv2}}\). Versión 4.5.5.62.. También conocido como \(\texttt{OpenCV}\), es un modulo de \(\color{cyan}{\textsf{Python}}\) enfocado a trabajas relacionados como visión artificial y que fue empleado en este trabajo para poder realizar el procesamiento inicial de las fotografías de la base de datos.

  • \(\color{purple}{\texttt{glob}}\). Es un modulo de \(\color{cyan}{\textsf{Python}}\) que resulta útil para el trabajo con direcciones de archivos y carpetas en un computador y que en este caso fue importante durante la etapa de preprocesamiento de imágenes para poderlas listas a varias de ellas y no tener que hacer el trabajo de forma manual con cada imágen.

  • \(\color{purple}{\texttt{os}}\). Es un modulo de \(\color{cyan}{\textsf{Python}}\) que resulta útil para el trabajo con direcciones de archivos y carpetas en un computador y que en este caso fue importante durante la etapa de preprocesamiento de imágenes para poderlas ubicar en las carpetas en las que estabas ubicadas y situarlas en un nuevo fólder después de ser procesadas.

  • \(\color{purple}{\texttt{Numpy}}\). Es un módulo de \(\color{cyan}{\textsf{Python}}\) de procesamiento de matrices de propósito general. Proporciona un objeto de matriz multidimensional de alto rendimiento y herramientas para trabajar con estas matrices. Es el paquete fundamental para la computación científica con \(\color{cyan}{\textsf{Python}}\).

  • \(\color{purple}{\texttt{TensorFlow}}\). Es una plataforma de \(\color{cyan}{\textsf{Python}}\) de código abierto de extremo a extremo para el aprendizaje automático. Cuenta con un ecosistema integral y flexible de herramientas, bibliotecas y recursos de la comunidad que permite que los investigadores innoven con el aprendizaje automático y los desarrolladores creen e implementen aplicaciones con tecnología de aprendizaje automático fácilmente.

  • \(\color{purple}{\texttt{PyTorch}}\). Es un paquete de \(\color{cyan}{\textsf{Python}}\) que proporciona dos características de alto nivel: Cálculo de tensor (como NumPy) con fuerte aceleración de GPU, y Redes neuronales profundas construidas en un sistema de autograduación basado en cinta.

  • \(\color{purple}{\texttt{Matplotlib}}\) es una biblioteca completa para crear visualizaciones estáticas, animadas e interactivas en \(\color{cyan}{\textsf{Python}}\).

  • \(\color{purple}{\texttt{Keras}}\) es una biblioteca de Redes Neuronales de Código Abierto escrita en \(\color{cyan}{\textsf{Python}}\). Es capaz de ejecutarse sobre TensorFlow, Microsoft Cognitive Toolkit o Theano. Está especialmente diseñada para posibilitar la experimentación en más o menos poco tiempo con redes de Aprendizaje Profundo.

4 Desarrollo

Debido a que las imágenes con las que se a abordar este trabajo poseen características muy diferentes entre sí, se las va a llevar a cada una de ellas a una escala particular, que en este corresponde a \(171 \times 213\), esto es, 171 pixeles de ancho 213 pixeles de alto, y luego se las deja en una escala de grises. A continuación se muestra el ejemplo con una imagen particular.

En la figura uno se puede ver una de las imágenes empleadas, la cual tiene las dimensiones y el color con el que fue obtenido de Internet vía \(\textsf{Google Images}\)

Nótese que el eje vertical apunta hacia cantidad positivas hacia abajo, mientras que el eje horizontal apunta hacia cantidad positivas hacia la derecha. A continuación, con el programa escrito en \(\color{cyan}{\textsf{Python}}\) se realiza su procesamiento para escalarlo y dejarlo en escala de grises, obteniendo el resultado que se observa en la figura dos:

Para el conjunto de validación aplicamos el mismo reescalamiento de la dimensión de las imágenes que a corresponde a \(171 \times 213\). Para este formato de imágenes cargamos una librería pixmap puesto que su formato (.pgm) es diferente a el de las imágenes de entrenamiento, se creó una carpeta en Drive donde se ubicaron todas las imágenes re-escaladas en el archivo descargado se encontraban 3 versiones de cada imagen, se eligió solo la imagen con mayor tamaño y mejor definición de píxeles. A está carpeta se le asigna el nombre de Procesadas_Faces y se toman dos imágenes como ejemplo una con gafas y otra sin gafas.

En este gráfico notamos el respectivo reescalamiento y el color de la imagen, como ya estaba en escala de grises no tuvimos que cambiar el formato de color del conjunto de validación.

4.1 Modelo

La clasificación de imágenes es el proceso de categorizar y etiquetar grupos de píxeles o vectores dentro de una imagen según reglas específicas. La ley de categorización se puede diseñar utilizando una o más características espectrales o texturales.

Uno de los algoritmos más utilizados actualmente para esta tarea son las redes neuronales convolucionales. Una red neuronal convolucional (ConvNet o CNN) es un algoritmo de aprendizaje profundo que puede tomar una imagen de entrada, asignar importancia (pesos y sesgos aprendibles) a varios aspectos u objetos de la imagen y poder diferenciar uno del otro. El procesamiento previo requerido en una ConvNet es mucho menor en comparación con otros algoritmos de clasificación. Mientras que en los métodos primitivos los filtros se diseñan a mano, con suficiente entrenamiento, ConvNets tiene la capacidad de aprender estos filtros o características.

Para este modelo, se plantea una red convolucional secuencial (por capas), con diecinueve capas, funciones de activación Relu y Lineal, kernel de tamaño 3x3 y capas con 32, 64 y 128 neuronas. Cómo última función de activación, se tiene a una sigmoide, ya que esta es mejor para problemas de clasificación binaria.

Se compila el modelo con algoritmo de optimización en la tasa de aprendizaje, adam, función de pérdida binary crossentropy y exactitud como métrica.

4.2 Resultados

A continuación se muestra una imagen cualquiera del conjunto de prueba, la clasificación real a la que pertenece y la clasificación según el modelo:

Además, la matriz de confusión:

Donde se obtiene que el modelo clasificó 205 de 206 fotos sin gafas correctamente, y 288 de 289 imágenes con gafas correctamente.

4.3 Preguntas

4.3.1 1. ¿Qué afecta la capacidad del modelo en el conjunto de validación?

Afecta en qué tan bien se representó en el conjunto de entrenamiento la información a ser evaluada en el conjunto de validación, a la información que realmente debió ser aprendida. Para este caso, el conjunto de validación disponía de imágenes de personas tomadas con diferentes poses (recta, izquierda, derecha, arriba), mientras que en el dataset de entrenamiento no disponía exactamente de personas en las mismas poses, especialmente hacia arriba, pues estas fueron más difíciles de hallar.

4.3.2 2. ¿Hay alguna característica de las imágenes que mejore la capacidad de respuesta?