Full text
RECONOCIMIENTO DE EXPRESIONES FACIALES EN IMÁGENES MEDIANTE TÉCNICAS DE APRENDIZAJE PROFUNDO TRABAJO FIN DE GRADO CURSO 2023-2024 AUTORES JESÚS HERNÁNDEZ GUILLAMOT PABLO MATARRANZ BURGOS DIRECTOR GONZALO PAJARES MARTINSANZ COLABORADORA EXTERNA CLARA ISABEL LÓPEZ GONZÁLEZ DOBLE GRADO EN INGENIERÍA INFORMÁTICA Y ADMINISTRACIÓN Y DIRECCIÓN DE EMPRESAS FACULTAD DE INFORMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID
RECONOCIMIENTO DE EXPRESIONES FACIALES EN IMÁGENES MEDIANTE TÉCNICAS DE APRENDIZAJE PROFUNDO RECOGNITION OF FACIAL EXPRESSIONS IN IMAGES USING DEEP LEARNING TECHNIQUES TRABAJO DE FIN DE GRADO EN INGENIERÍA INFORMÁTICA AUTOR JESÚS HERNÁNDEZ GUILLAMOT PABLO MATARRANZ BURGOS DIRECTOR GONZALO PAJARES MARTINSANZ COLABORADORA EXTERNA CLARA ISABEL LÓPEZ GONZÁLEZ CONVOCATORIA: JUNIO 2024 DOBLE GRADO EN INGENIERÍA INFORMÁTICA Y ADMINISTRACIÓN Y DIRECCIÓN DE EMPRESAS FACULTAD DE INFORMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID 5DE JUNIO DE 2024
DEDICATORIA Jesús Hernández Guillamot: A mis padres y mi hermana, que me han ayudado siempre en los momentos duros de mi carrera, y a mis compañeros de clase que me han resuelto muchas dudas. Pablo Matarranz Burgos: A mis compañeros de clase por hacer que las clases sean más entretenidas y ayudarme cuando lo he necesitado y a mi familia y a mi novia por apoyarme en todo momento y darme ánimos en los momentos difíciles. 3
AGRADECIMIENTOS A nuestro tutor, que nos ha ayudado de la mejor manera posible con nuestro Trabajo de Fin de Grado, ofreciendo todos los recursos necesarios y resolviendo todas nuestras dudas. 4
RESUMEN Este trabajo explica el funcionamiento de la aplicación desarrollada que, a grandes rasgos, consiste en la identificación de expresiones faciales mediante técnicas de aprendizaje profundo. Para lograr identificarlas se utilizan redes neuronales (AlexNet, Squeezenet) que una vez entrenadas, se dispone del modelo con los parámetros ajustados. De esta forma, es posible clasificar la imagen de una cara en función de su expresión facial y de acuerdo a una de las categorías disponibles. Desde el punto de vista de la implementación, las imágenes requieren un redimensionado, para ser procesadas por los modelos de redes correspondientes, como paso previo al reconocimiento facial. En la aplicación se permite seleccionar SqueezeNet o AlexNet como red neuronal y modificar los parámetros opcionales de entrenamiento que vienen por defecto. Palabras clave Expresiones faciales, aprendizaje profundo, redes neuronales convolucionales, SqueezeNet, AlexNet. 5
ABSTRACT This work explains the operation of the developed application, which, in broad terms, consists of identifying facial expressions using deep learning techniques. To achieve this identification, neural networks (AlexNet, Squeezenet) are employed. Once trained, the model with adjusted parameters is available. This enables the classification of a facial image based on its facial expression and according to one of the available categories. From an implementation standpoint, images require resizing to be processed by the corresponding network models as a preliminary step to facial recognition. The application allows for selecting SqueezeNet or AlexNet as the neural network and modifying the optional training parameters that come by default. Keywords Facial expressions, deep learning, convolutional neural networks, SqueezeNet, AlexNet. 6
ÍNDICE DE CONTENIDOS Capítulo 1 - Introducción...........................................................................................................1 1.1 Antecedentes.................................................................................................................. 1 1.1.1 Expresiones faciales................................................................................................1 1.1.2 Inteligencia artificial............................................................................................... 2 1.2 Motivación........................................................................................................................4 1.3 Objetivos...........................................................................................................................5 1.4 Plan de trabajo................................................................................................................ 6 1.5 Estructura del trabajo......................................................................................................7 Capítulo 2 - Redes neuronales convolucionales como técnica aplicada.........................8 2.1 Operaciones en redes neuronales convolucionales.................................................. 8 2.1.1 Métodos de optimización......................................................................................8 2.1.2 Convolución..........................................................................................................10 2.1.3 Softmax.................................................................................................................. 13 2.2 Modelos de Redes Neuronales Convolucionales......................................................14 2.2.1 AlexNet...................................................................................................................14 2.2.2 Squeezenet............................................................................................................17 Capítulo 3 - Descripción de la aplicación............................................................................ 22 3.1 Etapa de entrenamiento..............................................................................................22 3.1.1 Selección de la red neuronal..............................................................................23 3.1.2 Parámetros de entrenamiento............................................................................23 7
3.1.3 Finalización del entrenamiento...........................................................................25 3.2 Etapa de identificación................................................................................................26 3.3 DataSet........................................................................................................................... 28 3.4 Herramientas utilizadas................................................................................................. 30 Capítulo 4 - Resultados obtenidos..........................................................................................31 4.1 Fase de entrenamiento................................................................................................ 32 4.2 Fase de identificación...................................................................................................40 4.3 Problemas conocidos................................................................................................... 44 Capítulo 5 - Conclusiones y trabajo futuro............................................................................46 5.1 Conclusiones.................................................................................................................. 46 5.2 Trabajo futuro................................................................................................................. 46 Introduction................................................................................................................................ 48 Preliminary.............................................................................................................................48 Facial expressions................................................................................................................ 48 Artificial intelligence............................................................................................................ 49 Motivation.............................................................................................................................51 Goals..................................................................................................................................... 51 Work plan..............................................................................................................................52 Conclusions and future work....................................................................................................54 Conclusions...........................................................................................................................54 Future Work...........................................................................................................................54 Contribuciones Personales....................................................................................................... 56 Bibliografía..................................................................................................................................62 8
máquina que sería capaz de leer un papel perforado y ejecutar las instrucciones escritas en él. En 1943 Warren McCulloch y Walter Pitts presentaron el primer modelo de neuronas artificiales, que fue consolidado siete años más tarde por Alan Turing cuando también creó el test de Turing. A pesar de todo esto, no fue hasta 1956 cuando John McCarthy usó por primera vez la expresión de “inteligencia artificial” para referirse a “la ciencia e ingenio de hacer las máquinas inteligentes” (Rebollo Delgado, 2023). En el campo de la detección de emociones mediante inteligencia artificial, de manera convencional, se ha basado en tener en cuenta expresiones faciales, gestos corporales e incluso el habla. No obstante, las técnicas de reconocimiento de expresiones faciales por parte de una máquina suelen ser poco fiables, debido a la gran cantidad de formas en las que nuestro rostro puede transmitir emociones. Es por ello que, los resultados obtenidos por IA, entrenada previamente con datasets, para detectar ciertas expresiones no suelen ser muy precisos. De esta manera, los estudios se ayudaban en muchos casos de electrocardiogramas para que los resultados obtenidos fuesen más precisos, pero con el fin de dejar a un lado este método tan aparatoso, terminaron innovando mediante la utilización del aprendizaje profundo con ayuda de señales de radio inofensivas como ondas Wifi, de radio o de radar (Rodríguez, 2023). Ciertos investigadores llevaron a cabo un experimento en el que los participantes veían un vídeo que evocaba una de las emociones básicas (placer, alegría, tristeza o ira) y mediante señales de radio inofensivas medían las señales que rebotaban en estos. Fue de esta manera como al analizar estos cambios de señales producidos por movimientos corporales se terminó encontrando información, antes oculta, en la frecuencia respiratoria y cardíaca de los sujetos estudiados. Así Ahsan Noor Khan (2021), estudiante de doctorado en Queen Mary y coautor del estudio, declaraba al respecto que: "ser capaz de detectar emociones utilizando sistemas inalámbricos es un método de creciente interés para los investigadores, ya que ofrece 3
una alternativa a los sensores voluminosos actuales y podría ser directamente aplicable en futuros entornos de viviendas y edificios 'inteligentes'. "En este estudio, nos basamos en el trabajo existente utilizando ondas de radio para detectar emociones y demostrar que el uso de técnicas de aprendizaje profundo puede mejorar la precisión de nuestros resultados", añade (Rodríguez, 2023). Estas innovaciones pueden ser cruciales de cara al futuro ya que se abren infinidad de puertas, como el bienestar emocional en el trabajo o en otros campos, la atención médica o incluso la psicología, aunque es un arma de doble filo y podría invadir nuestra propia privacidad. En la era contemporánea, con los notables avances y logros en el campo del Aprendizaje Profundo, reconocido como un paradigma destacado en el ámbito de la Inteligencia Artificial, surge un interés considerable en explorar su aplicación para el reconocimiento planteado. 1.2 Motivación La inteligencia artificial es un campo que se encuentra en pleno auge y desarrollo debido a la reciente viralización de Chat GPT y otras aplicaciones de chatbot. Debido a esta razón y a la infinidad de posibles aplicaciones de la inteligencia artificial en el futuro, se ha decidido hacer este trabajo para adquirir nuevos conocimientos sobre este campo. Por otra parte, se ha enfocado el proyecto en la identificación de expresiones faciales porque se nos ocurrió que una aplicación que identifique el estado de ánimo de los empleados y lo relacione con su productividad, podría ser una buena forma de vincular de alguna manera este proyecto con nuestra otra carrera, Administración y Dirección de Empresas. 4
De esta forma, este proyecto nos puede ayudar a comprender mejor la inteligencia artificial, más concretamente el aprendizaje profundo, y darnos la oportunidad de seguir desarrollándolo para convertirlo en una aplicación que ayude a los directivos de las empresas a identificar problemas de productividad derivados del malestar de alguno de sus empleados. 1.3 Objetivos El objetivo principal de este trabajo es crear una aplicación que consista en el reconocimiento de expresiones faciales a partir de imágenes a través de técnicas específicas basadas en Aprendizaje Profundo. Esta aplicación podría ser utilizada en el ámbito empresarial para conocer el estado emocional de los trabajadores, y así implementar ciertas medidas por parte de los directores de las empresas. Antes de desarrollar la aplicación y durante su desarrollo se han diferenciado e identificado los siguientes objetivos: - Crear una aplicación con utilidad empresarial para mejorar las condiciones laborales de los trabajadores. - Entender y estudiar los modelos de aprendizaje profundo, como AlexNet y SqueezeNet, para poder implementarlos en la aplicación a desarrollar. - Permitir el entrenamiento de estos modelos a través de ciertos parámetros modificados por el usuario. - Obtener datasets de calidad y con una cantidad de imágenes suficiente para un entrenamiento correcto. - Desarrollar una aplicación intuitiva y sencilla para que el usuario no tenga dificultad en su utilización a través de Matlab. - Validar y comprobar el entrenamiento de los modelos utilizados para mejorar los resultados obtenidos y que sean más precisos. 5
1.4 Plan de trabajo Para realizar este trabajo se han seguido los siguientes pasos: - Antes de comenzar el proyecto pensamos en un tema que pudiera tener alguna relación con Administración y Dirección de Empresas, dentro del doble grado que estamos cursando. - Buscar DataSets válidos y con suficientes imágenes en las que se pueda interpretar de forma clara una expresión facial para clasificarlas en las expresiones elegidas. - Disminución de la cantidad inicial de expresiones faciales elegidas de ocho a cuatro, debido a que al algoritmo le era muy difícil diferenciar algunas expresiones faciales de otras, como cansado y triste, al ser muy parecidas entre sí y algo subjetivo que cada persona puede percibir de forma diferente. - Probar y aprender cómo usar Matlab para desarrollar la aplicación y poder utilizar modelos pre-entrenados, tales como AlexNet y SqueezeNet, habiendo estudiado previamente el funcionamiento de las redes neuronales convolucionales, como una parte esencial dentro del Aprendizaje Profundo. - Elaborar el código lo más ajustado posible a nuestro caso, en el que sólo usamos dos modelos. - Realizar pruebas con imágenes de los datasets obtenidos, mejorando y depurándose para obtener unos resultados más precisos. - Desarrollar a través de Matlab App Designer una interfaz sencilla de utilizar. En esta se proporcionan múltiples opciones al usuario, como modificar los parámetros para entrenar a la red, seleccionar qué red entrenar y subir una foto para detectar la expresión. 6
- Una vez finalizada toda la aplicación se plantea la realización de pruebas (test) para asegurar el correcto funcionamiento de los desarrollos planteados. - Crear un repositorio en el que subir el código. Usaremos GitHub. 1.5 Estructura del trabajo El trabajo consta de los siguientes apéndices: - Introducción: En esta sección se tratan los antecedentes sobre las expresiones faciales y la inteligencia artificial, además de las motivaciones y los objetivos del desarrollo de la aplicación y el orden en el que se realiza todo el trabajo. - Redes neuronales convolucionales como técnica aplicada: Aquí se tratan las técnicas empleadas, dándole más importancia a la convolución, y los modelos utilizados. - Descripción de la aplicación: En este punto se explica cada parte de la aplicación con sumo detalle, junto con la explicación del DataSet y de las herramientas empleadas. - Resultados obtenidos: En esta sección se comentan los resultados que se han obtenido en cada fase junto con los errores que han surgido en todo el desarrollo de la aplicación. - Conclusiones y trabajo futuro: Aquí se llegan a las conclusiones obtenidas de todo el trabajo realizado y se proyecta una posible visión de futuras mejoras. - Anexos: Se incluye un anexo con el manual del usuario, para disponer de una guía de como descargar y utilizar la aplicación. 7
Capítulo 2 - Redes neuronales convolucionales como técnica aplicada Para la realización de este trabajo se han aplicado dos modelos de Redes Neuronales Convolucionales (Convolutional Neural Networks, CNN) concretamente AlexNet y SqueezeNet. Ambos modelos tienen su fundamento en la aplicación correcta de ciertas operaciones en dichas redes, tales como convolución, la función exponencial normalizada o métodos de optimización. Los conceptos teóricos que se exponen a continuación son tomados de Pajares y col. (2021), donde se puede encontrar una descripción más detallada de cada operación y modelo. En primer lugar se describen las operaciones básicas mencionadas y a continuación los dos modelos de redes mencionados. 2.1 Operaciones en redes neuronales convolucionales 2.1.1 Métodos de optimización La optimización consiste en ajustar la variable x para minimizar o maximizar la función f(x). Generalmente se opta por la minimización porque la maximización equivale a minimizar −f(x). La función que se va a minimizar o maximizar se denomina función objetivo o función criterio, similar a los pesos en una red neuronal. La función a minimizar, según Goodfellow y col. (2016), también se la conoce como función de coste, pérdida o error necesaria para propagar hacia atrás el error durante el entrenamiento. Estas funciones se llaman funciones de pérdida. El valor óptimo se denota como x* = arg min f(x). Al entrenar la red neuronal, los resultados previstos se comparan con los reales utilizando una función de pérdida diferenciable. Esta característica puede variar según 8
el tipo de red que se esté utilizando. Si todas las operaciones en la red son diferenciables, entonces la función de pérdida también será diferenciable. Sin embargo, algunas funciones de activación, como ReLU, no son diferenciables, por lo que la retropropagación requiere una aproximación de la derivada. La función de pérdida mide qué tan cerca está el modelo de las predicciones esperadas. El descenso de gradiente es un método común para encontrar el mínimo de esta función, similar a descender de una montaña para alcanzar el punto más bajo. La optimización basada en gradientes implica ajustar los pesos del modelo para minimizar la pérdida. Este ciclo de aprendizaje incluye reenviar datos, hacer predicciones, calcular pérdidas y retransmitir errores para ajustar las ponderaciones. Al ajustar los pesos, el modelo mejorará, que es en definitiva un proceso de aprendizaje. La derivada de una función en un punto indica su pendiente y ayuda a entender cómo un pequeño cambio en la entrada afecta la salida. Para minimizar una función, se utiliza el gradiente descendente, que implica desplazar los datos de entrada en la dirección opuesta a la derivada para reducir la función. En la figura 2.1 se muestra cómo el gradiente descendente se mueve hacia un mínimo. Así la función f(x) = ½ x^2 que se utiliza para ilustrar el proceso, posee derivada, por lo que hay ciertas consideraciones a tener en cuenta: - Para x < 0,f’(X) < 0 yfdisminuye hacia la derecha. - Para x > 0,f’(x) > 0 yfdisminuye hacia la izquierda. - Para x = 0 el gradiente se detiene puesto que f’(x) = 0. 9
Figura 2.1 Gradiente descendente 2.1.2 Convolución La convolución implica dos funciones con valores reales como argumento. Para ilustrar el concepto considérese un escenario con una fuente de luz variable y un sensor que registra la intensidad en distintas posiciones xen el tiempo t, se busca obtener una señal más limpia mediante el promedio de múltiples lecturas. Considerando el ruido en la captura de la señal, se opta por un promedio ponderado para obtener una señal más limpia, dando más importancia a las lecturas más recientes. Esto se logra mediante una función de promediado ponderado w(a), donde el parámetro a representa el alejamiento temporal de la medida. La operación de promediado ponderado aplicada en cada instante de tiempo t, resulta en una nueva función promediada. (1) 𝑠(𝑡)=∫𝑥(𝑎)𝑤(𝑡−𝑎)𝑑𝑎 Esta operación se denomina convolución y se denota como sigue: 10
(2) 𝑠(𝑡)=𝑠∫(𝑥*𝑤)(𝑡) Es crucial destacar que la función debe ser una densidad de probabilidad para asegurar un promedio adecuado. Además, es necesario que la función sea cero para todos los argumentos negativos, con el propósito de evitar la toma de valores futuros, algo que no es materialmente posible. Dentro del contexto de las CNN, el primer argumento xen la operación de convolución se identifica como la entrada (input), mientras que el segundo, w, se denomina núcleo de convolución (kernel). La salida se denomina comúnmente como un mapa de características (feature map). Desde una perspectiva computacional, utilizando el ejemplo de la fuente de luz, las mediciones son discretas, realizadas en intervalos de tiempo específicos, como cada segundo. Dado que el tiempo tsólo puede tomar valores enteros, y considerando que xywse definen únicamente en el tiempo tcon valores enteros, la convolución discreta se define de la siguiente manera. (3) 𝑠(𝑡)=(𝑥*𝑤)(𝑡)=𝑎=−∞ ∞ ∑ 𝑥(𝑎)𝑤(𝑡−𝑎) En el ámbito del aprendizaje automático, la entrada se representa como un vector o matriz multidimensional de datos, mientras que el núcleo es típicamente un vector o matriz multidimensional de parámetros ajustados durante el proceso de aprendizaje. Estas estructuras multidimensionales se denominan tensores. Dado que cada elemento de la entrada y del núcleo se almacena por separado, los valores que no pertenecen a estos elementos se consideran nulos, lo que, en la práctica, resulta en una suma finita de valores en un número finito de elementos. Además, las convoluciones se llevan a cabo sobre más de un eje simultáneamente, como en el caso de las imágenes Iutilizadas como entradas, que son estructuras bidimensionales y requieren ser procesadas con un núcleo bidimensional K. 11
(4) 𝑆(𝑖,𝑗)=(𝐼*𝐾)(𝑖,𝑗)=𝑚 ∑𝑛 ∑𝐼(𝑚,𝑛)𝐾(𝑖−𝑚,𝑗−𝑛) La convolución es conmutativa, lo que significa que la expresión anterior se puede escribir de manera similar a la siguiente, lo que provoca cambios más pequeños en los valores de myny, por lo tanto, es más eficiente desde el punto de vista de la implementación. (5) 𝑆(𝑖,𝑗)=(𝐾*𝐼)(𝑖,𝑗)=𝑚 ∑𝑛 ∑𝐼(𝑖−𝑚,𝑗−𝑛)𝐾(𝑚,𝑛) A veces, los términos correlación cruzada y convolución se usan indistintamente en el ámbito especializado, generando confusión. En el contexto del aprendizaje automático, el algoritmo estima los valores del núcleo en ambos casos. La figura 2.2 ilustra un ejemplo de convolución con el núcleo Kaplicado sobre un tensor 2-D, que puede representar una imagen I. La convolución se representa con solapamiento total del núcleo resultando en una imagen de menor dimensión, pasando de 6×7 a 4×5. Para mantener la dimensión, se puede utilizar el relleno con ceros (zero-padding), añadiendo dos filas (arriba y abajo) y dos columnas (izquierda y derecha) a la imagen original antes de aplicar el núcleo. Este proceso, llamado "same", se diferencia de la convolución sin relleno con ceros, denominada "valid". Por otra parte, en las convoluciones, el campo receptivo se define como la región de entrada que contribuye a la salida generada por el filtro. En la figura 2.2 se muestran sendos campos receptivos de la imagen Ique contribuyen a las salidas PyQ generadas por el filtro K. 12
Considerando las estrategias 1 y 2 para reducir el número de parámetros manteniendo la precisión, y la estrategia 3 para mejorar la precisión con un número limitado de parámetros, Iandola y col (2016) proponen el módulo fire. Este consta de una capa de convolución comprimida (squeeze) con filtros de dimensión 1×1, que alimenta a una capa de expansión (expand) con una combinación de filtros de convolución de dimensiones 1×1 y 3×3. En este módulo, hay tres parámetros ajustables: s1 (número de filtros en la capa squeeze, todos de dimensión 1×1), e1 (número de filtros en la capa expandida, de dimensión 1×1) y e3 (número de filtros en la capa expandida, de dimensión 3×3). Para cumplir con la estrategia 2, se impone la restricción s1 < e1 + e3. Aunque estos módulos tienen un diseño diferente, comparten una filosofía similar a las capas inception mencionadas previamente. La salida de las capas comprimida y expandida se concatena, y el resultado se alimenta a unidades de activación ReLU respectivas. Figura 2.5 Módulo fire 19
Los módulos fire generan arquitecturas más complejas, como la propuesta en Iandola y col (2016), que consta de 10 capas, siendo 8 de ellas módulos fire. La referencia proporciona métodos para diseñar redes con estos módulos, estableciendo un conjunto de meta-parámetros de alto nivel para todos los módulos en la CNN. Se define "be" (base) como el número de filtros en la capa expandida del primer módulo fire en la CNN. Después de cada "nf" módulos fire, el número de filtros en la capa expandida se incrementa por "de". Específicamente, para el módulo fire i, el número de filtros en esta es calculado como "be + i * de". Dado que esta capa incluye filtros de dimensiones 1×1 y 3×3, el número de cada tipo se determina según un porcentaje "pe" establecido para cada dimensión. El número de filtros en la capa comprimida, "si", se establece en función del parámetro "ps", mantenido constante en un rango de [0,1] para todos los módulos, es decir, "si = psei". En un estudio comparativo utilizando imágenes de la base de datos ImageNet (2024), Iandola y col determinan que los mejores resultados se obtienen con "ps = 0.75" y "pe = 50%". 20
Capítulo 3 - Descripción de la aplicación En este capítulo se exponen y describen los detalles y conceptos sobre la aplicación desarrollada, cuya interfaz se muestra en el esquema de la figura 3.1. Por lo tanto, se describen las funcionalidades y las opciones que se pueden modificar para las etapas de entrenamiento y de identificación, sobre los datasets utilizados y sobre las herramientas utilizadas durante el desarrollo del proyecto. 3.1 Etapa de entrenamiento Figura 3.1 Interfaz para el entrenamiento de los modelos de red El usuario que utilice la aplicación podrá entrenar la red neuronal modificando ciertos parámetros que influyen en los resultados obtenidos, estando el DataSet ya 21
preseleccionado. El número de imágenes que contenga este DataSet juega un papel importante, ya que cuanto mayor sea el número, mejor será el aprendizaje de la red al haber mayor variedad y prepararse ante imágenes con condiciones distintas a las del DataSet. La figura 3.1 muestra la interfaz correspondiente a la sección de entrenamiento de la aplicación. Para llevar a cabo el entrenamiento, el usuario puede continuar con los valores por defecto y pulsar directamente en el botón de entrenar o bien modificar los parámetros. De cualquier manera, se usará en todos los casos el mismo Dataset ya mencionado y descrito más adelante. 3.1.1 Selección de la red neuronal Para empezar, se debe seleccionar el modelo de red neuronal con el que se realizará el entrenamiento, habiendo dos opciones posibles de rendimiento muy similar como se verá en la sección de resultados obtenidos. Estas dos opciones son AlexNet y SqueezeNet. Como ambos modelos solo procesan imágenes de entrada de dimensiones 227x227x3, es muy importante que las imágenes que se utilicen, tanto en el entrenamiento como en la clasificación, se redimensionen a este tamaño como requisito imprescindible para el procesamiento. 3.1.2 Parámetros de entrenamiento Los parámetros que se pueden modificar en la aplicación para realizar el entrenamiento son los que se describen a continuación: - MiniBatchSize El parámetro MiniBatchSize determina el tamaño de la muestra para cada lote durante el entrenamiento. Este valor afecta al número total de iteraciones necesarias 22
para entrenar todas las imágenes en el conjunto de datos. Cuanto mayor sea el tamaño de la muestra en cada lote, menos iteraciones serán necesarias para completar el proceso de entrenamiento. Un lote se define como el número de muestras, en este caso imágenes, que procesa la red antes de actualizar los pesos. - MaxEpochs El parámetro MaxEpochs es importante al entrenar un modelo porque determina el número máximo de iteraciones que se realizan durante el proceso. Esta variable juega un papel importante en la convergencia del modelo ya que cada iteración requiere ajustar los pesos del modelo en función de los datos del entrenamiento. Por otro lado, el tamaño del lote (MiniBatchSize) también afecta a la eficiencia del entrenamiento, el cual al ser correcto puede ayudar a agilizar el proceso de optimización y evitar problemas como el uso de demasiadas herramientas o la falta de ellas. Al considerar estos dos parámetros juntos, se puede calcular la cantidad total de muestras que se utilizarán durante todo el proceso de actualización de los pesos de la red. Simplemente se multiplica el valor de MaxEpochs por el tamaño del lote (MiniBatchSize). Este producto da una idea de los volúmenes de entrenamiento y ayuda a ajustar estos valores en función de la disponibilidad de datos. Para lograr eficiencia y eficacia en el ajuste, es importante encontrar un equilibrio entre el número de épocas y el tamaño del lote. En la práctica, es importante adaptar estos valores a la naturaleza del conjunto de datos y a las limitaciones computacionales. Por ejemplo, si se tiene un conjunto de datos grande, es posible que se necesite aumentar la cantidad de épocas para permitir un entrenamiento del modelo más completo. De manera similar, los lotes de mayor tamaño pueden acelerar el proceso de ajuste, pero también pueden requerir más memoria y potencia de procesamiento. Por tanto, la selección de estos 23
parámetros debe basarse en un análisis exhaustivo de las características de los datos y recursos disponibles. - InitialLearnRate El parámetro InitialLearnRate determina la tasa de aprendizaje inicial, es decir, la rapidez con la que la red neuronal ajusta sus parámetros en cada etapa de aprendizaje. Este es un factor fundamental porque su escala afecta directamente a la efectividad y precisión del entrenamiento. Cuando InitialLearnRate es alto, el aprendizaje se produce rápidamente, lo que significa que habrá ajustes más significativos en los parámetros de la red en cada iteración. Sin embargo, esta tasa puede ser menos precisa porque cambios demasiado grandes pueden dificultar que el modelo alcance la solución óptima. Por otro lado, si el valor inicial es bajo, el proceso de aprendizaje será más lento y el ajuste de parámetros será más sutil. Si bien esto puede proporcionar una mayor precisión, también puede aumentar significativamente el tiempo de entrenamiento. Al buscar el valor óptimo para este parámetro, es importante lograr un equilibrio entre la eficiencia y la precisión del aprendizaje. Este compromiso puede variar significativamente según el modelo de red neuronal y las características del conjunto de datos. Por lo tanto, es importante realizar los ajustes adecuados según las necesidades específicas de cada escenario de aplicación para optimizar tanto la velocidad como la precisión del proceso de aprendizaje. 3.1.3 Finalización del entrenamiento Con el modelo y los parámetros ya seleccionados se puede proceder al entrenamiento, que en función de estos y del número de imágenes que contenga el dataset, demorará una mayor o menor cantidad de tiempo. 24
3.2 Etapa de identificación La red neuronal una vez entrenada, permite introducir una imagen de la cara de una persona en la aplicación para que esta indique de qué expresión facial se trata, dentro de las entrenadas, y con qué porcentaje cree que la persona de esa imagen tiene esa expresión. Para que la red neuronal identifique una imagen primero debemos seleccionarla dentro de la aplicación. Para hacer esto simplemente se debe pulsar el botón de “Seleccionar imagen” que se muestra en la figura 3.2 y elegir la imagen, que debe estar en formato .png o .jpg. Figura 3.2 Interfaz para la identificación de las imágenes Una vez se tenga seleccionada la imagen que se quiere identificar será necesario pulsar el botón de “Comenzar” para iniciar la fase de identificación. Al pulsarlo, la aplicación se encargará de mostrarla, tal y como aparece en la figura 3.3, 25
redimensionar la imagen al tamaño de entrada que admiten los modelos y proceder a su identificación. Figura 3.3 Interfaz para la identificación con una imagen seleccionada Tras la identificación de la imagen aparecerá una ventana, como la que se puede ver en la figura 3.4, con la expresión seleccionada por el modelo y la certeza de que sea esa expresión, en este caso es feliz con un 99.5%. Figura 3.4 Resultado de la identificación 26
3.3 DataSet El DataSet utilizado para realizar el proyecto se compone de 184 imágenes, 4 expresiones faciales y 46 imágenes para cada expresión facial. Las expresiones faciales que se han elegido han sido enfadado, feliz, neutro y sorpresa. Figura 3.5 Muestra de imágenes del DataSet Este DataSet ha sido regenerado y reestructurado a partir del original seleccionando y clasificando de forma cuidadosa cada imágen de un DataSet de caras sintéticas de la página de Kaggle (2024), debido a que no encontramos ningún DataSet existente de expresiones faciales que nos satisficiera y estuviesen ya clasificadas por expresiones. El enlace al DataSet mencionado es el siguiente: https://www.kaggle.com/datasets/sujaykapadnis/emotion-recognition-dataset/data. Este dataset está disponible bajo licencia Creative Commons CC BY-NC-SA 4.0, y por tanto con permiso de uso para trabajos docentes como el presente Para dividir las imágenes entre las usadas para el entrenamiento y para la validación se ha utilizado la función “splitEachLabel” de Matlab de tal forma que el 70% de las imágenes se asignen al entrenamiento y el 30% restante a la validación, todo esto de forma aleatoria y distinta cada vez que se entrena el modelo ya que esta 27
misma función admite el parámetro shuffle, para mezclar los datos de la forma indicada. Todas las imágenes utilizadas son de caras en las que aparece una única persona mirando de frente a la cámara. En la figura 3.6 se muestra una parte representativa del DataSet original del cual se ha seleccionado nuestro DataSet. Figura 3.6 Imágenes del DataSet original de Kaggle sin seleccionar ni clasificar En la figura 3.7 se muestra el fragmento de código en lenguaje Matlab y la ruta de datos que se encarga de seleccionar el DataSet, y que habría que modificar para utilizar la aplicación en otro ordenador. Figura 3.7 Fragmento del código en el que se elige la ruta del DataSet 28
lo ideal sería terminar alcanzando un valor de pérdida de 0 que se podría conseguir si se lograra una precisión del 100%. Para obtener la figura 4.5 se ha realizado el entrenamiento utilizando SqueezeNet con los mismo parámetros por defecto que en el caso anterior. Figura 4.5 Informe del proceso de entrenamiento de SqueezeNet En el caso de SqueezeNet se han vuelto a usar los parámetros por defecto, es decir, MiniBatchSize,MaxEpochs eInitialLearnRate con los mismos valores que AlexNet, así se pueden observar las diferencias entre ambos modelos. La duración del entrenamiento de este modelo ha sido de 15 segundos, un 36,36% más elevado que en el caso de AlexNet con 11 segundos, siendo en esta situación este último modelo el más rápido. No obstante, al tener una mayor duración de entrenamiento, si nos fijamos en la curva de aprendizaje se observa que SqueezeNet es más precisa llegando a un porcentaje de precisión (Validation Accuracy) del 94.64%. 35
Analizando en profundidad la curva de aprendizaje se puede observar que la precisión comienza siendo muy baja, procediendo a elevarse rápidamente por encima del 50% justo antes de terminar la primera época. De esta manera, sigue subiendo progresivamente hasta por encima del 80% en la sexta época, a partir de la cual se mantiene en porcentajes en torno al 80% y el 100%, concluyendo el entrenamiento con un excelente porcentaje de precisión (94.64%). Respecto a la gráfica de la función de pérdida, la evolución que sigue en términos de variación es muy similar a la curva de aprendizaje pero a la inversa, comenzando con valores muy elevados y decayendo rápidamente para mantenerse en valores relativamente bajos. A partir de la iteración 200 se mantiene estable. Tomando en cuenta estas dos gráficas podemos asegurar que SqueezeNet tiene una elevada precisión, sin embargo, es muy importante tener en cuenta la diversidad de expresiones faciales que poseen los seres humanos. Ante tantas variaciones, si no se entrena correctamente al modelo con el número suficiente de imágenes y de expresiones lo más probable es que los resultados no sean tan precisos. Una característica importante que se observa en ambos modelos, radica en el hecho de que tanto las gráficas correspondientes al entrenamiento y validación en accuracy yloss, evolucionan sin observarse divergencias entre ellas, lo cual es garantía de que no se está produciendo ni sobreajustes ni infraajustes de los pesos. Las figuras 4.6 y 4.7 ofrecen una visualización detallada de los pesos que las redes AlexNet y SqueezeNet, respectivamente, han aprendido en su primera capa convolucional. En esta etapa inicial, conocida como conv1 (véanse las figuras 4.1 y 4.2), la red emplea 96 filtros para el primer caso y 64 para el segundo, cada uno asociado a los tres canales de color (rojo, verde y azul), lo que se traduce en una representación visual a todo color en la figura. Estos filtros son esenciales para detectar características específicas en las imágenes de entrada. 36
Figura 4.6 Pesos de la primera capa de AlexNet En el campo de las redes neuronales convolucionales, la interpretación de estos resultados se basa en un proceso de convolución en el que cada filtro se mueve a lo largo de la imagen original para extraer características relevantes. Los elementos visuales que destacan con mayor intensidad en la representación gráfica, como los colores más brillantes, indican regiones de la imagen donde estos filtros están más activos, lo que indica la presencia de características importantes. Por otro lado, las áreas más oscuras de la imagen representan valores de filtros bajos o nulos, lo que significa que esas regiones de la imagen no han activado en un grado significativo esos filtros. Por lo tanto, estas áreas pueden contener información menos importante o simplemente ser un fondo o un área vacía de la imagen. Además, las representaciones con tonos intermedios en la figura representan diferentes activaciones en los filtros, lo que sugiere la presencia de características visuales menos distintivas pero aún importantes. Este rango intermedio de activación 37
puede ser importante para capturar detalles sutiles o contextuales de la información visual procesada por la red neuronal. Figura 4.7 Pesos de la primera capa de SqueezeNet 4.2 Fase de identificación Una vez se ha entrenado la red, lo primero que se observará será el resultado de la clasificación de las imágenes seleccionadas para el test. Este resultado se mostrará en forma de Matriz de Confusión, como las que pueden observarse en las figuras 4.8 y 4.9. Las matrices de confusión son una herramienta que se suele utilizar en el campo de la inteligencia artificial para representar los resultados, ya que nos ayuda a verlos de forma clara. Las matrices de confusión están estructuradas de manera que en cada fila se ve la clase real a la que pertenece cada imagen y en las columnas la clase que ha predicho la red neuronal para cada imagen. Además, a la derecha se 38
muestra el porcentaje de imágenes que se han predicho bien en cada clase y debajo el porcentaje de imágenes que pertenecen a la clase que se predijo. Figura 4.8 Matriz de confusión de AlexNet Usando la figura 4.8 se explica cómo se leería la matriz. En ella puede observarse que, para hacer el test, se han seleccionado 15 imágenes de enfadado, 15 imágenes de feliz, 14 imágenes de neutro y 12 de sorpresa. De las 15 imágenes de enfadado 11 se han predicho de forma correcta, 2 como feliz y otras 2 como sorpresa, lo que deja un porcentaje de acierto del 73.3% para imágenes de enfadado. En el caso de feliz 12 se han predicho bien, 1 como enfadado y 2 como neutro, de tal manera que el porcentaje de acierto es del 80%. Con las imágenes de neutro 12 se han predicho bien y 2 como enfadado, obteniendo un 85.7% de acierto. Y en sorpresa las 12 imágenes se han predicho bien, lo que nos deja con un 100% de acierto. Además, la tabla de la parte inferior de la figura indica que el 78.6% de las imágenes que se predijeron como enfadado eran imágenes reales de enfadado, el 85.7% de las predichas como feliz eran de feliz, el 85.7% de las predichas como neutro eran de neutro y el 85.7% de las 39
predichas como sorpresa eran de sorpresa. De esta forma puede verse en una sola imágen, y de manera rápida, que el modelo de AlexNet proporciona unos resultados aceptables, aunque no perfectos. En la figura 4.9 se observa la matriz de confusión correspondiente al modelo de SqueezeNet. En este caso los resultados obtenidos han sido mejores que los de AlexNet, ya que ha habido un número menor de imágenes predichas de forma incorrecta. Con este modelo, el porcentaje de acierto para enfadado ha sido del 86.7%, al fallar en dos imágenes, y para feliz, neutro y sorpresa ha sido del 92.9%, al fallar en solo una imágen. Figura 4.9 Matriz de confusión de SqueezeNet Por otra parte, se han tomado cuatro imágenes, una para cada expresión facial, con el fin de comparar la precisión de cada modelo y poder analizarlo: 40
●Enfadado Figura 4.10 Resultados obtenidos para AlexNet y SqueezeNet respectivamente Tras la identificación correcta de la expresión facial de enfado, podemos observar que la probabilidad de acierto es del 92% con SqueezeNet, un resultado bastante bueno. No obstante, en el caso de AlexNet la probabilidad es del 69.8%, bastante por debajo del 90%. Esto puede deberse a que la expresión es fácilmente confundible con la de feliz, sobre todo por los dientes. Una posible mejora de precisión sería añadir más imágenes del DataSet para que elimine confusiones entre enfadado y feliz. ●Feliz Figura 4.11 Resultados obtenidos para AlexNet y SqueezeNet respectivamente La expresión facial feliz es detectada correctamente por ambos modelos y con buenas probabilidades de acierto. Para el caso de AlexNet la probabilidad es del 41
87.1% mientras que en el segundo modelo supera el 95%. De nuevo, SqueezeNet obtiene mejores resultados, un patrón que se repite en la mayoría de los casos. ●Neutra Figura 4.12 Resultados obtenidos para AlexNet y SqueezeNet respectivamente Tras la identificación correcta de la expresión facial neutra en ambos modelos, se rompe el patrón, rozando AlexNet el 100% de probabilidad de acierto mientras que SqueezeNet obtiene un 89%. A pesar de haber un 10% de diferencia, ambas probabilidades son muy buenas, siendo AlexNet la mejor opción. ●Sorpresa Figura 4.13 Resultados obtenidos para AlexNet y SqueezeNet respectivamente Ambos modelos identifican correctamente y con la misma probabilidad de acierto que la expresión facial es la de sorpresa. Esta probabilidad es muy elevada (99.9%) situándose por encima del 90%, aunque convendría incluir más imágenes en el DataSet ya que puede haber pequeñas confusiones con las expresiones de enfado y felicidad al mostrarse los dientes en ambos casos. 42
4.3 Problemas conocidos Se han detectado algunos errores frecuentes en la fase de clasificación que pueden suponer un problema a la hora de identificar una expresión sobre una imagen: - Expresión facial que no ha sido incluida en el entrenamiento: si se pretende identificar una expresión facial no entrenada, como tristeza, el resultado que se mostrará será de alguna de las expresiones que se han incluido y, por lo tanto, incorrecto. Figura 4.14 Ejemplo de imágen de expresión facial no entrenada - Falta de calidad en la imagen: En este caso, la aplicación podría no detectar ninguna cara, lo cual sería un problema ya que haría inviable la identificación de su correspondiente expresión facial. - Imágen con varias caras: Al haber varias caras, la detección de estas no funciona de manera correcta y no termina identificando bien, por lo que es mejor evitar este tipo de imágenes. 43
Capítulo 5 - Conclusiones y trabajo futuro 5.1 Conclusiones El uso de CNNs, en particular AlexNet y SqueezeNet, para la identificación de expresiones faciales mediante el aprendizaje profundo en Matlab ofrece una capacidad excepcional para detectar y clasificar expresiones faciales con una precisión aceptable. Esto abre oportunidades en nuevas áreas como recursos humanos, psicología, la atención médica y la interacción humano-computadora. Gracias a la implementación de estas redes en Matlab, se ha conseguido desarrollar una aplicación intuitiva y funcional que permite comprender y analizar el estado emocional de las personas a partir de imágenes faciales. Además, se ha mejorado la precisión y el rendimiento del sistema gracias a la capacidad de ajustar parámetros y entrenar modelos con DataSets adecuados, haciéndose aplicable en entornos empresariales y de investigación. Por todo ello, el uso de redes neuronales como SqueezeNet y AlexNet para identificar expresiones faciales resulta ser una poderosa herramienta para comprender y analizar el comportamiento humano, con un gran potencial de mejora y que lo hace aplicable a muchos ámbitos, destacando el empresarial pues es el enfoque principal del trabajo. 5.2 Trabajo futuro En un futuro la aplicación podría mejorarse de diversas maneras: - Añadir más imágenes del DataSet o incluso buscar un DataSet más grande. - Permitir la detección de expresiones faciales a través de vídeos para que las empresas puedan usarlas al momento con sus propias cámaras. 44
- Experiment and learn how to use Matlab to develop the application and be able to utilize pre-trained models, such as AlexNet and SqueezeNet, having previously studied the operation of convolutional neural networks as an essential part of Deep Learning. - Develop the code as closely as possible to our case, in which we only use two models. - Conduct tests with images from the obtained datasets, improving and refining them to obtain more precise results. - Develop a user-friendly interface through Matlab App Designer. This provides multiple options to the user, such as modifying parameters to train the network, selecting which network to train, and uploading a photo to detect the expression. - Once the entire application is completed, testing (testing) is planned to ensure the correct operation of the proposed developments. - Create a repository to upload the code. We will use GitHub. 51
Conclusions and future work Conclusions The use of CNNs, particularly AlexNet and SqueezeNet, for facial expression identification through deep learning in Matlab offers exceptional capability to detect and classify facial expressions with acceptable accuracy. This opens opportunities in new areas such as human resources, psychology, healthcare, and human-computer interaction. Thanks to the implementation of these networks in Matlab, an intuitive and functional application has been developed, allowing understanding and analysis of individuals' emotional states from facial images. Furthermore, the system's accuracy and performance have been enhanced through parameter tuning and model training with appropriate datasets, making it applicable in both business and research environments. Therefore, the utilization of neural networks like SqueezeNet and AlexNet for facial expression identification proves to be a powerful tool for understanding and analyzing human behavior, with significant potential for improvement and applicability across various domains, particularly in the business realm, which is the primary focus of this work. Future Work In the future, the application could be enhanced in several ways: - Adding more images to the dataset or even seeking a larger dataset. - Allowing facial expression detection through videos so that companies can use them in real-time with their own cameras. 52
- Including more facial expressions, as currently only four are considered from the dataset. It's worth mentioning that the original images in this set were reorganized and restructured. - Adding more variables for modification, thus allowing for greater possibilities in training. 53
Contribuciones Personales Jesús Hernández Guillamot - Aportar ideas sobre las que realizar el Trabajo de Fin de Grado y llegar a un consenso con mi compañero. - Establecer los objetivos a alcanzar con la aplicación junto a mi compañero. - Búsqueda de un DataSet que cumpla con los requisitos. - Clasificación de las imágenes del DataSet en expresiones faciales de enfado y neutra. - Depuración de imágenes que no fueran detectables durante el entrenamiento, procediendo con su eliminación. - Familiarización con el entorno Matlab y búsqueda de tutoriales para aprender sobre el lenguaje. - Estudio e investigación sobre el funcionamiento de las redes neuronales, sobre todo de AlexNet y SqueezeNet. - Entender el código guía para desarrollar de la mejor manera posible la aplicación junto con mi compañero. - Aportación de ideas para el diseño de la aplicación. - Modificación del DataSet para que la precisión fuese mayor en función de lo que me comentaba mi compañero sobre el entrenamiento y la identificación de imágenes. - Creación y gestión del Google Drive para trabajar en equipo junto con mi compañero. - Elección de la metodología a emplear. - Reparto y organización de las tareas a realizar. - Aclarar las dudas junto a mi compañero y en caso de no solucionarse aclararlas con el tutor. 54
- Repasar las partes de la memoria realizadas por mi compañero para corregirlas llegando a un consenso. - Realización de los apartados iniciales previos al índice a excepción del índice de figuras y tablas. - Realización del apartado 1.1.1 relativo a los antecedentes de las expresiones faciales. - Realización del apartado 1.3 en el que se detallan los objetivos a alcanzar con el proyecto. - Realización del apartado 1.4 donde se menciona el plan de trabajo. - Realización del apartado 2.1.1 relativo a los métodos de optimización como operaciones de redes. - Realización del apartado 2.1.3 relativo a softmax como operación de redes neuronales. - Realización del apartado 2.2.1 donde se explica el funcionamiento de AlexNet con todas sus características. - Realización del apartado 3.1 en el que se explica cómo realizar el entrenamiento del modelo. - Realización del apartado 3.4 sobre las herramientas utilizadas. - Realización de la mitad inicial del apartado 4.1 sobre la explicación de la fase de entrenamiento. - Realización de la segunda mitad del apartado 4.2 sobre la explicación de la fase de identificación de la expresión facial. - Realización del apartado 4.3 donde se comentan los problemas conocidos en la fase de clasificación. - Realización del apartado 5.1 sobre las conclusiones obtenidas. - Realización del apartado de la introducción en inglés. - Realización del manual del usuario junto con mi compañero. 55
- Realización del apartado de contribuciones personales junto con mi compañero. 56
Pablo Matarranz Burgos - Aportar ideas sobre las que realizar el Trabajo de Fin de Grado y llegar a un consenso con mi compañero. - Establecer los objetivos a alcanzar con la aplicación junto a mi compañero. - Búsqueda de un DataSet que cumpla con los requisitos. - Clasificación de las imágenes del DataSet en expresiones faciales de feliz y sorpresa. - Familiarización con el entorno Matlab y búsqueda de tutoriales para aprender sobre el lenguaje. - Estudio e investigación sobre el funcionamiento de las redes neuronales, sobre todo de AlexNet y SqueezeNet. - Entender el código guía para desarrollar de la mejor manera posible la aplicación junto con mi compañero. - Pensar y sugerir ideas para el diseño de la aplicación. - Elaborar el código para implementar nuestras ideas. - Crear funciones para implementarlas en el código. - Pensar en una interfaz de usuario para que sea más sencillo utilizar la aplicación. - Crear la interfaz de usuario usando Matlab. - Repasar las partes de la memoria realizadas por mi compañero para corregirlas llegando a un consenso. - Reparto y organización de las tareas a realizar. - Aclarar las dudas junto a mi compañero y en caso de no solucionarse aclararlas con el tutor. - Realización del índice de figuras y tablas. - Realización de varios entrenamientos con AlexNet y SqueezeNet utilizando diferentes configuraciones para encontrar la óptima. 57
- Realización del apartado 1.1.2 relativo a los antecedentes de la inteligencia artificial. - Realización del apartado 1.2 en el que se explican las motivaciones que nos han llevado a realizar este trabajo. - Realización del apartado 1.5 donde se expone la estructura del trabajo. - Realización del apartado 2.1.2 relativo a la convolución aplicada a la inteligencia artificial. - Realización del apartado 2.2.2 donde se explica el funcionamiento de SqueezeNet y sus características. - Realización del apartado 3.2 en el que se explica cómo se realiza la etapa de identificación. - Realización del apartado 3.3 en el que se detalla el contenido, el origen y la elaboración del DataSet utilizado. - Realización de la segunda mitad del apartado 4.1 sobre la explicación de la fase de entrenamiento. - Realización de la primera mitad del apartado 4.2 sobre la explicación de la fase de identificación de la expresión facial. - Realización del apartado 5.2 sobre el trabajo futuro del proyecto. - Realización del apartado de conclusiones y trabajo futuro en inglés. - Realización del manual del usuario junto con mi compañero. - Realización de capturas de pantalla que se han utilizado de manera ilustrativa en el trabajo. - Creación del repositorio de GitHub en el que se ha subido el código realizado durante el proyecto. - Realización del apartado de contribuciones personales junto con mi compañero. 58
- Añadir a la bibliografía las fuentes utilizadas durante la realización del proyecto con su correcta citación. 59
Bibliografía 1. Rebollo Delgado, L. (2023). Inteligencia artificial y derechos fundamentales. Madrid: Dykinson, S.L. Disponible en: https://www-digitaliapublishing-com.bucm.idm.oclc.org/a/128997 2. Rodríguez, H. (2023). Así interpreta la inteligencia artificial nuestros estados de ánimo. Disponible en: https://www.nationalgeographic.com.es/cienc ia/asi-interpreta-la-inteligencia-artificial-nuestros-estados-de-animo-_1630 4[Consultado 27-02-2024]. 3. Rodríguez, H. (2022). Así expresa tu cara los cambios en tus emociones. Disponible en: https://www.nationalgeographic.com.es/ciencia/asi-exp resa-tu-cara-cambios-tus-emociones_13803 [Consultado 27-02-2024]. 4. Arenschield, L. (2019). The 17 different ways your face conveys happiness. Disponible en: https://ece.osu.edu/news/2019/01/17-different-ways-your-f ace-conveys-happiness. [Consultado 27-02-2024]. 5. Noor Khan, A. (2021). Deep learning framework for subject-independent emotion detection using wireless signals. Disponible en: https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0242946. [Consultado 27-02-2024]. 6. Pajares, G., Herrera, P.J., Besada, E. (2021). Aprendizaje Profundo. RC-Libros, Madrid 7. ImageNet. (2024). Disponible en: http://www.image-net.org (Accedido Marzo 2024). 8. Russakovsky, O., Deng, J., Su, H., Krause, J., Satheesh, S., Ma, S. Huang, Z., Karpathy, A., Khosla, A., Bernstein, M., Berg, A.C., Fei-Fei, L. (2015). ImageNet Large Scale Visual Recognition Challenge. International Journal of Computer Vision (IJCV). 115(3), pp. 211–252. 60