Proyecto IA2
Proyecto IA2
convolucionales profundas
INTEGRANTES
Bonilla Juan José
Paredes Damian
Sabando José
Santana Steven
Urdanigo Yandri
Zambrano Saltos Isaac
In [8]:
In [6]:
#Plot es el método que nos permitirá representar mediante gráficos, los valores de exac
titud y pérdidas
def plot_model_history(model_history):
"""
Plot Accuracy and Loss curves given the model_history
"""
fig, axs = plt.subplots(1,2,figsize=(15,5))
# summarize history for accuracy
axs[0].plot(range(1,len(model_history.history['acc'])+1),model_history.history['ac
c'])
axs[0].plot(range(1,len(model_history.history['val_acc'])+1),model_history.history[
'val_acc'])
axs[0].set_title('Model Accuracy')
axs[0].set_ylabel('Accuracy')
axs[0].set_xlabel('Epoch')
axs[0].set_xticks(np.arange(1,len(model_history.history['acc'])+1),len(model_histor
y.history['acc'])/10)
axs[0].legend(['train', 'val'], loc='best')
# summarize history for loss
axs[1].plot(range(1,len(model_history.history['loss'])+1),model_history.history['lo
ss'])
axs[1].plot(range(1,len(model_history.history['val_loss'])+1),model_history.history
['val_loss'])
axs[1].set_title('Model Loss')
axs[1].set_ylabel('Loss')
axs[1].set_xlabel('Epoch')
axs[1].set_xticks(np.arange(1,len(model_history.history['loss'])+1),len(model_histo
ry.history['loss'])/10)
axs[1].legend(['train', 'val'], loc='best')
fig.savefig('plot.png')
plt.show()
In [12]:
num_train = 28709
num_val = 7178
batch_size = 64
num_epoch = 50
train_datagen = ImageDataGenerator(rescale=1./255)
val_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(48,48),
batch_size=batch_size,
color_mode="grayscale",
class_mode='categorical')
validation_generator = val_datagen.flow_from_directory(
val_dir,
target_size=(48,48),
batch_size=batch_size,
color_mode="grayscale",
class_mode='categorical')
# Creamos el modelo
model = Sequential()
model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(7, activation='softmax'))
model_info = model.fit_generator(
train_generator,
steps_per_epoch=num_train // batch_size,
epochs=num_epoch,
validation_data=validation_generator,
validation_steps=num_val // batch_size)
plot_model_history(model_info)
model.save_weights('model.h5')
# Las emociones se mostrarán en el área identificada como cara (rostro) desde la transm
isión de la cámara web.
elif mode == "display":
model.load_weights('model.h5')
break
#Carga archivo con los valores delimitadores de un rostro
facecasc = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = facecasc.detectMultiScale(gray,scaleFactor=1.3, minNeighbors=5)
if len(faces)>0:
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y-50), (x+w, y+h+10), (255, 0, 0), 2)
roi_gray = gray[y:y + h, x:x + w]
cropped_img = np.expand_dims(np.expand_dims(cv2.resize(roi_gray, (48, 4
8)), -1), 0)
prediction = model.predict(cropped_img)
maxindex = int(np.argmax(prediction))
cv2.putText(frame, emotion_dict[maxindex], (x+20, y-60), cv2.FONT_HERSH
EY_SIMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA)
cv2.putText(frame, 'Es de un humano el rostro', (10, 1* 20 + 20), cv2.F
ONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)
else :
cv2.putText(frame, 'No se detecta rostro humano', (10, 1* 20 + 20), cv2.FON
T_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)
Antecedentes
Una de las principales aplicaciones actuales de inteligencia artificial utilizando redes neuronales es el
reconocimiento de rostros en fotos y videos. La mayoría de las técnicas procesan datos visuales y buscan
patrones generales presentes en rostros humanos. El reconocimiento de rostros puede ser utilizado con
fines de vigilancia por parte de los agentes de la ley, así como en la gestión de multitudes. Otro actual
Objetivo de la investigación
Emociones humanas
(i) Krizhevsky y Hinton [9] ofrecen una publicación innovadora sobre la clasificación automática de imágenes
en general. Este trabajo muestra una red neuronal profunda que se asemeja a la funcionalidad de la corteza
visual humana. Utilizando una colección etiquetada de 60000 imágenes desarrollada por uno mismo en más
de 10 clases, llamada conjunto de datos CIFAR-10, se obtiene un modelo para clasificar objetos a partir de
imágenes. Otro resultado importante de la investigación es la visualización de los filtros en la red, de modo
que se pueda evaluar cómo el modelo desglosa las imágenes. (ii) En otro trabajo que adopta el conjunto de
datos CIFAR-10 [2], se desarrolla una arquitectura de red muy amplia y profunda, combinada con soporte de
GPU para disminuir el tiempo de entrenamiento. En conjuntos de datos populares, como las digitaciones
manuscritas MNIST, los caracteres chinos y las imágenes CIFAR-10, se logra un rendimiento casi humano.
Las tasas de error extremadamente bajas superan significativamente los resultados anteriores del estado del
arte. Sin embargo, debe mencionarse que la red utilizada para el conjunto de datos CIFAR-10 consta de 4
capas convolucionales con 300 mapas cada una, 3 capas de agrupación máxima y 3 capas de salida
completamente conectadas. Como resultado, aunque se utilizó una GPU, el tiempo de entrenamiento fue de
varios días.
(iii) En 2010, la introducción del desafío anual de Imagenet [4] impulsó la investigación sobre la clasificación
de imágenes y el gigantesco conjunto de datos etiquetados a menudo se utiliza en publicaciones desde
entonces. En un trabajo posterior de Krizhevsky et al. [10], una red con 5 convolucionales, 3 agrupaciones
máximas y 3 capas completamente conectadas se entrena con 1,2 millones de imágenes de alta resolución
del concurso ImmanetNet LSVRC-2010. Después de implementar técnicas para reducir el sobreajuste, los
resultados son prometedores en comparación con los modelos de estado anteriores. Además, se realizan
experimentos para reducir el tamaño de la red, indicando que el número de capas se puede reducir
significativamente mientras que el rendimiento se reduce solo un poco.
(iv) Con respecto al reconocimiento de la expresión facial en particular, Lv et al. [13] presentan una red de
creencias profundas específicamente para usar con la Expresión Facial Femenina Japonesa (JAFFE) y las
bases de datos extendidas de Cohn-Kanade (CK +). La característica más inexistente de la red es el
concepto jerárquico de análisis de caras, es decir, la imagen se pasa a través de la red varias veces para
detectar primero la cara, luego los ojos, la nariz y la boca, y finalmente la emoción correspondiente. Los
resultados son comparables con la precisión obtenida por otros métodos en la misma base de datos, como
Support Vector Machine (SVM) y Learning Vector Quantization (LVQ). (v) Otro trabajo en la base de datos
Cohn-Kanade [1] utiliza el filtrado de Gabor para el procesamiento de imágenes y la Máquina de vectores de
soporte (SVM) para la clasificación. Un filtro Gabor es particularmente adecuado para el reconocimiento de
patrones en imágenes y se afirma que imita la función del sistema visual humano. Las precisiones de
reconocimiento de emociones son altas, que varían de 88% en ira a 100% en sorpresa. Sin embargo, una
gran desventaja del enfoque es que se requiere un procesamiento previo muy preciso de los datos, de modo
que cada imagen cumpla con un formato estricto antes de introducirla en el clasificador. (vi) Uno de los
estudios más recientes sobre el reconocimiento de emociones describe una red neuronal capaz de
reconocer raza, edad, género y emoción a partir de imágenes de rostros [7]. El conjunto de datos utilizado
para esta última categoría se origina en el Desafío de reconocimiento de expresiones faciales (FERC-2013).
Una red profunda claramente organizada que consta de 3 capas convolucionales, 1 capa completamente
conectada y algunas capas pequeñas en el medio obtuvieron una precisión promedio del 67% en la
clasificación de emociones, que es igual a las publicaciones anteriores de última generación. en el mismo
conjunto de datos. Además, esta tesis establece un análisis valioso del efecto de ajustar el tamaño de la red,
la agrupación y el abandono. Subrayado por otra literatura, el concepto más prometedor para el análisis de
expresión facial es el uso de redes neuronales convolucionales profundas. Sin embargo, la red de [2] (ii) se
considera demasiado pesada para nuestra cantidad limitada de recursos de procesamiento disponibles. La
red original de [10] (iii) también es grande, pero se afirma que las versiones más pequeñas son igualmente
adecuadas. Además, debido a sus enfoques algo analíticos y poco convencionales, no evaluaremos [13] (iv)
y [1] (v). Por lo tanto, en la siguiente sección, tres arquitecturas profundas en total se someterán a un
problema de clasificación de emociones. Estas arquitecturas se derivan de las redes descritas en los ítems i,
iii y vi, pero no necesariamente iguales.
Figura 1: Muestras de los conjuntos de datos FERC-2013 (izquierda), CK + (centro) y RaFD (derecha)
Para evaluar los tres enfoques mencionados anteriormente sobre su capacidad de reconocimiento de
emociones, desarrollamos tres redes basadas en los conceptos de [9], [10] y [7]. Esta sección describe los
datos utilizados para la capacitación y las pruebas, explica los detalles de cada red y evalúa los resultados
obtenidos con los tres modelos.
*Conjunto de datos
Las redes neuronales, y las redes profundas en particular, son conocidas por su necesidad de grandes
cantidades de datos de entrenamiento. Además, la elección de las imágenes utilizadas para la formación es
responsable de una gran parte del rendimiento del modelo eventual. Esto implica la necesidad de un
conjunto de datos tanto cualitativo como cuantitativo. Para el reconocimiento de emociones, hay varios
conjuntos de datos disponibles para la investigación, que varían desde unos cientos de fotos de alta
resolución hasta decenas de miles de imágenes más pequeñas. Los tres que discutiremos son el Desafío de
Reconocimiento de Expresión Facial (FERC-2013) [8], Extended Cohn-Kanade (CK +) [12] y Radboud
Faces Database (RaFD) [11], todos mostrados en la figura 1. Los conjuntos de datos difieren principalmente
en la cantidad, calidad y "limpieza" de las imágenes. El conjunto FERC-2013, por ejemplo, tiene
aproximadamente 32000 imágenes de baja resolución, donde el RaFD proporciona 8000 fotos de alta
resolución. Además, se puede notar que las expresiones faciales en CK + y RaFD se plantean (es decir,
"limpias"), mientras que el conjunto FERC-2013 muestra emociones 'en estado salvaje'. Esto hace que las
imágenes del conjunto FERC-2013 sean más difíciles de interpretar, pero dado el gran tamaño del conjunto
de datos, la diversidad puede ser beneficiosa para la solidez de un modelo. Razonamos que, una vez
capacitados sobre el conjunto FERC-2013, las imágenes de los conjuntos de datos "limpios" pueden
clasificarse fácilmente, pero no al revés. Por lo tanto, para las tres redes bajo consideración, la capacitación
se realizará utilizando 9000 muestras de los datos de FER-2013 (ver figura 2) con otras 1000 nuevas
muestras para validación. Posteriormente, se realizarán pruebas con 1000 imágenes del conjunto RaFD
para obtener una indicación del rendimiento en datos limpios de alta calidad. Este último conjunto tiene una
distribución uniforme sobre todas las emociones.
Figura 2: Número de imágenes por emoción en el conjunto de entrenamiento. Tenga en cuenta que las caras
no frontales y las imágenes con la etiqueta despectiva se toman de los datos de RaFD, ya que no están
representados en el conjunto de capacitación FERC-2013. Además, con el uso del clasificador en cascada
basado en características de Haar dentro del marco OpenCV [15], todos los datos se procesan previamente.
Para cada imagen, solo la parte cuadrada que contiene la cara se toma, se vuelve a escalar y se convierte
en una matriz con valores de escala de grises de 48x48.
Redes
Las redes se programan con el uso de la biblioteca TFLearn en la parte superior de TensorFlow, que se
ejecuta en Python. Este entorno reduce la complejidad del código, ya que solo deben crearse las capas
neuronales, en lugar de cada neurona. El programa también proporciona comentarios en tiempo real sobre
el progreso y la precisión de la capacitación, y facilita guardar y reutilizar el modelo después de la
capacitación. Se pueden encontrar más detalles sobre este marco en la referencia [16].
(A) La primera red para probar se basa en la investigación descrita anteriormente por Krizhevsky y Hinton
[9]. Esta es la red más pequeña de las tres, lo que significa que tiene las demandas informáticas más bajas.
Dado que una de las aplicaciones futuras podría ser la forma de reconocimiento de emociones en vivo en
sistemas integrados, los algoritmos de trabajo rápido son benéficos.
La red consta de tres capas convolucionales y dos capas totalmente conectadas, combinadas con capas de
agrupación máxima para reducir el tamaño de la imagen y una capa de caída para reducir la posibilidad de
un ajuste excesivo. Los hiperparámetros se eligen de manera tal que el número de cálculos en cada capa
constitucional permanezca aproximadamente igual. Esto asegura que la información se conserva en toda la
red. La capacitación se realiza utilizando diferentes números de filtros convolucionales para evaluar su
efecto en el rendimiento.
(B) En 2012, se desarrolló la red convolucional AlexNet para clasificar imágenes en más de 1000 clases
diferentes, utilizando 1,2 millones de imágenes de muestra del conjunto de datos ImageNet. Debido al hecho
de que en esta investigación el modelo solo tiene que distinguir siete emociones, y debido a nuestros
recursos informáticos limitados, el tamaño de la red original se considera demasiado grande. Por lo tanto, en
lugar de 5 capas convolucionales, aplicamos 3, y en las siguientes 3 capas completamente conectadas, el
número de nodos de cada uno completamente conectado se redujo de 4096 a 1024. Si bien la red original
se dividió para entrenamiento paralelo, fue observó que no era necesario para la versión más pequeña. La
red también utiliza la normalización local para acelerar las capas de entrenamiento y abandono para reducir
el sobreajuste. (C) Los últimos experimentos se realizan en una red basada en el trabajo de Gudi [7]. Dado
que esta investigación también tuvo como objetivo reconocer 7 emociones utilizando el conjunto de datos
FERC-2013, la arquitectura debería ser un buen punto de partida para nuestra investigación. La red original
comienza con una capa de entrada de 48 por 48, que coincide con el tamaño de los datos de entrada. A
esta capa le sigue una capa convolucional, una capa de normalización de contraste local y una capa de
agrupamiento máximo, respectivamente. La red está terminada con dos capas convolucionales más y una
capa completamente conectada, conectada a una capa de salida soft-max. El abandono se aplicó a la capa
totalmente conectada y todas las capas contienen unidades ReLu. Para nuestra investigación, se aplica una
segunda capa de maxpooling para reducir el número de parámetros. Esto reduce la intensidad
computacional de la red, mientras que se dice que la reducción en el rendimiento es solo del 1-2%. Además,
se ajusta la tasa de aprendizaje. En lugar de disminuir linealmente la tasa de aprendizaje como lo hizo Gudi
[7], creemos que una tasa de aprendizaje que hace uso del momento convergería más rápido, ya que el
momento aumenta la tasa de aprendizaje cuando el graduado continúa entrando La misma dirección.
Evaluación Todas las redes están entrenadas durante 60 épocas con los datos mencionados en la sección
3.1. La Figura 3 y la tabla 1 muestran varios detalles del proceso de capacitación y el modelo final. Para la
red A, la precisión final en los datos de validación es de alrededor del 63%. Ya después de 10 épocas, la
precisión aumentó por encima del 60%, lo que indica capacidades de aprendizaje rápido. Además, es
notable que el ajuste de la dimensión del filtro no tuvo una gran influencia en la precisión, aunque sí en el
tiempo de procesamiento. Esto significa que se pueden hacer modelos rápidos con un rendimiento muy
razonable.
**Validation** **RaFD**.
Sorprendentemente, la segunda red, mucho más grande, también aprende rápidamente, pero converge con
una precisión de aproximadamente el 54%. Aparentemente, reducir el tamaño de la red rompe el
rendimiento prometedor de la red original más de lo esperado. Junto con la intensidad computacional mucho
más alta y, por lo tanto, un rendimiento en vivo más lento, este modelo no es un retador digno de las otras
dos arquitecturas. La red C muestra una curva de aprendizaje algo más lenta, pero la precisión final en el
conjunto de validación es similar a la de la red A. Las demandas de procesamiento están en el medio de las
otras redes, por lo que, en base a este hecho, la red A parece ser El enfoque más prometedor para nuestra
tarea de reconocimiento de emociones. Sin embargo, el rendimiento de la red C en el conjunto de pruebas
RaFD adicional es significativamente mejor (60%) que el de la red A (50%). Esto indica mejores
capacidades de generación, lo cual es muy importante para futuras aplicaciones. Por lo tanto, en el próximo
capítulo, el modelo de la red C será investigado y probado más a fondo.
Modelo final
Se observó que la última red descrita en la sección 3.2 tenía el rendimiento más prometedor para
aplicaciones prácticas. En la figura 4 se muestra una descripción general de su arquitectura. Los archivos
fuente de esta red, así como otros scripts utilizados para este proyecto, se pueden encontrar en
https://github.com/isseu/emotion- (https://github.com/isseu/emotion-) Recognition-Neural-Networks . Como
se puede ver en la figura 3, la precisión todavía parece aumentar en las últimas épocas. Por lo tanto,
entrenaremos la red durante 100 épocas en la ejecución final, para asegurarnos de que la precisión converja
al óptimo. En un intento por mejorar aún más el modelo final, la red se entrenará en un conjunto más grande
que el descrito anteriormente. En lugar de 9000 imágenes, la capacitación se realizará con 20000 imágenes
del conjunto de datos FERC-2013. Las proporciones de las emociones presentes en este conjunto se dan en
la figura 5. La validación recién compuesta (2000 imágenes) y los conjuntos de prueba (1000 imágenes) del
conjunto de datos FERC-2013 también se utilizan, junto con la prueba RaFD bien equilibrada conjunto del
experimento anterior.
B 53% 46% .
C 63% 60% .
**Final** **66%** **63%** **71%** .
Figura 6: Matriz de rendimiento del modelo final. Verticalmente la entrada, horizontalmente la salida. Para
ver cómo funciona el modelo por emoción, se genera una tabla, representada en la figura 6 Se obtienen
tasas de precisión muy altas en feliz (90%), neutral (80%) y sorprendido (77%). De hecho, estas son las
expresiones faciales más distinguibles según los humanos también. Triste, temeroso y enojado a menudo
también se clasifican erróneamente como neutrales. Aparentemente, estas emociones se parecen mucho.
La precisión más baja se obtiene en triste (28%) y temeroso (37%). Finalmente, es digno de mención que
aunque el porcentaje de datos con etiqueta disgustada en el conjunto de entrenamiento es bajo, la tasa de
clasificación es muy razonable. En general, la diagonal principal, que muestra la clasificación correcta, se
puede distinguir claramente.
Aplicación en vivo
Como ya se mencionó, el reconocimiento de emociones en vivo a través del video es uno de los puntos
clave más importantes en la interacción hombre-máquina. Para mostrar las capacidades de la red obtenida,
se desarrolla una aplicación que puede procesar directamente el metraje de la cámara web a través del
modelo final. Con el uso del mencionado programa de reconocimiento de rostros OpenCV [15], se rastrea,
extrae y escala la mayor cara que aparece del video en tiempo real a una entrada utilizable de 48x48. Estos
datos se envían a la entrada del modelo de red neuronal, que a su vez devuelve los valores de la capa de
salida. Estos valores representan la probabilidad de que cada emoción sea representada por el usuario. Se
supone que la salida con el valor más alto es la emoción actual del usuario, y se representa con un emoticón
a la izquierda de la pantalla. Aunque es difícil de evaluar objetivamente, la aplicación en vivo muestra un
rendimiento prometedor. Sin embargo, encuentra problemas cuando hay sombras presentes en la cara del
sujeto. Una vez más, esto enfatiza el poder de usar modelos basados en redes neuronales para
aplicaciones futuras en el reconocimiento de emociones.
Referencias
[1] T. Ahsan, T. Jabid, and U.-P. Chong. Facial expression recognition using local transitional pattern on
gabor filtered facial images. IETE Tech-nical Review, 30(1):47–52, 2013. [2] D. Ciresan, U. Meier, and J.
Schmidhuber.Multicolumn deep neural networks for imageclassification. In Computer Vision and Pattern
Recognition (CVPR), 2012 IEEE Confer- ence on, pages 3642–3649. IEEE, 2012. [3] C. R. Darwin. The
expression of the emotions in man and animals. John Murray, London, 1872. [4] J. Deng, W. Dong, R.
Socher, L.-J. Li, K. Li, and L. Fei-Fei. Imagenet: A large-scale hierar- chical image database. In Computer
Vision and Pattern Recognition, 2009. CVPR 2009. IEEE Conference on, pages 248–255. IEEE, 2009. [5] P.
Ekman and W. V. Friesen. Constants across cultures in the face and emotion. Journal of personality and
social psychology, 17(2):124, 1971. [6] B. Fasel and J. Luettin. Automatic facial expression analysis: a
survey. Pattern recognition,36(1):259–275, 2003. [7] A. Gudi. Recognizing semantic features in faces using
deep learning. arXiv preprint arXiv:1512.00743, 2015. [8] Kaggle. Challenges in representation learning:
Facial expression recognition challenge, 2013. [9] A. Krizhevsky and G. Hinton. Learning multiple layers of
features from tiny images, 2009. [10] A. Krizhevsky, I. Sutskever, and G. E. Hinton.Imagenet classification
with deep convolutionalneural networks. In Advances in neural information processing systems, pages 1097–
1105, 2012. [11] O. Langner, R. Dotsch, G. Bijlstra, D. H. Wig- boldus, S. T. Hawk, and A. van Knippenberg.
Presentation and validation of the radboud faces database. Cognition and emotion, 24(8):1377–1388, 2010.
[12] P. Lucey, J. F. Cohn, T. Kanade, J. Saragih, Z. Ambadar, and I. Matthews. The extended cohn-kanade
dataset (ck+): A complete dataset for action unit and emotion-specified expression. In Computer Vision and
Pattern Recognition Workshops (CVPRW), 2010 IEEE Computer Society Conference on, pages 94–101.
IEEE,2010. [13] Y. Lv, Z. Feng, and C. Xu. Facial expression recognition via deep learning. In Smart Comput-
ing (SMARTCOMP), 2014 International Con- ference on, pages 303–308. IEEE, 2014. [14] J. Nicholson, K.
Takahashi, and R. Nakatsu.Emotion recognition in speech using neural networks. Neural computing &
applications, 9(4):290–296, 2000. [15] OpenSourceComputerVision. Face detection using haar cascades.
In [ ]: