scieee AI-readable full text Open interactive document viewer

Reconocimiento de razas de perro en imágenes mediante técnicas de aprendizaje profundo

Boccassi, Francisco; Olmo Ángel, Alberto

Abstract

En este trabajo se presenta una aplicación para la identificación de razas de perro, utilizando técnicas de aprendizaje profundo. Para ello se utilizan redes neuronales convolucionales, las cuales se entrenan en una primera instancia, para después proceder a identificar a qué raza de perro pertenece el perro de la imagen cargada por el usuario en la aplicación. En la aplicación se permite usar AlexNet y GoogleNet, con sus diferentes parámetros y opciones. Las imágenes también se tienen que ajustar a unas dimensiones determinadas, y desde la misma aplicación se podrán redimensionar las imágenes para que se ajusten a estas.

Full text

RECONOCIMIENTO DE RAZAS DE PERRO EN IMÁGENES MEDIANTE TÉCNICAS DE APRENDIZAJE PROFUNDO TRABAJO FIN DE GRADO CURSO 2022-2023 AUTORES FRANCISCO BOCCASSI ALBERTO OLMO ÁNGEL DIRECTOR GONZALO PAJARES MARTINSANZ COLABORADORA EXTERNA CLARA ISABEL LÓPEZ GONZÁLEZ GRADO EN INGENIERÍA DEL SOFTWARE FACULTAD DE INFORMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID RECONOCIMIENTO DE RAZAS DE PERRO EN IMÁGENES MEDIANTE TÉCNICAS DE APRENDIZAJE PROFUNDO RECOGNITION OF DOG BREEDS IN IMAGES USING DEEP LEARNING TECHNIQUES TRABAJO DE FIN DE GRADO EN INGENIERÍA DEL SOFTWARE AUTORES FRANCISCO BOCCASSI ALBERTO OLMO ÁNGEL DIRECTOR GONZALO PAJARES MARTINSANZ COLABORADORA EXTERNA CLARA ISABEL LÓPEZ GONZÁLEZ CONVOCATORIA: JUNIO 2023 GRADO EN INGENIERÍA DEL SOFTWARE FACULTAD DE INFORMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID 5 DE JUNIO DE 2023 I DEDICATORIA Francisco Boccassi: A toda mi familia que siempre me animó a continuar con mis estudios, a mis profesores y compañeros de la UCM, que me han ayudado mucho y han facilitado mi aprendizaje. Alberto Olmo: A mi familia y a mi mejor amiga por el apoyo constante durante toda la carrera universitaria y a todos los compañeros que han hecho que esta etapa de mi vida sea inolvidable. II AGRADECIMIENTOS A nuestros tutores, que nos han ayudado mucho tanto en este Trabajo Final como cuando pasamos por otras asignaturas impartidas por el director. III RESUMEN En este trabajo se presenta una aplicación para la identificación de razas de perro, utilizando técnicas de aprendizaje profundo. Para ello se utilizan redes neuronales convolucionales, las cuales se entrenan en una primera instancia, para después proceder a identificar a qué raza de perro pertenece el perro de la imagen cargada por el usuario en la aplicación. En la aplicación se permite usar AlexNet y GoogleNet, con sus diferentes parámetros y opciones. Las imágenes también se tienen que ajustar a unas dimensiones determinadas, y desde la misma aplicación se podrán redimensionar las imágenes para que se ajusten a estas. Palabras clave Aprendizaje profundo, Redes neuronales convolucionales, AlexNet, GoogleNet, Reconocimiento de imágenes, Razas de perro. IV ABSTRACT In this work we present an application for the identification of dog breeds, using Deep Learning techniques. For this we have used convolutional neural networks such as AlexNet or GoogleNet, which we have trained in the first instance, to later proceed to identify which breed of dog the dog in the image uploaded by the user in the application belongs to. In the application it is allowed to use AlexNet and GoogleNet, with their different parameters and options, for this the images must also be adjusted to certain dimensions, and from the same application the images can be resized to fit them. Keywords Deep learning, Convolutional neural network, AlexNet, GoogleNet, Image recognition, Dog breeds. V ÍNDICE DE CONTENIDOS Capítulo 1 - Introducción ............................................................................................................... 1 1.1 Antecedentes ........................................................................................................................ 1 1.1.1 Razas de perros .............................................................................................................. 1 1.1.2 Tecnología, Inteligencia artificial y redes neuronales ............................................. 2 1.2 Motivación ............................................................................................................................. 3 1.3 Objetivos ................................................................................................................................. 3 1.4 Plan de trabajo...................................................................................................................... 4 1.5 Estructura de la memoria .................................................................................................... 5 Capítulo 2 - Métodos conceptuales y técnicas aplicadas ..................................................... 7 2.1 Operaciones en redes neuronales convolucionales ..................................................... 7 2.1.1 Convolución ................................................................................................................... 8 2.1.2 Agrupamiento (Pooling) ............................................................................................. 10 2.2 AlexNet ................................................................................................................................. 12 2.3 GoogleNet ........................................................................................................................... 14 Capítulo 3 - Diseño y análisis de la aplicación ........................................................................ 17 3.1 Arquitectura ......................................................................................................................... 17 3.2 Lado del cliente .................................................................................................................. 18 3.2.1 Fase de entrenamiento .............................................................................................. 18 3.2.2 Fase de Clasificación .................................................................................................. 22 3.3 Lado del administrador ...................................................................................................... 24 3.3.1 Asignación de DataSet ............................................................................................... 24 3.3.2 Modificación de opciones de entrenamiento ....................................................... 25 3.3.3 Uso de la ventana de comandos para entrenar .................................................. 25 VI 3.4 Metodología y gestión del proyecto .............................................................................. 26 3.5 Datos y herramientas utilizadas ........................................................................................ 27 3.5.1 DataSet .......................................................................................................................... 28 3.5.2 Herramientas ................................................................................................................. 29 Capítulo 4 - Resultados obtenidos ............................................................................................. 31 4.1 Entrenamiento ..................................................................................................................... 31 4.2 Clasificación ........................................................................................................................ 37 4.3 Errores más frecuentes ....................................................................................................... 43 Capítulo 5 - Conclusiones y trabajo futuro ............................................................................... 44 5.1 Conclusiones ........................................................................................................................ 44 5.2 Trabajo futuro ...................................................................................................................... 44 Introduction .................................................................................................................................... 46 Preliminary .............................................................................................................................. 46 Conclusions and future work ....................................................................................................... 51 Contribuciones Personales .......................................................................................................... 53 Bibliografía ...................................................................................................................................... 58 Anexo 1 - Diagramas de entrenamiento .................................................................................. 61 Anexo 2 - Manual de usuario ...................................................................................................... 63 VII ÍNDICE DE FIGURAS Figura 2.1. Ejemplo de convolución 2-D ................................................................................... 10 Figura 2.2. Max pooling, no zero-padding (V), s = 2 ............................................................... 11 Figura 2.3. Max pooling, zero-padding (S), s = 2 ...................................................................... 11 Figura 2.4. Unpooling con interpolación ................................................................................... 12 Figura 2.5. Estructura de capas de AlexNet ............................................................................. 14 Figura 2.6. Módulo inception con incorporación de unidades ReLU .................................. 15 Figura 2.7. Modelo completo GoogLeNet (inception V1) ..................................................... 15 Figura 2.8. Modelo simplificado GoogleNet (inception V1) .................................................. 16 Figura 3.1. Diagrama de casos de uso ...................................................................................... 18 Figura 3.2. Interfaz para el entrenamiento de los modelos de red ...................................... 19 Figura 3.3. Interfaz para la clasificación de imágenes........................................................... 22 Figura 3.4. Interfaz para la clasificación con visualización de la imagen seleccionada 23 Figura 3.5. Resultado de la clasificación con indicación del tipo de raza y la probabilidad de pertenencia a la misma ................................................................................................. 24 Figura 3.6. Ejemplo de asignación de rutas del DataSet a las variables de entrenamiento .................................................................................................................................................. 25 Figura 3.7. Ejemplo de asignación de valores en las opciones de entrenamiento .......... 25 Figura 3.8. Imágenes de perros pertenecientes a la raza Cocker utilizadas para el entrenamiento en el DataSet. ............................................................................................ 28 Figura 4.1. Analizador del modelo de red AlexNet ................................................................. 31 Figura 4.2. Analizador del modelo de red GoogleNet ........................................................... 32 Figura 4.3. Imágenes seleccionadas para el entrenamiento del conjunto disponible ... 32 Figura 4.4. Evolución e información del proceso de entrenamiento de la red GoogleNet .................................................................................................................................................. 33 5 a la hora de entrenar los modelos, con el fin de obtener la mejor precisión posible. • Dependiendo de si se usaba AlexNet o GoogleNet el procesamiento de imágenes requería unas dimensiones determinadas. Por lo que es necesario contemplar una opción en la aplicación para la redimensión de imágenes de cara a usar uno de estos dos modelos, con el fin de evitar errores y facilitar el correcto funcionamiento a la hora de entrenar y validar. • Mediante Matlab App Designer, se plantea el desarrollo de una interfaz gráfica intuitiva. Será posible elegir si se quiere entrenar o clasificar la red, elegir qué red neuronal se va a utilizar, y redimensionar nuevas imágenes para el entrenamiento. • Al finalizar la parte del diseño, se procede a realizar la codificación y posteriormente a la fase de pruebas (test). • Crear un repositorio para subir el código e información relacionada con el proyecto, en este caso usamos GitHub. 1.5 Estructura de la memoria La estructura de la memoria consta de la siguiente disposición de secciones: • Introducción: Para empezar, se especifican los antecedentes de cara a afrontar el proyecto, con las motivaciones consideradas, y una serie de objetivos con un plan de trabajo organizado para cumplir con estos. También se comentan las contribuciones de los miembros del equipo. • Métodos conceptuales y técnicos aplicados: En este punto se explican de una manera más específica los métodos y técnicas utilizados para llevar a cabo el proyecto. • Diseño y análisis desarrollado: 6 Se describen aspectos relacionados con la Ingeniería del Software, tales como la arquitectura de la aplicación, y metodologías y planes de trabajo para realizar el proyecto. • Resultados obtenidos: En este apartado se muestran los resultados obtenidos, analizando los datos tras haber entrenado las redes neuronales, junto con los resultados de la clasificación. • Conclusiones y trabajo futuro: Se comentan las conclusiones finales tras haber finalizado el proyecto, así como ideas para mejorarlo y ampliaciones posibles de cara al futuro. • Anexos: Se incluyen dos anexos, en el primero se muestran diagramas de entrenamiento, y en el segundo los pasos a seguir para poder tener acceso a la aplicación. 7 Capítulo 2 - Métodos conceptuales y técnicas aplicadas Como se ha indicado previamente, los métodos y técnicas aplicadas son dos modelos específicos de redes neuronales convolucionales: AlexNet y GoogleNet. En ambas se aplican una serie de operaciones necesarias, que implementan los conceptos necesarios para su funcionamiento, destacando: convolución y agrupamiento. Un estudio más detallado se puede encontrar en Pajares y col. (2021), que es la referencia base utilizada para describir estos modelos. 2.1 Operaciones en redes neuronales convolucionales Las CNN son un tipo especializado de redes neuronales (LeCun, 1989; O’Shea y Nash, 2015), con una topología basada en rejilla para el procesamiento de datos, tales como sonidos, imágenes estáticas o vídeos, entre otros, sobre las que se aplican operaciones basadas en rejillas de dimensiones 1-D, 2-D, 3-D y superiores, configuradas la mayor parte de las veces como tensores. (Goodfellow y col, 2016; Dumoulin y Visin, 2018). El término convolucional hace referencia a la operación matemática de convolución, que es una operación lineal altamente especializada. De esta forma puede decirse que las CNN son redes neuronales que utilizan la convolución, en vez de la multiplicación de matrices, en al menos una de sus capas. La operación de convolución se aborda aquí desde el punto de vista de las redes neuronales, que no se corresponde exactamente con el mismo concepto aplicado en otros ámbitos tales como el procesamiento de señales o desde el concepto matemático puro. Las CNN encajan en los principios neurocientíficos que rigen el aprendizaje profundo. Por otra parte, en casi todas las CNN se aplica una operación denominada agrupamiento o pooling, que viene a ser una agrupación de elementos o píxeles mediante alguna operación de agrupación realizada sobre una ventana en los resultados intermedios que se obtienen tras la convolución. 8 En este trabajo se han utilizado dos tipos de redes neuronales convolucionales, AlexNet y GoogleNet sobre las cuales se proporciona más información a continuación, si bien, en primer lugar, se comentan una serie de operaciones básicas de este tipo de redes neuronales: 2.1.1 Convolución En términos generales, una operación de convolución implica el uso de dos funciones que tienen valores reales como argumento. Para entender este concepto, podemos imaginar una fuente de luz variable que produce diferentes lecturas en diferentes momentos del tiempo, las cuales son recogidas por un sensor y se representan como x(t), siendo t cada instante de tiempo. Como sabemos que la señal captada puede estar contaminada con ruido, resulta útil promediar la salida de varias medidas para obtener una señal más limpia. Para dar más peso a las lecturas más recientes, podemos utilizar una función de promediado ponderado, denotada como w(a), donde a representa el tiempo entre una medida y otra. Al aplicar este proceso de promediado ponderado en cada instante de tiempo, se obtiene una nueva función promediada: 𝑠(𝑡)=∫𝑥(𝑎)𝑤(𝑡−𝑎)𝑑𝑎 (1) Esta operación se denomina convolución, que se denota de la siguiente forma: 𝑠(𝑡)=∫(𝑥∗𝑤)(𝑡) (2) Es importante destacar que la función de promediado ponderado w debe ser una función de densidad de probabilidad para garantizar que la salida esté promediada. Además, es necesario que w sea cero para todos los argumentos negativos, con el fin de evitar la toma de valores en el futuro, lo cual no es materialmente posible. En el contexto de las redes neuronales convolucionales, el primer argumento x para la convolución se conoce como entrada o input, mientras que el segundo, w, se denomina núcleo o kernel de convolución. La salida s se define generalmente como mapa de características o feature map. 9 En términos computacionales, y siguiendo con el ejemplo de la fuente de luz, las medidas son discretas, lo que significa que se toman en intervalos de tiempo determinados, por ejemplo, cada segundo. Por lo tanto, el tiempo t solo puede tomar valores enteros, lo que implica que tanto x como w solo se definen en el tiempo t con valor entero. En este caso, la convolución discreta se define como sigue: 𝑠(𝑡)=(𝑥∗𝑤)(𝑡)= ∑ 𝑥(𝑎)𝑤(𝑡−𝑎) ∞ 𝑎=−∞ (3) En el aprendizaje automático, la entrada a la convolución es típicamente un vector o matriz multidimensional de datos, mientras que el núcleo suele ser un vector o matriz multidimensional de parámetros que se ajustan mediante el proceso de aprendizaje. En la práctica, estas estructuras multidimensionales se conocen como tensores. Dado que cada elemento de la entrada y del núcleo debe almacenarse por separado, los valores que no pertenecen a esos elementos deben considerarse nulos. Esto se traduce en una suma finita de valores en un número finito de elementos. Además, las convoluciones se realizan típicamente sobre más de un eje a la vez, tal es el caso de las imágenes I cuando se utilizan como entrada, ya que estas son estructuras bidimensionales que necesitan ser tratadas con un núcleo bidimensional K. 𝑠(𝑖,𝑗)=(𝐼∗𝐾)(𝑖,𝑗)= ∑∑𝐼(𝑚,𝑛)𝐾(𝑖− 𝑚,𝑗− 𝑛) 𝑛𝑚 (4) En el contexto del aprendizaje máquina, el algoritmo de aprendizaje estima los valores apropiados del núcleo en cualquiera de los dos casos. La figura 2.1 muestra un ejemplo de convolución con el núcleo K, sin reflexión del núcleo, aplicado sobre un tensor 2-D que bien puede representar una imagen I. La convolución se representa con solapamiento total del núcleo y obteniendo una imagen resultante cuyos bordes externos se quedan sin valores, generando así una imagen de menor dimensión que la original; en el caso de la figura se pasa de tener dimensión 6×7 a 4×5. No obstante, si se desea obtener una imagen de la misma dimensión lo que hay que hacer es ampliar la imagen original en dos filas (arriba y abajo) y dos columnas (izquierda y derecha) con 10 ceros, procesándola con el núcleo solapado. Esta operación es lo que se conoce como relleno con ceros o zero-padding y generalmente se indica en términos de implementación como “same”. Por el contrario, si no se realiza tal operación, es decir, no se añaden ceros, en implementación se indica cómo “valid”. En referencia a este último caso, más adelante se indica que la operación es sin relleno con ceros (no zeropadding). Por otra parte, en las convoluciones, el campo receptivo se define como la región de entrada que contribuye a la salida generada por el filtro. En la figura 2.1 se muestran sendos campos receptivos de la imagen I que contribuyen a las salidas P y Q generadas por el filtro K. Figura 2.1. Ejemplo de convolución 2-D 2.1.2 Agrupamiento (Pooling) En las redes neuronales, las capas de agrupamiento o pooling son importantes para proporcionar invariancia a pequeñas traslaciones de la entrada. Hay varias operaciones de agrupamiento, como la operación máxima (max), que consiste en dividir la entrada en ventanas y producir como salida el máximo valor de la ventana. Otra operación es la media (average) de la ventana, donde la salida es el resultado de esta operación sobre la ventana. (Boureau y col., 2010a,b; Boureau y col., 2011; Saxe y col., 2011; Zhou y Chellappa, 1988). 11 La operación de agrupamiento generalmente se aplica para reducir la dimensionalidad de la entrada. En cada paso, la posición de la ventana se actualiza de acuerdo a los desplazamientos (strides). Sin embargo, cuando la ventana se sitúa cerca de los bordes de la entrada, algunos de sus elementos pueden quedar fuera de los límites. Para obtener los valores de las regiones de borde, se puede extender la entrada con valores de cero, lo que se conoce como zero-padding. Desde el punto de vista de la implementación, la operación de zero-padding se indica cómo "same", mientras que la operación sin relleno se indica cómo "valid". En las representaciones gráficas de capas de red, la operación "valid" se indica con una V y la operación "same" se indica con el valor de p sin una simbología especificada. En la figura 2.2 se muestra un ejemplo de agrupamiento máximo sin relleno con ceros (no zero-padding) y un desplazamiento s = 2. En la figura 2.3 se muestra la misma operación, pero con relleno con ceros (zero-padding) y un p = 1 en la dirección horizontal. En este caso, la ventana de agrupamiento puede incorporar a la columna de la derecha mediante el ajuste del valor de p. Figura 2.2. Max pooling, no zero-padding (V), s = 2 Figura 2.3. Max pooling, zero-padding (S), s = 2 En la figura 2.4 se ilustra un ejemplo gráfico de la operación de max-pooling en la que se puede observar la conservación del mapa de localizaciones (Switch), el cual indica la posición de origen del valor máximo que ha generado el resultado final de la operación. Al preservar este mapa, es posible recuperar la información original mediante la operación inversa de Unpooling, en la que los valores obtenidos se colocan 12 en las localizaciones correspondientes en el nuevo mapa reconstruido. Posteriormente, se puede llevar a cabo una interpolación lineal utilizando el método del vecino más cercano para obtener el mapa de características correspondiente. La operación de Unpooling generalmente se utiliza en combinación con la operación de convolución transpuesta, la cual se describe más adelante. Este enfoque se utilizó con éxito en la arquitectura de red propuesta por Zeiler y Fergus (2013). Figura 2.4. Unpooling con interpolación 2.2 AlexNet La red AlexNet es una de las arquitecturas más utilizadas en el campo de las CNN. (ImageNet, 2020; Russakovsky y col., 2015; Krizhevsky y col., 2012; BVLC AlexNet Model, 2020), ganadora de la competición ImageNet LSVRC (2012). Los filtros en las capas convolucionales y totalmente conectadas, así como otras operaciones como Convolución (conv), ReLU (relu), Normalización (norm), Pooling (pool), dropout (drop) o softmax se indican a través de las dimensiones de sus filtros, el stride (s), el padding (p) y el número de filtros (K) en cada capa. En la tercera columna de la tabla 2.1 se indican los parámetros (pesos) que se aprenden en este modelo, que son los pesos en las capas (primera columna) de convolución (conv1 a conv5) y las totalmente conectadas (Fully Connected, fc6, fc7 y fc8), independientemente de si se aplica dropout en ellas. Cada capa de convolución tiene un valor de bias por filtro, que 13 se aprende como un parámetro de ajuste adicional. Por último, en la tabla 2.1 se muestran las dimensiones de salida correspondientes a cada capa. Conviene reseñar que tanto este modelo como el de GoogleNet, se encuentran pre entrenados con las imágenes contenidas en ImageNet (Russakovsky y col., 2015). Esto significa que las clases de salida son exactamente 1000 y que los pesos tienen asignados unos valores predeterminados. Durante el entrenamiento con las imágenes de los perros, el número de clases se redefine para hacerlas coincidir con el número de razas a identificar y además los pesos se modifican para asumir las propiedades de las nuevas imágenes. Esto es lo que se denomina transferencia de aprendizaje. Nombre de capa Dimensión de salida Pesos conv1 55×55×96 W = 11×11×3×96 b = 1×1×96 conv2 27×27×256 W = 5×5×48×256 b = 1×1×256 conv3 13×13×384 W = 3×3×256×384 b = 1×1×384 conv4 13×13×384 W = 3×3×192×384 b = 1×1×384 conv5 13×13×256 W = 3×3×192×256 b = 1×1×256 fc6 1×1×4096 W = 4096×9216 b = 4096×1 fc7 1×1×4096 W = 4096×4096 b = 4096×1 fc8 1×1×4096 W = 1000×4096 b = 1000×1 Tabla 2.1. Parámetros aprendidos en el modelo AlexNet La estructura de la figura 2.5 también incluye los números de Relación, que establecen la relación entre las dimensiones de salida de cada capa (o) en función de los parámetros de entrada (i, k, p, s). Estos números de relación son importantes para comprender la forma en que se utiliza la red AlexNet y cómo se procesan los datos a través de las diferentes capas. 14 Figura 2.5. Estructura de capas de AlexNet 2.3 GoogleNet La red GoogLeNet (también conocida como Inception V1) de Google (BVLC GoogLeNet Model, 2020) fue la ganadora del concurso ILSVRC 2014, y tuvo una tasa de error del 6,67%, muy cerca del nivel humano. Esta red utiliza una CNN, inspirada en LeNet, pero con un elemento novedoso llamado módulo inception, siguiendo la arquitectura descrita en el capítulo anterior. Además, utiliza normalización por lotes (batch), distorsiones de imagen y RMSProp como método de optimización. El módulo inception (Inc) se basa en varias convoluciones relativamente pequeñas para reducir drásticamente el número de parámetros. La arquitectura del modelo consiste en una CNN de 22 capas de profundidad, reduciendo el número de parámetros de 60 millones (en AlexNet) a 4 millones. De estas 22 capas, 9 son de tipo inception de diferentes categorías, y en total la red tiene 144 capas. Cada una de las 9 capas inception contiene la estructura mostrada en la figura 2.6, donde se han incorporado las unidades ReLU del módulo. El modelo completo propuesto por Szegedy y col. (2014) se muestra en la figura 2.7, que incluye diferentes tipos de capas, como la de convolución (Conv) que indica las dimensiones de los filtros, y la capa Pooling (tanto average (AvgPool) como máximo (MaxPool)), que indican el tamaño de la ventana. También se incluyen capas de Normalización (LRN), capas totalmente conectadas (FC) y, por supuesto, los módulos Inception (Inc), en este caso V1, que constituyen la parte nuclear de la red. 21 obtiene el número de muestras totales que se utilizarán durante la ejecución del entrenamiento, por lo que estos valores deben ajustarse a la cantidad de imágenes disponibles para el entrenamiento. • InitialLearnRate El valor InitialLearnRate indica la razón de aprendizaje inicial. Este valor determina la velocidad a la que la red neuronal irá ajustando sus parámetros durante cada iteración del entrenamiento, de tal manera que cuanto más alto sea el valor introducido, más rápido será el aprendizaje y por tanto el entrenamiento, pero a la vez se conseguirá menor precisión, ya que estará permitiendo realizar cambios más grandes entre cada iteración y, por el contrario, cuanto más bajo sea este valor, más lento será el entrenamiento y menores serán los cambios que se harán por cada iteración del entrenamiento. Para obtener el valor óptimo es muy importante que este valor esté convenientemente ajustado con el fin de conseguir un equilibrio entre rendimiento y precisión del aprendizaje, pudiendo variar su valor dependiendo del modelo de red neuronal y del método de optimización utilizados. En los experimentos llevados a cabo en este trabajo, se ha determinado que el valor óptimo para SGDM es 0.01, mientras que para RMSprop y Adam es 0.001. 3.2.1.2 Selección del Modelo de Red Neuronal Antes de lanzar el entrenamiento se debe seleccionar el modelo de red con el que se quiere entrenar, en este caso se puede seleccionar entre los modelos de GoogleNet y AlexNet, siendo ambas muy buenas elecciones con un rendimiento muy similar, como se verá posteriormente en la sección de resultados. El modelo de red GoogleNet trabaja con imágenes de entrada con dimensiones 224x224x3, mientras que AlexNet requiere que las imágenes del DataSet tengan las dimensiones 227x227x3. Es fundamental que las dimensiones coincidan con las requeridas en el modelo de red seleccionado, ya que cualquier imagen con dimensiones incorrectas provocará un error de la aplicación durante el entrenamiento. 22 3.2.1.3 Entrenamiento del modelo de red Una vez introducidos todos los parámetros y opciones requeridos por el entrenamiento se puede proceder al mismo, el cual puede demorar mayor o menor tiempo dependiendo del número de imágenes que contiene el DataSet además de los valores introducidos en las opciones de las que dispone el usuario a la hora de realizar el entrenamiento. 3.2.2 Fase de Clasificación Una red neuronal entrenada permite clasificar imágenes de perro de cualquiera de las razas con las que se haya entrenado, obteniendo como resultado el nombre de la raza junto a la probabilidad de pertenencia a esta. Para clasificar una imagen, tal y como se muestra en la figura 3.3, es necesario seleccionar el modelo de red con el que se quiere realizar la clasificación y elegir la imagen del perro para determinar la raza a la que pertenece, habiéndose asegurado antes que la imagen posee las dimensiones requeridas en el modelo de red seleccionado y, en caso contrario, aplicar la opción de redimensionar correspondiente. Figura 3.3. Interfaz para la clasificación de imágenes 23 3.2.2.1 Redimensión de imagen En caso de que se necesite redimensionar una imagen, en primer lugar, se debe seleccionar el modelo de red que se utilizará para clasificar dicha imagen (para así realizar la redimensión que corresponda a éste) y posteriormente habrá que seleccionar la imagen deseada y proceder a aplicar la operación de redimensión, de esta manera se obtiene la imagen preparada para la clasificación. 3.2.2.2 Clasificación de imagen Para clasificar una imagen con su raza correspondiente, una vez esté la imagen lista para la clasificación es necesario proceder a su selección, figura 3.4. Figura 3.4. Interfaz para la clasificación con visualización de la imagen seleccionada Sobre el panel de interfaz aparecerá la imagen seleccionada y, tras la elección del modelo de red con el que se desea realizar la clasificación, se puede proceder al lanzamiento de esta opción, obteniendo así el resultado que aparece en la figura 3.5, con identificación de la raza de perro correspondiente y la probabilidad de pertenencia a esa raza, en este caso con valor de 99.9%. 24 Figura 3.5. Resultado de la clasificación con indicación del tipo de raza y la probabilidad de pertenencia a la misma 3.3 Lado del administrador Desde el lado del administrador, además de poder éste realizar todas las acciones de un usuario normal, tiene la posibilidad de añadir un nuevo DataSet, indicando la ruta de ubicación de este DataSet utilizado para entrenar y, además, puede modificar cualquiera de las opciones de los entrenamientos, al contrario que en el caso de un usuario normal, que debe ceñirse a las opciones que se permiten modificar desde la interfaz. Por otro lado, el usuario administrador también puede realizar el entrenamiento desde la ventana de comandos de MatLab. 3.3.1 Asignación de DataSet El usuario administrador deberá preparar el DataSet que se utilizará para entrenar desde la interfaz, pudiendo modificarse siempre que dicho usuario lo considere, debiendo poseer las imágenes de este DataSet las dimensiones preparadas para un posible entrenamiento con AlexNet o con GoogleNet, según proceda. Para cada uno de los dos posibles entrenamientos se utiliza un script diferente, debiendo asignar la ruta del DataSet correspondiente de cada uno de los entrenamientos a unas variables concretas de cada script. Los datos de cada DataSet están distribuidos en conjuntos de imágenes de entrenamiento, validación y test y, como se muestra en la figura 3.6, el usuario administrador asignará cada uno de estos conjuntos de imágenes a las variables involucradas en el proceso de entrenamiento. 25 Figura 3.6. Ejemplo de asignación de rutas del DataSet a las variables de entrenamiento 3.3.2 Modificación de opciones de entrenamiento Desde el lado del administrador es posible modificar cualquiera de las opciones del entrenamiento con el fin de obtener el mejor resultado y rendimiento posible en el mismo. Como muestra la figura 3.7, las opciones de entrenamiento se introducen en la variable options del script de entrenamiento. Todos estos valores pueden ser modificados por el administrador asignando el valor deseado en la opción correspondiente. Figura 3.7. Ejemplo de asignación de valores en las opciones de entrenamiento 3.3.3 Uso de la ventana de comandos para entrenar Si el usuario quiere hacer pruebas de entrenamiento puede resultar más sencillo realizar estas pruebas desde la ventana de comandos que desde la interfaz gráfica. Si el usuario desea realizar un entrenamiento deberá introducir en la ventana de comandos el nombre del script que se encarga del mismo, ya que de esta manera estaría procediendo a su ejecución. Por ejemplo, en caso de que el entrenamiento se quiera llevar a cabo con GoogleNet, el comando a ejecutar sería el siguiente: CNNTrainingGoogleNet. 26 3.4 Metodología y gestión del proyecto El primer tema que se planteó para dar comienzo al proyecto fue el tipo de metodología a utilizar. Siendo un equipo formado únicamente por dos personas, ambos accedimos a utilizar las metodologías ágiles, ya que se adaptan mejor al tipo de proyecto a realizar y por ello decidimos prescindir del uso de las metodologías tradicionales. Una vez decidido que debíamos utilizar una metodología ágil procedimos a analizar cuál podría ser la que mejor se adaptara a la aplicación a desarrollar, decantándonos por utilizar una adaptación de Scrum, ya que además de ser una de las metodologías ágiles más populares y adaptativas a muchos contextos distintos, ambos teníamos la experiencia de haber trabajado con ella alguna vez en el trabajo y/o en algún proyecto previo. Esta adaptación se basó en utilizar todas las cualidades que podía aportar Scrum, pero modificando algunos roles, como por ejemplo el Scrum Master, ya que al repartirnos las tareas, cada uno tendría esta responsabilidad en el apartado asignado para trabajar, o el Product Owner, que en nuestro caso iba a ser el equipo docente, quienes nos dieron las pautas a seguir para realizar el mismo y mediante comunicaciones semanales/mensuales nos pondría nuevos objetivos, determinaría nuestro progreso y si el proyecto cumpliría con los requisitos establecidos. Ambos integrantes del grupo hemos intentado repartir las tareas equitativamente, de tal manera que entre ambos realizáramos las tareas de desarrollo y diseño de la aplicación además de la memoria. Los eventos utilizados en el desarrollo del proyecto han sido los siguientes: - Reunión de planificación: Aproximadamente, cada quincena el equipo de trabajo se ha ido reuniendo con los directores en sesiones de planificación. Al inicio del proyecto tuvimos una reunión de planificación con todos los involucrados en el mismo, a través de Google Meet, en la cual se nos proporcionaron ideas para su realización y se nos dieron pautas a seguir para adentrarnos en las tecnologías con las que íbamos a trabajar durante el desarrollo del proyecto. Además, 27 se habló del lenguaje de programación a utilizar para aplicar las técnicas de inteligencia artificial que reconociese razas de perro, entre las cuales se valoraron las opciones de utilizar Python y Matlab, decantándonos finalmente por esta última. Tras esta reunión, todas las demás reuniones de planificación se han ido realizando de forma telemática y mediante correo electrónico, en las cuales los directores se encargaban de determinar las siguientes tareas a las que debíamos proceder, además de analizar los avances realizados y resolver las dudas surgidas, previamente habladas entre los miembros del equipo de desarrollo. - Dailys: Cada dos semanas, como máximo, el equipo de trabajo se ha ido reuniendo a través de Discord para determinar entre los miembros del equipo todos los avances realizados y los problemas que se han ido encontrando a lo largo de este periodo de tiempo, abordando así soluciones para los mismos. En estas reuniones, además de organizarnos las siguientes tareas a realizar por cada miembro del equipo, se concretaba si se había terminado con la planificación establecida por los directores en la reunión. Uno de los dos miembros se ha ido encargando de enviar un correo electrónico a los profesores involucrados para seguir progresando además de obtener respuestas a dudas surgidas durante el desarrollo de las actividades. - Reunión de retrospectiva: Estas reuniones se han ido realizando cada 2/3 semanas, en las cuales hemos participado todos los miembros involucrados en el proyecto. En estas reuniones se han comentado avances, analizando el progreso durante esas semanas e intentando realizar planes de mejora futuros, identificando los resultados, calidad y procesos. 3.5 Datos y herramientas utilizadas Para el desarrollo de este proyecto se ha utilizado un DataSet que contiene imágenes de perros clasificados en las razas a las que pertenecen y varias herramientas que han facilitado el trabajo y la comunicación entre el equipo de desarrollo. 28 3.5.1 DataSet El DataSet utilizado contiene imágenes de 70 razas de perro diferentes, entre las cuales hay un total de 9.346 imágenes redimensionadas para cada tipo de entrenamiento (AlexNet/GoogleNet), estando distribuidas en conjuntos de entrenamiento, validación y test, habiendo 7.946 imágenes destinadas al entrenamiento, 700 imágenes para la validación y otras 700 para test. En los casos de validación y test hay 10 imágenes de perros pertenecientes a cada raza, y en el conjunto de imágenes usadas para el entrenamiento no existe una cantidad específica para cada raza, aunque el número de las mismas es bastante similar entre unas razas y otras. Este DataSet procede de la página Kaggle (2022), que es un sitio web que contiene una cantidad inmensa de DataSets preparados para entrenar redes neuronales. En todas las imágenes utilizadas aparece un único animal, variando los ángulos y perspectivas y en todos los casos asegurando una buena calidad de imagen, lo cual favorece a la eficacia del entrenamiento. En la figura 3.8 se muestran varias imágenes utilizadas para el entrenamiento de la raza Cocker. Figura 3.8. Imágenes de perros pertenecientes a la raza Cocker utilizadas para el entrenamiento en el DataSet. 29 3.5.2 Herramientas Las herramientas utilizadas para la realización del proyecto han sido las siguientes: - Matlab R2022b: Entorno de programación muy útil para el desarrollo de aplicaciones basadas en inteligencia artificial, además de para cálculos numéricos. Se ha utilizado Matlab para crear y diseñar una App que permite al usuario entrenar una red neuronal convolucional y clasificar imágenes de perro con sus razas correspondientes. Posee en concreto un módulo específico de Deep Learning con altas prestaciones y potencialidad (Deep Learning Matlab, 2023). - Google Drive Servicio de almacenamiento de datos alojado en la nube, que permite subir cualquier tipo de documentos o imágenes y compartirlos con otros usuarios. Se ha utilizado Google Drive para compartir la memoria de forma online además de compartir algunos otros documentos de utilidad en el desarrollo del proyecto. - Word Procesador de textos de Microsoft Office que permite escribir y manipular texto en un documento. Se ha utilizado Word para trabajar en la memoria de forma off-line. - Discord Herramienta para la comunicación mediante texto y audio con otras personas, independientemente de dónde se encuentren. Se ha utilizado para las dailys entre los miembros de equipo, para hablar vía audio en relación a las necesidades para avanzar en cualquier momento, para compartir avances del proyecto o cualquier información de utilidad en cada preciso momento. - WhatsApp Servicio de mensajería instantánea utilizado para comunicarnos a lo largo de la realización del proyecto durante los intervalos de tiempo entre las dailys, además de ser útil para decidir el día y hora de cada reunión por su capacidad de comunicación inmediata. 30 - Gmail Servicio de correo electrónico utilizado para intercambiar correos electrónicos con el equipo docente. Se ha hecho uso de él para decidir el proyecto a realizar, además de para planificar las reuniones y comentar avances y dudas. - GitHub GitHub es un servicio en la nube que permite subir código de programación. Posee un sistema de control de versiones llamado Git. Se ha hecho uso de GitHub para subir el código de la aplicación desarrollada. 37 4.2 Clasificación Tras el proceso de entrenamiento se continúa con la clasificación. Para ello se pasan las imágenes seleccionadas de test con tal finalidad. Estas imágenes, al igual que las utilizadas para el entrenamiento, llevan asociada la etiqueta de la clase de raza a la que pertenece cada imagen, por lo que es posible llevar a cabo la validación del modelo entrenado. Una medida para tal fin consiste en el cómputo de lo que se conoce como Matriz de Confusión, ampliamente utilizada en aplicaciones que involucran aprendizaje automático. La información en una matriz de confusión multiclase se organiza como se indica a continuación siguiendo el ejemplo ilustrativo que se proporciona. Supóngase que se dispone de imágenes de perros de tres tipos de razas o categorías, según la siguiente distribución. c1: Afghan con 20 imágenes disponibles c2: Labrador con 30 imágenes disponibles c3: Rottweiler con 40 imágenes disponibles Cuando se le pasan las 20 imágenes de la categoría Afghan a la red, ésta predice o clasifica 15 como Afghan, 3 como Labrador y 2 como Rottweiler, es decir 15 han sido correctamente clasificadas y el resto incorrectamente. Si se pasan las 30 imágenes de la categoría Labrador la predicción que realiza el modelo es 6 como Afghan, 24 como Labrador y 0 como Rottweiler, resultando en este caso que del total 24 han sido clasificadas de forma correcta. Finalmente, al pasar las 40 imágenes Rottweiler, la clasificación resultante es de 4 Afghan, 5 Labrador y 31 Rottweiler, de forma que 31 han sido correctamente clasificadas y el resto no. Llevando estos resultados a la tabla 4.1, donde las filas representan las clases verdaderas y las columnas las clases predichas, se obtienen los valores que se muestran a continuación. 38 Clase predicha c1 c2 c3 Total Clase verdadera c1 15 3 2 20 c2 6 24 0 30 c3 4 5 31 40 Tabla 4.1. Modelo de ejemplo de matriz de confusión Ciertamente lo ideal sería que todas las imágenes de la categoría Afghan hubiesen sido clasificadas como tal, y lo mismo con las otras dos categorías, de forma que las celdas de la tabla (c1, c1), (c2, c2) y (c3, c3) concentraran el máximo número de imágenes predichas posible (20, 30, 40) y el resto de celdas ninguna imagen. Es decir, para determinar el buen desempeño de un modelo, las celdas que conforman la diagonal principal deberían contener valores máximos y el resto mínimos, e idealmente nulos. En la figura 4.7 se muestra la matriz de confusión obtenida con el modelo de red GoogleNet para las muestras de test. Observándose cómo la diagonal principal acumula la mayor densidad de valores, de forma que, bajo el criterio anterior, se puede concluir el buen desempeño del modelo para el conjunto de imágenes bajo prueba. 39 Figura 4.7. Matriz de confusión para el modelo GoogleNet En la figura 4.8 se muestra la matriz de confusión obtenida con el modelo de red AlexNet para las muestras de test. Al igual que en la figura anterior, se observa cómo la diagonal principal acumula la mayor densidad de valores. El desempeño del modelo para el conjunto de imágenes de prueba ha sido aceptable, pero menos preciso en comparación con el entrenamiento de GoogleNet, debido a que la precisión ha sido menor en algunas razas concretas. Figura 4.8. Matriz de confusión para el modelo AlexNet 40 A continuación, se muestran una serie de comparativas con los valores de probabilidad asociada en cada caso entre los diferentes modelos tras realizar varias clasificaciones utilizando las mismas imágenes de test con el objetivo de ilustrar el desempeño de cada uno de los modelos. Se han elegido tres razas de perro de forma aleatoria para comparar estos dos modelos, obteniéndose los siguientes resultados: 1. Labrador Resultados obtenidos utilizando el modelo AlexNet Resultados obtenidos utilizando el modelo GoogleNet Tabla 4.2. Comparativa entre resultados de clasificación de la raza Labrador Tras realizar clasificaciones de varias imágenes de raza Labrador se observa que la probabilidad de ambos modelos ha sido muy alta, devolviendo correctamente la raza a la que pertenece y obteniendo cada modelo más de un 90% de probabilidad en cada una de las imágenes. En estos ejemplos la probabilidad más alta ha sido obtenida utilizando el modelo AlexNet, con un 95.6% de probabilidad en la primera de las imágenes y un 98% en la segunda. 41 2. Beagle Resultados obtenidos utilizando el modelo AlexNet Resultados obtenidos utilizando el modelo GoogleNet Tabla 4.3. Comparativa entre resultados de clasificación de la raza Beagle Tras realizar clasificaciones de varias imágenes de raza Beagle se observa que la probabilidad del modelo GoogleNet ha sido razonablemente alta en ambas imágenes, pero, sin embargo, al hacer uso del modelo AlexNet se obtienen dos resultados muy distintos según la imagen clasificada, con una probabilidad del 100% en la primera de las imágenes, y únicamente un 59.6% para la segunda imagen. A pesar de ello, se devuelve correctamente la raza a la que pertenece el perro de la imagen clasificada. Este bajo nivel de precisión puede deberse a que se hayan entrenado razas con aspectos parecidos que puedan tener alguna similitud en esta imagen concreta, además se puede añadir también en este sentido que AlexNet no ha conseguido una buena generalización para algunas razas. La solución vendría por añadir más imágenes en el entrenamiento para tales situaciones. 42 3. Siberian Husky Resultados obtenidos utilizando el modelo AlexNet Resultados obtenidos utilizando el modelo GoogleNet Tabla 4.4. Comparativa entre resultados de clasificación de la raza Siberian Husky Tras realizar clasificaciones de varias imágenes de raza Siberian Husky se observa una probabilidad máxima del modelo GoogleNet, devolviendo la raza correcta en ambas imágenes clasificadas con un 100% de probabilidad, lo cual indica que el entrenamiento de esta raza ha sido suficientemente aceptable. Utilizando el modelo AlexNet, en la primera imagen clasificada se obtiene una probabilidad muy alta (de un 98.2%), sin embargo, en la segunda imagen, la probabilidad es mucho menor, obteniendo únicamente un 55.7%. Observándose con todas estas clasificaciones que, por lo general, el modelo GoogleNet obtiene mejores valores en la clasificación que AlexNet, con ambos devolviendo la raza correcta en todas las clasificaciones realizadas. Este comportamiento es aplicable con carácter general para otras razas. 43 4.3 Errores más frecuentes Los errores más frecuentes observados durante la fase de clasificación se concretan como sigue: - Clasificar una imagen con poca calidad: Una imagen con poca calidad puede provocar que la red no detecte correctamente la raza a la que pertenece el perro que contiene, ya que teniendo tantos rasgos parecidos algunas razas puede provocar la confusión en la clasificación. - Intentar clasificar o utilizar para entrenar imágenes que contienen perros de distintas razas: Tanto en el entrenamiento como en la clasificación es importante que la imagen no contenga varios perros de distintas razas, ya que esto genera confusión en la red y podría perjudicar el entrenamiento o devolver un resultado incorrecto en la clasificación. 44 Capítulo 5 - Conclusiones y trabajo futuro 5.1 Conclusiones Tal y como se ha comentado previamente, Matlab ofrece las herramientas adecuadas en sus correspondientes toolboxes para aplicar las técnicas de Visión por Computador y Aprendizaje Automático, especialmente Deep Learning. Se utilizan los modelos de red AlexNet y GoogleNet que ya están pre-entrenados, si bien, se ajustan mediante el DataSet de imágenes disponibles y una selección de parámetros que se deben ajustar cuidadosamente para lograr la mayor precisión posible con el fin de obtener la tasa de éxito más alta. Estos modelos han demostrado ser especialmente eficaces en la identificación y clasificación de razas de perro (patrones) en imágenes, la implementación de las distintas capas de las redes neuronales profundas, en particular la capa de convolución y las operaciones de pooling y activación, son esenciales para la precisión y eficiencia de estas redes y las mejoras continuas en la arquitectura de las redes neuronales, como la factorización convolucional, han llevado a una mejor eficiencia y precisión. En resumen, la implementación de redes neuronales profundas en la identificación y clasificación específicas de patrones en imágenes sigue siendo un área de rápido desarrollo y presenta un enorme potencial para aplicaciones futuras en el campo de la visión por computadora y el procesamiento de información. 5.2 Trabajo futuro De cara al futuro, se han identificado algunos aspectos para mejorar la aplicación, los cuales incluyen: • Utilizar un DataSet más grande que el actual, buscando DataSets con más imágenes, o DataSets con más razas de perro. • Aumentar el número de entrenamientos en busca de una combinación ideal de precisión y tiempo. Nuevas funcionalidades: 45 • Integración con cámaras de seguridad: utilizar las capacidades de la aplicación para reconocer perros por raza en tiempo real a través de cámaras de seguridad. • Análisis de la edad: experimentar con redes neuronales que puedan reconocer también la edad de los perros en las imágenes. • Utilizar ThinkSpeak, que es una plataforma específica de Matlab para almacenar la información y resultados obtenidos. 46 Introduction Preliminary Dog Breeds Dogs are believed to have been first domesticated over 15,000 years ago, from wild wolves. Over the centuries that followed, dogs adapted and evolved in different geographical areas, giving rise to the different breeds we know today. The first dog breeds were created to fulfill different functions, such as hunting, herding, guarding, company, among others. In ancient times, dogs were bred naturally, but over time, selective breeding techniques were developed, with the aim of obtaining dogs with specific characteristics that would improve their performance in different activities. Over time, dog competitions became popular, and in the 19th century, dog breed associations and clubs began to be created. The first breed dog club was the Kennel Club of England, founded in 1873, which was in charge of standardizing the different breeds, defining the specific characteristics of each of them, and establishing a series of breeding standards. The classification of dog breeds can be done in different ways, but one of the most common is the one that divides dogs into different groups according to their original function. These groups are usually hunting, shepherd, company, work, among others. Today, there are over 400 officially recognized dog breeds. Each breed has unique physical and personality characteristics, making them well-suited for different situations and activities. Each breed of dog has distinctive physical and personality characteristics. These characteristics are determined by a series of genes that are passed from generation to generation. Artificial selection, also known as selective breeding, has been used to promote desirable traits in certain breeds of dogs and has been practiced for a long time. 53 CONTRIBUCIONES PERSONALES Francisco Boccassi Labores de investigación: • Investigación de requisitos a la hora de encontrar un buen DataSet. • Investigación y familiarización con el entorno de programación Matlab y su lenguaje, del cual no tenía conocimientos previos. • Estudio del funcionamiento y entrenamiento de las redes neuronales convolucionales, concretamente centrándose en GoogleNet y AlexNet. • Estudio y comprensión del código guía para aprender muchas de las funcionalidades realizadas en el mismo. Labores de desarrollo: • Búsqueda de DataSets para el proyecto. • Aportación de ideas al diseño de la interfaz de la aplicación junto a mi compañero del equipo de desarrollo. • Realización de varios entrenamientos con GoogleNet y AlexNet, utilizando diferentes opciones de entrenamiento y métodos de optimización. • Realización de clasificaciones usando el modelo AlexNet comprobando que los resultados sean correctos para hacer comparativas con los resultados obtenidos utilizando el modelo GoogleNet. Labores de gestión: • Organización y gestión de Google Drive como herramienta para trabajar en equipo. • Elección del tipo de metodología a utilizar durante el desarrollo del proyecto junto al resto del equipo de desarrollo. • Organización y reparto de tareas, además de determinar las fechas para terminarlas. 54 • Revisión y corrección de errores en cada una de las versiones de la memoria. • Identificación de problemas y dudas para abordarlas en la siguiente reunión con el equipo docente. Labores de documentación de la memoria: • Realización de los apartados iniciales previos al índice. • Realización del apartado 1.1 donde se detallan los antecedentes. • Realización del apartado 1.2 donde se detalla cuál ha sido la motivación para realizar el proyecto. • Realización del apartado 1.3, donde se describen los objetivos. • Realización del apartado 1.4, donde se indica el plan de trabajo que se ha seguido. • Realización del apartado 1.5, donde se describe la estructura de la memoria. • Realización del apartado 2.1, donde se describen algunas operaciones en redes neuronales convolucionales. • Realización del apartado 2.2, donde se detalla información sobre AlexNet. • Realización del apartado 2.3, donde detalla información sobre GoogleNet. • Realización del apartado 5.1, donde se detallan las conclusiones finales. • Realización del apartado 5.2, donde se plantean posibles ampliaciones o trabajo para el futuro. • Realización del apartado donde se comentan los mismos apartados de la Introducción, pero en inglés. • Realización del apartado donde se detallan las conclusiones finales en inglés. • Realización del apartado donde se plantean posibles ampliaciones o trabajo para el futuro en inglés. • Realización del apartado donde se detallan las contribuciones personales, junto con mi compañero. 55 Alberto Olmo Ángel Labores de investigación: • Investigación y familiarización con el entorno de programación Matlab y su lenguaje, del cual no tenía conocimientos previos. • Investigación sobre la herramienta de desarrollo de aplicaciones de Matlab App Designer, centrándose en el desarrollo de la interfaz del proyecto. • Estudio del funcionamiento y entrenamiento de las redes neuronales convolucionales, concretamente centrándose en GoogleNet y AlexNet. • Investigación sobre la creación y funcionalidad de botones, campos de texto e imagen, además del uso de variables y depuración de código en la herramienta App Designer. • Estudio de las opciones de entrenamiento y los métodos de optimización utilizados en los diferentes entrenamientos realizados a lo largo del proyecto. • Estudio y comprensión del código guía para aprender muchas de las funcionalidades realizadas en el mismo. Labores de desarrollo: • Diseño de la interfaz de la aplicación ayudado de mi compañero del equipo de desarrollo. • Desarrollo de todo el código y funcionalidades de la aplicación, que permite realizar clasificaciones, entrenamientos y redimensión de imágenes. • Integración del código de la aplicación con cada una de las funciones desarrolladas y utilizadas para cada función específica. • Testeo y validación de todas las funcionalidades de la aplicación. • Realización de varios entrenamientos con GoogleNet y AlexNet, utilizando diferentes opciones de entrenamiento y métodos de optimización. 56 • Realización de clasificaciones usando el modelo GoogleNet comprobando que los resultados sean correctos para hacer comparativas con los resultados obtenidos utilizando el modelo AlexNet. • Realización de opción de redimensión para preparar las imágenes para su clasificación. Labores de gestión: • Elección del tipo de metodología a utilizar durante el desarrollo del proyecto junto al resto del equipo de desarrollo. • Organización y reparto de tareas, además de determinar las fechas para terminarlas. • Creación de un repositorio de GitHub para almacenar el código de la aplicación. • Revisión y corrección de errores en cada una de las versiones de la memoria. • Identificación de problemas y dudas para abordarlas en la siguiente reunión con el equipo docente. Labores de documentación de la memoria: • Realización de los índices de contenidos, figuras y tablas. • Realización del apartado 3.1, donde se detalla el modelo de arquitectura con sus correspondientes capas y los casos de uso. • Realización del apartado 3.2, donde se detalla la parte del lado del cliente. • Realización del apartado 3.3, donde se detalla la parte del lado del administrador. • Realización del apartado 3.4, donde se describe la metodología y gestión del proyecto. • Realización del apartado 3.5, donde se indican las herramientas utilizadas durante el desarrollo de la aplicación. 57 • Realización del apartado 4.1, donde se analizan los resultados obtenidos en los entrenamientos realizados. • Realización del apartado 4.2, donde se analizan los resultados obtenidos en las clasificaciones realizadas. • Realización del apartado 4.3, donde se describen los errores más frecuentes observados. • Realización del apartado donde se detallan las contribuciones personales, junto con mi compañero. • Realización del Anexo 1, donde se muestran los diagramas de entrenamiento. • Realización del Anexo 2, donde se proporciona un manual de usuario para ejecutar la aplicación correctamente. • Maquetación de la memoria en todas sus versiones. 58 BIBLIOGRAFÍA 1. Animals Health (2023) Mestizaje del perro [En línea]. Disponible en: https://www.animalshealth.es/mascotas/el-mestizaje-de-los-perroscontribuye-a-su-buena-salud-y-longevidad [Último acceso: febrero 2023]. 2. Boureau, Y., Bach, F., LeCun, Y., Ponce, J. (2010a). Learning mid-level features for recognition. In Proc. IEEE Int. Conference on Computer Vision and Pattern Recognition (CVPR’10). 3. Boureau, Y., Ponce, J., LeCun, Y. (2010b). A theoretical analysis of feature pooling in vision algorithms. In Proc. IEEE Int. Conference on Machine learning (ICML’10). 4. Boureau, Y., Le Roux, N., Bach, F., Ponce, J., and LeCun, Y. (2011). Ask the locals: multi-way local pooling for image recognition. In Proc. IEEE Int. Conference on Computer Vision (ICCV’11). 5. BVLC AlexNet Model (2023) [En línea]. Disponible en: https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet [Último acceso: febrero 2023]. 6. BVLC GoogleNet Model (2020) [En línea]. Disponible en: https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet 7. Ciencia de Hoy (2023) Historia-del-perro [En línea]. Disponible en: https://cienciadehoy.com/historia-del-perro-como-y-por-que-los-perrosfueron-domesticados/ [Último acceso: febrero 2023]. 8. Dumoulin, V., Visin, F. (2018). A guide to convolution arithmetic for deep learning. Preprint en ArXiv. Disponible on-line: https://arxiv.org/pdf/1603.07285.pdf 9. Experto Animal (2023a) Origen y evolución del perro [En línea]. Disponible en: https://www.expertoanimal.com/historia-origen-y-evolucion-del-perro24433.html [Último acceso: febrero 2023]. 10. Experto Animal (2023b) Clasificación del perro [En línea]. Disponible en: https://www.expertoanimal.com/clasificacion-de-razas-de-perros-segun-lafci-21121.html [Último acceso: febrero 2023]. 59 11. Experto Animal (2023c) Razas del perro [En línea]. Disponible en: https://www.expertoanimal.com/razas-de-perros.html [Último acceso: febrero 2023]. 12. Goodfellow, I., Bengio, Y., Courville, A. (2016). Deep learning. MIT Press. Disponible on-line: https://www.deeplearningbook.org/ 13. ImageNet (2023) [En línea]. Disponible en: http://www.image-net.org [Último acceso: marzo 2023]. 14. ImageNet LSVRC (2012). Large Scale Visual Recognition Challenge 2012 (ILSVRC2012). Disponible on-line: http://www.imagenet.org/challenges/LSVRC/2012/ 15. ImageNet LSVRC (2014). Large Scale Visual Recognition Challenge 2014 (ILSVRC2014). Disponible on-line: http://imagenet.org/challenges/LSVRC/2014/eccv2014 16. Kaggle (2022) [En línea]. Disponible en: https://www.kaggle.com [Último acceso: octubre 2022]. 17. Krizhevsky, A., Sutskever, I., Hinton, G.E. (2012). ImageNet Classification with Deep Convolutional Neural Networks. In Proc. 25th Int. Conf. on Neural Information Processing Systems (NIPS'12), vol. 1, pp. 1097-1105. 18. LeCun, Y., Boser, B., Denker, J.S., Henderson, D., Howard, R.E., Hubbard, W., Jackel, L.D. (1989). Backpropagation applied to handwritten zip code recognition. Neural Computation, 1(4), 541-551. 19. LeCun, Y. (1989). Generalization and network design strategies. Technical ReportCRG-TR-89-4, University of Toronto. 326, 345747 [En línea]. Disponible en: http://yann.lecun.com/exdb/publis/pdf/lecun-89.pdf [Último acceso: diciembre 2022]. 20. Mathworks (2023) MATLAB para la inteligencia artificial [En línea]. Disponible en: https://es.mathworks.com/ [Último acceso: abril 2023] 21. O’Shea, K., Nash, R. (2015). An Introduction to Convolutional Neural Networks. arXiv:1511.08458v2 [cs.NE]. 22. Pajares, G., Herrera, P.J., Besada, E. (2021). Aprendizaje Profundo. RC-Libros, Madrid. 60 23. Russakovsky, O., Deng, J., Su, H., Krause, J., Satheesh, S., Ma, S. Huang, Z., Karpathy, A., Khosla, A., Bernstein, M., Berg, A.C., Fei-Fei, L. (2015). ImageNet Large Scale Visual Recognition Challenge. International Journal of Computer Vision (IJCV). 115(3), pp. 211–252. 24. Saxe, A.M., Koh, P.W., Chen, Z., Bhand, M., Suresh, B., Ng, A.Y. (2011). On random weights and unsupervised feature learning. In L. Getoor and T. Scheffer, editors, Proceedings of the 28th International Conference on Machine Learning (ICML-11), ICML’11, pp. 1089–1096, New York, NY, USA. ACM. 25. Szegedy, C., Liu, W., Jia, Y., Sermanet, P., Reed, S., Anguelov, D., Erhan, D., Vanhoucke, V., Rabinovich, A. (2014). Going Deeper with Convolutions. Computing Research Repository. arXiv:1409.4842 [cs.CV]. 26. Szegedy, C., Vanhoucke, V., Ioffe, S., Shlens, J. (2015). Rethinking the Inception Architecture for Computer Vision. arXiv:1512.00567v3. 27. Un Org (2023) Impacto de la tecnología [En línea]. Disponible en: https://www.un.org/es/un75/impact-digital-technologies [Último acceso: febrero 2023]. 28. Zeiler, M.D., Fergus, R. (2013). Visualizing and Understanding Convolutional Neural Networks. arXiv:1311.2901v2. 29. Zhou, Y., Chellappa, R. (1988). Computation of optical flow using a neural network. Proc. IEEE International Conference on Neural Networks, 1988, pp. 71– 78. 61 ANEXOS A continuación, se incluye un conjunto de anexos donde se muestran ejemplos de Análisis del modelo GoogleNet mediante el analizador proporcionado por Matlab. También se incluyen una serie de imágenes de entrenamiento como ejemplo de éstas (Anexo 1). Por último, se incluye un manual de usuario, con una explicación paso a paso del procedimiento para la ejecución y uso de la aplicación (Anexo 2). Anexo 1 - Diagramas de entrenamiento A continuación, se muestran los diagramas de entrenamiento con los modelos de red AlexNet y GoogleNet. - Network Analyzer: Herramienta que se utiliza para visualizar la estructura y los parámetros de la red neuronal, Diagrama 1. Diagrama 1. Network Analyzer 62 - Training images: Conjunto de imágenes ilustrativas extraídas de forma aleatoria del DataSet, proporcionando una idea del tipo de imágenes utilizadas, Diagrama 2. Diagrama 2. Training images