Sistema de reconocimiento facial basado en redes neuronales convencionales sobre el dispositivo Raspberry Pi
Abstract
Training and implementation of Convolutional Neural Networks (CNN) using Python programming language and TensorFlow on a Raspberry Pi device for facial verification. During this project, different types of CNN structures will be tested in order to study the results obtained for each of them as well as their operation on the Raspberry Pi 3B device.
Full text
Universidad de Sevilla Escuela T´ ecnica Superior de Ingenier´ ıa SISTEMA DE RECONOCIMIENTO FACIAL BASADO EN REDES NEURONALES CONVOLUCIONALES SOBRE EL DISPOSITIVO RASPBERRY PI M´ aster en Ingenier´ ıa Electr´ onica, Rob´ otica y Autom´ atica Por Javier M´ endez G´ omez 1 de Agosto de 2019 Javier M´ endez G´ omez
SUMMARY Keywords: Convolutional Neural Networks, CNN, Raspberry Pi, Python Abstract Training and implementation of Convolutional Neural Networks (CNN) using Python programming language and TensorFlow on a Raspberry Pi device for facial verification. During this project, different types of CNN structures will be tested in order to study the results obtained for each of them as well as their operation on the Raspberry Pi 3B device.
RESUMEN Palabras clave: Redes neuronales convolucionales, CNN, Raspberry Pi, Python Resumen Entrenamiento e implementaci´ on de Redes Neuronales Convolucionales (CNN) utilizando el lenguaje Python y TensorFlow sobre un dispositivo Raspberry Pi para verificaci´ on facial. Durante este proyecto se probaran distintos tipos de estructuras de CNN con el objetivo de estudiar los resultados obtenidos para cada una de dichas estructuras as´ ı como su funcionamiento sobre el dispositivo Raspberry Pi 3B.
AGRADECIMIENTOS Gracias a todos aquellos que me han apoyado y me han impulsado a seguir aprendiendo durante estos a˜ nos, ya que un buen ingeniero nunca deja de aprender.
Tabla de contenidos Tabla de contenidos SUMMARY iii RESUMEN v AGRADECIMIENTOS vii CAP´ ITULO I: MOTIVACI ´ ON Y OBJETIVO 1 CAP´ ITULO II: ESTADO DEL ARTE 3 1. Deep learning 4 2. Redes neuronales 4 3. Redes neuronales convolucionales 6 3.1.Capaconvolucional............................................................. 7 3.2.Capapooling................................................................... 8 3.3.Capatotalmenteconectada....................................................... 8 3.4.Capadropout................................................................... 8 4. Usos de las CNN 9 CAP´ ITULO III: DESARROLLO DEL PROYECTO 11 1. Elecciones tecnol´ ogicas 12 2. Preprocesamiento del dataset 12 3. Elecci´ on y entrenamiento de la estructura de la CNN 14 4. Comparaci´ on de las estructuras 20 CAP´ ITULO IV: ESTUDIO EN RASPBERRY PI23 CAP´ ITULO V: CONCLUSIONES 27 CAP´ ITULO VI: FUTURAS MEJORAS 29 AP´ ENDICES 31 Javier M´ endez G´ omez ix
3. Redes neuronales convolucionales el correcto para una tarea en concreto. Uno de los procesos m´ as populares para realizar esta operaci´ on es el llamado backpropagation. Este m´ etodo consiste en calcular las salidas de cada capa hasta llegar a la capa final (etapa forward), donde se obtiene la salida. Este resultado obtenido se compara con el resultado deseado para calcular el error e intentar minimizarlo mediante el proceso de backpropagation en el que se busca el descenso en gradiente de la funci´ on de coste o error. La funci´ on de activaci´ on tambi´ en tiene un papel fundamental, por lo que hay varias funciones entre las que se pueden elegir para intentar mejorar nuestro modelo, como por ejemplo ReLu o Leaky ReLu. 3 Redes neuronales convolucionales Las redes neuronales convolucionales son un tipo de red neuronal artificial multicapa feedforward especialmente dise˜ nada para trabajar con im´ agenes. Estas neuronas trabajan de forma similar a las neuronas reales que podemos encontrar en la corteza visual primaria de un cerebro biol´ ogico. Las im´ agenes no se perciben de igual forma por un ordenador y por un humano, aunque podamos decir que este tipo de red neuronal funciona de forma similar, ya que el ordenador percibe las im´ agenes como conjuntos de matrices bidimensionales con valores relativos a la imagen en cada punto, es decir, p´ ıxeles. Las redes neuronales convolucionales se componen de m´ ultiples capas de filtros convolucionales y filtros de reducci´ on de datos (average pooling, max pooling, etc). Despu´ es de cada capa convolucional, se a˜ nade una funci´ on para realizar un mapeo causal no-lineal. Hay distintas funciones, al igual que en las redes neuronales tradicionales, entre las que se debe elegir con el fin de obtener el mejor resultado posible. Seg´ un se avanza en estas capas/filtros, se suele reducir el tama˜ no de las im´ agenes o matrices de salida de los filtros a la vez que se aumentan el n´ umero de capas, es decir, si partimos de una imagen RGB por normal general en cada filtro se ir´ an reduciendo las dimensiones y aumentando el n´ umero de capas: 3(capasRGB)x150x150 →16x100x100 →32x85x85 →... En el ´ ultimo paso en estas redes de neuronas artificiales, se encuentran neuronas de perceptr´ on o fully connected para realizar la clasificaci´ on final sobre las caracter´ ısticas extra´ ıdas mediante los filtrados previos. Debido a la convoluciones que se realizan en estas redes neuronales convolucionales, este tipo de red neuronal es apta para poder clasificar todo tipo de datos donde estos est´ en distribuidos de forma continua en el mapa o imagen de entrada, y a su vez sean estad´ ısticamente parecidos a lo largo de la imagen de entrada. Esto se debe a su invarianza a traslaciones dentro de la imagen, es decir, el resultado no se basa en la posici´ on exacta de la caracter´ ıstica que estudia, ya que subdivide la imagen en peque˜ nos conjuntos que estudia de forma separada, 6 Sistema de Reconocimiento Facial basado en Redes Neuronales Convolucionales sobre el dispositivo Raspberry Pi
Cap´ ıtulo II: Estado del arte permitiendo as´ ı obtener el resultado deseado pese a posibles traslaciones de la regi´ on de inter´ es dentro de la imagen, siempre que se haya entrenado adecuadamente. Por esta raz´ on, son especialmente eficaces para clasificar im´ agenes as´ ı como tareas de percepci´ on por computador. 3.1 Capa convolucional En estas capas es donde se realiza la convoluci´ on del filtro con la imagen de entrada de ese filtro. La convoluci´ on consiste en una serie de multiplicaciones y sumas de los par´ ametros del filtro convolucional y los par´ ametros de las matrices bidimensionales o im´ agenes. Figura II.3: Proceso de convoluci´ on En este proceso se puede elegir si se quiere que la matriz resultante sea del mismo tama˜ no que la matriz de entrada o no, ya que el proceso de convoluci´ on reduce el tama˜ no. Para mantener el mismo tama˜ no se a˜ naden filas y columnas auxiliares de valor cero. Esto no siempre es adecuado, ya que estamos evitando reducir el n´ umero de par´ ametros, pero a la vez tenemos m´ as datos en los que intentar buscar patrones. Figura II.4: Proceso de convoluci´ on con padding Al final del proceso de aprendizaje, los par´ ametros o pesos del filtro se modifican con el fin de minimizar la funci´ on de coste o error obtenido, por lo que estos par´ ametros no con datos Javier M´ endez G´ omez 7
3. Redes neuronales convolucionales que se puedan establecer a priori. 3.2 Capa pooling En esta capa es donde se reduce el n´ umero de datos/tama˜ no de las matrices. Se suele colocar despu´ es de la capa convolucional. Estas capas son de gran utilidad ya que permiten reducir las dimensiones de la matriz bidimensional de la imagen que se estudia sin afectar al n´ umero de capas de dicha imagen. Esta operaci´ on tambi´ en se llama reducci´ on de muestreo debido a que la reducci´ on de tama˜ no implica p´ erdida de informaci´ on. En la capa de pooling se puede elegir entre varias opciones: 1. Average Pooling: se calcula el valor medio de cada subconjunto de la matriz. 2. Max Pooling: se busca el valor m´ aximo dentro de cada subconjunto de la matriz. Figura II.5: AverPooling y MaxPooling 2x2 3.3 Capa totalmente conectada Este tipo de capa suele encontrarse al final de la estructura de la red neuronal convolucional. Es esta capa todas las neuronas artificiales estas conectadas entre ellas, al igual que en las redes neuronales tradicionales como el perceptr´ on multicapa, con el fin de clasificar usando los datos o caracter´ ısticas obtenidos mediante las convoluciones y reducciones de par´ ametros. Antes de esta capa, debe incluirse el proceso de flattened, que consiste en convertir la matriz bidimensional en un ´ unico vector de par´ ametros. 3.4 Capa dropout La capa dropout es uno de los posibles m´ etodos de regularizaci´ on que ayudan a evitar el overfitting, es decir, evita que la red aprenda con gran precision a identificar las im´ agenes del conjunto de entrenamiento a costa de perder generalidad. 8 Sistema de Reconocimiento Facial basado en Redes Neuronales Convolucionales sobre el dispositivo Raspberry Pi
Cap´ ıtulo II: Estado del arte Esta capa suele usarse despu´ es de las capas totalmente conectadas, pero se pueden usar tambi´ en despu´ es de las capas convolucionales o recurrentes. La capa dropout elimina, de forma aleatoria y solo durante el proceso de entrenamiento de la red, algunas conexiones ocultas en la capa previa con una probabilidad variable configurada mediante el c´ odigo del programa, siendo la probabilidad del 0.25-0.5% de forma general. Figura II.6: Proceso dropout 4 Usos de las CNN Actualmente las redes neuronales se est´ an utilizando para una gran cantidad de tareas, esto es debido a que se ha comprobado que mediante el entrenamiento con una gran cantidad de datos nos proporcionan mejores resultados que m´ etodos tradicionales de clasificaci´ on como puede ser un clasificador log´ ıstico o un ´ arbol de decisi´ on. El inconveniente de las redes neuronales es la gran cantidad de datos que se necesitan durante el proceso de entrenamiento como se ha comentado, por lo que la capacidad de procesamiento tambi´ en es muy elevada. Debido a esto, no ha sido hasta recientemente con el avance del Big Data que se ha comenzado a explotar el potencial de las redes neuronales. Actualmente, las CNN se usan en muchos ´ ambitos, desde la medicina para el estudio de im´ agenes m´ edicas [1] (resonancias, ecografias, etc) y detecci´ on de enfermedades, control de calidad hasta la conducci´ on aut´ onoma [2]. Ya que gran parte de los problemas se basan es detecci´ on de rasgos o caracter´ ısticas visuales que se pueden reconocer mediante el uso de las CNN pero que ser´ ıan muy dif´ ıciles a simple vista para el ojo humano o que no se pueden realizar lo suficientemente r´ apido. Javier M´ endez G´ omez 9
4. Usos de las CNN 10 Sistema de Reconocimiento Facial basado en Redes Neuronales Convolucionales sobre el dispositivo Raspberry Pi
Cap´ ıtulo III: Desarrollo del proyecto CAP´ ITULO III DESARROLLO DEL PROYECTO Este proyecto se puede separar en varias fases: 1. Elecciones tecnol´ ogicas 2. Preprocesamiento del dataset 3. Elecci´ on y entrenamiento de la estructura de la CNN 4. Comparaci´ on de las estructuras Javier M´ endez G´ omez 11
1. Elecciones tecnol´ ogicas 1 Elecciones tecnol´ogicas En este proyecto se busca estudiar el funcionamiento de redes neuronales sobre dispositivos de bajo coste por lo que lo primero es elegir el dispositivo que se va a usar. Las opciones m´ as comunes son Arduino Y Raspberry Pi. Para elegir entre Arduino Y Raspberry Pi se han comparado las siguientes caracter´ ısticas: Caracter´ ısticas Arduino uno Raspberry Pi 3B Programaci´ on Arduino Python CPU ATmega328P Quad Core 1.2GHz Broadcom BCM2837 64bit RAM 2 KB 1 GB Precio 20€31.5€ Tabla III.1: Comparaci´ on entre Arduino y Raspberry Pi A la vista de esta tabla, se eligi´ o utilizar la Raspberry Pi 3B debido, principalmente, a su mayor memoria RAM as´ ı como el lenguaje de programaci´ on que se utiliza con Raspberry Pi. Una vez sabemos que dispositivo se usar´ a, se va a explicar c´ omo se programar´ an las redes neuronales a lo largo de este proyecto. Se usar´ a Python, ya que es el lenguaje de programaci´ on por defecto que se usa para Machine Learning y Deep Learning, por lo que cuenta con bibliotecas espec´ ıficas, como Tensor- Flow o Caffe, as´ ı como numerosos ejemplos donde se explica c´ omo usar dichas bibliotecas. En concreto, usaremos las bibliotecas TensorFlow [3] y Keras [4] para redes neuronales junto con Python 3.6, ya que estas bibliotecas no tienen una version estable por el momento para el tradicional Python 2.7. TensorFlow es una biblioteca desarrollada por Google para Deep Learning, espec´ ıficamente trabaja con calculo num´ ericos basados en diagramas de flujo, y se puede usar en Python, JavaScript or Swift. Es de c´ odigo abierto desde 2015, por lo que es una de las bibliotecas m´ as populares actualmente. TensorFlow tiene el inconveniente de que no es sencillo de aprender, ya que cuenta con un gran conjunto de instrucciones complejas, por lo que se suele usar junto con la biblioteca Keras, que permite un f´ acil uso de TensorFlow. Keras solo se puede utilizar en Python pero dado que es el lenguaje que se usar´ a en este proyecto, no representa ning´ un inconveniente. Keras fue integrado en la biblioteca TensorFlow in 2017, permitiendo un mayor nivel de abstracci´ on a la hora de la programaci´ on. 2 Preprocesamiento del dataset Para poder entrenar y comprobar el funcionamiento de la red neuronal se tiene que elegir un dataset espec´ ıfico para la aplicaci´ on, en este caso la verificaci´ on facial. 12 Sistema de Reconocimiento Facial basado en Redes Neuronales Convolucionales sobre el dispositivo Raspberry Pi
Cap´ ıtulo III: Desarrollo del proyecto Existen numerosos dataset para esta aplicaci´ on como son 10k US Adult Faces Database [5], AT & T-The Database of Faces [6], Caltech Faces [7] o MIT-CBCL face recognition database [8]. Todos ellos nos proporcionan im´ agenes faciales de una gran cantidad de sujetos. El dataset que se ha elegido para este proyecto es el dataset proporcionado, de manera libre, por el MIT para estudios faciales ”MIT-CBCL face recognition database”. La elecci´ on se ha realizado en base al tama˜ no de las im´ agenes (con lo que intentamos que las im´ agenes sean similares a las que se pueden obtener con la Pi Camera de la raspberry Pi) as´ ı como al n´ umero de las im´ agenes de cada sujeto. Este dataset nos proporciona 20 im´ agenes de 10 sujetos. Debido a las limitaciones a la hora del entrenamiento de la red neuronal, solo se han usado 4 sujetos. Lo que se estudiar´ a a continuaci´ on ser´ ıa escalable para un mayor n´ umero de sujetos. Figura III.1: Sujetos estudiados en el dataset Estos sujetos se han clasificado, de izquierda a derecha, como sujeto 1, sujeto 2, sujeto 3 y sujeto 4. Como podemos ver, estas im´ agenes son todas del mismo tama˜ no, 152x152 p´ ıxeles, ya que el tama˜ no de im´ agenes que se usa para la red neuronal tiene que ser siempre el mismo. En total se tienen 20 fotograf´ ıas de cada sujeto, de las cuales se usar´ an 15 para el proceso de entrenamiento, 3 para validaci´ on y 2 para un test final con el que comprobar la precision de la red. A la hora de saber cu´ antas im´ agenes son necesarias para el entrenamiento, existe una norma estad´ ıstica: Nparametrosdelared << Nimagenesdeentrenamiento Por lo que es f´ acil intuir que necesitamos un mayor n´ umero de im´ agenes. Para ello, se usa el proceso de data augmentation, mediante el cual se generan im´ agenes artificiales usando las im´ agenes iniciales con el objetivo de aumentar el tama˜ no del dataset. Este proceso consiste en la rotaci´ on progresiva, desplazamiento del centro de la imagen y obtener la imagen especular de forma gradual entre otras t´ ecnicas para conseguir el n´ umero de im´ agenes necesarias. Javier M´ endez G´ omez 13
3. Elecci´ on y entrenamiento de la estructura de la CNN Figura III.2: Ejemplo data augmentation Debido a que las im´ agenes en el dataset tienen distintos fondos, podemos suponer que la red neuronal no se basar´ a en datos del fondo pero para evitar la posibilidad de que se base en el fondo, vamos modificar o preprocesar el dataset para que la red neuronal solo aprenda las caras. Esto lo vamos a realizar mediante la b´ usqueda y recorte de las caras de forma autom´ atica en el dataset antes de suministrar las im´ agenes a la red neuronal durante el proceso de entrenamiento. Figura III.3: Recortar caras Al mismo tiempo, tambi´ en se ha realizado otro preprocesamiento tradicional en este tipo de aplicaciones que es la normalizaci´ on de las im´ agenes. De igual forma, una vez que la red est´ e entrenada, habr´ a que aplicar los mismo preprocesamientos cuando se quiera ejecutar la red neuronal para clasificar una imagen. 3 Elecci´on y entrenamiento de la estructura de la CNN Una vez tenemos suficientes im´ agenes, se ha pasado a entrenar diferentes redes neuronales convolucionales con el objetivo de encontrar la mejor estructura para nuestro caso. 14 Sistema de Reconocimiento Facial basado en Redes Neuronales Convolucionales sobre el dispositivo Raspberry Pi
Cap´ ıtulo III: Desarrollo del proyecto En este punto tenemos dos opciones, usar una red previamente entrenada y solo entrenar las ultimas capas o entrenar una red desde cero. La primera opci´ on es m´ as r´ apida y sencilla de ejecutar, ya que no necesitamos calcular todos los par´ ametros de la red. El inconveniente de este tipo de estructuras es que la precisi´ on puede no ser tan buena como en una red entrenada desde cero en caso de que la aplicaci´ on para la que se entrenaron inicialmente no sea similar. En caso de aplicaciones similares, la precisi´ on puede llegar a ser incluso mejor que en una red entrenada desde cero, ya que partimos de una estructura que se ha comprobado que da buenos resultados. Por este motivo, vamos a probar con dos redes ya entrenadas usando la t´ ecnica de ”Transfer Learning”. La primera red que vamos a usar es la ResNet50 [9] donde los par´ ametros ya est´ an entrenados y solo se entrenan lo de las capas posteriores que se a˜ nadir´ an. Las capas que se han a˜ nadido, las cuales si se entrenar´ an, son dos capas totalmente conectadas, la primera de 512 neuronas y la segunda de 256. La ´ ultima capa que se ha a˜ nadido es una capa totalmente conectada de 4 neuronas, ya que esta capa se encargar´ a de la clasificaci´ on final. La segunda red que vamos a usar es la VGGnet16 [10]. En esta estructura, al igual que antes, las primeras capas est´ an ya previamente entrenadas y solo se han a˜ nadido las mismas capas finales que en la ResNet50 para la clasificaci´ on final. Al usar redes ya entrenadas, la carga computacional es mucho menor que en el caso de tener que entrenar una red neuronal desde cero. Gracias a esto, se ha podido realizar el proceso del entrenamiento en un ordenador con 6 GB de memoria RAM y 2GB de GPU y aun as´ ı el tiempo de entrenamiento ha sido de 45 minutos en ambos casos. A continuaci´ on, se puede observar la precision obtenida con estas dos estructuras as´ ı como el n´ umero de par´ ametros de estas redes neuronales. Estructura N´ umero de par´ ametros Precisi´ on ResNet50 75.233.156 92.36 VGGnet16 24.417.092 84.72 Tabla III.2: Estructuras pre-entrenadas Como se puede ver, el n´ umero de par´ ametros de la primera red, ResNet50, es elevado por que se comprobar´ a m´ as adelante la viabilidad de esta red sobre dispositivos de capacidades limitadas, como es el caso de una Raspberry Pi. Con respecto a la VGGnet16 previamente entrenada, podemos ver como se han obtenido buenos resultados y el n´ umero de parametros es inferior a la ResNet50 pero igualmente se debe estudiar su viabilidad m´ as adelante. Una vez que hemos estudiado algunas redes previamente entrenadas, se ha elegido entrenar algunas redes desde cero, con el objetivo de intentar buscar redes con mayor precisi´ on y/o menor n´ umero de par´ ametros que las dos redes anteriores con el fin de facilitar su implementaci´ on es dispositivos de bajas prestaciones. El proceso de entrenamiento de una red neuronal requiere una gran potencia de c´ alculo por lo que se suele utilizar la GPU con el fin de reducir los tiempos. Este proceso se puede realizar en el ordenador pero existen algunas otras opciones como es el uso de plataformas en la nube dise˜ nadas para el proceso de entrenamiento de redes neuronales. Javier M´ endez G´ omez 15
4. Comparaci´ on de las estructuras 22 Sistema de Reconocimiento Facial basado en Redes Neuronales Convolucionales sobre el dispositivo Raspberry Pi
Cap´ ıtulo IV: Estudio en Raspberry Pi CAP´ ITULO IV ESTUDIO EN RASPBERRY PI Una vez se ha probado el correcto funcionamiento en un ordenador se ha pasado al estudio sobre un dispositivo de bajo coste, Raspberry Pi 3B. El objetivo es comprobar si se pueden obtener los mismo resultados mediante el uso de una c´ amara (PiCamera) en vez de suministrando im´ agenes previamente tomadas a la red neuronal. Figura IV.1: Im´ agenes de la c´ amara Tras una prueba se comprob´ o que el c´ odigo sigue funcionando igual que en el ordenador por lo que se pas´ o al estudio del tiempo. Estudiaremos sobre el dispositivo los tiempos de ejecuci´ on de las estructuras para la CNN que se han estudiado, con el fin de poder tener en cuenta dichos resultados a la hora de elegir la red neuronal ´ optima para este proyecto. De esta forma, podemos ver como los tiempos de ejecuci´ on de las diferentes redes neuronales estudiadas en este proyecto. En el caso de las dos primeras, al ser demasiado grandes, el dispositivo Raspberry Pi 3 no es capaz de ejecutarlas ya que no cuenta con suficiente memoria RAM para almacenar todos los par´ ametros. Por este motivo, estas dos estructuras se Javier M´ endez G´ omez 23
4. Comparaci´ on de las estructuras Nombre de la estructura Tiempo de ejecuci´ on (s) Taigman - Taigman V2 - ResNet20 2.05 ResNet20 v2 2.32 LeNet5 1.75 VGGNet16 11.34 ResNet50 pre-entrenada 15.63 VGGNet16 pre-entrenada 5.42 Tabla IV.1: Tiempos de ejecuci´ on pueden descartar para su uso independientemente de la precisi´ on. Tambi´ en se quiere estudiar las limitaciones de las Raspberry Pi 3B utilizada con respecto al tama˜ no m´ aximo de la red neuronal que puede ejecutarse antes de que los tiempos de ejecuci´ on sobrepasen un tiempo l´ ımite. Queremos estudiar esto ya que, si se tarda mucho en ejecutar el c´ odigo, el programa no podr´ ıa usarse para aplicaciones en tiempo real. Vamos a ver la tabla de datos obtenidos donde podemos comparar el n´ umero de par´ ametros de una red con el tiempo de ejecuci´ on, creando para ello variantes de las estructuras usadas con un mayor/menor n´ umero de par´ ametros. Figura IV.2: Tiempo de ejecucion de la CNN en el dispositivo RP Al final, se ha podido comprobar que cuando el n´ umero de par´ ametros supera los 140 millones de par´ ametros, el dispositivo Raspberry Pi 3 no es capaz de ejecutar la CNN debido a las limitaciones de la memoria RAM. Para redes neuronales con numero de par´ ametros entre 24 Sistema de Reconocimiento Facial basado en Redes Neuronales Convolucionales sobre el dispositivo Raspberry Pi
Cap´ ıtulo IV: Estudio en Raspberry Pi 50 millones y los 140 millones, el dispositivo es capaz de ejecutar la red neuronal pero los tiempos de ejecuci´ on son muy elevados y el dispositivo se calienta bastante. Si lo comparamos con los tiempos de ejecuci´ on en la plataforma Google Colab, donde se tiene una RAM mucho mayor y una GPU dedicada, podemos ver c´ omo afecta la elecci´ on del dispositivo a los tiempos de ejecuci´ on. Javier M´ endez G´ omez 25
4. Comparaci´ on de las estructuras Numero de par´ ametros Tiempo de ejecuci´ on RP (s) Tiempo de ejecuci´ on Google Colab (s) 3,203,688 1.757538462 0.00714 3,986,588 2.0578 0.00836 4,309,988 2.32568 0.009425 7,322,428 2.39821 0.009762 8,620,084 2.412307 0.0098438 18,028,426 3.6923 0.015102 59,459,646 11.33856 0.46062 92,412,848 16.58463 0.067356 135,489,204 25.89461 0.105178 176,548,254 - 0.165238 193,273,432 - 0.171524 206,626,048 - 0.183541 300,433,954 - 0.304525 569,942,340 - 0.556210 Tabla IV.2: Tiempos de ejecuci´ on en Raspberry Pi 3 y Google Colab Podemos ver como los tiempos son mucho menores en la plataforma Google Colab, con diferencias de tres ´ ordenes de magnitud. Por lo que queda claro que para un uso ´ optimo de las redes neuronales no solo hay que buscar la estructura adecuada, tambi´ en tenemos que tener en cuenta las limitaciones del dispositivo f´ ısico sobre el que vamos a ejecutar dicha estructura. 26 Sistema de Reconocimiento Facial basado en Redes Neuronales Convolucionales sobre el dispositivo Raspberry Pi
Cap´ ıtulo V: Conclusiones CAP´ ITULO V CONCLUSIONES A lo largo de este proyecto se ha podido comprobar la utilidad de las redes neuronales convolucionales para la verificaci´ on facial. Se han comparado distintas estructuras con el fin de intentar encontrar la m´ as adecuada para este caso, pero pese a haberse encontrado una estructura que nos proporciona muy buenos resultados, nunca podemos afirmar que sea la ´ optima ya que hay un n´ umero infinito de posibles estructuras. Tambi´ en se ha podido comprobar como el uso de redes previamente entrenadas, usando la t´ ecnica del Transfer Learning, pueden ser ´ utiles para la verificaci´ on facial. Se ha podido ver que en algunos casos dan mejores resultados que redes neuronales entrenadas desde cero. Al comparar los resultados obtenidos en un ordenador y un dispositivo de bajo coste, como es el caso de la Raspberry Pi, se ha comprobado como la elecci´ on de la estructura no debe realizarse s´ olo en funci´ on de la precisi´ on que nos proporciona, si no tambi´ en estudiando su aplicaci´ on sobre el dispositivo, ya que puede que los tiempos de ejecuci´ on sean demasiado grandes o que, debido a los recursos del propio dispositivo, sea irrealizable dicha estructura. Pese a esto, se han conseguido unos resultados satisfactorios ya que la precisi´ on alcanzada con la Raspberry Pi 3B ha sido del 94.51% con un tiempo de ejecuci´ on de 2.32 segundos, lo que puede que no permita su uso en tiempo real, pero si en aplicaciones que no requieran un tiempo de ejecuci´ on muy peque˜ no. Se han estudiado dos opciones cuando se trabaja con redes neuronales, usar redes preentrenadas o entrar una red neuronal desde cero. Se ha visto como, haci´ endose de forma adecuada, las dos opciones proporcionan buenos resultados. Las dos redes pre-entrenadas consiguieron resultados por encima del 80%, rivalizando con el resto de estructuras que se han entrenado desde cero con nuestra base de datos. Esto demuestra la eficacia del transfer learning pese a que en este caso se haya optado por usar una red entrenada desde cero. Javier M´ endez G´ omez 27
4. Comparaci´ on de las estructuras En concreto, se han conseguido todos los objetivos principales de este proyecto, que eran: 1. Buscar una estructura adecuada para la CNN y base de datos. 2. Entrenar y mejorar la CNN. 3. Implementar la red neuronal en el dispositivo Raspberry Pi. 4. Identificar las limitaciones de los dispositivos Raspberry Pi para ejecutar redes neuronales. 28 Sistema de Reconocimiento Facial basado en Redes Neuronales Convolucionales sobre el dispositivo Raspberry Pi
Cap´ ıtulo VI: Futuras mejoras CAP´ ITULO VI FUTURAS MEJORAS Como mejoras futuras, ser´ ıa interesante volver a repetir estas pruebas con el uso de la Raspbery Pi y un stick para aumentar sus capacidades, como puede ser el Movidius NCS, con el objetivo de comprobar los l´ ımites con dicho perif´ erico, ya que se espera que los tiempos de ejecuci´ on sean menores e incluso puede que se puedan usar estructuras con un mayor n´ umero de par´ ametros. Una opci´ on para mejorar los resultados obtenidos en el dispositivo Raspberry Pi es el uso de ”sticks” o perif´ ericos dise˜ nados espec´ ıficamente para mejorar el rendimiento del Deep Learning en dispositivos como la Raspberry Pi con la que se est´ a trabajando. Figura VI.1: Movidius NCS Javier M´ endez G´ omez 29
4. Comparaci´ on de las estructuras Uno de estos perif´ ericos es el Movidius NCS, el cual a˜ nade una VPU de alto rendimiento, lo que permite acelerar el procesamiento as´ ı como aumentar la memoria con lo que se puede trabajar con redes neuronales con un mayor n´ umero de par´ ametros. Este stick est´ a dise˜ nado para mejorar el rendimiento cuando se trabaja con Deep Learning y procesamiento de im´ agenes, por lo que permite evitar trabajar en la nube, acerc´ andonos al Edge Processing. Otra mejorar que se podr´ ıa a˜ nadir es el estudio de los propios hiperpar´ ametros de la red de forma iterativa, es decir, estudiar durante el proceso de entrenamiento si la estructura (n´ umero de capas y neuronas) es la ´ optima. Tambi´ en podr´ ıa dise˜ narse una carcasa e imprimirla con una impresora 3D para el dispositivo Raspberry Pi junto con la c´ amara y una pantalla, con el fin de tener un producto acabado con una interfaz sencilla para los usuarios. 30 Sistema de Reconocimiento Facial basado en Redes Neuronales Convolucionales sobre el dispositivo Raspberry Pi
Ap´ endices AP´ ENDICES A C´odigo CNN ResNet20-V2 1import numpy as np 2import itertools 3import keras 4from keras import backend as K 5from keras.optimizers import Adam 6from keras.metrics import categorical_crossentropy 7from keras.preprocessing.image import ImageDataGenerator 8from keras.layers.convolutional import * 9from matplotlib import pyplot as plt 10 from sklearn.metrics import confusion_matrix 11 from keras.utils import to_categorical 12 from keras.models import Sequential,Input,Model 13 from keras.layers import Dense, Dropout, Flatten, Activation 14 from keras.layers import Conv2D, MaxPooling2D, LocallyConnected2D 15 from keras.layers.normalization import BatchNormalization 16 from keras.layers.advanced_activations import LeakyReLU 17 import matplotlib.pyplot as plt 18 from sklearn.model_selection import train_test_split 19 from PIL import Image, ImageOps 20 21 #Obtencion del dataset 22 train_path = ’Dataset/train’ 23 valid_path = ’Dataset/valid’ 24 test_path = ’Dataset/test’ 25 26 train_batches = ImageDataGenerator().flow_from_directory(train_path, ,→target_size=(152,152), classes=[’1’,’2’,’3’,’4’], batch_size=500000000) 27 test_batches = ImageDataGenerator().flow_from_directory(test_path, ,→target_size=(152,152), classes=[’1’,’2’,’3’,’4’], batch_size=10000) 28 valid_batches = ImageDataGenerator().flow_from_directory(valid_path, ,→target_size=(152,152), classes=[’1’,’2’,’3’,’4’], batch_size=10730000) 29 30 imgsTrain, labelsTrain = next(train_batches) 31 imgsTest, labelsTest = next(test_batches) 32 imgsValid, labelsValid = next(valid_batches) 33 34 print(’Training data shape : ’, imgsTrain.shape, labelsTrain.shape) Javier M´ endez G´ omez 31
Lista de figuras 38 Sistema de Reconocimiento Facial basado en Redes Neuronales Convolucionales sobre el dispositivo Raspberry Pi
Ap´ endices Lista de c´odigos fuente 1.1 CNNenPython...................................... 32 2.2 Clasificacion mediante CNN entrenada . . . . . . . . . . . . . . . . . . . . . . . . 34 Javier M´ endez G´ omez 39
Bibliograf´ ıa Bibliograf´ıa [1] Apliaci´on de las redes neuronales en medicina Alberto Delgado. Universidad Nacional de Colombia 1999. [2] End to End Learning for Self-Driving Cars Mariusz Bojarski, Davide Del Testa, Daniel Dworakowski, Bernhard Firner, Beat Flepp, Prasoon Goyal, Lawrence D. Jackel, Mathew Monfort, Urs Muller, Jiakai Zhang, Xin Zhang, Jake Zhao, Karol Zieba. Cornell University 2016 [3] TensorFlow. Biblioteca desarrollada por Google para Machine Learning. Link: https://www.tensorflow.org [4] Keras. Biblioteca desarrollada para usar junto con TensorFlow, permitiendo un mayor nivel de abstracci´ on. Link: https://keras.io [5] 10k US Adult Faces Database Base de datos con 10,168 im´ agenes de caras de 2,222 sujetos. http://www.wilmabainbridge.com/facememorability2.html [6] AT & T - The Database of Faces Base de datos con im´ agenes de caras de 40 sujetos entre abril de 1992 y abril de 1994 . https://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html [7] Caltech Faces Base de datos con 450 im´ agenes de caras de 27 sujetos. http://www.vision.caltech.edu/html-files/archive.html [8] MIT-CBCL Component-based Face Recognition with 3D Morphable Models, First IEEE Workshop on Face Processing in Video B.Weyrauch, J.Huang, B.Heisele, and V.Blanz, Washington D.C., 2004. Credit is hereby given to the Massachusetts Institute of Technology and to the Center for Biological and Computational Learning for providing the database of facial images.Copyright 2003 -2005 Massachusetts Institute of Technology. All Rights Reserved. [9] ResNet50 pre-entrenada Red neuronal convolucional ResNet50 previamente entrenada. [10] VGGnet16 pre-entrenada Red neuronal convolucional VGGnet16 previamente entrenada. https://github.com/fchollet/deep-learning-models [11] Google Colaboratory. Plataforma en la nube de Google para ejecutar c´ odigo en Python 2 y 3. Link: https://colab.research.google.com/ [12] DeepFace, Closing the Gap to Human-Level Performance in Face Verification. Yaniv Taigman, Ming Yang, Marc Aurelio Ranzato and Lior Wolf Menlo Park, CA, USA, 2014. [13] Gradient-Based Learning applied to document recognition Yann LeCun, Leon Bottou, Yoshua Bengio and Patrick Haffner. Proc. of the IEEE, November 1998. [14] Very Deep Convolutional Networks for Large-Scale Image Recognition Karen Simonyan, Andrew Zisserman. Cornell University, 4th of September 2014. 40 Sistema de Reconocimiento Facial basado en Redes Neuronales Convolucionales sobre el dispositivo Raspberry Pi
Ap´ endices [15] Deep Residual Learning for Image Recognition Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun. Cornell University, 10th of December 2015. [16] Wide Residual Networks Sergey Zagoruyko, Nikos Komodakis. Cornell University, 23th of May 2016. [17] Densely Connected Convolutional Networks Gao Huang, Zhuang Liu, Laurens van der Maaten, Kilian Q. Weinberger. Cornell University, 25th of August 2016. [18] ImageNet Classification with Deep Convolutional Neural Networks Alex Krizhevsky, Ilya Sutskever and Geoffrey E. Hinton. University of Toronto, 2012. Javier M´ endez G´ omez 41