scieee AI-readable full text Open interactive document viewer

Big data y deep learning para detección de objetos en imágenes

Fava Fernández, Alessandro Iván

Abstract

In this project we can see two fields that are very popular nowadays, Big Data and Deep Learning. In particular, the object detection is in the field of artificial vision. But we are not looking for detect an object within the image, we try to solve a problem. The problem to resolve is when we don't have a dataset large enough to get an optimal result. These days this problem persist, if we develop an application to looking for a rare animal species that is endangered, is more probably that the images that we have from this animal will be not enough to get a good result for detect them. To resolve this problem we have used two different technologies. The first one, it has proved it efficiency detecting faces, this is the Haar-Cascade over OpenCV. The second one is relatively newest, it is called transfer learning. In the case of transfer learning we use a framework called Cognitive Toolkit developed by Microsoft and also we use Azure cloud service developed by Microsoft. To prove the efficiency of this two methods we have tried to detect different objects: Watches, wolfs, sheep and helipad signs. We have chosen this last object because there isn't any dataset of it and this makes it closer to a one real case. Finally, we will test in practical way. If all we planned before is possible we will be able to find out interesting ideas for the future.

Full text

TRABAJO FINAL DE GRADO TÍTULO DEL TFG: Big data y Deep Learning para la detección de objetos en imágenes TITULACIÓN: Grado en Ingeniería Telemática AUTOR: Alessandro Iván Fava Fernández DIRECTORA: Esther Salamí San Juan FECHA: 31 de Octubre de 2017 Título: Big data y Deep Learning para la detección de objetos en imágenes Autor: Alessandro Iván Fava Fernández Director: Esther Salamí San Juan Fecha: 31 de Octubre de 2017 Resumen En este proyecto podemos ver dos campos que actualmente están en auge, Deep Learning y Big Data. Concretamente la detección de objetos que corresponde a la visión artificial, no se trata simplemente de la detección de objetos dentro de una imagen sino que se busca solucionar un problema. El problema a solucionar es cuando no poseemos un dataset de imágenes lo suficientemente grande como para poder realizar una detección óptima. En la actualidad este problema es recurrente, si desarrollamos una aplicación para buscar una especie concreta de animal, y está en peligro de extinción es muy probable que el número de imágenes que poseemos será demasiado pequeño para conseguir nuestro objetivo. Para solucionar este problema hemos empleado dos tecnologías. La primera, que ya ha sido probada su eficacia a la hora de detectar rostros. Esta es HaarCascade sobre la librería OpenCV. El segundo método es relativamente nuevo y se denomina transfer learning. En el caso de transfer learning utilizamos el framework desarrollado por Microsoft denominado Cognitive Toolkit y también utilizamos servicios de cloud de Microsoft como Azure. Para probar la eficacia de los métodos que tratamos en el proyecto hemos probado su capacidad de detección y clasificación con diferentes elementos. Hemos empleado imágenes de relojes, lobos, ovejas y señales de helipuertos. Este último objeto lo hemos escogido porque no hay un dataset de imágenes de él y esto hace que se acerque más a un caso real. Finalmente probaremos de forma experimental si todo esto es posible y que resultados e ideas podemos extraer de todo ello de cara al futuro. Palabras claves: Deep Learning, Máquina Virtual, dataset, framework, script, descriptors, release. Title: Big data and Deep Learning for the detection of objects within images Author: Alessandro Iván Fava Fernández Director: Esther Salamí San Juan Date: October 31st 2017 Overview In this project we can see two fields that are very popular nowadays, Big Data and Deep Learning. In particular, the object detection is in the field of artificial vision. But we are not looking for detect an object within the image, we try to solve a problem. The problem to resolve is when we don't have a dataset large enough to get an optimal result. These days this problem persist, if we develop an application to looking for a rare animal species that is endangered, is more probably that the images that we have from this animal will be not enough to get a good result for detect them. To resolve this problem we have used two different technologies. The first one, it has proved it efficiency detecting faces, this is the Haar-Cascade over OpenCV. The second one is relatively newest, it is called transfer learning. In the case of transfer learning we use a framework called Cognitive Toolkit developed by Microsoft and also we use Azure cloud service developed by Microsoft. To prove the efficiency of this two methods we have tried to detect different objects: Watches, wolfs, sheep and helipad signs. We have chosen this last object because there isn’t any dataset of it and this makes it closer to a one real case. Finally, we will test in practical way. If all we planned before is possible we will be able to find out interesting ideas for the future. Key words: Deep Learning, Virtual Machine, dataset, framework, script, descriptors, release. ÍNDICE CAPÍTULO 1. INTRODUCCIÓN ........................................................................ 1 1.1. Motivación y objetivos ...................................................................................................... 1 1.2. Organización del documento ........................................................................................... 1 CAPÍTULO 2. MARCO CONCEPTUAL E HISTÓRICO .................................... 3 2.1. Marco conceptual .............................................................................................................. 3 2.1.1. Image Processing ................................................................................................... 4 2.1.2. Machine learning .................................................................................................... 4 2.1.3. Machine vision ........................................................................................................ 4 2.2. Marco histórico y evolución ............................................................................................. 4 2.3. ¿Qué es un clasificador? .................................................................................................. 7 2.3.1. Aprendizaje supervisado ........................................................................................ 9 2.3.2. Aprendizaje no supervisado ................................................................................... 9 2.3.3. Aprendizaje semi-supervisado ............................................................................. 10 CAPÍTULO 3. DETECCIÓN DE OBJETOS CON HAAR-CASCADE .............. 12 3.1. ¿Qué es OpenCV? ........................................................................................................... 12 3.2. Funcionamiento de Haar-cascade ................................................................................. 13 3.2.1. Imagen integral ..................................................................................................... 14 3.2.2. Adaboost (Adaptative Boost) ................................................................................ 14 3.2.3. Cascada de clasificadores .................................................................................... 20 CAPÍTULO 4. FASE EXPERIMENTAL I: HAAR-CASCADE .......................... 22 4.1. Instalación entorno experimental .................................................................................. 22 4.2. Desarrollo experimental .................................................................................................. 22 4.2.1. Obtención de las imágenes .................................................................................. 22 4.2.2. Creación de imágenes positivas........................................................................... 25 4.2.3. Entrenamiento del clasificador ............................................................................. 27 4.2.4. Test de precisión del clasificador ......................................................................... 29 4.2. Conclusiones ................................................................................................................... 32 CAPÍTULO 5. DETECCIÓN DE OBJETOS CON TRANSFER LEARNING .... 33 5.1. Deep learning ................................................................................................................... 33 5.2. ¿Qué es CNTK (Cognitive Toolkit)?............................................................................... 34 5.3. Convolutional Neural Networks (CNN ó ConvNets) ..................................................... 36 5.3.1. Convolución .......................................................................................................... 37 5.3.2. Funciones de activación (Activation functions) .................................................... 40 5.3.3. Agrupación (Pooling) ............................................................................................ 41 5.3.4. Capa totalmente conectada (fully connected layer) ............................................. 43 5.4. Transfer learning ............................................................................................................. 44 5.4.1. Transferencia de conocimientos en DCNN .......................................................... 45 CAPÍTULO 6. FASE EXPERIMENTAL II: TRANSFER LEARNING ............... 47 6.1. Entorno experimental ...................................................................................................... 47 6.1.1. Azure .................................................................................................................... 47 6.1.2. Deep Learning Virtual Machine (DLVM) ............................................................... 48 6.1.3. Despliegue de DLVM ............................................................................................ 48 6.2. Desarrollo experimental .................................................................................................. 49 6.2.1. Obtención de las imágenes .................................................................................. 49 6.2.2. Entranamiento y evaluación ................................................................................. 51 6.3. Conclusiones ................................................................................................................... 54 CONCLUSIONES ............................................................................................ 56 BIBLIOGRAFÍA ............................................................................................... 58 ANEXOS ............................................................................................................ 1 ANEXO I. MULTILAYER PERCEPTRON (MPL) ............................................... 1 ANEXO II. INSTALACIÓN OPENCV ................................................................. 3 ANEXO III. HAAR-CASCADE SCRIPTS ........................................................... 5 ANEXO IV. EVALUACIÓN DEL RENDIMIENTO DE UN CLASIFICADOR ...... 7 ANEXO V. TRANSFER LEARNING SCRIPTS .................................................. 8 Introducción 1 CAPÍTULO 1. INTRODUCCIÓN 1.1. Motivación y objetivos En la actualidad hay un creciente uso de tecnologías que emplean Big Data y Deep learning a la hora de encontrar algo, es decir, tanto a nivel lingüístico como en imágenes se trata de encontrar palabras claves u objetos en imágenes para un fin. Este fin pueden ser recomendaciones, la ubicación de un objeto en una tienda, tareas de rescate como encontrar una persona, etc. Por ello este proyecto se centra en la detección de objetos y la clasificación de imágenes. No se trata simplemente en diferenciar los elementos que conforman una imagen, en la actualidad hay decenas de aplicaciones que nos permiten esto, el objetivo va más allá intentando buscar la solución a un problema. Este problema es recurrente cuando hablamos de Big Data y Deep Learning y es la falta de muestras. Comúnmente los algoritmos de clasificación y detección de objetos requieren de un gran número (decenas de miles) de muestras para entrenar el sistema. Pero no siempre disponemos de esta cantidad entonces nos planteamos: ¿Es posible alguna alternativa u obtener un resultado óptimo? Durante la realización de este proyecto intentaremos ver como resuelven este problema algunas de las tecnologías existentes. Las tecnologías que emplearemos son dos. Una más reciente denominada transfer learning y otra no tan reciente pero con resultados óptimos en otros campos llamada HaarCascade. El principal objetivo es comprobar la eficacia y viabilidad de estas tecnologías, pero para ello emplearemos diversos tipos de muestras. Algunas sencillas como detectar un reloj en una imagen y otras más complejas, tanto como para la detección como para obtener imágenes, que es caso de una señal de helipuerto. Este segundo objeto es escogido para darle un sentido práctico y acercarnos a un caso real, no como objetivo. Ya que no hay dataset de imágenes de este objeto. Y por otro lado si logramos unos resultados satisfactorios, este tipo de objeto suele ser empleado tanto para salvamento como para aterrizaje de vehículos aéreos con conducción autónoma. 1.2. Organización del documento El documento se encuentra dividido en seis partes, tres partes son teóricas y dos son a nivel experimental y una última que corresponde a las conclusiones: - La primera parte el capítulo 2: Marco conceptual e histórico, el objetivo es de explicar los diferentes campos que encontramos en la visión artificial y como están relacionados entre ellos. También explicar la evolución que 2 Big data y Deep Learning para la detección de objetos en imágenes ha habido a la hora de detectar objetos dentro de las imágenes, tanto las técnicas como las tecnologías utilizadas a lo largo de la historia. - Capítulo 3: Detección de objetos con Haar-Cascade. En esta segunda parte explicaremos Haar-Cascade como método de detección de objetos, así como su funcionamiento y la librería principal que necesitamos para trabajar con el que es OpenCV. - Seguidamente explicamos en el capítulo 4 el funcionamiento a nivel experimental de Haar-Cascade. Explicamos tanto la preparación del entorno de trabajo como el desarrollo con los recursos (imágenes) utilizados y unas conclusiones respecto a los resultados obtenidos - La tercera parte corresponde al capítulo 5: Detección de objetos con transfer learning. En este capítulo explicamos que es transfer learning, que herramientas empleamos, como el framework CNTK (Cognitive Toolkit) desarrollada por Microsoft. También explicaremos el funcionamiento del clasificador utilizado que es DCNN (Deep Convolutional Neural Network) - En el capítulo 6 y segunda fase experimental vemos el funcionamiento de transfer learning a nivel práctico. De la misma forma que en el capítulo anterior, analizaremos la instalación y preparación del entorno. También analizaremos el desarrollo con las diferentes herramientas utilizadas, y finalmente unas conclusiones para analizar brevemente los resultados obtenidos si eran los esperados. - Esta parte final corresponde a las conclusiones, donde analizamos todas las ideas extraídas de realización del proyecto así como una evaluación de los objetivos planteados inicialmente. Marco conceptual e histórico 3 CAPÍTULO 2. MARCO CONCEPTUAL E HISTÓRICO Actualmente existen miles de aplicaciones que emplean la detección de objetos. Un ejemplo de esto es la detección de rostros en las cámaras de los móviles. ¿Pero sabemos realmente qué hay detrás de todo esto y su evolución a lo largo de los años? Estas son cuestiones que resolveremos en este apartado. 2.1. Marco conceptual Dentro de una imagen podemos encontrar diversos objetos y formas, las cuales queremos detectar o identificar, pero antes de entrar en más detalle sobre la detección y reconocimiento de objetos debemos conocer sobre qué campo estamos trabajando y cómo ha evolucionado. Todo este trabajo se desarrolla dentro del campo de la visión artificial. A la hora de definir qué es la visión artificial y su objetivo nos encontramos con dos puntos de vista. Por una parte a nivel biológico se trata de conseguir replicar el sentido de la vista y todas sus capacidades. Por otro lado desde el punto de vista de la ingeniería el objetivo no es simplemente el de replicar, sino que se trata de automatizar tareas que realizamos con la vista, por ejemplo identificar un objeto. Normalmente esta automatización sobrepasa las capacidades humanas. Ambos objetivos están relacionados, ya que desde siempre en la creación de nuevos sistemas el ser humano se ha fijado en la naturaleza. La visión artificial implementa técnicas y tecnologías de otros campos, de la misma forma que otros campos utilizan la visión artificial como una herramienta para obtener resultados u objetivos. En la imagen siguiente podemos ver los campos principales que envuelven la visión artificial. Empleando la Fig. 2.1 nos centraremos en tres campos: Image Processing, Machine Learning y Machine Vision. Fig. 2. 1 Diagrama de los diferentes campos relacionados con computer visión [6] 10 Big data y Deep Learning para la detección de objetos en imágenes El objetivo de este tipo de aprendizaje es obtener mayor información sobre los datos tratados, intentando modelar la estructura o distribución subyacente. Para modelar esta estructura se busca una asociación entre ellos, mediante probabilidades condicionales, o se agrupan (Clustering) según las características obtenidas por el descriptor. La agrupación (Clustering) se emplea para obtener grupos de datos relacionados dentro del dataset, como por ejemplo los clientes que invierten en el mismo ámbito comercial. Por otro lado, la asociación se emplea para descubrir reglas dentro de los datos, como por el ejemplo los clientes que compran cierto producto compran este también. Algunos clasificadores empleados pueden ser neuronales como EM-algorithm o de tipo agrupador como K-means. Fig. 2. 11 Ejemplo clasificador k-means [12] 2.3.3. Aprendizaje semi-supervisado El aprendizaje semi-supervisado ha tenido muchos avances en estos últimos años, ya que nos permite reducir el gran coste que supone obtener un dataset de imágenes etiquetadas. Mediante este nuevo método empleamos una pequeña cantidad de muestras con imágenes etiquetadas que no suponen un gran coste y un gran dataset de imágenes sin etiquetar. Los estudios recientes demuestran que el emplear aunque sea un número muy pequeño de imágenes etiquetadas nos permite mejorar considerablemente la eficacia del entrenamiento y por tanto la clasificación. Marco conceptual e histórico 11 Para esta forma de aprendizaje se suelen utilizar algoritmos de agrupación, que se emplean en aprendizaje no supervisado, ya que mediante los datos etiquetados podemos ver qué conjunto de muestras no etiquetadas son relacionadas con este grupo, y por tanto obtener un mayor número de muestras correctas. Se puede suponer que no todas las muestras asociadas al conjunto de muestras etiquetadas pertenezcan a este conjunto pero aun siendo así el número de muestras etiquetadas aumentará. Fig. 2. 12 Agrupación de muestras no etiquetadas con muestras etiquetadas [14] Detección de objetos con Haar-Cascade 12 CAPÍTULO 3. DETECCIÓN DE OBJETOS CON HAARCASCADE Existen diversos métodos para detectar objetos, actualmente uno de los más empleados para detección de rostros y objetos es Haar-Cascade, por ello es importante antes de empezar directamente con la práctica entender cómo funciona esta solución y el porqué de esta elección. 3.1. ¿Qué es OpenCV? Opencv (OpenSource Computer Vision) es una librería de código abierto de visión artificial y machine learning. Esta librería fue desarrollada originalmente por Intel lanzando su primera alfa en Enero de 1999 y su primera versión estable en 2006. Tres años después en Octubre de 2009 se lanzó su segundo release OpenCV v2. La librería tiene una licencia BSD, que permite que el usuario pueda usar y modificar el código. Por otra parte este tipo de licencia permite que pueda ser empleada tanto para propósitos comerciales como para la investigación. En la actualidad muchas grandes multinacionales la emplean, como Sony, Google, Yahoo, Honda, etc. De la misma manera cuenta con una comunidad de más de 47000 persona y con más de 7 millones de descargas. Originalmente fue escrita para trabajar con lenguaje C/C++, aunque su mayor virtud es que es multiplataforma. Actualmente podemos utilizarla con otros lenguajes como Java, Objective C, Python y C#. Como hemos comentado se trata de un librería multiplataforma, por lo que podemos usarla en Linux, Windows, Mac OS X, Android e iOS. Esta librería ha sido muy robusta desde los inicios, por lo que hace 2 años en 2015 lanzó su tercera release (OpenCV v3), la cual nos permite trabajar con versiones más recientes de algunos lenguajes, como Python 3.0. En la actualidad OpenCV consta con más de 2500 algoritmos tanto de machine learning como de visión artificial. Estos algoritmos permiten identificar objetos, caras, clasificar acciones humanas en vídeo, hacer tracking de movimientos de objetos, extraer modelos 3D, encontrar imágenes similares, eliminar ojos rojos, seguir el movimiento de los ojos, reconocer escenarios, etc Detección de objetos con Haar-Cascade 13 Fig. 3. 1 Funcionalidades de OpenCV [17] 3.2. Funcionamiento de Haar-cascade En este apartado definiremos el funcionamiento del primer método. El cual emplearemos para la detección de objetos con un número muy reducido de muestras etiquetadas. Haar-cascade classifier es un método muy efectivo de detección de objetos propuesto por Paul Viola y Michael Jones. Este método utiliza un descriptor Haar, el cual utilizando unos filtros conseguimos una gran cantidad de características de la imagen. Fig. 3. 2 En esta imagen podemos ver un ejemplo de filtros de Haar [24] Estos filtros recorren la imagen completa a diferentes escalas y en múltiples posiciones de la imagen, estas múltiples posiciones incluyen el aplicar los filtros con una inclinación de 45º. Las características que se obtienen es la suma de píxeles negros menos la suma de píxeles blancos. Aplicando estos filtros obtenemos una cantidad muy grande de características de Haar, ya que por cada recorrido que realice un filtro en un tamaño y posición determinada por la imagen obtenemos una característica. El principal problema que surge al utilizar este descriptor es la cantidad de características que genera y lo costoso que resulta el tiempo de cálculo, así como 14 Big data y Deep Learning para la detección de objetos en imágenes el aprendizaje. Para solucionar este problema y aumentar la eficiencia tenemos diferentes técnicas y herramientas. 3.2.1. Imagen integral Una de las herramientas que utiliza es la imagen integral de la imagen. La imagen integral es una transformación de la imagen original, que nos da como resultado una imagen del mismo tamaño que la original. Pero donde el valor de cada píxel corresponde a la suma de todos los píxel situados arriba a la izquierda en la imagen original. Fig. 3. 3 Explicación visual de imagen integral [24] Esto nos facilita y agiliza el cálculo de intensidades de cualquier rectángulo dentro de la imagen, y como hemos comentado anteriormente la obtención de las características de haar es la aplicación de los filtros, los cuales realizan una suma de intensidades. 3.2.2. Adaboost (Adaptative Boost) Una vez obtenidas todas las características de la imagen deberemos aplicar un clasificador adecuado que pueda tratar con todas estas características, este clasificador es Adaboost. Esta herramienta nos permitirá agilizar el proceso de clasificación. Adaboost emplea un conjunto de clasificadores denominados decision stump. Estos clasificadores son arboles de decisión binaria de profundidad uno, y su rendimiento es ligeramente mayor al de uno de clasificación aleatoria. Este tipo de clasificador establece las decisiones a partir de un umbral y separando en dos las muestras, -1 y +1. Detección de objetos con Haar-Cascade 15 Fig. 3. 4 Diagrama de un decision stump [28] La función en la que se basará el clasificador para decidir será una característica de Haar, pero como hemos dicho emplea un conjunto de clasificadores, de manera que combinando este tipo de clasificadores obtenemos una clasificación muy buena. Para entender mejor el funcionamiento del clasificador adaboost cuando lo entrenamos, partamos de un ejemplo:  Primero contaremos con un número de muestras al que le aplicaremos un primer clasificador. Fig. 3. 5 Diagrama de muestras aleatorias  Una vez hemos aplicado el primer clasificador obtenemos la siguiente clasificación: Fig. 3. 6 Utilización del primer clasificador 16 Big data y Deep Learning para la detección de objetos en imágenes  Adaboost aplica un peso mayor a las muestras clasificadas de forma incorrecta y un peso menor a las muestras clasificadas correctamente. Fig. 3. 7 Ejemplo de cómo cambian los pesos en las muestras  De esta forma el clasificador aprende de cada clasificador que crea y emplea, al aplicar un siguiente clasificador volverán a cambiar los pesos, ya que las muestras erróneas serán otras y obtendremos lo siguiente: Fig. 3. 8 Utilización del segundo clasificador  Ahora aplicaremos un tercer clasificador que volverá a ajustar los pesos Fig. 3. 9 Utilización tercer clasificador y variación de los pesos  Ahora se obtendrá la combinación de todos los clasificadores. En cada área veremos qué tipo de clasificación se ha aplicado, es decir si la ha Detección de objetos con Haar-Cascade 17 clasificado mayoritariamente como negativa o positiva, será una región positiva o negativa. Fig. 3. 10 En esta ilustración vemos cómo se comparan las diferentes clasificaciones y la clasificación resultante Respecto al clasificador decision stump hemos de tener en cuenta un factor. Este factor es cómo decide qué lado del umbral corresponde al negativo o al positivo. Para ello en la formulación del clasificador se aplica un parámetro (alfa) que nos permite discernir en qué situación nos encontramos. Fig. 3. 11 En esta figura se indica que la zona izquierda corresponde a la zona negativa [28] Fig. 3. 12 En esta figura se indica que la zona izquierda corresponde a la zona positiva [28] 18 Big data y Deep Learning para la detección de objetos en imágenes Fig. 3. 13 Formula del decision stump (alfa solo puede valer -1 o 1) De esta forma la eficacia de decisión del clasificador depende únicamente del parámetro alfa y del valor del umbral. Una vez hemos visto cómo entrenamos el clasificador, el algoritmo de clasificación ha de decidir cuál es el umbral con menor error. Para ello primero deberemos ordenar las muestras y recorrer la función de f(x). Tabla 3. 1 Muestra las ponderaciones y los valores de las muestras Ponderación 0.5 0.5 0.5 2 1 2 1 1 0.5 0.5 0.5 2 f(x) 48 44 38 35 32 26 22 17 16 12 11 8 Muestras Por ejemplo si establecemos el umbral en 48 estamos diciendo que a la derecha del umbral se encuentran las muestras positivas y a la izquierda las negativas, de forma que se vería la siguiente tabla: Tabla 3. 2 Muestra el criterio de Umbral según el valor de muestra seleccionado Ponderación 0.5 0.5 0.5 2 1 2 1 1 0.5 0.5 0.5 2 f(x) 48 44 38 35 32 26 22 17 16 12 11 8 Muestras Positivo Negativo De manera que tendríamos mal clasificadas siete muestras. Para calcular el error de clasificación debemos de sumar las ponderaciones de las muestras mal clasificados y dividirlas por el número de muestras. Fig. 3. 14 Ejemplo de aplicar la fórmula de cálculo de error Detección de objetos con Haar-Cascade 19 De esta forma calculamos el error con todos los umbrales y nos quedamos con aquel que el error sea menor. Una vez seleccionado el mejor clasificador. Ahora veremos cómo varían los pesos en las diferentes muestras y cómo combinamos los diferentes clasificadores. Cada uno de los clasificadores se centra en una característica de Haar diferente, también hay que tener en cuenta que Adaboost utiliza un método iterativo, de manera que los pesos anteriores afectan en la siguiente iteración. Fig. 3. 15 Fórmula de cálculo de los pesos de las muestras En la Fig. 3.15 podemos ver cómo se obtienen los pesos de la siguiente iteración dependiendo del error del clasificador aprendido anterior y el error actual. De esta forma podemos deducir que el error de clasificación tiene que ser superior al de un clasificador aleatorio, como mínimo ligeramente. Fig. 3. 16 Fórmula para determinar si es una muestra mal o bien clasificada A partir de la Fig. 3.16 podemos ver como en el caso de una muestra mal clasificada se multiplicará su peso anterior por un factor superior a 1, y en el caso de una muestra bien clasificada se multiplicará por un factor inferior a 1. De esta forma se ajustaran los pesos de las muestras en cada iteración. Una vez hemos visto cómo se ajustan los pesos de las muestras en cada iteración, ahora veremos cómo este reajuste continuo afecta al peso del clasificador aprendido. También veremos cómo unimos los clasificadores aprendidos y cómo creamos el clasificador fuerte, que es la unión de todos los stump classifier. Primero como hemos explicado anteriormente Adaboost se basa en los pesos para determinar las características más importantes, es decir, cada clasificador se encargará de clasificar a partir de una característica de Haar y en 26 Big data y Deep Learning para la detección de objetos en imágenes opencv_createsamples -img positiveimage5050.jpg -bg bg.txt -info info/info.lst - pngoutput info -maxxangle 0.5 -maxyangle 0.5 -maxzangle 0.5 -num 1800 Con el comando anterior lo que hacemos es mediante -img establecemos como imagen fuente nuestra imagen positiva y empleamos como fondo las imágenes descriptivas, esto con indicamos con el descriptor anteriormente creado, -bg bg.txt. Con el atributo -info indicamos donde crearemos la lista de imágenes positivas así como la descripción de ellas como podemos ver en la Fig. 4.8. En el archivo info podemos ver como en cada línea se indica el nombre de la imagen, el número de objetos detectados dentro que corresponde al primer número después del nombre de la imagen y finalmente se indica la posición del objeto. En la Fig. 4.8 podemos ver un ejemplo de archivo info. En este archivo los últimos cuatro números indican los ejes X, Y y el alto y ancho el objeto de la imagen. A continuación indicamos cuánto se moverá nuestra imagen fuente (imagen positiva) dentro del fondo, esto lo indicamos con la variación en los diferentes ejes, -maxxangle 0.5 -maxyangle 0.5 -maxzangle 0.5. Fig. 4. 5 Ejemplo info.lst Finalmente, mediante el atributo -num 1800 estamos indicando cuantas muestras positivas queremos crear. Fig. 4. 6 Ejemplo de imágenes positives creadas a partir de las originales Fase experimental I: Haar-Cascade 27 4.2.3. Entrenamiento del clasificador Una vez tenemos todas las imágenes necesarias para entrenar nuestro clasificador debemos de crear el archivo .vec. Este archivo contiene el nombre de todas las imágenes positivas y la localización del objeto a detectar dentro de la imagen. Necesitamos crear este archivo porque en el cargaremos la información correspondiente a las imágenes, esto facilita la carga computacional dentro del clasificador. Para crear este archivo emplearemos el siguiente comando: opencv_createsamples -info info/info.lst -num 1800 -w 20 -h 20 -vec positives.vec Con este comando estamos empaquetando las imágenes en un vector, archivo .vec, por tanto debemos indicar al clasificador donde se encuentran las imágenes positivas (-info info/info.lst), el número de imágenes, el tamaño de las imágenes de entrenamiento y las características de las imágenes. A continuación, debemos de entrenar nuestro clasificador para ello emplearemos el siguiente comando: opencv_traincascade -data data -vec positives.vec -bg bg.txt -numPos 1900 - numNeg 900 -numStages 15 -w 20 -h 20 Mediante este comando lo que estamos haciendo es indicar, primero de todo donde guardará los resultados, en la carpeta data (-data data). Después le indicamos el archivo .vec que es el que contiene la información de las imágenes positivas, seguidamente añadimos el parámetro para indicar el archivo bg.txt donde aparecen las características de las imágenes negativas. A continuación indicamos el número de imágenes negativas (900 imágenes) y positivas (1900 imágenes) que emplearemos en el entrenamiento, así como su ancho y alto (-w 20 -h 20) que debe ser la misma que asignamos en la creación de las muestras. Por último indicamos el número de etapas de ejecución de nuestro clasificador, hay que tener en cuenta que mientras más etapas ejecuten más preciso es. 28 Big data y Deep Learning para la detección de objetos en imágenes Fig. 4. 7 Entrenamiento del clasificador en 14 stages Aunque mediante este método únicamente podemos emplear una imagen positiva y a partir de ella crear más, existe otra forma de mejorar la capacidad de detección o como mínimo intentarlo. En este método lo que hacemos es unir mediante un script los archivos .vec realizados con dos imágenes positivas diferentes. De esta forma obtenemos un mayor número de imágenes positivas, esto a nivel teórico mejora la capacidad de detección. Aunque se parezca mucho a la forma original de entrenamiento de un clasificador mediante imágenes positivas del objeto a detectar, es totalmente diferente, ya que empleamos un número ínfimo de imágenes positivas y creamos más a partir de ellas. Esta unión de archivos .vec se suele usar para aumentar el número de imágenes positivas en otros métodos. En casos donde tenemos pocas imágenes positivas y queremos aumentar este número con imágenes artificiales. Las imágenes artificiales son aquellas imágenes que se basan en las imágenes positivas originales con alguna variación, como modificar el contraste, rotar la imagen, etc. Esta solución no resulta muy acertada porque estamos distorsionando nuestras muestras positivas con otras que no corresponden al entorno real. Pero este no es nuestro caso. Nosotros estamos empleando en ambos casos imágenes artificiales creadas a partir de una imagen positiva, más adelante comprobaremos si resulta útil o efectiva esta opción. Ejecutando el comando siguiente creamos un archivo .vec a partir de diferentes archivos .vec que se encuentran dentro de una carpeta. Fase experimental I: Haar-Cascade 29 python mergevec.py -v your_vec_directory -o your_output_filename.vec Fig. 4. 8 Directorio donde aplicamos el merge de los archivos .vec para generar uno que contenga toda la información 4.2.4. Test de precisión del clasificador Una vez hemos entrenado nuestro clasificador debemos de comprobar su eficacia. Hay que tener en cuenta que el entrenamiento se ha realizado sobre un portátil normal y de gama baja, por lo que el número de etapas no ha sido muy elevado. Una opción es emplear una máquina virtual y preparar el entorno dentro de ella, esto conlleva un cierto gasto. Para testear el clasificador hemos empleado dos formas. Una mediante la cámara del portátil la cual captura imágenes a tiempo real y podemos ver en la pantalla si el objeto ha sido detectado, y otra vía es aplicar el clasificador sobre una carpeta con imágenes de testeo. Para realizar estas pruebas hemos empleado diversos scripts1 uno en el cual empleamos un conjunto de imágenes de test, y otro en el cual realizamos una detección a tiempo real empleando la webcam del portátil. En el segundo caso ha sido imposible obtener una imagen de muestra en la cual se vea el objeto detectado. El principal problema es la dificultad a la hora de detectar el objeto, pero esto puede ser debido a que empleábamos la cámara del portátil y la calidad de la imagen no era lo suficientemente buena. Cuando hemos utilizado imágenes de testeo hemos obtenido diferentes resultados. Ninguno de ellos ofrece unas buenas expectativas. Fig. 4. 9 Resultados con prueba de detección de relojes En la primera prueba, el caso referente al reloj Fig. 4.14 hay cierto error pero funciona correctamente, como se ha comentado anteriormente hay que tener en cuenta las herramientas empleadas para el entrenamiento del clasificador. 1. Anexo III. Haar-cascade scripts 30 Big data y Deep Learning para la detección de objetos en imágenes Por otro lado, en el segundo caso Fig. 4.15 y más complicado la detección tiene muchos errores y problemas, aunque consigue detectar en algunos casos el objeto. El número de falsos positivos es demasiado elevado. Esto era algo que preveíamos que pudiera pasar. Debido a que el objeto a detectar es más pequeño y la venta ventana de búsqueda también. Además de sumarle la capacidad computacional del portátil. Fig. 4. 10 Resultado prueba de detección de señal de helipuerto (señal marcada con flecha roja) En la Fig. 4.16 podemos ver un ejemplo empleando el archivo .vec creado por el script merge. La principal diferencia es el número de falsos positivos, pero persiste el gran número de errores. Fig. 4. 11 Resultado de la prueba de detección con fichero .vec realizado con merge Ahora analizaremos con más detalle los resultados obtenidos. Fase experimental I: Haar-Cascade 31 Tabla 4. 1 Resultados testeo haar-cascade Objeto Método Nº de imágenes (muestras) Falsos positivos Positivos reales Reloj Sin merge 100 124 38 Con merge 100 0 3 Señal de helipuerto 1 Sin merge 40 2534 5 Con merge 40 2417 5 Señal de helipuerto 2 Sin merge 15 178 1 Con merge 15 235 3 En la Tabla 4.1 podemos apreciar que hay dos casos de la señal de helipuerto. Esto es debido a que hemos empleado dos tipos de imágenes ligeramente diferentes. En el caso dos la imagen es con un enfoque más cercano a la señal de helipuerto. Fig. 4. 12 Imágenes señales helipuerto (caso 1 a la izquierda y caso 2 a la derecha) Analizando los resultados de la Tabla 4.1 podemos sacar diferentes conclusiones1. En el caso de los relojes podemos distinguir dos resultados. El primer resultado sin aplicar merge. En este caso haar-cascade es capaz de detectar 38 positivos reales, 62 falsos negativos y 124 falsos positivos del total de 100 muestra. Esto nos da una precisión del 23.46%. Pero si analizamos la sensibilidad (recall) obtenemos que es del 38%. En el segundo resultado utilizando merge no hay falsos positivos. Esto nos da una precisión del 100%. Pero por otro lado la sensibilidad es del 3%. Si analizamos los resultados de la señal de helipuerto nos encontramos con resultados más dispersos, ya que hemos realizado dos casos. En el primer caso y sin utilizar merge obtenemos una precisión del 0.2% debido al gran número de falsos positivos. Si estudiamos la sensibilidad esta es del 12.5%. En este primer caso utilizando merge la precisión es del 0.2% también debido al gran número de falsos positivos. Respecto a la sensibilidad, esta no varía en 1. Anexo III. Evaluación del rendimiento de un clasificador 32 Big data y Deep Learning para la detección de objetos en imágenes comparación con no usar merge. Debido a que el número de detecciones es la misma en ambos casos. En el segundo caso empleando imágenes con un enfoque más cercano obtenemos otros resultados. Primero sin merge la precisión sube hasta 0.5% y la sensibilidad baja hasta el 6.6%. Si analizamos este caso empleando merge nos encontramos con una precisión del 1.26%. Y respecto a la sensibilidad esta sube hasta el 20%, bastante más elevada que en los otros casos. 4.2. Conclusiones Después de haber realizado diversas pruebas a diferente número de stages, ya que la capacidad computacional del portátil no es muy elevado y surgían algunos problemas, hemos obtenidos dos tipos de resultados. Unos dependen del objeto a detectar, como hemos podido ver la capacidad de detección del reloj ha sido mucho más eficaz y significativa que a la hora de detectar la señal de aterrizaje de un helicóptero. Por otro lado, otro punto importante son los resultados obtenidos empleando el script merge. En el caso de los relojes hemos obtenido una precisión del 100%, pero una sensibilidad del 3%, es decir, solo ha detectado el reloj en tres imágenes de las 100 que hemos usado para testear el clasificador. En el caso de las señales de helipuerto utilizar merge reduce el número de falsos positivos. Pero de todas formas sigue siendo muy elevado. Por todo esto podemos concluir que a la hora de utilizar la unión de los ficheros .vec dependerá de la dificultad que suponga detectar este objeto, es decir, con una vista preliminar podemos ver que identificar un reloj es mucho más sencillo que una señal de aterrizaje de helicóptero. Este es un factor fundamental que nos permite discernir entre emplear un método u otro. También analizando los resultados numéricos nos encontramos con el último caso. En este caso usamos 16 imágenes de test y con un enfoque más cercano, además de usar merge. En él obtenemos una sensibilidad del 20%. Pero hay que tener en cuenta que en las imágenes donde detectamos de forma correcta la señal hay un gran número de falsos positivos, por tanto tenemos una precisión muy baja (1.26%). Este es otro factor a tener en cuenta, el número de falsos positivos. Detección de objetos con transfer learning 33 CAPÍTULO 5. DETECCIÓN DE OBJETOS CON TRANSFER LEARNING 5.1. Deep learning Deep learning es un campo dentro de machine learning que se vale de algoritmos inspirados en la estructura y funcionamiento del cerebro humano, creando redes neuronales artificiales. En si se trata de una enorme red neuronal artificial definidas por diferentes capas y donde emplea una gran cantidad de datos para entrenar. Un punto importante es que utiliza múltiples transformadas no lineales. Este tipo de transformadas consisten en al alterar la posición de los pixeles pero mantienen la intensidad de ellos. Esto nos permite distinguir un objeto en diferentes posiciones y establecer una etiqueta. Además deep learning cuenta con bases de datos inmensas donde acumula esta información. Esto conforma un sistema de gran capacidad que nos permite por ejemplo, que si analizamos la imagen de un coche, no será necesario convertir la imagen en un vector y partir de que simplemente se trata de una imagen. Esto quiere decir que habrá una etiqueta que identifique inmediatamente esta imagen, y sabrá que se trata de un coche. Debido que al contener tanta información y haber entrenado tanto ya sabrá ciertas cosas. Este nuevo sistema de aprendizaje a diferencia de los algoritmos tradicionales sigue aprendiendo a medida que más datos posean, siendo escalable y versátil. Fig. 5. 1 Capacidad de aprendizaje a partir de la cantidad de información [50] 34 Big data y Deep Learning para la detección de objetos en imágenes Un factor importante en el tipo de datos que empleamos en deep learning es que se trata de datos etiquetados o por aprendizaje supervisado. Pero esto no es algo negativo, ya que la gran cantidad de datos que posee y poseerá la red permitirá analizar información mediante un método no supervisado sin problemas, simplemente es cuestión de tiempo. Otro punto importante es que se pueden incorporar nuevos algoritmos según los datos a tratar y nuevos modelos a partir de la información adquirida, como hemos comentado se trata de un crecimiento constante. Esta forma de aprendizaje por capas nos permite obtener características a diferentes niveles y por tanto mejorar la detección de objetos. Este análisis más detallado de las características obliga a emplear elementos con una capacidad mayor de procesado. A consecuencia de esto se utilizan procesadores con una mayor capacidad o se busca combinar diferentes formas de realizar las tareas. En resumen se emplean GPU (Graphicsl Processor Unit) para el análisis de los datos que ofrecen núcleos que realizan operaciones iterativas en paralelo mejorando el rendimiento, más adelante en la fase experimental explicaremos con más detalle las ventajas de estos procesadores ofrecen. Fig. 5. 2 Representación de características de una imagen a diferentes niveles Fig. 5. 3 Comparativa de núcleos en CPU y GPU [51] 5.2. ¿Qué es CNTK (Cognitive Toolkit)? Se trata de un framework de deep learning desarrollado por el departamento de investigación de Microsoft, el cual describe diversos tipos de redes neuronales. Detección de objetos con transfer learning 35 Dentro de este framework encontramos una gran cantidad de recursos para diferentes lenguajes. También consta con una arquitectura propia. Fig. 5. 4 Diagrama de la arquitectura de CNTK [49] Por otro lado, cómo trabajaremos empleando python como lenguaje de desarrollo utilizaremos la librería de python que ofrece CNTK donde incluye modelos de definición y computación, algoritmos de aprendizaje y lectura de datos y aprendizaje distribuido. CNTK ofrece principalmente diferentes modelos neuronales y otro tipo de modelos también de gran utilidad:  Feedforward Deep Neural Networks (multilayer perceptron – MLPs1): Este tipo de modelos se diferencia de una red neuronal típica en el número de capas que contiene, por ello se le profunda. Fig. 5. 5 Comparación entre una red neuronal y una red neuronal profunda [49] Otro factor es el concepto feedforward que indica que esta redes la información fluye en un sentido no hay procesos cíclicos entre los diferentes núcleos y capas, de manera que no hay conexiones de feedback. 1. Anexo I: Multilayer perceptron 42 Big data y Deep Learning para la detección de objetos en imágenes  Sum Pooling: Este método aplica la suma como operación. El resultado de la suma se compone por todos los valores de las características que hay en la ventana. Fig. 5. 14 Ejemplo Sum Pooling  Average Pooling: Utilizando esta manera de agrupar las características lo que obtenemos es la media aritmética de los valores que se encuentran dentro de la ventana. Fig. 5. 15 Ejemplo Average Pooling En la agrupación espacial la ventana se desplaza dependiendo del tamaño de la ventana, es decir, si la ventana es de 2x2 se desplaza cara dos celdas, de manera que si aplicamos una ventana de NxN el desplazamiento de la ventana es de N. Las características principales que ofrece y por qué se aplica la agrupación espacial es:  Hace que las características de entrada, correspondientes a las imágenes, más pequeñas, menor cantidad, y más manejables.  Al reducir el número de características se consigue una reducción de parámetros y cálculos dentro de la red, de manera que se obtiene un control del sobreajuste.  Aporta un cierto control de errores, haciendo la red invariante a pequeñas transformaciones, distorsiones o traslaciones en la imagen de entrada. Esto es debido a que empleamos métodos como el max pooling, sum pooling y average pooling en una ventana local. Detección de objetos con transfer learning 43  Conseguimos una representación a escala casi invariante de nuestra imagen de entrada, esto nos permite localizar objetos dentro de la imagen independientemente de donde se encuentren dentro de la imagen. Fig. 5. 16 Ejemplo y comparación entre max pooling y sum pooling [60] 5.3.4. Capa totalmente conectada (fully connected layer) Después de haber visto el gran bloque anterior que corresponde a la capa de convolución y agrupación, ahora analizaremos el siguiente gran bloque que es donde se interconectan los diferentes núcleos (neuronas) que componen nuestra red convolucional neuronal. Una vez hemos obtenido las diferentes features maps correspondientes a la imagen de entrada, debemos de realizar una clasificación de lo que estamos analizando. Para realizar la clasificación aplicamos un clasificador denominado MLP (Multilayer Perceptron)1. Este clasificador interconecta mediante nodos (neuronas) diferentes características (features maps) obtenidas anteriormente y aplica unos pesos sobre ella para poder así clasificar el objeto. De esta forma la última capa contiene los nodos que representan las etiquetas. Esta clasificación no se aplica una única vez. Como hemos comentado antes se trata de una capa donde después de aplicar el clasificador se vuelve a aplicar una función de activación, como por ejemplo ReLU, esto es debido a que el clasificador trabaja con entradas no lineares. Todo este proceso se realiza porque aunque se pueda obtener una buena clasificación a partir de las características obtenidas anteriormente, el combinarlas mejora esta clasificación. 1. Anexo I: Multilayer perceptron 44 Big data y Deep Learning para la detección de objetos en imágenes Fig. 5. 17 Ejemplo visual del funcionamiento y clasificación son MLP [57] Fig. 5. 18 Ejemplo visual de las diferentes capes y funcionamiento de CNN [64] 5.4. Transfer learning Hoy en día, aun contando con grandes bases de datos y con datasets de gran tamaño sigue habiendo el problema. Este problema es que hay objetos o elementos de los cuales no podemos realizar una detección correcta debido a la falta de imágenes de muestra. Pero actualmente, las redes neuronales profundas mediante el aprendizaje consiguen un mapeo detallado tanto de la entrada como de la salida. El funcionamiento de esta transferencia de conocimientos no obtiene la precisión de clasificación que se obtiene con el método tradicional supervisado, pero la principal ventaja es que nos permite ahorrarnos el gran coste que supone obtener un dataset con imágenes suficiente para una clasificación correcta. Fig. 5. 19 Comparación entre métodos de clasificación a nivel comercial [72] Detección de objetos con transfer learning 45 Mediante el método tradicional entrenamos nuestro clasificador con imágenes pre-etiquetadas y de esta forma creamos un modelo, el cual testeamos con otro conjunto de imágenes. Todas las imágenes tanto de entrenamiento como testeo son del mismo dominio. Fig. 5. 20 Diagrama de aprendizaje mediante método tradicional [72] Utilizando la transferencia de conocimiento lo que realizamos es un entrenamiento con imágenes de un dominio que no es el objetivo, obteniendo un mapeo o modelo. Este conocimiento adquirido en la generación del modelo se aplica para crear otro modelo que pertenece a otro conjunto de imágenes de otro dominio. Finalmente el nuevo modelo se testea sobre un conjunto de imágenes del nuevo dominio, que el objetivo. Fig. 5. 21 Diagrama de aprendizaje mediante transfer learning [72] 5.4.1. Transferencia de conocimientos en DCNN En una transferencia de conocimientos, como hemos comentado anteriormente partimos de un modelo que es entrenado por una gran cantidad de imágenes 46 Big data y Deep Learning para la detección de objetos en imágenes etiquetadas. A partir del entrenamiento previo obtenemos las diferentes capas que conforman nuestra red neuronal convolucional incluyendo la capa totalmente conectada. Excluyendo la última capa (fully connected layer) tenemos el resto de capas que nos permiten obtener las características de las imágenes, las cuales empleamos para distinguir los diferentes objetos dentro de una imagen. Utilizando las capas obtenidas en el entrenamiento anterior, entrenamos el clasificador con las muestras que poseemos de nuestro dominio objetivo. Estas muestras son insuficientes para una detección eficiente utilizando el método tradicional. Pero con este nuevo entrenamiento conseguimos aprender nuevas características concentradas, con concentradas nos referimos a que cuando aplicamos las capas del clasificador pre-entrenado reducimos el número de características que puede ser demasiado elevado. Un ejemplo de característica concentrada es el índice de masa corporal donde se establece una relación entre la altura y el peso, aplicando este tipo de relaciones obtenemos una reducción de las características y conseguimos que nuestro clasificador es más eficiente. Básicamente lo que obtenemos con el primer entrenamiento es un generador de características. Finalmente debemos de añadir las últimas capas (fully connected layer) del clasificador. Estas capas son las que indican el objeto u objetivo que queremos detectar, es donde se establecen las relaciones entre las características, seleccionando cuales son útiles para la detección. Fig. 5. 22 Diagrama de pasos y elementos en transfer learning [70] Fase experimenta II: transfer learning 47 CAPÍTULO 6. FASE EXPERIMENTAL II: TRANSFER LEARNING En esta segunda fase se han realizado diversas pruebas. Por un lado hemos realizado el ejemplo que propone Microsoft en su página web [73] para comprobar el correcto funcionamiento Por otro lado hemos realizado las pruebas con imágenes propias utilizadas anteriormente, las señales de aterrizaje de helicópteros y relojes. 6.1. Entorno experimental Para esta segunda fase experimental la preparación del entorno de trabajo ha sido totalmente diferente a la primera, en este caso hemos necesitado de herramientas externas y virtuales. 6.1.1. Azure Para la preparación del entorno experimental hemos empleado los servicios de virtualización de Azure. Pero antes de comentar qué herramientas hemos empleado definamos brevemente qué es Azure. Azure es una plataforma que ofrece servicios en la nube para desarrolladores y profesionales de la industria IT. Estos servicios permiten construir, desplegar y gestionar aplicaciones a través de una red global de datacenters, integrando diferentes herramientas y soportes. No se trata de una simple plataforma de soporte en la nube, ya que ofrece un conjunto de herramientas que van desde applcations insights (herramientas para el diagnóstico de páginas webs) hasta servicios de bots y machine learning. Se trata también de un servicio multiplataforma que nos permite trabajar desde cualquier lugar, de la misma manera también es multiusuario permitiéndonos trabajar con cualquier sistema operativo y obviamente podemos trabajar con cualquier lenguaje. Fig. 6. 1 Icono corporativo de Azure [75] Fig. 6. 2 Servicios Azure [75] 48 Big data y Deep Learning para la detección de objetos en imágenes 6.1.2. Deep Learning Virtual Machine (DLVM) Para realizar las diversas pruebas de detección de objetos empleando la técnica de transfer learning hemos necesitado de un recurso concreto que ofrece Azure. Este recurso de denomina Deep Learning Virtual Machine, que la principal ventaja y elección de esta herramienta es el poder emplear unidades de procesamiento gráfico (GPU). Las GPU son unidades de procesamiento dedicados y permiten trabajar con una gran cantidad de datos, así como realizar operaciones una y otra vez. El hecho de que son dedicadas es la principal diferencia con la unidad de procesamiento central (CPU), la cual como indica su nombre es una unidad con un propósito general. Al ser una máquina virtual basada en GPU está preparada para entrenar modelos de deep learning. Y por tanto consta con los frameworks más populares y utilizados para este tipo de funciones. Frameworks como Microsoft Cognitive Toolkit, TensorFlow, Keras, Caffe2, Chainer; herramientas para la obtención y pre-procesado de imágenes, textual data, herramienta para el modelado y desarrollo de datos para actividades como Microsoft R Server Developer Edition, Anaconda Python, Jupyter notebooks for Python and R, IDEs for Python and R , SQL database y otras herramientas para tratar datos así como ML tools. 6.1.3. Despliegue de DLVM A la hora de desplegar el entorno de trabajo hemos necesitado de una suscripción de Azure. Como el gasto que realizaríamos no sería muy elevado hemos optado por una de suscripción de pago por uso reduciendo así los costes. Una vez obtenida la suscripción accedemos a los recursos desde el portal de Azure para así poder utilizar las diferentes herramientas que nos proporcionan. Fig. 6. 3 Pantalla principal del Portal de Azure [78] Fase experimenta II: transfer learning 49 En la Fig. 6.3 podemos ver enmarcado en rojo los recursos relacionados con DLVM, ya que Azure como oferta nos ofrece otros servicios gratuitos. DVLM no es simplemente una máquina virtual sino que incluye otros elementos que aportan un soporte perfecto para realizar tareas de deep learning. Hay que tener en cuenta que para las pruebas que necesitamos realizar hemos optado por el servicio más barato y sencillo, ya que no necesitamos unas altas prestaciones. Aun así el servicio ofrece 6vcpu con unos 56GB de memoria. En la Fig. 6.4 podemos ver los elementos que conforman este servicio. Fig. 6. 4 Elementos de DLVM [78] 6.2. Desarrollo experimental 6.2.1. Obtención de las imágenes A la hora de seleccionar las imágenes hemos de establecer dos grupos, unas serán imágenes para entrenar nuestro clasificador y otras serán imágenes para testear el funcionamiento de este. La principal diferencia entre estos dos grupos es el número de imágenes que tendremos de cada. También hay que añadir que hay un grupo de imágenes dentro de la carpeta test que no son de los objetos que queremos detectar sino que son pruebas de error para ver el comportamiento del clasificador. Hay que resaltar que para este método no son necesarias imágenes negativas, ya que nuestro clasificador intentara clasificar y diferenciar cualquier imagen de entrada entre las opciones que le demos. En la Fig. 6.5 podemos ver que las clases que tenemos como baremo son señal de helipuerto y relojes. Por los resultados podremos ver si se trata de una imagen de un reloj, de una señal de helipuerto o de otra queno corresponde con ninguna de las dos. 50 Big data y Deep Learning para la detección de objetos en imágenes Fig. 6. 5 Contenido de la carpeta Test Primero de todo debemos obtener imágenes de los objetos que queremos detectar, que son aquellos de los cuales poseemos muy pocas imágenes. Para ello emplearemos ImageNet al igual que en el fase experimental con Haarcascade. Aunque para entrenar nuestro clasificador empleemos más imágenes que para testear. No utilizamos un número muy grande de imágenes, sino más bien reducido, ya que es al problema al que nos enfrentamos en este proyecto. En la Fig. 6.6 podemos ver como utilizamos 5 imágenes de test y 15 de entrenamiento. Un total de 20 imágenes, un número muy reducido. Fig. 6. 6 Comparativa entre número de imágenes de entrenamiento y de test Ahora la pregunta que nos planteamos es si con este número tan reducido de imágenes es posible obtener algún tipo de resultado óptimo. Bueno aun siendo el número de imágenes del elemento objetivo muy reducido, el clasificador como hemos explicado anteriormente es entrenado sobre otro grupo de imágenes y únicamente se realiza una transferencia de conocimientos. Este grupo de imágenes es con el que verdaderamente entrenamos el clasificador. Dentro del ejemplo de transfer learning que nos proporciona Microsoft encontramos el código necesario para obtener este dataset de imágenes. Utilizamos este dataset por la facilidad que nos aporta a la hora de obtener las imágenes, también podríamos haber empleado ImageNet y realizar nosotros mismo la creación de este dataset. Accediendo de forma remota a nuestra máquina virtual, proceso que explicaremos más adelante, podemos ver la dimensión de este dataset, en la Fase experimenta II: transfer learning 51 Fig. 6.7 podemos ver enmarcado en rojo la última imagen, que corresponde a la imagen 8189. Fig. 6. 7 Dataset de imágenes de entrenamiento previo 6.2.2. Entranamiento y evaluación Para realizar el entrenamiento de nuestro clasificador y su posterior testeo debemos de conectarnos a nuestra máquina virtual, para ello utilizaremos un programa llamado PuTTY, el cual nos permite realizar una conexión SSH con nuestra máquina virtual. Fig. 6. 8 Pantalla principal PuTTY Una vez conectados a nuestra maquina lo primero que debemos hacer es actualizar el sistema para evitar cualquier tipo de incoherencia o problema. Seguido de esta actualización debemos de transferir a nuestra maquina los scripts e imágenes para realizar los entrenamientos y evaluaciones. Para realizar esta transferencia utilizaremos un repositorio de GitHub. El por qué utilizamos GitHub es simple, es debido a que ya lo hemos empleado muchas veces durante el grado en diversas asignaturas además evitamos tener que buscar otro sistema que pueda resultar más complicado. Primero de todo instalaremos GitHub en la máquina virtual con el siguiente comando: sudo apt-get install git. Una vez instalado realizaremos un git clone de 58 Big data y Deep Learning para la detección de objetos dentro dentro de imágenes BIBLIOGRAFÍA [1] Object Recognition: History and overview [En línea] [Fecha de consulta: Febrero de 2017]. Enlace: http://www.cs.unc.edu/~lazebnik/spring10/lec16_recognition_intro.pdf [2] The Evolution of Object Recognition in Embedded Computer Vision [En línea] [Fecha de consulta: Febrero de 2017]. Enlace: https://www.design-reuse.com/articles/37837/object-recognition-in-embeddedcomputer-vision.html [3] Image recognition and object detection [En línea] [Fecha de consulta: Febrero de 2017]. Enlace: https://www.learnopencv.com/image-recognition-and-object-detection-part1/ [4] Generic object detection with deformable part-based models [En línea] [Fecha de consulta: Septiembre de 2017]. Enlace: http://slideplayer.com/slide/6030352/ [5] Face recognition dataset [En línea] [Fecha de consulta: Febrero de 2017]. Enlace: http://chrisdecoro.com/eigenfaces/ [6] Robot vision vs Computer vision: What’s the difference? [En línea] [Fecha de consulta: Marzo de 2017]. Enlace: https://blog.robotiq.com/robot-vision-vs-computer-vision-whats-the-difference [7] Computer vision evolution and promise [En línea] [Fecha de consulta: Marzo de 2017]. Enlace: https://cds.cern.ch/record/400313/files/p21.pdf [8] Computer vision vs machine vision [En línea] [Fecha de consulta: Marzo de 2017]. Enlace: https://www.visiononline.org/vision-resources-details.cfm/visionresources/Computer-Vision-vs-Machine-Vision/content_id/4585 [9] Supervised learning [En línea] [Fecha de consulta: Marzo de 2017]. Enlace: https://en.wikipedia.org/wiki/Supervised_learning [10] Unsupervised learning [En línea] [Fecha de consulta: Marzo de 2017]. Enlace: https://en.wikipedia.org/wiki/Unsupervised_learning [11] Supervised and unsupervised machine learnings algorithms [En línea] [Fecha de consulta: Marzo de 2017]. Enlace: https://machinelearningmastery.com/supervised-and-unsupervised-machinelearning-algorithms/ [12] Clasificación supervisada y no supervisada [En línea] [Fecha de consulta: Marzo de 2017]. Enlace: Bibliografía 59 http://www.cs.us.es/~fsancho/?e=77 [13] What's the difference between a supervised and unsupervised image classification? [En línea] [Fecha de consulta: Marzo de 2017]. Enlace: https://articles.extension.org/pages/40214/whats-the-difference-between-asupervised-and-unsupervised-image-classification [14] Semi-supervised clustering [En línea] [Fecha de consulta: Marzo de 2017]. Enlace: http://www.cs.upc.edu/~bejar/amlt/material/06a-SemisupervisedClustering.pdf [15] Semi-supervised learning [En línea] [Fecha de consulta: Marzo de 2017]. Enlace: https://en.wikipedia.org/wiki/Semi-supervised_learning [16] stackoverflow: detect tan one object on a picture [En línea] [Fecha de consulta: Marzo de 2017]. Enlace: https://stackoverflow.com/questions/41160721/detect-more-than-1-object-onpicture [17] OpenCv: Librería de visión por computador [En línea] [Fecha de consulta: Marzo de 2017]. Enlace: https://osl.ull.es/software-libre/opencv-libreria-vision-computador/ [18] OpenCv [En línea] [Fecha de consulta: Marzo de 2017]. Enlace: https://es.wikipedia.org/wiki/OpenCV [19] Face detection using Haar cascade [En línea] [Fecha de consulta: Abril de 2017]. Enlace: https://docs.opencv.org/trunk/d7/d8b/tutorial_py_face_detection.html [20] Object category detection: sliding windows [En línea] [Fecha de consulta: Abril de 2017]. Enlace: https://courses.engr.illinois.edu/cs543/sp2011/lectures/Lecture%2019%20- %20Sliding%20Window%20Detection%20-%20Vision_Spring2011.pdf [21] Training Haar-Cascade [En línea] [Fecha de consulta: Abril de 2017]. Enlace: https://singhgaganpreet.wordpress.com/2012/10/14/training-haar-cascade/ [22] What is "Histogram of Oriented Gradients" and how does it work? [En línea] [Fecha de consulta: Abril de 2017]. Enlace: https://www.quora.com/What-is-Histogram-of-Oriented-Gradients-and-howdoes-it-work [23] Is Haar Cascade the only available technique for image recognition in OpenCV? [En línea] [Fecha de consulta: Abril de 2017]. Enlace: https://stackoverflow.com/questions/7601413/is-haar-cascade-the-onlyavailable-technique-for-image-recognition-in-opencv 60 Big data y Deep Learning para la detección de objetos dentro dentro de imágenes [24] Detector de caras basado en filtros de Haar + Adaboost [En línea] [Fecha de consulta: Abril de 2017]. Enlace: https://es.coursera.org/learn/deteccion-objetos/lecture/eczp1/l5-1-detector-decaras-basado-en-filtros-de-haar-adaboost [25] Detección de objetos [En línea] [Fecha de consulta: Abril de 2017]. Enlace: https://es.coursera.org/learn/deteccion-objetos [26] Imagen integral [En línea] [Fecha de consulta: Abril de 2017]. Enlace: https://es.coursera.org/learn/deteccion-objetos/lecture/CROQ4/l5-3-imagenintegral [27] What is Adaboost? [En línea] [Fecha de consulta: Mayo de 2017]. Enlace: https://www.quora.com/What-is-AdaBoost [28] Adaboost [En línea] [Fecha de consulta: Mayo de 2017]. Enlace: https://es.coursera.org/learn/deteccion-objetos/lecture/KMPxn/l5-4-adaboost [29] Computer Vision: What is the difference between HOG and SIFT feature descriptor? [En línea] [Fecha de consulta: Mayo de 2017]. Enlace: https://www.quora.com/Computer-Vision-What-is-the-difference-between-HOGand-SIFT-feature-descriptor [30] Feature detection description [En línea] [Fecha de consulta: Mayo de 2017]. Enlace: https://docs.opencv.org/trunk/db/d27/tutorial_py_table_of_contents_feature2d.ht ml [31] Why do we use keypoint descriptors? [En línea] [Fecha de consulta: Mayo de 2017]. Enlace: https://dsp.stackexchange.com/questions/10423/why-do-we-use-keypointdescriptors [32] Introduction to SURF (Speeded-Up Robust Features) [En línea] [Fecha de consulta: Mayo de 2017]. Enlace: https://docs.opencv.org/3.0beta/doc/py_tutorials/py_feature2d/py_surf_intro/py_surf_intro.html [33] Introduction to SIFT (Scale-Invariant Feature Transform) [En línea] [Fecha de consulta: Mayo de 2017]. Enlace: https://docs.opencv.org/3.0beta/doc/py_tutorials/py_feature2d/py_sift_intro/py_sift_intro.html?highlight=sift [34] What are the best pattern matching algorithms in OpenCV? Is there an algorithm where I can train on one model instead of a data set? [En línea] [Fecha de consulta: Mayo de 2017]. Enlace: https://www.quora.com/What-are-the-best-pattern-matching-algorithms-inOpenCV-Is-there-an-algorithm-where-I-can-train-on-one-model-instead-of-adata-set Bibliografía 61 [35] Ubuntu 16.04: How to install OpenCV [En línea] [Fecha de consulta: Junio de 2017]. Enlace: https://www.pyimagesearch.com/2016/10/24/ubuntu-16-04-how-to-installopencv/ [36] Install OpenCV on Ubuntu or Debian [En línea] [Fecha de consulta: Junio de 2017]. Enlace: http://milq.github.io/install-opencv-ubuntu-debian/ [37] How to detect object and track with OpenCV [En línea] [Fecha de consulta: Junio de 2017]. Enlace: https://www.intorobotics.com/how-to-detect-and-track-object-with-opencv/ [38] Creating your own Haar Cascade OpenCV Python Tutorial [En línea] [Fecha de consulta: Junio de 2017]. Enlace: https://pythonprogramming.net/haar-cascade-object-detection-python-opencvtutorial/ [39] ImageNet [En línea] [Fecha de consulta: Junio de 2017]. Enlace: http://www.image-net.org/ [40] Train your own OpenCV Haar classifier [En línea] [Fecha de consulta: Junio de 2017]. Enlace: http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html [41] Cascade classifier training [En línea] [Fecha de consulta: Julio de 2017]. Enlace: https://docs.opencv.org/2.4/doc/user_guide/ug_traincascade.html [42] Tutorial: OpenCV haartraining (Rapid Object Detection With A Cascade of Boosted Classifiers Based on Haar-like Features) [En línea] [Fecha de consulta: Julio de 2017]. Enlace: http://note.sonots.com/SciSoftware/haartraining.html [43] Creating a Cascade of Haar-Like Classifiers: Step by Step [En línea] [Fecha de consulta: Julio de 2017]. Enlace: https://www.cs.auckland.ac.nz/~m.rezaei/Tutorials/Creating_a_Cascade_of_Ha ar-Like_Classifiers_Step_by_Step.pdf [44] Cascade classifier training [En línea] [Fecha de consulta: Julio de 2017]. Enlace: https://docs.opencv.org/2.4/doc/user_guide/ug_traincascade.html [45] How do I run opencv_createsamples with multiple positive images? [En línea] [Fecha de consulta: Julio de 2017]. Enlace: http://answers.opencv.org/question/29765/how-do-i-run-opencv_createsampleswith-multiple-positive-images/ [46] Mergevec [En línea] [Fecha de consulta: Julio de 2017]. Enlace: https://github.com/wulfebw/mergevec 62 Big data y Deep Learning para la detección de objetos dentro dentro de imágenes [47] CNTK 301: Image Recognition with Deep Transfer Learning [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://github.com/Microsoft/CNTK/blob/v2.0/Tutorials/CNTK_301_Image_Reco gnition_with_Deep_Transfer_Learning.ipynb [48] Deep Learning with Microsoft CNTK [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://www.packtpub.com/books/content/deep-learning-microsoft-cntk [49] Computational Neural Toolkit [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://www.cntk.ai/Features/Index.html [50] What’s Deep Learning? [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://machinelearningmastery.com/what-is-deep-learning/ [51] ¿Qué es la computación acelerada por GPU? [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: http://la.nvidia.com/object/what-is-gpu-computing-la.html [52] En que se diferencia la GPU de CPU [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: http://es.gizmodo.com/en-que-se-diferencia-la-gpu-de-la-cpu-explicado-en-cin1780816080 [53] What is the difference between a neural network and a deep neural network? [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://stats.stackexchange.com/questions/182734/what-is-the-differencebetween-a-neural-network-and-a-deep-neural-network [54] Convolutional Neural Network [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://en.wikipedia.org/wiki/Convolutional_neural_network [55] CNTK FAQ [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://docs.microsoft.com/en-us/cognitive-toolkit/CNTK-FAQ [56] What is an intuitive explanation of Convolutional Neural Networks? [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://www.quora.com/What-is-an-intuitive-explanation-of-ConvolutionalNeural-Networks [57] A quick introduction to Neural Networks [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://ujjwalkarn.me/2016/08/09/quick-intro-neural-networks/ [58] Understanding Convolutional Neural Networks for NLP [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: Bibliografía 63 http://www.wildml.com/2015/11/understanding-convolutional-neural-networksfor-nlp/ [59] Why do we use ReLU in neural networks and how do we use it? [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://stats.stackexchange.com/questions/226923/why-do-we-use-relu-inneural-networks-and-how-do-we-use-it [60] Neural Networks [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: http://mlss.tuebingen.mpg.de/2015/slides/fergus/Fergus_1.pdf [61] Stochastic gradient descent [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://en.wikipedia.org/wiki/Stochastic_gradient_descent [62] Recurrent neural network [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://en.wikipedia.org/wiki/Recurrent_neural_network [63] Long short-term memory [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://en.wikipedia.org/wiki/Long_short-term_memory [64] Long short-term memory [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/ [65] What is the role of the activation function in a neural network? How does this function in a human neural network system? [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://www.quora.com/What-is-the-role-of-the-activation-function-in-a-neuralnetwork-How-does-this-function-in-a-human-neural-network-system [66] A Beginner's Guide to Understanding Convolutional Neural Networks [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner%27s-GuideTo-Understanding-Convolutional-Neural-Networks/ [67] A Beginner's Guide to Understanding Convolutional Neural Networks Part 2 [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner%27s-GuideTo-Understanding-Convolutional-Neural-Networks-Part-2/ [68] What is a global average pooling? [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://www.quora.com/What-is-global-average-pooling [69] Max pooling vs Sum pooling? [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://stackoverflow.com/questions/37434426/max-pooling-vs-sum-pooling 64 Big data y Deep Learning para la detección de objetos dentro dentro de imágenes [70] Learning and Transferring Mid-Level Image Representations using Convolutional Neural Networks [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: http://www.di.ens.fr/~josef/publications/oquab14.pdf [71] Why does deep learning/architectures only use the non-linear activation function in the hidden layers? [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: https://www.quora.com/Why-does-deep-learning-architectures-only-use-thenon-linear-activation-function-in-the-hidden-layers [72] Transfer learning – Machine learning’s next frontier [En línea] [Fecha de consulta: Agosto de 2017]. Enlace: http://ruder.io/transfer-learning/ [73] Build your own image classifier using Transfer Learning [En línea] [Fecha de consulta: Septiembre de 2017]. Enlace: https://docs.microsoft.com/en-us/cognitive-toolkit/build-your-own-imageclassifier-using-transfer-learning#using-a-different-base-model [74] Crash Course On Multi-Layer Perceptron Neural Networks [En línea] [Fecha de consulta: Septiembre de 2017]. Enlace: https://machinelearningmastery.com/neural-networks-crash-course/ [75] Microsoft Azure [En línea] [Fecha de consulta: Septiembre de 2017]. Enlace: https://azure.microsoft.com/eses/?&WT.srch=1&wt.mc_id=AID631176_SEM_QwnrSFdW&gclid=EAIaIQobCh MIxOrSh6v61gIVCZ4bCh1snwaGEAAYASAAEgKhyfD_BwE [76] Deep learning virtual machine [En línea] [Fecha de consulta: Septiembre de 2017]. Enlace: https://azuremarketplace.microsoft.com/en-us/marketplace/apps/microsoftads.dsvm-deep-learning?tab=PlansAndPrice [77] Aprovisionamiento de Data Science Virtual Machine de Windows en Azure [En línea] [Fecha de consulta: Septiembre de 2017]. Enlace: https://docs.microsoft.com/es-es/azure/machine-learning/data-science-virtualmachine/provision-vm [78] Portal Azure [En línea] [Fecha de consulta: Septiembre de 2017]. Enlace: https://portal.azure.com/ Bibliografía 1 ANEXOS TÍTULO DEL TFG: Big data y Deep Learning para la detección de objetos dentro de imágenes TITULACIÓN: Grado en Ingeniería Telemática AUTOR: Alessandro Iván Fava Fernández DIRECTORA: Esther Salamí San Juan FECHA: 31 de Octubre del 2017 2 Big data y Deep Learning para la detección de objetos dentro dentro de imágenes ANEXO I. MULTILAYER PERCEPTRON (MPL) 1 ANEXO I. MULTILAYER PERCEPTRON (MPL) En este anexo explicaremos que una red neuronal multilayer perceptron. Explicaremos concretamente este tipo de red neuronal, ya que son las que se emplean normalmente y también porque es este tipo el que empleamos en el proyecto. Esta red neuronal a diferencia de una single perceptron (red con un único nodo simple) es capaz de aprender utilizando funciones no lineales. La estructura es más compleja que una single perceptron, ya que se parte de un único nodo (neurona) por cada entrada y se extiende hacia una segunda capa y finalmente hasta una tercera de salida. Fig. Anexo I. 1 Representación de una MPL En este tipo de redes a veces también se emplean Bias que son nodos con valores prefijados, que adquieren dos posiciones 1 o 0, de esta forma se asegura un valor de entrada siempre. Fig. Anexo I. 2 Representación de una MPL con Bias 8 Big data y Deep Learning para la detección de objetos dentro dentro de imágenes ANEXO V. TRANSFER LEARNING SCRIPTS Microsft nos ofrece el código necesario para ejecutar una detección e objetos mediante transfer learning, pero siempre hay que hacer una serie de cambios así como identificar cuáles son los elementos que debemos emplear. A continuación encontraremos el código empleado en la fase de experimental II de este proyecto. TransferLearning.py ANEXO V. TRANSFER LEARNING SCRIPTS 9 10 Big data y Deep Learning para la detección de objetos dentro dentro de imágenes TransferLearning_Extended.py ANEXO V. TRANSFER LEARNING SCRIPTS 11 12 Big data y Deep Learning para la detección de objetos dentro dentro de imágenes