Generación de escenarios de conducción sintéticos usando Deep Learning y técnicas de Inpainting
Abstract
Departamento de Informática (Arquitectura y Tecnología de Computadores, Ciencias de la Computación e Inteligencia Artificial, Lenguajes y Sistemas Informáticos)
Full text
Universidad de Valladolid ESCUELA DE INGENIER´ IA INFORM´ ATICA GRADO EN INGENIER´ IA INFORM´ ATICA MENCI´ ON EN COMPUTACI´ ON Generaci´on de escenarios de conducci´on sint´eticos usando Deep Learning y t´ecnicas de Inpainting Alumno/a: Javier Abad Hern´andez Tutores: Manuel Barrio Sol´orzano ´ Alvaro Garc´ıa Garc´ıa (Fundaci´on CIDAUT)
Agradecimientos A mi familia y mi pareja, por ser ese apoyo personal y familiar que uno necesita para sacar adelante las cosas en momentos dif´ıciles. A mi tutor de empresa ´ Alvaro y mis compa˜neros Marcos, Juan, Dani, Enrique, Nico y Chuchi que me animaron a lanzarme en la aventura de sacar adelante una tarea tan poco explorada como es la del inpainting. No me quiero olvidar de Manuel, que no dud´o en llevar el seguimiento de este TFG pese a las fechas tan tard´ıas en las que se le propuso la tutor´ıa. Por ´ultimo, como aficionado al Atl´etico de Madrid, quiero agradecer que a lo largo de mi vida me haya ense˜nado que con trabajo y con esfuerzo las metas que uno se propone, se pueden conseguir. Pese a que en muchos casos se puede sufrir y pasarlo mal, merecer´a la pena, ya que finalmente, esos logros se disfrutan mucho m´as que si el camino hubiera sido sencillo. 3
Resumen En este trabajo presentamos un problema en el campo de la conducci´on aut´onoma que se apoya en Inteligencia Artificial (IA) en el ´area de Visi´on por Computadora (CV) para recrear im´agenes mediante la t´ecnica de inpainting. Actualmente, es un problema que no ha sido explorado en profundidad, por ello, buscamos hallar una soluci´on v´alida mediante el uso de Redes Neuronales Convolucionales (CNN). Para lograrlo, empezamos a probar distintas soluciones y finalmente, elegimos una soluci´on concreta. Se presentan los resultados obtenidos para cada red y para varios conjuntos de im´agenes (entre los que destacan los de conducci´on aut´onoma) mediante el uso de distintas m´etricas, im´agenes y gr´aficas. De manera que se vea el progreso y los conocimientos obtenidos durante este Trabajo de Fin de Grado. Palabras clave: inpainting, conducci´on aut´onoma, visi´on por computador, inteligencia artificial, aprendizaje autom´atico, aprendizaje profundo, conjunto de datos, preprocesamiento, postprocesamiento, Python. 5
Abstract The problem in autonomous driving relies on Artificial Intelligence in the area of Computer Vision to recreate images using the inpainting technique. This problem is not well-known, so we want to find a good solution using convolutional neural networks (CNN). To achieve this, we will try different solutions until we choose a concrete one, taking it as the final solution. Different metrics, images, and graphs are used to present the results achieved for each network and for various image sets. In order to demonstrate the advancements and understanding achieved in this Final Degree Project. Keywords: inpainting, autonomous driving, computer vision, artificial intelligence, machine learning, deep learning, datasets, pre-process, post-process, Python. 7
´ Indice general ´ Indice de figuras 12 ´ Indice de tablas 16 1. Introducci´on 1 1.1. Motivaci´on.................................. 2 1.2. AlcanceyObjetivos............................. 2 2. Planificaci´on y costes 5 2.1. Metodolog´ıa de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2. Planificaci´on del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3. PlandeCostes ............................... 12 3. Marco Te´orico 16 3.1. Visi´on por computadora (Computer Vision) ............... 16 3.2. Aprendizaje Autom´atico (Machine Learning)............... 18 3.2.1. Algoritmos de aprendizaje supervisado . . . . . . . . . . . . . . 19 3.2.2. Algoritmos de aprendizaje no supervisado . . . . . . . . . . . . 21 3.3. Aprendizaje Profundo (Deep Learning).................. 23 3.3.1. Redes Neuronales Recurrentes (RNN) . . . . . . . . . . . . . . . 23 3.3.2. Redes Neuronales Convolucionales (CNN) . . . . . . . . . . . . 28 3.4. Inpainting.................................. 32 3.4.1. Tipos de redes utilizadas . . . . . . . . . . . . . . . . . . . . . . 33 3.4.2. Estado del arte (SOTA) . . . . . . . . . . . . . . . . . . . . . . 35 3.5. Aportaci´onpersonal ............................ 38 4. Framework 40 4.1. Configuraci´on del Sistema . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2. Entorno de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2.1. Lenguaje de Programaci´on . . . . . . . . . . . . . . . . . . . . . 40 4.2.2. Entornos Virtuales . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.3. Dependencias y Librer´ıas . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.3.1. Librer´ıas de visi´on artificial . . . . . . . . . . . . . . . . . . . . 41 4.3.2. Frameworks de Deep Learning . . . . . . . . . . . . . . . . . . . 41 4.3.3. Gesti´on de Dependencias . . . . . . . . . . . . . . . . . . . . . . 41 4.4. Instrucciones de despliegue . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.4.1. Despliegue y ejecuci´on . . . . . . . . . . . . . . . . . . . . . . . 42 4.4.2. Monitoreo.............................. 42 5. Conjuntos de im´agenes (datasets) 44 5.1. Conjuntos utilizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 5.1.1. DEFACTODataset . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.1.2. VirtualKITTIV2 ......................... 45 9
´ Indice de tablas 2.1. Actoresimplicados ............................. 6 2.2. Resumen de Sprints y Objetivos Reestructurados . . . . . . . . . . . . 9 2.3. Especificaciones de Configuraci´on en sistemas con GPU Nvidia . . . . . 12 2.4. Comparativa de GPUs y Costes . . . . . . . . . . . . . . . . . . . . . . 13 4.1. Especificaciones del Hardware . . . . . . . . . . . . . . . . . . . . . . . 40 6.1. Red1 .................................... 59 6.2. Red2 .................................... 60 6.3. Red3 .................................... 61 6.4. Red4 .................................... 62 6.5. Generador.................................. 63 6.6. Discriminador................................ 63 6.7. Red5-GAN ................................ 64 6.8. Red6 .................................... 64 6.9. Red7 .................................... 65 6.10.Red8 .................................... 66 6.11.Red9 .................................... 67 6.12.RedFinal .................................. 68 7.1. Comparaci´on de resultados en los distintos modelos creados. . . . . . . 88 7.2. Ranking de resultados para los distintos modelos creados . . . . . . . . 88 7.3. Comparaci´on de resultados seg´un el n´umero de im´agenes utilizadas para el entrenamiento de la red final para el dataset BDD100K . . . . . . . . 89 C.1. Comparativa de las versiones de YOLO. . . . . . . . . . . . . . . . . . 117 16
17
18
1. Introducci´on En la actualidad, la Inteligencia Artificial (IA) est´a tomando un gran valor e importancia gracias a todas sus aplicaciones en los ´ambitos de asistencia a la toma de decisiones. La explosi´on de diferentes soluciones de IA, como ChatGPT [1] de la compa˜n´ıa OpenAI, ya ofrecen entornos con modelos de chatbot [2] que utilizan enfoques de IA generativa. No obstante, pese a que sea la IA m´as conocida en la actualidad, no quiere decir ni que sea la ´unica, ni s´e que solo sirvan para “mantener conversaciones con ellas”. La IA se utiliza en otros ´ambitos, tanto profesionales como no profesionales. Podemos ver ejemplos en aplicaciones m´edicas, a la hora de comprar por Internet, en asistentes virtuales, traducciones en tiempo real, en videojuegos y tambi´en en problemas de rob´otica m´ovil. Una vez se ha presentado de forma breve lo que la sociedad identifica como IA, hemos de profundizar un poco m´as. Dos “subconjuntos o subniveles”de la IA son el Machine Learning y el Deep Learning. Estos conforman las distintas arquitecturas internas de las IAs que vemos a diario, y podemos decir que en el campo de la inform´atica, han surgido como herramientas para resolver una gran variedad de problemas, tanto sencillos como complejos. Por hacer un s´ımil, es comparable al momento en el que surgi´o la calculadora para el ´ambito matem´atico. En este Trabajo de Fin de Grado, particularmente, nos centraremos en la aplicaci´on del Machine Learning yDeep Learning dentro de la conducci´on aut´onoma, ya que estas t´ecnicas, han impulsado el avance de la visi´on por computadora de manera significativa en las ´ultimas d´ecadas. En el campo de la conducci´on aut´onoma y visi´on artificial, han ido apareciendo nuevos problemas como: Denoising, Low-Light, Deblur, etc. para los que se han aportado soluciones basadas en t´ecnicas de Deep Learning. En nuestro caso, trataremos el problema del “inpainting”sobre im´agenes que es el proceso de relleno de zonas, partes o ´areas faltantes de una imagen, de forma que la reconstrucci´on sea lo m´as perfecta y coherente en el contexto posible. Al igual que pasa con la IA en general, el inpainting, tiene aplicaciones en un mont´on de ´areas, como la reconstrucci´on y/o restauraci´on de im´agenes antiguas, edici´on de im´agenes para reemplazamiento y/o eliminaci´on de objetos, y en nuestro caso m´as espec´ıfico mejora de sistemas de visi´on en la conducci´on aut´onoma. Para entender c´omo esta t´ecnica puede ayudar a mejorar los sistemas de visi´on en la conducci´on aut´onoma, es crucial pensar como humanos, no como m´aquinas. Suponemos dos escenarios, uno con un humano conduciendo un veh´ıculo, donde hay constante atenci´on a la carretera y otro en el que el veh´ıculo depende del uso de sensores, c´amaras y algoritmos para conducir de forma aut´onoma. Si aparece un ni˜no que se dispone a cruzar la carretera, detr´as de un veh´ıculo aparcado, una m´aquina deber´ıa de tener en cuenta todas las posibles situaciones de detecci´on de riesgos. Con la t´ecnica de inpainting, es posible anticiparse al problema gracias a la recreaci´on del escenario antes de que aparezca. As´ı, mediante esta t´ecnica, los veh´ıculos aut´onomos puedan ser capaces 1
CAP´ ITULO 1. INTRODUCCI ´ ON de interpretar su entorno visual de forma precisa. Adem´as, dada la gran diversidad de requisitos para obtener conjuntos de datos apropiados para el entrenamiento de modelos basados en visi´on por computador para inpainting, en este Trabajo de Fin de Grado se abordar´an diferentes t´ecnicas tanto tradicionales como mediante el uso de IA para as´ı generar finalmente escenarios sint´eticos, usando Deep Learning e Inpainting. 1.1. Motivaci´on La IA tiene un gran papel en la conducci´on aut´onoma. Podemos encontrar noticias y art´ıculos especializados [3] [4] [5] que presentan “La inteligencia artificial en veh´ıculos aut´onomos” [6], y por ende como “La inteligencia artificial revoluciona el sector del autom´ovil” [7]. Sin embargo, no queda claro como funcionan realmente estas IAs, que es necesario para crearlas, como se entrenan y otras muchas cuestiones que nos pueden surgir. En realidad, la IA aplicada a problemas de los veh´ıculos inteligentes se viene desarrollando desde hace m´as de una d´ecada [8]. Trabajos como “Are we ready for autonomous driving? the KITTI vision benchmark suite.” [9] de Raquel Urtasun, actualmente una de las l´ıderes en inteligencia artificial en este campo [10][11], nos permiten entender estos problemas desde un punto de vista inform´atico, m´as concretamente desde el ´ambito de la visi´on por computador. La posibilidad de trabajar en IA como Ingeniero en Inform´atica me motiv´o a unirme a Fundaci´on CIDAUT [12]. En particular, tras ver todo lo que se realizaba en este centro de investigaci´on asociado a los proyectos de la l´ınea de visi´on artificial (Computer Vision) para el tratamiento de im´agenes para la conducci´on aut´onoma. Durante un periodo de dos meses de pr´acticas, pude estar involucrado en los proyectos ya existentes de mejora de imagen aplicados a escenarios de conducci´on aut´onoma, como podr´ıa ser Low-Light Enhancement[13], Deblur[14] y Denoising[15]. Esto me ofreci´o un entorno multidisciplinar para completar mi formaci´on con la realizaci´on del Trabajo de Fin de Grado (TFG) en el ´ambito del veh´ıculo inteligente. De esta manera, empec´e a trabajar en un problema de investigaci´on abierto, la restauraci´on de im´agenes con inteligencia artificial para la generaci´on de datasets espec´ıficos y modelos de entrenamiento. Esta t´ecnica, conocida como “inpainting”[16], se utilizar´a en este TFG para entrenar diferentes modelos y adaptarlos a situaciones de conducci´on aut´onoma. De manera que pueda aportar una posible soluci´on base y sencilla al problema del inpainting en el tratamiento de im´agenes. 1.2. Alcance y Objetivos Este Trabajo de Fin de Grado tiene como objetivo principal la generaci´on de escenarios sint´eticos a partir de im´agenes ya existentes utilizando t´ecnicas de inpainting mediante Deep Learning. De manera que se pueda crear y evaluar un modelo de Deep 2
CAP´ ITULO 1. INTRODUCCI ´ ON Learning capaz de rellenar las ´areas faltantes de una imagen y aplicarlo espec´ıficamente en el contexto de la conducci´on aut´onoma. Se pretende demostrar tambi´en que es un trabajo replicable en un framework con unas caracter´ısticas adaptables a un entorno de estaci´on de trabajo, sin necesidad de usar una alta capacidad de computaci´on distribuida. Para alcanzar el objetivo propuesto se plantean los siguientes objetivos espec´ıficos: 1. Aportar una revisi´on de la literatura con la revisi´on de papers ya existentes que utilizan patrones y modelos con t´ecnicas de inpainting mediante Deep Learning. Pudiendo as´ı: Investigar y analizar t´ecnicas ya utilizadas de inpainting basadas en Deep Learning. Comparar distintos enfoques utilizados para el inpainting, como el uso de redes convolucionales de tipo Encoder-Decoder, GAN o UNet. 2. Recopilaci´on y estudio de varios conjuntos de datos con im´agenes y adaptarlos para su uso en nuestro modelo de red neuronal posterior. Concretamente: Toma de varios conjuntos de im´agenes tanto generalistas como espec´ıficos para la conducci´on aut´onoma. Adaptar los conjuntos para poder ser utilizados en la red neuronal, para as´ı poder ser entrenada con calidad. 3. Desarrollar y entrenar varios modelos de redes neuronales hasta encontrar uno con buenos resultados haciendo uso de t´ecnicas de Deep Learning. 4. Evaluar el rendimiento del modelo de red neuronal y optimizarlo de manera que pueda mejorar su precisi´on todo lo posible. Determinar la eficiencia del modelo neuronal gracias a la toma de m´etricas est´andar. Optimizar el modelo de manera que mejore su precisi´on, gracias al ajuste de hiperpar´ametros y t´ecnicas de regularizaci´on que eviten el sobreajuste. La ´ultima parte del TFG permitir´a evaluar el rendimiento del modelo y optimizarlo todo lo posible bas´andose en m´etricas de referencia para poder compararlo con otros modelos ya existentes. En particular, se presentar´a en un segundo caso de uso la generaci´on de estos escenarios destinados a obtener im´agenes de escenarios espec´ıficos para mejorar la conducci´on aut´onoma. 3
CAP´ ITULO 1. INTRODUCCI ´ ON 4
2. Planificaci´on y costes 2.1. Metodolog´ıa de desarrollo Este trabajo de fin de grado, tiene como objetivo estudiar y aportar soluciones de tratamiento de imagen con t´ecnicas de inpainting. Para ello se partir´a de diferentes problemas de menor a mayor complejidad que permitan el entrenamiento de modelos y la medici´on de resultados, sobre conjuntos de datos espec´ıficos. Se ha acordado con el centro de trabajo la utilizaci´on de una metodolog´ıa ´agil basada en el marco de referencia SCRUM. De esta forma se puede aplicar la experiencia previa al haber trabajado con ella en la asignatura Planificaci´on y Dise˜no de Sistemas Computacionales. Frecuentemente, SCRUM se utiliza en equipos de desarrollo software, pese a ello, se puede aplicar a cualquier trabajo en equipo, ya que en este marco, un equipo ´unico desarrolla, entrega y mantiene productos complejos. SCRUM, marca un conjunto de roles, herramientas y reuniones que se ponen en conjunto para poder administrar y estructurar correctamente un trabajo. [17] Dentro del Equipo SCRUM, hay 3 roles que son autoorganizados y multifuncionales, es decir, que eligen la mejor forma de realizar su trabajo y que, a su vez, no dependen de otros que no formen parte del equipo. Estos roles son los siguientes: L´ıder del equipo SCRUM (SCRUM Master). Entrena y monitoriza a los miembros del equipo para centrarse en la creaci´on de incrementos de alto valor, se asegura de que todos los objetivos que tomen lugar sean productivos y se cumplan a tiempo, ayuda al Product Owner a buscar t´ecnicas para definir de manera efectiva los objetivos del producto (Product Goals). Due˜no del producto (Product Owner). Es el propietario del producto, representa los intereses de las partes interesadas y es el responsable de gestionar el backlog del producto para as´ı poder priorizar el trabajo. Equipo de desarrollo (Development Team). Son los responsables del trabajo real de creaci´on del producto. Han de tener las habilidades necesarias para lograr acercarse a la meta en cada Sprint. Tambi´en se tienen que asegurar de que el backlog del producto sea transparente, visible y entendible. 5
CAP´ ITULO 2. PLANIFICACI ´ ON Y COSTES Tabla 2.1 Actores implicados Actor Rol acad´emico Rol SCRUM ´ Alvaro Garc´ıa Garc´ıa Tutor CIDAUT Product Owner Marcos V. Conde Osorio Colaborador CIDAUT SCRUM Master Juan Carlos Benito N´u˜nez Compa˜nero CIDAUT SCRUM Master Daniel Feijoo Piedrafita Compa˜nero CIDAUT SCRUM Master Manuel Barrio Sol´orzano Tutor acad´emico SCRUM Master Javier Abad Hern´andez Autor Desarrollador Los actores implicados en este Trabajo de Fin de Grado, se pueden ver en la tabla 2.1 junto a sus respectivos roles. El marco SCRUM tiene algunos eventos mencionados anteriormente que se van a explicar a continuaci´on: 1. Sprint: los sprints son el coraz´on de SCRUM. Son eventos de duraci´on fija acordada entre los miembros del equipo que pueden durar de una a cuatro semanas. En cada sprint se marcan unos objetivos que se han de cumplir y a lo largo del recorrido de este sprint, no se pueden realizar cambios que pongan en peligro estos objetivos. 2. SCRUM diario: es un evento de quince minutos para los desarrolladores del equipo. Su objetivo es inspeccionar el progreso hacia los objetivos del sprint, adaptando el backlog seg´un sea necesario en cada jornada laboral. 3. Sprint Review: su prop´osito es inspeccionar el resultado del sprint. En esta reuni´on, el equipo SCRUM muestra los resultados a las partes interesadas para ver el progreso hacia el objetivo final y se decide qu´e hacer a continuaci´on en el proyecto. 4. Sprint Retrospective: en este evento, se planifican las formas de aumentar la calidad y eficacia durante los sprints, analizando lo que se logr´o correctamente durante el sprint, cu´ales fueron los problemas encontrados y como se resolvieron (en el caso de lograr resolverlos). 5. Product Backlog: es una lista de todas las caracter´ısticas, funciones y lo que se necesita mejorar y corregir del producto. Est´a gestionado por el Product Owner y se va actualizando en funci´on de las necesidades en el dominio del trabajo. 6. Sprint Backlog: resumiendo, es una lista de tareas seleccionadas del Product Backlog para las que el equipo SCRUM se compromete a completar durante el sprint. Gracias a estas tareas, se marca el objetivo general del siguiente sprint. 6
CAP´ ITULO 2. PLANIFICACI ´ ON Y COSTES Figura 2.1: Ciclo de un sprint, obtenida de [17] Tras explicar todos los puntos y detalles necesarios de la metodolog´ıa utilizada, veremos a continuaci´on la planificaci´on y el proceso seguido a lo largo de este Trabajo de Fin de Grado. 2.2. Planificaci´on del proyecto En nuestra adaptaci´on al marco SCRUM, se ha marcado una duraci´on de los sprints a una semana laboral. Acordando revisar los viernes con la Fundaci´on CIDAUT lo que se ha realizado a lo largo de la semana para ver si se han logrado los objetivos. Es decir, en esa reuni´on semanal, realizamos todas las tareas fundamentales: Fijar el Product Backlog en la planificaci´on del sprint, mostrar los objetivos cumplidos en el Sprint Review que se hab´ıan fijado durante el Sprint Backlog anterior, y planificar durante el Sprint Retrospective los objetivos del siguiente sprint en funci´on de lo logrado en el actual. Se puede ver el ciclo a trav´es de todas estas reuniones a seguir en la Figura 2.1. Gracias a la ayuda del Scrum Master y del Product Manager, se ha establecido una planificaci´on mensual con ciertos objetivos a cumplir que se han ido dividiendo en peque˜nos sprints semanales. En la tabla 2.2 se muestra la distribuci´on de los Sprints con sus objetivos a lo largo del periodo dedicado en este trabajo de fin de grado. En ella se describen las tareas y si se han logrado o no. Por otro lado, se puede comprobar si respecto a la planificaci´on mensual, se ha seguido la hoja de ruta marcada o si ha recibido alguna modificaci´on seg´un iba avanzando el proyecto. 7
CAP´ ITULO 2. PLANIFICACI ´ ON Y COSTES 14
CAP´ ITULO 2. PLANIFICACI ´ ON Y COSTES 15
3. Marco Te´orico El t´ermino Inteligencia Artificial (IA), fue acu˜nado en el a˜no 1955 por el profesor em´erito de Stanford John Macarthy. Se define como “la ciencia y la ingenier´ıa para fabricar m´aquinas inteligentes”. Abarca una gran cantidad de disciplinas diferentes, incluidas la inform´atica, el an´alisis de datos y estad´ısticas, la ingenier´ıa del hardware y del software, la ling¨u´ıstica, y la neurociencia, entre otros [18]. En particular, si hablamos de un problema abierto, como es la conducci´on aut´onoma, encontramos una revoluci´on de la IA para comprender y modelar la percepci´on humana mientras se realiza una tarea altamente especializada. Por ello, la conducci´on es uno de los problemas m´as desafiantes de la d´ecada y ni siquiera est´a cerca de resolverse [19]. Uno de estos problemas ata˜ne a los agentes basados en la visi´on. Conseguir que un coche pueda conducir sin intervenci´on humana se puede abordar desde el punto de vista de la percepci´on y visi´on a trav´es del desarrollo y entrenamiento de casos de uso, atendiendo a diferentes sistemas de interacci´on contextual, por ejemplo con im´agenes. Las principales soluciones que encontramos actualmente se centran en la percepci´on del entorno mediante informaci´on visual [20]. En ellas, se utilizan diferentes t´ecnicas de visi´on por computadora, Machine Learning, redes neuronales, y algoritmos diversos para conseguir el tratamiento de imagen de forma que el sistema aut´onomo entienda el entorno o escena sin necesidad de intervenci´on humana. Figura 3.1: Interrelaci´on entre diferentes t´ecnicas de la IA En este cap´ıtulo se introducen todas estas t´ecnicas, dedicando especial atenci´on a la generaci´on de escenarios de conducci´on sint´eticos usando Deep Learning y t´ecnicas de Inpainting. 3.1. Visi´on por computadora (Computer Vision) La Visi´on por Computadora es un campo de la Inteligencia Artificial en la que se entrena a los sistemas computacionales para que sean capaces de replicar la complejidad del sistema de visi´on humano [21], de manera que puedan interpretar y percibir el 16
CAP´ ITULO 3. MARCO TE ´ ORICO mundo visual. Para ello utilizan im´agenes digitales de c´amaras y v´ıdeos, que junto con modelos de Deep Learning, les permiten realizar ciertas tareas, como identificar, clasificar y segmentar im´agenes [22]. 1. Clasificaci´on. Dada una imagen, podemos saber qu´e categor´ıa general de objetos se encuentra en ella. De manera m´as t´ecnica, es capaz de predecir a qu´e clase pertenece una imagen dada. 2. Detecci´on. Una vez clasificados uno o varios objetos, se pueden detectar y localizar en la imagen gracias al dibujado de una caja delimitadora de coordenadas en las que est´a situado el objeto detectado. 3. Seguimiento de objetos. Tras haber detectado la posici´on de un objeto, esta tarea se aplica en v´ıdeos en tiempo real o secuencias de im´agenes, en las que se puede monitorizar y seguir ciertos objetos en escenarios concretos. 4. Segmentaci´on. Es una ampliaci´on de la detecci´on de objetos, que se encarga de decir que p´ıxeles exactos pertenecen al objeto detectado en la imagen, de manera que podemos ver de forma visual su ´area espec´ıfica, sin tener que utilizar cajas delimitadoras. 5. Otras tareas. Hay muchas otras aplicaciones como la generaci´on de im´agenes, manipulaci´on de caracter´ısticas, el inpainting, la superresoluci´on y otras muchas m´as. Figura 3.2: Tareas de Computer Vision. Tomado de [23] En la conducci´on aut´onoma, la principal funci´on es permitir que los veh´ıculos sepan manejarse en el entorno gracias a la captura de im´agenes y v´ıdeo para que sean procesados en tiempo real y as´ı realizar ciertas tareas que har´ıa un ser humano, como pueden ser la lectura de se˜nales de tr´afico, detecci´on de obst´aculos (otros veh´ıculos, animales, peatones, objetos, etc.); seguimiento del carril de conducci´on y otras muchas 17
CAP´ ITULO 3. MARCO TE ´ ORICO que permitan que el veh´ıculo sea capaz de conducir de forma aut´onoma sabiendo desenvolverse en situaciones complicadas de forma totalmente segura, aut´onoma y eficiente. (ver figura 3.3). Figura 3.3: Representaci´on de la detecci´on de objetos en veh´ıculos aut´onomos. Obtenido de [24] Para seguir un orden l´ogico que permita abordar problemas de tratamiento de imagen, primero tenemos que entender que es el Machine Learning, el Deep Learning y los tipos de redes existentes. 3.2. Aprendizaje Autom´atico (Machine Learning) El Machine Learning es una disciplina del campo de la Inteligencia Artificial, que mediante el uso de algoritmos, da a los sistemas inform´aticos la capacidad de identificar patrones en datos masivos y gracias a esto aprender, es decir, un an´alisis basado en datos entrenados, de manera que puedan realizar tareas especializadas de forma aut´onoma [25]. Dentro del Machine Learning podemos destacar tres tipos de aprendizaje: Supervisado. Es un aprendizaje que hace uso de datos que previamente ya estaban etiquetados, es decir, que conoc´ıamos a qu´e clase pertenecen. Tras ello, los utiliza para aprender sus caracter´ısticas y poder distinguir entre ellos para clasificar posteriormente otros datos no etiquetados. Para estas tareas se utiliza lo siguiente: regresi´on lineal y m´aquinas de vectores de soporte (SVM). No supervisado. El aprendizaje no supervisado, no utiliza datos etiquetados. Para aprender, busca patrones para agrupar los datos en distintos conjuntos de datos. Algunos de los algoritmos aplicables son clustering y k-means. Por refuerzo. Se centra en c´omo los agentes deben tomar acciones en un entorno para maximizar alguna noci´on de recompensa acumulativa. Para entenderlo correctamente se podr´ıa decir de forma informal que siguen el proceso utilizado en muchos casos por el ser humano: prueba-error. 18
CAP´ ITULO 3. MARCO TE ´ ORICO Podemos utilizar diferentes enfoques de aprendizaje autom´atico de acuerdo a los tipos mencionados anteriormente. En particular, se van a describir brevemente los algoritmos de Machine Learning m´as utilizados, mostrando brevemente en figuras sus implementaciones. 3.2.1. Algoritmos de aprendizaje supervisado Regresi´on Lineal Se utiliza para poder predecir un valor en funci´on de varias variables independientes. Para ello, utiliza dos m´etodos para predecirlo que son los siguientes: M´ınimos Cuadrados. Utiliza el error cuadrado en todas las muestras y trata de minimizarlo. Trata de ajustar los pesos increment´andolos de forma proporcional al gradiente de la funci´on de coste. Regresi´on log´ıstica En este caso, la diferencia con la regresi´on lineal est´a en que predice la probabilidad de que una instancia pertenezca a una clase concreta. Se divide en dos: Binaria. Clasifica las muestras en dos categor´ıas, 0 o 1, utilizando la funci´on log´ıstica[26] o sigmoide[26] de manera que se estimen las probabilidades. M´ultiple. Utiliza varias t´ecnicas como la clasificaci´on por pares o Softmax[27] para poder manejar m´ultiples clases. (a) Ejemplo de regresi´on lineal (b) Salida de la regresi´on log´ıstica Figura 3.4: Regresi´on lineal vs. Regresi´on log´ıstica Perceptr´on Simple Se utiliza para clasificar datos que son linealmente separables. Utiliza una funci´on de activaci´on que permite clasificar los datos en dos categor´ıas y si finalmente el 19
CAP´ ITULO 3. MARCO TE ´ ORICO conjunto de datos es linealmente separable, el algoritmo converge en un n´umero finito de pasos. Figura 3.5: Arquitectura del perceptr´on simple Perceptr´on Multicapa (MLP) Su diferencia principal con el perceptr´on simple, es que funciona con datos que no son linealmente separables, y tiene tres tipos de capas: Entrada: neuronas de entrada, en ellas no se produce procesamiento. Ocultas: neuronas cuya entrada proceden de una capa anterior y salida va a una posterior. Salida: neuronas cuya entrada viene de una capa anterior, pero su salida es la final de la red. Para entrenar estas redes se utiliza el algoritmo de retropropagaci´on, adaptando los pesos y propagando los errores a las capas ocultas inferiores. Figura 3.6: Arquitectura del MLP 20
CAP´ ITULO 3. MARCO TE ´ ORICO M´aquinas de Vectores Soporte (SVM) Se basan en la idea de encontrar un hiperplano que separe las clases de datos. Para ello se trata de buscar el hiperplano que maximice la distancia a los puntos m´as cercanos de cada clase. (a) Kernel Lineal - SVM (b) Kernel Polinomial d=2 - SVM (c) Kernel Gausiano - SVM (d) Kernel Perceptr´on - SVM Figura 3.7: Aplicaci´on visual de distintos kernels en una SVM Necesitan las funciones n´ucleo para poder realizar la transformaci´on de forma impl´ıcita y as´ı trabajar en espacios con alta dimensionalidad sin realizar una transformaci´on directa (se puede ver en la figura 3.8). 3.2.2. Algoritmos de aprendizaje no supervisado K-means Algoritmo de clustering que agrupa los datos en un n´umero de conjuntos K diferentes seg´un las caracter´ısticas de cada uno. Para agruparlos se minimiza el MSE de cada objeto respecto al centroide del cl´uster. Es un algoritmo que se implementa r´apido y de forma sencilla para el manejo de grandes conjuntos de datos, aunque depende de la elecci´on del tama˜no de los cl´usteres. 21
CAP´ ITULO 3. MARCO TE ´ ORICO Figura 3.8: Transformaci´on no lineal del espacio de entrada de un SVM Figura 3.9: Paso de datos juntos a varias categor´ıas K-medoids Aplica una idea parecida a k-means, pero no usa el centroide como punto central, sino el medoide, que es el punto m´as central de un cl´uster y es m´as robusto que k-means. Esta diferencia se puede ver en la figura 3.10. DBScan Es de los m´as usados despu´es de k-means y busca los clusters en funci´on de la densidad de los datos, para ello busca un punto n´ucleo si hay un n´umero de puntos a menos de una distancia de ´el. 22
CAP´ ITULO 3. MARCO TE ´ ORICO Figura 3.10: Representaci´on gr´afica de la diferencia entre los m´etodos de agrupaci´on k-means y k-medoids. Tomado de [28] Figura 3.11: Resultados de la agrupaci´on k-means y DBSCAN en el conjunto de datos en espiral. La subfigura b solo muestra los 6 conglomerados m´as grandes de los 72 obtenidos mediante el algoritmo DBSCAN. Tomado de [29] 3.3. Aprendizaje Profundo (Deep Learning) El Deep Learning es un subconjunto del Machine Learning que utiliza redes neuronales multicapa (artificiales) capaces de aprender de datos no estructurados y conseguir resultados con una gran precisi´on. Su objetivo es tratar de emular el comportamiento del cerebro humano (de ah´ı lo de red neuronal), pudiendo aprender a partir de muchos datos. Su diferencia principal respecto al Machine Learning, es que puede procesar datos no estructurados como el texto, las im´agenes o v´ıdeos. Dos de las redes neuronales existentes que m´as se utilizan para abordar problemas con Deep Learning son las Redes Neuronales Recurrentes (RNN) 3.3.1 y las Redes Neuronales convolucionales (CNN) 3.3.2. 3.3.1. Redes Neuronales Recurrentes (RNN) Las Redes Neuronales Recurrentes son un tipo de red neuronal, que procesa de manera secuencial los datos, y las salidas procesadas, se utilizan como entrada m´as tarde 23
CAP´ ITULO 3. MARCO TE ´ ORICO (a) RNN (b) CNN Figura 3.20: RNN vs. CNN sobre una imagen del mismo tama˜no tambi´en como filtros) que nos permiten aprender diferentes representaciones de im´agenes y extraer caracter´ısticas que logran que sea m´as f´acil clasificar estas im´agenes. La figura 3.21 muestra como las representaciones m´as profundas de la imagen principal, pueden lograr que la CNN aprenda y clasifique m´as f´acilmente. Figura 3.21: Arquitectura CNN para la identificaci´on de un veh´ıculo. Obtenido de CS231n A continuaci´on, se describen los bloques principales que son necesarios para formar cualquier CNN [38], y las arquitecturas de red m´as comunes para los principales problemas a solucionar mediante Computer Vision. Para explicarlo, se ha tomado como referencia un art´ıculo de introducci´on a redes convolucionales de GeeksForGeeks [39]. 1. La imagen de entrada es la capa de entrada de nuestro modelo. En las redes convolucionales, de manera general, se suele esperar tener como entrada una imagen, o una secuencia de las mismas. En el caso de la arquitectura anterior, esta primera capa contiene una imagen con un ancho de 32, un largo de 32 y una profundidad de 3, que en este caso es el n´umero de canales RGB. Esas im´agenes se han de normalizar al intervalo [0,1]. V´ease la Figura 3.22 como ejemplo. 2. Las capas convolucionales son las capas que se usan para extraer las caracter´ısticas de la imagen de entrada. Para ello aplica ciertos filtros o kernels que van recorriendo la imagen poco a poco. A continuaci´on, se obtiene un mapa de caracter´ısticas que genera una nueva imagen. Sobre la arquitectura presentada anteriormente, si se le aplicasen un total de 12 kernels, tendr´ıamos una nueva 30
CAP´ ITULO 3. MARCO TE ´ ORICO Figura 3.22: Visi´on de una imagen por un computador. Obtenido de NPTEL[40] imagen o salida, con una dimensi´on de 32 de alto, 32 de ancho y 12 de profundidad. 3. Las Capas de activaci´on se utilizan para agregar la caracter´ıstica de no linearidad. Se suelen aplicar tras la aplicaci´on de una capa convolucional, y mantiene las mismas dimensiones que ten´ıa de entrada. Las m´as habituales son la funci´on de activaci´on ReLU: max(0, x) [41], Sigmoide y Softmax (ya presentadas anteriormente). 4. Las capas de pooling cuya funci´on es la de reducir la resoluci´on de la imagen (conocido como downsampling), se insertan cada cierto tiempo en las redes, logrando as´ı reducir memoria, par´ametros y evitar el sobreajuste. Esta reducci´on afecta a la dimensi´on de alto y de ancho. Hay dos formas en las que se puede realizar el pooling, aplicando Max Pooling oAverage Pooling [42]. Habitualmente, suele ser Max Pooling de 2x2, que en la arquitectura anterior har´ıa que tuvi´eramos unas dimensiones de 16 de ancho, 16 de alto y 12 de profundidad. 5. Capas totalmente conectadas. Son capas en las que, de la misma manera que en las redes neuronales recurrentes, toman como entrada todas las de la capa anterior y est´an conectadas a cada neurona. Se utilizan para realizar finalmente tareas de clasificaci´on y/o regresi´on. 6. Capa de salida. Como capa final, se le pasa a la salida de la capa totalmente conectada una funci´on como Softmax o Sigmoide que nos da una puntuaci´on de forma probabil´ıstica de pertenencia a cada clase. La figura 3.21 representa correctamente los pasos explicados con anterioridad, que habitualmente suele ser la estructura m´as b´asica de cualquier red CNN. Asimismo, en la siguiente secci´on se explicar´an varios tipos de redes CNN que se utilizar´an en este Trabajo de Fin de Grado. 31
CAP´ ITULO 3. MARCO TE ´ ORICO 3.4. Inpainting El inpainting es el proceso de restauraci´on de im´agenes en el que se restauran los p´ıxeles faltantes de una imagen digital de una forma realista y manteniendo el contexto de la imagen original. Realmente, este t´ermino no es nuevo. Los artistas hace a˜nos ya restauraban a mano pinturas o fotograf´ıas da˜nadas con ara˜nazos, grietas, manchas, etc. tratando de mantener su calidad original. (En la figura 3.23 se puede ver como se realizaba.) Figura 3.23: Restauraci´on de una imagen antes de la inform´atica. [43] Algunas aproximaciones utilizadas son las siguientes: S´ıntesis de Textura Basada en Ejemplares: Utiliza parches de imagen para poder reconstruir las ´areas da˜nadas, gracias a la autosimilitud se estiman los valores de los p´ıxeles faltantes. Podemos ver el origen de esta t´ecnica en la siguiente cita [44]. S´ıntesis de Estructura Basada en Ejemplares: En este caso, se busca continuar con la estructura marcada por los p´ıxeles vecinos para poder guiar la posterior reconstrucci´on. Si se quiere ver los estados del arte, consultar las siguientes referencias: [45][46][47][48] M´etodos de difusi´on: Propagan, mediante ecuaciones diferenciales parciales, caracter´ısticas locales de ´areas cercanas hacia las da˜nadas. Si se quiere ver los estados del arte, consultar las siguientes referencias: [45][49][50][51][52][53][54] M´etodos de Representaci´on Dispersa: Estos m´etodos asumen que las im´agenes tienen se˜nales naturales que permiten una descomposici´on dispersa. Es decir, funcionan como un puzle, toman la imagen da˜nada y buscan de entre muchas opciones posibles la que podr´ıa ser la pieza m´as eficiente y precisa. Si se quiere ver los estados del arte, consultar las siguientes referencias: [55][56][57][58][59][60] Los m´etodos presentados asumen da alguna manera que la forma de las regiones conocidas y desconocidas tienen una representaci´on similar, y solo da buenos resultados en im´agenes con peque˜nas ´areas a restaurar. T´ecnicamente, para reconstruir la imagen da˜nada, se puede usar la interpolaci´on de los p´ıxeles vecinos, logrando que no se reconozca si la imagen ha sido reconstruida o si es original. Todo esto es posible gracias a la informaci´on conocida previamente para rellenar cada una de las regiones desconocidas. [61]. 32
CAP´ ITULO 3. MARCO TE ´ ORICO Con los avances de la capacidad de c´omputo, estas t´ecnicas han ido avanzando de una forma notable. Por ejemplo, cada vez hay m´as software de edici´on de imagen para la restauraci´on y modificaci´on de las mismas. Llegando hasta el punto actual, en el que el inpainting mediante Computer Vision se ha convertido en el SOTA de la restauraci´on de im´agenes. Anteriormente, exist´ıan otros m´etodos m´as tradicionales que no aplicaban Deep Learning y que tambi´en se consideraban Computer Vision. Con la aparici´on de las CNN y uno de sus subtipos de redes, las GAN, se estableci´o un nuevo marco de referencia para la mejora de imagen mediante el inpainting. Estas redes utilizan las convoluciones para capturar abstracciones de la imagen, que gracias a la perdida adversarial, se pueden obtener abstracciones de datos con una alta dimensionalidad, una reconstrucci´on y posterior mejora de la imagen reconstruida. 3.4.1. Tipos de redes utilizadas Dentro del Deep Learning, existen varios estructuras de redes CNN utilizadas. Entre ellas, las utilizadas como estado del arte en t´ecnicas de inpainting suelen ser principalmente las tres siguientes. Encoder-Decoder Estas redes dividen su estructura en dos partes, el Encoder y el Decoder (codificador y decodificador). Cada una de estas dos partes tiene su prop´osito. Encoder. Se encarga de comprimir los datos de entrada, reduciendo su dimensionalidad y el peso, logrando obtener una representaci´on con los datos m´as relevantes. Decoder. Su funci´on es la contraria, en este caso, se toma como entrada la representaci´on de bajo nivel de la salida del encoder, una vez tomada, va aumentando la dimensionalidad hasta obtener una representaci´on de alto nivel similar a la original. Este tipo de redes, permiten la adici´on de mecanismos de atenci´on [62][63] para que la red se concentre en partes espec´ıficas de la entrada. Aparte de estos mecanismos, tambi´en se les puede a˜nadir conexiones residuales (skip-conections)[64][65] y bloques residuales[64] para intentar mejorar su rendimiento. Figura 3.24: Arquitectura SegNet. Tomado de [66] 33
CAP´ ITULO 3. MARCO TE ´ ORICO Gracias a los papers “Understanding Geometry of Encoder-Decoder CNNs”[67] y “Understanding How Encoder-Decoder Architectures Attend”[68] se puede ver en detalle el funcionamiento interno de estas redes con lo mencionado anteriormente (aplicaci´on de bloques residuales y mecanismos de atenci´on). En la figura 3.24 podemos ver la arquitectura de la red SegNet que utiliza la geometr´ıa de las redes Encoder-Decoder. Generative Adversarial Networks (GAN) Las redes GAN [69] se componen de dos modelos Convolucionales con una red generadora y una discriminadora, no uno ´unico como es habitual. La red discriminadora observa la imagen original y la compara con la imagen generada por la red generadora. Es decir, eval´ua si los datos que recibe son reales o generados. La red generadora se encarga de crear datos similares a los reales, su objetivo es crear una imagen lo m´as real posible para tratar de enga˜nar a la red discriminadora. Estas dos redes se entrenan de forma simult´anea con un proceso adversarial. La red Generadora intenta que la Discriminadora cometa los m´aximos errores posibles, mientras que esta ´ultima simplemente trata distinguir lo real de lo falso. Este proceso es siempre as´ı hasta que finalmente la red Generadora recrea con tal precisi´on que la red Discriminadora ya no es capaz de distinguir que es real y que no. En la figura 3.25 podemos ver un diagrama de como es la estructura de este tipo de redes con la que podremos entender correctamente su funcionamiento. Figura 3.25: Funcionamiento de una red GAN. Tomado de [70] U-Net La U-Net se dio a conocer por primera vez en el paper “U-Net: Convolutional Networks for Biomedical Image Segmentation” [71]. Es una red CNN cuya estructura es similar a la de Encoder-Decoder, pero tiene forma de “U”. Sigue el mismo camino que la Encoder-Decoder, pero tiene unas caracter´ısticas concretas. Su arquitectura consta de las mismas dos partes que la Encoder-Decoder y cada una hace lo siguiente. Encoder: Mediante la aplicaci´on de convoluciones, funciones de activaci´on y poolings, en repetidos casos, se logra contraer la imagen (fase de downsampling, 34
CAP´ ITULO 3. MARCO TE ´ ORICO capturar contexto de la misma y reduce la resoluci´on espacial. Concretamente, con el uso de capas convolucionales se extraen las caracter´ısticas m´as relevantes de la imagen de entrada y con el pooling se reduce la dimensi´on espacial. Pese a ello, se pierde cierta informaci´on de bajo nivel. Decoder: Durante esta etapa, se aplica la expansi´on, mediante deconvoluciones, es decir, upsampling, en el que se aumenta la resoluci´on espacial. Se puede pensar que las redes Encoder-Decoder y la U-Net, parecen lo mismo. Pero la UNet, durante el decoder, tambi´en toma caracter´ısticas aprendidas durante la etapa de codificaci´on, de manera que la red es capaz de reconstruir de una manera m´as detallada la imagen, combinando caracter´ısticas de alto y bajo nivel. Para ello concatena la salida del Encoder con la entrada del Decoder de su mismo nivel. En la figura 3.26 podemos ver la estructura de la arquitectura de una U-Net, en la que se distingue perfectamente el proceso en forma de Uque sigue la red para hacer las dos fases, la de downsampling yupsampling junto con la concatenaci´on de ambas. Figura 3.26: Arquitectura de una red U-Net. Tomado de [71] 3.4.2. Estado del arte (SOTA) En esta secci´on se resume el SOTA para cada uno de los principales conjuntos de datos m´as utilizados en inpainting. Se ver´an sus principales caracter´ısticas y/o ventajas y finalmente, ense˜naremos su estructura. Se pueden consultar en detalle varias de las m´etricas mencionadas en el anexo A. 35
CAP´ ITULO 3. MARCO TE ´ ORICO Paris StreetView El SOTA para este dataset, de H. Liu et al. [72], propone una capa de atenci´on sem´antica coherente conocida como CSA para mantener la estructura contextual y predecir partes faltantes de las im´agenes. Se compara para mostrar su mejora respecto a otras redes que utilizan atenci´on contextual. Figura 3.27: Arquitectura de red CSA [72] Places2 Para este dataset, la red CM-GAN [73] creada en 2022, propone una nueva arquitectura de red generativa que mejora la s´ıntesis de estructuras y detalles locales. Para ello, utiliza una modulaci´on global seguida de una espacial para crear de forma coherente y el ´area faltante en cada imagen. Figura 3.28: Arquitectura CM-GAN [73] 36
CAP´ ITULO 3. MARCO TE ´ ORICO CelebA-HQ Para este dataset de rostros humanos, la red se basa en el uso de transformers [74] para el relleno de grandes ´areas faltantes. La red MAT [75] mediante el uso de convoluciones y atenci´on contextual, logra una gran eficiencia y producci´on de m´ultiples resultados a la hora de rellenar la imagen. Su estructura es la siguiente. Figura 3.29: Arquitectura de la red MAT. [74] ImageNet En 2023, Jeevan et al. [76] crearon una red supervisada, que se situ´o como el SOTA para el dataset de ImageNet. La red WavePaint [76] destaca en su eficiencia con tan solo 5 millones de par´ametros. As´ı, supera en resultados a otras redes que hasta ese momento eran el SOTA como LaMa con 27 millones y CoModGAN [77] con 109 millones respectivamente. Figura 3.30: Estructura detallada de la red WavePaint [76] 37
CAP´ ITULO 3. MARCO TE ´ ORICO 3.5. Aportaci´on personal Dentro del ´ambito de la visi´on artificial, este Trabajo de Fin de Grado propone una soluci´on con Deep Learning mediante el uso de redes convolucionales y recurrentes, con el objetivo de encontrar una red que obtenga buenos resultados con t´ecnicas de inpainting (3.31). Siendo justificable y medible gracias a la toma de m´etricas utilizadas en el campo de Computer Vision (CV) como son el error cuadratico medio (MSE), Peak Signal-to-Noise Ratio o Proporci´on M´axima de Se˜nal a Ruido (PSNR) y Structural similarity index measure o en espa˜nol medida del´ındice de similitud estructural (SSIM). Para m´as detalles sobre estas y otras m´etricas, lo que representan y como funcionan, consultar el Ap´endice A. Figura 3.31: Donde se sit´ua el inpainting en el saco de la IA 38
CAP´ ITULO 3. MARCO TE ´ ORICO 39
CAP´ ITULO 5. CONJUNTOS DE IM ´ AGENES (DATASETS) Figura 5.3: Segmentaci´on de clases y de instancias en VKITTI2. Figura 5.4: Variaciones artificiales del clima o la hora del d´ıa en VKITTI2. Figura 5.5: Variaciones artificiales de la rotaci´on de la c´amara en VKITTI2. 5.1.3. BDD100K Es un conjunto de datos de veh´ıculo aut´onomo que, como podemos ver en arXiv [96], est´a formado por 100000 v´ıdeos y m´as de 10 tareas para evaluar el progreso de algoritmos en el reconocimiento de im´agenes para la conducci´on aut´onoma. En nuestro caso concreto, se ha tomado el subconjunto de datos 100k images que est´a formado por frames extra´ıdos cada 10 segundos del su video original. Estas 100000 im´agenes JPG, se dividen en 70000 para entrenamiento, 20000 para validaci´on y 10000 para prueba. A su vez, se han tomado varios subconjuntos m´as, como son Instance Segmentation y Drivable Area (´area conducible) (ver figuras 5.6 y 5.7). M´as adelante veremos la utilidad de estos dos subconjuntos de datos. 46
CAP´ ITULO 5. CONJUNTOS DE IM ´ AGENES (DATASETS) Figura 5.6: Una escena de BDD100K. Del ´area conducible, tenemos el mismo n´umero de im´agenes que las originales, es decir, su par. Por otro lado, en para las im´agenes de Instance Segmentation, tenemos un total de 10000 im´agenes nada m´as. Figura 5.7: Segmentaci´on de instancias y Drivable Area en BDD100K 5.2. Modificaciones A los conjuntos presentados anteriormente, hay que aplicarles ciertas modificaciones para poder adaptarlos a nuestra tarea, el inpainting. Han de tener una estructura concreta que forma un tr´ıo de im´agenes. Todas las modificaciones y problemas que hemos tenido durante este proceso, se van a explicar aqu´ı para cada uno de los tres datasets. 47
CAP´ ITULO 5. CONJUNTOS DE IM ´ AGENES (DATASETS) 5.2.1. DEFACTO Para tomar las im´agenes Ground Truth (im´agenes objetivo), se ha utilizado el dataset reducido COCO minitrain. Esta elecci´on tuvo sus pros y sus contras, ya que reduc´ıa considerablemente el n´umero de im´agenes con el que trabajar, pero, por otro lado, las 25000 im´agenes, no coincid´ıan con las de DEFACTO. Por ello, se han mantenido solo las coincidentes, siendo un total de 5121 im´agenes inpainteadas, con sus m´ascaras y ground truth correspondientes. De esas im´agenes solo se tom´o el mayor subconjunto con las mismas dimensiones, en este caso, 640x480 de alto por ancho. De esta manera, el subconjunto final para entrenar la red inicial constaba de 1426 im´agenes con sus m´ascaras y ground truth. Una vez seleccionadas las 1426 im´agenes, se ha aplicado la m´ascara binaria que inclu´ıa el dataset, invirti´endola y multiplic´andola por la imagen. De manera que se obtiene la estructura deseada para el entrenamiento futuro de la red, formada por tres carpetas, que son inpainted images, masked images ymerged mask. Tomaremos como im´agenes ground truth las im´agenes inpainteadas tomadas de DEFACTO. Figura 5.8: Ground truth, m´ascara binaria, y mascar´a aplicada a imagen original. 48
CAP´ ITULO 5. CONJUNTOS DE IM ´ AGENES (DATASETS) 5.2.2. VKITTI2 Como VKITTY2 nos ofrec´ıa varios tipos de segmentaciones, gracias a la de clases, se han extra´ıdo todos los veh´ıculos y su m´ascara correspondiente. Figura 5.9: Extracci´on de clase veh´ıculo segmentada en VKITTI2. Una vez extra´ıdos todos, se han seleccionado cada uno por separado gracias a la segmentaci´on de instancias. Figura 5.10: Extracci´on de veh´ıculos ´unicos. Despu´es, se ha extra´ıdo la m´ascara de las carreteras en cada imagen original de la segmentaci´on por clases. Figura 5.11: Extracci´on de la clase carretera. Por ´ultimo, se han a˜nadido de forma aleatoria de uno a seis veh´ıculos extra´ıdos anteriormente de forma artificial en las im´agenes de origen, con la condici´on de que toquen la zona correspondiente a la calzada, usando su m´ascara extra´ıda tambi´en con anterioridad. De esta forma obtenemos una imagen con esos veh´ıculos pegados encima de la imagen de manera artificial. A partir de esta imagen creada (ver figura 5.12), se han guardado 3, la ground truth (la original anteriormente), la m´ascara binaria de los veh´ıculos artificiales, y por ´ultimo, esa m´ascara invertida multiplicada por la imagen inpainteada (ver figura 5.13). 49
CAP´ ITULO 5. CONJUNTOS DE IM ´ AGENES (DATASETS) Figura 5.12: Imagen con veh´ıculos a˜nadidos de forma artificial. Figura 5.13: Imagen inpainteada, m´ascara binaria y mascar´a invertida aplicada por encima. Siguiendo el patr´on anterior, se logr´o obtener de manera aproximada un total de 11000 tr´ıos de im´agenes. 50
CAP´ ITULO 5. CONJUNTOS DE IM ´ AGENES (DATASETS) 5.2.3. BDD100K De las 10000 im´agenes que contienen la segmentaci´on, se han tomado por separado cada una de las instancias (habitualmente veh´ıculos y personas). Ahora, en lugar de tomar todas las instancias, se filtr´o para extraer ´unicamente las que estaban completas. Para ello, se extrajeron las instancias que estaban aisladas (que no se tocaban entre s´ı con otras). Esto daba lugar a un n´umero muy bajo de instancias para el total de im´agenes que necesitaba, siendo de menos de 1000 instancias. Finalmente, quedaban por extraer las instancias completas que no estaban aisladas, y para ello, se buscaron los conjuntos de instancias que se tocaban entre s´ı, y se guard´o solo la de mayor ´area, ya que seg´un la perspectiva de la c´amara deber´ıa de ser la instancia m´as cercana y que, por lo tanto, no tendr´ıa ning´un obst´aculo por delante. Figura 5.14: Selecci´on de veh´ıculos v´alidos. Pese al planteamiento anterior, entre las instancias tomadas, hay alg´un falso positivo. Por ejemplo, ciertos veh´ıculos de la clase cami´on, pueden ser m´as grandes que alguno de la clase coche. En este caso concreto, el ´area del coche podr´ıa ser menor que la del cami´on, aun estando m´as cerca de nuestra perspectiva. Podemos ver un caso similar en la siguiente figura con un humano y una furgoneta. 51
CAP´ ITULO 5. CONJUNTOS DE IM ´ AGENES (DATASETS) Figura 5.15: Falso positivo en la selecci´on de veh´ıculos v´alidos. Con lo mencionado anteriormente hemos obtenido un total de 11855 pares de im´agenes. El ´ultimo paso para la creaci´on del dataset que necesitamos, es similar al realizado con VKITTI2. Es decir, se han colocado de uno a seis veh´ıculos de forma artificial en las im´agenes originales, utilizando el ´area de carretera conducible (road area - m´ascaras de la carretera). En este caso, se ha tenido que adaptar la m´ascara de la carretera a un ´unico canal, de manera que sea binaria (ver figura 5.16). Figura 5.16: Modificaci´on de la m´ascara de la carretera en BDD100K. Una vez con la m´ascara de la carretera binaria, se han filtrado las instancias cuya ´area fuera lo suficientemente grande como para poder colocarlas de manera visible y clara. Estas instancias se han colocado en funci´on de su tama˜no, de manera que cuanto menor sea el objeto, m´as lejos se ha colocado. De forma m´as t´ecnica, se ha aumentado o disminuido la posici´on en el eje Ydel ´area transitable en el que se coloca cada instancia. Con todo esto, ya tenemos las im´agenes preparadas que, objetivamente, son mucho m´as naturales gracias al procedimiento anterior, en el que se ha evitado que las instancias a˜nadidas, no est´en completas y con tama˜nos irreales (ver figura 5.17). 52
CAP´ ITULO 5. CONJUNTOS DE IM ´ AGENES (DATASETS) Figura 5.17: Imagen con veh´ıculos a˜nadidos de forma artificial. Por ´ultimo, partiendo de esta imagen generada, extraeremos la que contiene las m´ascaras de las instancias aplicadas y las m´ascaras binarias. Como imagen ground truth, se toma la original del dataset BDD100K. Podemos verlo en la siguiente figura. (a) Ground Truth (b) M´ascara binaria (c) M´ascara aplicada Figura 5.18: Divisi´on final de im´agenes en BDD100K. 5.3. Utilidad de cada dataset Para todos los conjuntos de datos han realizado ciertas adaptaciones para poder utilizarlos en el entrenamiento de nuestras redes de inpainting. En todos los casos, ´unicamente necesitamos la imagen ground truth, a la que tiene que llegar la red para inpaintear. Tambi´en la imagen con la m´ascara aplicada por encima de los objetos a querer eliminar y por ´ultimo, la imagen de ´unicamente la m´ascara binaria. En el apartado anterior, para cada conjunto, se ha mostrado la imagen con las instancias a˜nadidas de forma artificial (figuras 5.8, 5.13 y 5.18). Esto ha servido para representar en todo momento de donde proced´ıan las im´agenes que se usar´ıan para entrenar la red. M´as all´a de eso, su utilidad es nula. 53
CAP´ ITULO 5. CONJUNTOS DE IM ´ AGENES (DATASETS) Si queremos entrar de forma m´as espec´ıfica en la utilidad de cada uno de conjuntos anteriores, tenemos que recordar los dos objetivos principales de este trabajo. El primero es crear una red para inpainting y el segundo entrenar´a espec´ıficamente para la conducci´on aut´onoma. Para el primero hemos aprovechado el dataset DEFACTO, que gracias a sus im´agenes generalistas, sirve para crear la red final. Haciendo distintas pruebas, creando distintos modelos con distinto n´umero de par´ametros y aplicando distintas regularizaciones, etc. Una vez conseguidos buenos resultados para esas im´agenes, nos hemos a centrar en el segundo objetivo principal. Para ello, necesitamos que las im´agenes sean de carreteras con distintos objetos a remover, como pueden ser veh´ıculos o personas. Por ello, se comenz´o a elegir y a buscar conjuntos de datos de im´agenes de veh´ıculos. Virtual Kitti 2, ofrec´ıa una muy buena distribuci´on de los datos, con segmentaci´on de objetos por clases e instancias. Esto permit´ıa aprender a trabajar con este tipo de datos, a utilizar la segmentaci´on ya presente en el dataset para extraer correctamente de ah´ı distintos veh´ıculos y otras instancias que m´as tarde se colocar´ıan intencionadamente de forma artificial sobre las carreteras. Una vez ya familiarizado con este tipo de conjuntos, se utiliz´o BDD100K para entrenar el modelo final de inpainting de forma espec´ıfica para el veh´ıculo aut´onomo. Simplemente, una vez creado, se van a utilizar 60 mil im´agenes para entrenamiento y las 6921 restantes para prueba.2 2En tareas de Aprendizaje Autom´atico, se suele dividir el conjunto en tres partes: entrenamiento, validaci´on y prueba. En este caso, al ser Visi´on Artificial, cuyo aprendizaje requiere much´ısimo mayor tiempo, se ha optado por eliminar el conjunto de validaci´on, ya que se utiliza para ajustar hiperpar´ametros que en nuestro caso se realizar´a con otros m´etodos. 54
CAP´ ITULO 5. CONJUNTOS DE IM ´ AGENES (DATASETS) 5.4. Carga de los datos Una vez preparados los datasets para ser entrenados posteriormente en un modelo, hemos de realizar ciertos pasos, como la transformaci´on de im´agenes a tensores para usar redes neuronales y la divisi´on en conjuntos de entrenamiento y prueba, de manera que todo pueda ser procesado correctamente, y tengamos im´agenes para validar el entrenamiento. A todo esto anterior se le conoce como preprocesamiento y divisi´on del conjunto de datos. Es imprescindible que para que las im´agenes est´en emparejadas entre s´ı, tengan el mismo nombre. 1# path to the folder with images (.jpg , .jpeg , .png , .tif) 2 3def cargar_paths_y_contar_imagenes ( ruta_mask , mask_only , ruta_inpainted ): 4tipos_imagen = ["*. jpg"," *. jpeg " ,"*. png"," *. tif" ,"*. tiff "] 5tipos_imagen . extend ([ tipo . upper () for tipo in tipos_imagen ]) # Appendea las versiones en mayusculas 6 7mask_paths = [] 8mask_only_paths = [] 9inpainted_paths = [] 10 11 for tipo in tipos_imagen: 12 mask_paths . extend ( glob ( os . path . join ( ruta_mask , tipo ))) 13 mask_only_paths . extend ( glob ( os . path . join ( mask_only , tipo ))) 14 inpainted_paths . extend ( glob ( os . path . join ( ruta_inpainted , tipo ))) 15 16 17 return mask_paths , mask_only_paths , inpainted_paths 18 19 # Uso de la funcion 20 RUTA_MASK = "RUTA CON LAS IMAGENES CON LA MASCARA APLICADA " 21 MASK_ONLY = " RUTA CON LAS IMAGENES DE LA MASCARA BINARIA " 22 RUTA_INPAINTED = " RUTA CON LAS IMAGENES GROUND TRUTH " 23 24 mask_paths , mask_only_path , inpainted_paths = cargar_paths_y_contar_imagenes ( RUTA_MASK , MASK_ONLY , RUTA_INPAINTED ) Extracto de c´odigo 5.1: Especificaci´on de rutas y carga de paths Como vemos en el c´odigo anterior, lo primero es especificar las rutas en las que ese encuentran las im´agenes. Tras ello, se buscar´an y cargar´an los directorios correspondientes. Que se han de dividir en dos subconjuntos: de entrenamiento y test y/o validaci´on, para ello utilizamos la funci´on train test split y como podemos ver en el c´odigo 5.2, se ha tomado como ejemplo la divisi´on en 90/10 de entrenamiento/prueba. 1TRAIN_MASK_IMGS , TEST_MASK_IMGS = train_test_split (MASK_PATHS , test_size =0.1) ) 2TRAIN_MASK_ONLY , TEST_MASK_ONLY = train_test_split ( MASK_ONLY_PATH , test_size=0.1) 3TRAIN_INPAINT_IMGS , TEST_INPAINT_IMGS = train_test_split ( INPAINTED_PATHS , test_size=0.1) Extracto de c´odigo 5.2: Divisi´on en conjunto de entrenamiento y prueba 55
CAP´ ITULO 6. MODELO 6.1.4. Red 4 En esta cuarta red 6.4, se agregan los bloques residuales, que permiten conexiones con residuos para obtener un mejor flujo del gradiente. De esta manera se busca no solucionar, sino reducir o mitigar la degradaci´on de las redes muy profundas en el entrenamiento posterior. Tabla 6.4 Red 4 Layer (type) Input Shape Param # Tr. Param # Conv2d-1 [1, 3, 720, 1280] 2,368 2,368 ReLU-2 [1, 16, 720, 1280] 0 0 Conv2d-3 [1, 16, 720, 1280] 25,120 25,120 ResidualBlock-4 [1, 32, 720, 1280] 18,496 18,496 Conv2d-5 [1, 32, 720, 1280] 100,416 100,416 ResidualBlock-6 [1, 64, 720, 1280] 73,856 73,856 Conv2d-7 [1, 64, 720, 1280] 100,384 100,384 Conv2d-8 [1, 32, 720, 1280] 25,104 25,104 Conv2d-9 [1, 16, 720, 1280] 2,355 2,355 Tanh-10 [1, 3, 720, 1280] 0 0 Total params: 348,099 Trainable params: 348,099 Non-trainable params: 0 62
CAP´ ITULO 6. MODELO 6.1.5. Red 5 Con esta red 6.7, se aplica un nuevo enfoque, separando la red en dos partes, el Generador y el Discriminador, que en conjunto forman la denominada red GAN. El generador 6.5 trata de crear im´agenes realistas a partir de ruido aleatorio. Tras ello, el discriminador 6.6, distingue entre im´agenes reales y generadas por el Generador. Estas redes competir´an entre s´ı durante el entrenamiento hasta que el Discriminador no sea capaz de diferenciar si la imagen es real o no. Tabla 6.5 Generador Layer (type) Input Shape Param # Tr. Param # Conv2d-1 [1, 3, 480, 640] 2,368 2,368 ReLU-2 [1, 16, 480, 640] 0 0 Conv2d-3 [1, 16, 480, 640] 25,120 25,120 Conv2d-4 [1, 32, 480, 640] 100,416 100,416 Conv2d-5 [1, 64, 480, 640] 200,768 200,768 Conv2d-6 [1, 64, 480, 640] 100,384 100,384 Conv2d-7 [1, 32, 480, 640] 25,104 25,104 Conv2d-8 [1, 16, 480, 640] 2,355 2,355 Sigmoid-9 [1, 3, 480, 640] 0 0 Total params: 456,515 Trainable params: 456,515 Non-trainable params: 0 Tabla 6.6 Discriminador Layer (type) Input Shape Param # Tr. Param # Conv2d-1 [1, 3, 480, 640] 1,792 1,792 MaxPool2d-2 [1, 64, 480, 640] 0 0 Conv2d-3 [1, 64, 240, 320] 73,856 73,856 MaxPool2d-4 [1, 128, 240, 320] 0 0 Conv2d-5 [1, 128, 120, 160] 147,584 147,584 MaxPool2d-6 [1, 128, 120, 160] 0 0 Conv2d-7 [1, 128, 60, 80] 73,792 73,792 MaxPool2d-8 [1, 64, 60, 80] 0 0 Conv2d-9 [1, 64, 30, 40] 18,464 18,464 MaxPool2d-10 [1, 32, 30, 40] 0 0 Linear-11 [1, 9600] 921,696 921,696 LeakyReLU-12 [1, 96] 0 0 Linear-13 [1, 96] 97 97 Sigmoid-14 [1, 1] 0 0 Total params: 1,237,281 Trainable params: 1,237,281 Non-trainable params: 0 63
CAP´ ITULO 6. MODELO Tabla 6.7 Red 5 - GAN Layer (type) Input Shape Param # Tr. Param # Generator-1 [1, 3, 480, 640] 456,515 456,515 Discriminator-2 [1, 3, 480, 640] 1,237,281 1,237,281 Total params: 1,693,796 Trainable params: 1,693,796 Non-trainable params: 0 6.1.6. Red 6 De nuevo, volviendo a las estructuras anteriores, la red 6.8, extiende la red 6.4. Para ello, agrega m´as bloques residuales y capas convolucionales. Con ello se busca una mayor capacidad de extracci´on de caracter´ısticas con detalle gracias a tener una mayor profundidad. Tabla 6.8 Red 6 Layer (type) Input Shape Param # Tr. Param # Conv2d-1 [1, 3, 720, 1280] 2,368 2,368 ReLU-2 [1, 16, 720, 1280] 0 0 Conv2d-3 [1, 16, 720, 1280] 25,120 25,120 ResidualBlock-4 [1, 32, 720, 1280] 18,496 18,496 Conv2d-5 [1, 32, 720, 1280] 100,416 100,416 ResidualBlock-6 [1, 64, 720, 1280] 73,856 73,856 Conv2d-7 [1, 64, 720, 1280] 401,536 401,536 ResidualBlock-8 [1, 128, 720, 1280] 295,168 295,168 Conv2d-9 [1, 128, 720, 1280] 401,472 401,472 Conv2d-10 [1, 64, 720, 1280] 100,384 100,384 Conv2d-11 [1, 32, 720, 1280] 25,104 25,104 Conv2d-12 [1, 16, 720, 1280] 2,355 2,355 Tanh-13 [1, 3, 720, 1280] 0 0 Total params: 1,446,275 Trainable params: 1,446,275 Non-trainable params: 0 64
CAP´ ITULO 6. MODELO 6.1.7. Red 7 En esta red 6.9, a˜nadimos m´as capas de pooling y de convoluci´on transpuesta para lograr tener un upsampling m´as eficiente. Sigue teniendo una estructura EncoderDecoder. Tabla 6.9 Red 7 Layer (type) Input Shape Param # Tr. Param # Conv2d-1 [1, 3, 720, 1280] 1,792 1,792 ReLU-2 [1, 64, 720, 1280] 0 0 MaxPool2d-3 [1, 64, 720, 1280] 0 0 Conv2d-4 [1, 64, 360, 640] 73,856 73,856 ReLU-5 [1, 128, 360, 640] 0 0 MaxPool2d-6 [1, 128, 360, 640] 0 0 Conv2d-7 [1, 128, 180, 320] 295,168 295,168 ReLU-8 [1, 256, 180, 320] 0 0 MaxPool2d-9 [1, 256, 180, 320] 0 0 Conv2d-10 [1, 256, 90, 160] 1,180,160 1,180,160 ReLU-11 [1, 512, 90, 160] 0 0 MaxPool2d-12 [1, 512, 90, 160] 0 0 ConvTranspose2d-13 [1, 512, 45, 80] 524,544 524,544 ReLU-14 [1, 256, 90, 160] 0 0 ConvTranspose2d-15 [1, 256, 90, 160] 131,200 131,200 ReLU-16 [1, 128, 180, 320] 0 0 ConvTranspose2d-17 [1, 128, 180, 320] 32,832 32,832 ReLU-18 [1, 64, 360, 640] 0 0 ConvTranspose2d-19 [1, 64, 360, 640] 771 771 Sigmoid-20 [1, 3, 720, 1280] 0 0 Total params: 2,240,323 Trainable params: 2,240,323 Non-trainable params: 0 65
CAP´ ITULO 6. MODELO 6.1.8. Red 8 En esta red 6.10, implementamos por primera vez las redes UNet. Tenemos los bloques EncoderBlock yDecoderBlock, y conexiones residuales entre el encoder y el decoder. Se prob´o esta red por su efectividad conocida tanto para segmentaci´on como para inpainting. Tabla 6.10 Red 8 Layer (type) Input Shape Param # Tr. Param # EncoderBlock-1 [1, 3, 480, 640] 2,832 2,832 EncoderBlock-2 [1, 16, 480, 640] 14,016 14,016 EncoderBlock-3 [1, 32, 480, 640] 55,680 55,680 EncoderBlock-4 [1, 64, 240, 320] 221,952 221,952 EncoderBlock-5 [1, 128, 120, 160] 886,272 886,272 EncoderBlock-6 [1, 256, 60, 80] 3,542,016 3,542,016 EncoderBlock-7 [1, 512, 30, 40] 4,721,664 4,721,664 Conv2d-8 [1, 512, 15, 20] 2,359,808 2,359,808 BatchNorm2d-9 [1, 512, 15, 20] 1,024 1,024 ReLU-10 [1, 512, 15, 20] 0 0 DecoderBlock-11 [1, 512, 15, 20], [1, 512, 15, 20] 9,441,792 9,441,792 DecoderBlock-12 [1, 512, 15, 20], [1, 512, 30, 40] 8,131,072 8,131,072 DecoderBlock-13 [1, 512, 30, 40], [1, 256, 60, 80] 2,296,064 2,296,064 DecoderBlock-14 [1, 256, 60, 80], [1, 128, 120, 160] 574,592 574,592 DecoderBlock-15 [1, 128, 120, 160], [1, 64, 240, 320] 143,936 143,936 DecoderBlock-16 [1, 64, 240, 320], [1, 32, 480, 640] 36,128 36,128 DecoderBlock-17 [1, 32, 480, 640], [1, 16, 480, 640] 11,664 11,664 DecoderBlock-18 [1, 16, 480, 640], [1, 3, 480, 640] 702 702 Conv2d-19 [1, 3, 480, 640] 12 12 Total params: 32,441,226 Trainable params: 32,441,226 Non-trainable params: 0 66
CAP´ ITULO 6. MODELO 6.1.9. Red 9 Esta red 6.11, es una versi´on simplificada y m´as sencilla de la anterior, la diferencia est´a en que se eliminan los bloques, pero se sigue utilizando la estructura b´asica de una UNet. De esta manera se logra tener una red mucho m´as ligera. Tabla 6.11 Red 9 Layer (type) Input Shape Param # Tr. Param # Conv2d-1 [1, 3, 720, 1280] 1,792 1,792 ReLU-2 [1, 64, 360, 640] 0 0 Conv2d-3 [1, 64, 360, 640] 73,856 73,856 ReLU-4 [1, 128, 180, 320] 0 0 Conv2d-5 [1, 128, 180, 320] 295,168 295,168 ReLU-6 [1, 256, 90, 160] 0 0 Conv2d-7 [1, 256, 90, 160] 1,180,160 1,180,160 ReLU-8 [1, 512, 45, 80] 0 0 ConvTranspose2d-9 [1, 512, 45, 80] 524,544 524,544 ReLU-10 [1, 256, 90, 160] 0 0 ConvTranspose2d-11 [1, 256, 90, 160] 131,200 131,200 ReLU-12 [1, 128, 180, 320] 0 0 ConvTranspose2d-13 [1, 128, 180, 320] 32,832 32,832 ReLU-14 [1, 64, 360, 640] 0 0 ConvTranspose2d-15 [1, 64, 360, 640] 771 771 Sigmoid-16 [1, 3, 720, 1280] 0 0 Total params: 2,240,323 Trainable params: 2,240,323 Non-trainable params: 0 67
CAP´ ITULO 6. MODELO 6.1.10. Red 10 - Final En esta ´ultima red 6.12, se busca y se consigue encontrar la sencillez de la red anterior, pero con nuevas caracter´ısticas que tratan de potenciar el desempe˜no en inpainting. Podremos ver en la siguiente secci´on una explicaci´on m´as detallada de esta ´ultima red, ya que se ha tomado como red final. Tabla 6.12 Red Final Layer (type) Input Shape Param # Tr. Param # Conv2d-1 [1, 3, 720, 1280] 896 896 ReLU-2 [1, 32, 720, 1280] 0 0 MaxPool2d-3 [1, 32, 720, 1280] 0 0 Conv2d-4 [1, 32, 360, 640] 18,496 18,496 ReLU-5 [1, 64, 360, 640] 0 0 MaxPool2d-6 [1, 64, 360, 640] 0 0 Conv2d-7 [1, 64, 180, 320] 73,856 73,856 ReLU-8 [1, 128, 180, 320] 0 0 MaxPool2d-9 [1, 128, 180, 320] 0 0 Conv2d-10 [1, 128, 90, 160] 295,168 295,168 ReLU-11 [1, 256, 90, 160] 0 0 MaxPool2d-12 [1, 256, 90, 160] 0 0 Conv2d-13 [1, 256, 45, 80] 1,180,160 1,180,160 ReLU-14 [1, 512, 45, 80] 0 0 LSTM-15 [1, 3600, 512] 2,101,248 2,101,248 AttentionBlock-16 [1, 512, 45, 80] 5,771,264 5,771,264 ConvTranspose2d-17 [1, 1024, 45, 80] 1,048,832 1,048,832 ReLU-18 [1, 256, 90, 160] 0 0 ConvTranspose2d-19 [1, 512, 90, 160] 262,272 262,272 ReLU-20 [1, 128, 180, 320] 0 0 ConvTranspose2d-21 [1, 256, 180, 320] 65,600 65,600 ReLU-22 [1, 64, 360, 640] 0 0 ConvTranspose2d-23 [1, 128, 360, 640] 16,416 16,416 ReLU-24 [1, 32, 720, 1280] 0 0 ConvTranspose2d-25 [1, 64, 720, 1280] 195 195 Sigmoid-26 [1, 3, 720, 1280] 0 0 Total params: 10,834,403 Trainable params: 10,834,403 Non-trainable params: 0 Cabe mencionar, que ´el se entender´a m´as adelante, en el cap´ıtulo de m´etricas y resultados (cap.7) por qu´e se ha seguido este recorrido, siempre tratando de obtener mejores resultados tras un entrenamiento similar para todas las redes. 68
CAP´ ITULO 6. MODELO 6.2. Modelo final El objetivo principal de este Trabajo de Fin de Grado es generar escenarios sint´eticos a partir de im´agenes ya existentes usando t´ecnicas de inpainting mediante Deep Learning. Esto inclu´ıa los escenarios espec´ıficos de preparaci´on y adaptaci´on de los conjuntos de im´agenes para el entrenamiento posterior de la red y tambi´en el desarrollo y entrenamiento de varios modelos hasta lograr encontrar uno que realmente aporte buenos resultados. En esta secci´on se aborda esto ´ultimo, ya que en la anterior se ha explicado la estructura y evoluci´on que se ha logrado entre los distintos modelos. A continuaci´on, se presenta m´as en detalle el modelo final y su entrenamiento. Toda esta secci´on es el antecedente del objetivo espec´ıfico de evaluaci´on y optimizaci´on del rendimiento del modelo. Vamos a adentrarnos en la arquitectura de la red final ya presentada en la tabla 6.12 de la secci´on anterior. Figura 6.1: Estructura de mi red UNet 69
CAP´ ITULO 6. MODELO Figura 6.2: Bloque de Atenci´on Multicabeza 6.2.1. Estructura de la UNet La figura 6.1 muestra de forma clara la arquitectura en forma de Uque tiene nuestra UNet. En ella distinguimos tres partes: la primera a la izquierda, es la fase de downsampling (encoder). La parte inferior situada en la zona intermedia se conoce como bottelneck. Finalmente, en el lado derecho tenemos la fase de upsampling (decoder). Encoder - Downsampling En esta primera fase, tenemos una secuencia de capas convolucionales (nn.Conv2d) que contin´uan con operaciones de submuestreo (nn.MaxPool2d). Como ya mencionamos en la secci´on correspondiente a inpainting del Marco Te´orico 3.4, la funci´on de esta parte de la red es reducir la resoluci´on espacial. Gracias al aumento de la profundidad de los canales (y n´umero de caracter´ısticas). Tras repetir este proceso varias veces, se capturan las distintas caracter´ısticas de alto nivel y sem´anticas m´as abstractas. Fase central - Bottleneck Esta fase central est´a compuesta por una capa LSTM y un bloque de atenci´on multicabeza. En toda esta fase, las caracter´ısticas de la fase del encoder se procesan secuencialmente y se les aplica la atenci´on multicabeza. Para ello, primero se toman las caracter´ısticas y se procesan a trav´es de la capa LSTM (nn.LSTM), su aplicaci´on est´a pensada a los datasets que son una secuencia de im´agenes divididas en varios frames, como en nuestro caso con BDD100K. Con esto, la red aprende a capturar secuencias temporales y contextualidad. Posteriormente, la salida se reorganiza para adaptarla y ser procesada por el bloque de atenci´on (ver figura 6.2). En este bloque, se aplica la atenci´on multicabeza, lo que aporta grandes beneficios como pueden ser: Captura de relaciones a larga distancia. Este tipo de atenci´on logra que la red establezca conexiones entre regiones muy distantes de la imagen. De esta forma, logra comprender el contexto global de la imagen, y puede predecir de forma precisa el espacio a rellenar. Enfoque adaptativo. En lugar de procesar la imagen de una manera uniforme, se enfoca en distintas regiones o caracter´ısticas que considera m´as relevantes. 70
CAP´ ITULO 6. MODELO Procesamiento en paralelo. Al dividir el espacio de caracter´ısticas en varios subespacios, se pueden encontrar y capturar distintas caracter´ısticas de manera paralela. Todo esto en conjunto logra que la red pueda relacionar caracter´ısticas a largas distancias entre si dentro de la imagen, con el objetivo de recrear m´as f´acilmente las zonas enmascaradas. Decoder - Upsampling Esta es la fase final y es sim´etrica a la fase del downsampling. La diferencia es que realiza un sobre-muestreo aplicando la convoluci´on transpuesta (nn.ConvTranpose2d). En cada paso, se concatenan las caracter´ısticas con las correspondientes a su fase sim´etrica del downsampling (a esto se le conoce como conexiones residuales o skip connections). De esta manera, la red combina informaci´on de bajo nivel con la de alto nivel durante la reconstrucci´on. Todo esto se repite varias veces de forma gradual hasta que la salida tiene la misma resoluci´on que la entrada original. 6.2.2. Implementaci´on del c´odigo Para poder aplicar y realizar todo lo mencionado anteriormente se puede consultar el c´odigo siguiente. Pero hemos de entender como funcionan primero. En PyTorch nn.Module es la clase principal que proporciona toda la funcionalidad b´asica que permite la creaci´on de redes neuronales. Al definir una nueva clase de red neuronal, se ha de heredar de nn.Module y adaptar los m´etodos heredados como init yforward, que son el constructor donde se inicializan todas las capas de la red junto con los par´ametros y el m´etodo de propagaci´on hacia delante, en el que se reciben los datos de entrada durante el entrenamiento y que devuelve la salida de la red. En la porci´on de c´odigo 6.1 vemos la implementaci´on del bloque de Atenci´on Multicabeza, en su m´etodo forward podemos ver que despu´es de aplicar las convoluciones hay que adaptar los datos para poder realizar la atenci´on correctamente y despu´es devolverla a su estado original. 1class AttentionBlock ( nn . Module ): 2def __init__ (self , in_channels , out_channels , kernel_size =3, padding =1): 3super( AttentionBlock , self ). __init__ () 4self . conv1 = nn . Conv2d ( in_channels , out_channels , kernel_size = kernel_size , padding = padding ) 5self . conv2 = nn . Conv2d ( out_channels , out_channels , kernel_size = kernel_size , padding = padding ) 6self . attn = nn . MultiheadAttention ( out_channels , num_heads =8 , batch_first = True ) 7self . norm = nn . LayerNorm ( out_channels ) 8self . activation = nn . ReLU () 9 10 def forward ( self , x): 11 x = self . conv1 (x) 12 x = self . activation (x) 71
CAP´ ITULO 6. MODELO 8. Guardado del modelo: se guarda en un diccionario el estado del modelo y el optimizador al final de cada ´epoca. 9. Finalizaci´on de wandb. Se finaliza la ejecuci´on de wandb mediante wandb.finish(). 1from torchvision . utils import make_grid 2def log_images ( images , epoch ): 3’’’ 4Funcion que envia el log con las imagenes a wandb 5’’’ 6length = len( images ) 7images = make_grid ( images , length ) 8 9images = wandb . Image ( images , caption = "1º: Merged Mask , 2º: Output , 3º: Painted Image ") 10 wandb . log ({ "examples": images , ’ epoch ’: epoch }) 11 12 return print (’Logged correctly ’) Extracto de c´odigo 6.4: Funci´on para hacer log de las im´agenes en wandb El optimizador utilizado durante la retropropagaci´on del paso 5, tiene un papel muy importante, y el cambio en sus regularizaciones puede hacer que los resultados mejoren bastante. En la secci´on 6.3.2 se explica en detalle. 6.3.1. Visualizaci´on de resultados en wandb Wandb tiene una interfaz gr´afica en la que gracias a un dashboard podemos ver y comparar todas las ejecuciones que hayamos hecho y as´ı compararlas. Aparte, tiene un dashboard separado para cada ejecuci´on por separado, donde se pueden ver m´as en detalle todos los datos. Como se coment´o anteriormente, a wandb subimos una ejecuci´on mediante el uso de logs. Lo que se pasa en cada log, es lo que sale en wandb. Durante el entrenamiento, generalmente, hemos pasado la ´epoca actual, nuestra p´erdida y nuestro PSNR. Como esquema general del dashboard con todas las ejecuciones podemos ver el dashboard de la figura 6.3. En el dashboard, podemos ver a la izquierda, las distintas ejecuciones de entrenamiento que se han realizado, llegando a tener m´as de 200 pruebas de entrenamiento y muestra de resultados. En la zona superior podemos ver y seleccionar una a una las ejecuciones con las im´agenes de entrenamiento enviadas a wandb mediante la funci´on log images() y en la zona inferior los gr´aficos que plotean el PSNR, la p´erdida y el n´umero de ´epocas. Gracias a estos gr´aficos podemos ver cu´al ha sido el mejor entrenamiento. Asimismo, podemos entrar a cada uno de los gr´aficos y mostrar la comparaci´on con el n´umero de ejecuciones que se desee. Si ampliamos la gr´afica del PSNR, podemos verlo claramente (fig. 6.4). 78
CAP´ ITULO 6. MODELO Figura 6.3: Dashboard p´agina general Wandb Figura 6.4: Comparativa de PSNR para distintas ejecuciones. Si elegimos el mejor entrenamiento con mejores resultados, vemos que en general, de todas las ejecuciones totales realizadas, el dataset BDD100K es el que da mejores resultados. Podemos ver esa ejecuci´on en concreto en el dashboard mostrado en la figura 6.5. Si nos fijamos en la figura 6.6, podemos ver a la izquierda la imagen con la m´ascara, en el centro la recreada por nuestro modelo y a la derecha el Ground Truth al que tiene que llegar el modelo. Gracias a esto, junto con las m´etricas podemos ver que esta ejecuci´on ha sido el mejor entrenamiento de toda la red para todos los conjuntos de datos utilizados y en espec´ıfico, BDD100K. 79
CAP´ ITULO 6. MODELO Figura 6.5: Dashboard de la mejor ejecuci´on. Figura 6.6: Visualizaci´on de la ´ultima ´epoca de entrenamiento de BDD100K. Pese a ello, si en wandb filtramos para que nos muestre los resultados para los datasets DEFACTO (ver figuras 6.7 y 6.8) y VKITTI2 (ver figuras 6.9 y 6.10), podemos ver que de nuevo, esta red, da muy buenos resultados en torno a 25 de nuestro PSNR, que traducido a PSNR Real, es aproximadamente 30. Se entender´a la diferencia entre el PSNR Real y el nuestro en el cap´ıtulo siguiente. Figura 6.7: Visualizaci´on de la ´ultima ´epoca de entrenamiento en DEFACTO 80
CAP´ ITULO 6. MODELO Figura 6.8: M´etricas de DEFACTO durante el entrenamiento. Figura 6.9: Visualizaci´on de la ´ultima ´epoca de entrenamiento en Virtual Kitti V2. Figura 6.10: M´etricas de Virtual Kitti V2 durante el entrenamiento. 6.3.2. Optimizaci´on del entrenamiento A lo largo de este Trabajo de Fin de Grado, se ha optado por seguir varias t´ecnicas de optimizaci´on del entrenamiento. Se han buscado distintos enfoques como el uso de distintos valores en los hiperpar´ametros de regularizaciones L1/L2, el uso de dropout y uso de ciertos schedulers que sirven para modificar la tasa de aprendizaje durante el entrenamiento: Consinne Annealing [102] sirve para disminuir la tasa de aprendizaje en funci´on de la curva del coseno. ReduceLROnPlateau [103] reduce la tasa de aprendizaje cuando la p´erdida deja de mejorar tras ciertas ´epocas de aprendizaje. CyclicLR [104] ajusta la tasa de aprendizaje c´ıclicamente entre dos l´ımites. 81
CAP´ ITULO 6. MODELO Pese a todos los intentos de encontrar redes con mejores resultados mediante el uso de estas t´ecnicas de ajuste de la tasa de aprendizaje, para nuestro modelo concreto durante su entrenamiento, no se obtuvieron mejores resultados que con el ajuste inicial de tasa de aprendizaje en 0,001. Por ello, se busc´o otro enfoque de b´usqueda de hiperpar´ametros, para ello, hemos utilizado una t´ecnica de b´usqueda de hiperpar´ametros mediante la biblioteca Optuna [105], que es una biblioteca de optimizaci´on de hiperpar´ametros que utiliza algoritmos de optimizaci´on bayesiana que ayuda a encontrar los mejores valores para un modelo concreto. Para poder utilizarlo, hemos creado una funci´on en la que hemos pasado el bucle de entrenamiento con pocas ´epocas, se han elegido los hiperpar´ametros del optimizador (tasa de aprendizaje y peso del decaimiento) de manera autom´atica, de la manera que Optuna cree conveniente. Para esta modificaci´on autom´atica de hiperpar´ametros, le hemos tenido que decir que el objetivo es minimizar la p´erdida todo lo posible en un n´umero de intentos n trials determinadas. A lo largo de esas pruebas, Optuna entrenar´a el modelo con esas distintas combinaciones de hiperpar´ametros que ir´an variando en funci´on de los resultados de pruebas anteriores y algoritmos de optimizaci´on bayesiana. Una vez completadas todas las pruebas, Optuna nos devuelve los hiperpar´ametros con los que se han obtenido mejores resultados y los muestra. Con este ´ultimo m´etodo se han logrado obtener mejores resultados que con el uso de otras t´ecnicas mencionadas anteriormente, por lo que se ha optado por mantener el entrenamiento de la red con estos par´ametros (consultar c´odigo 6.5 para ver su implementaci´on2). 1# Funcion de entrenamiento para distintas pruebas distintas 2def train_model ( trial ): 3# Iniciar hiperparametros 4lr = trial . suggest_loguniform ("lr " , 1e -5 , 1e -3) 5weight_decay = trial . suggest_loguniform (" weight_decay ", 1e -5 , 1e -3) 6 7# Iniciar el modelo con los hiperparametros model = UNet ().to( device) 8optimizer = torch . optim . Adam ( model . parameters () , lr =lr , weight_decay = weight_decay) 9EPOCHS =100 10 11 # Bucle de entrenamiento 12 for epoch in range (100) : 13 14 ################################ 15 RESTO DE CODIGO DE ENTRENAMIENTO 16 ################################ 17 18 print(f" Epoch { epoch } of { EPOCHS } took { time . time () - start_time :.3 f}s\t Loss :{ np . mean ( train_loss )} ") 19 20 # Retorno de la perdida en esta ejecucion 21 return np . mean ( train_loss ) 22 2Documentaci´on de Optuna. 82
CAP´ ITULO 6. MODELO 23 # Funcion para definir el objetivo y buscar la perdida 24 def objective ( trial ): 25 # Inicializar Wandb 26 wandb . init ( entity = "cidautai", project ="inpainting", name =" hyperparameter_search ") 27 28 # Entrenamiento del modlo y obtencion de la perdida 29 loss = train_model ( trial ) 30 31 # Finalizar la ejecucion de wandb 32 wandb . finish () 33 34 # Return the loss for optimization 35 return loss 36 37 # Definir el espacio de busqueda y el inicio de la optimizacion de parametros 38 study = optuna . create_study ( direction ="minimize") 39 study . optimize ( objective , n_trials =15) # Adjust n_trials as needed 40 41 # Quedarnos con los mejores hiperparametros 42 best_params = study . best_params 43 print(" Best hyperparameters :" , best_params ) Extracto de c´odigo 6.5: Funciones de mejora de optimizador Gracias al c´odigo anterior, hemos podido ver que para el dataset BDD100K se han obtenido los siguientes resultados de p´erdida. Best hyperparameters: ’lr’: 22.69011603e-05, ’weight decay’ : 2.007011005e-05) (ver gr´afico 6.11). Figura 6.11: Gr´aficas con evoluci´on de la p´erdida con distintas tasas de aprendizaje y pesos del decaimiento. (La escala del eje Y es logar´ıtmica para ver mejor los resultados). Con WandB, hemos podido ver como es de cierto que, realmente, mejora con unos m´etodos u otros. En esta prueba, con un lote de 250 im´agenes en la que se ha cambiado 83
CAP´ ITULO 6. MODELO el scheduler del optimizador, y el tama˜no del batch de entrenamiento, hemos visto que el que mejor funciona y entrega mejores resultados es Optuna (ver figura 6.12) Figura 6.12: Comparativa de PSNR para la optimizaci´on del entrenamiento 84
CAP´ ITULO 6. MODELO 85
7. Resultados En este cap´ıtulo, se mostrar´a como de buenos han sido nuestros resultados basados en m´etricas, y gracias a ellas, se ver´a la evoluci´on que se ha ido logrando a trav´es de los distintos modelos presentados en el cap´ıtulo anterior. De la misma forma, veremos los resultados del modelo final para los distintos datasets utilizados, tambi´en se mostrar´an los resultados en un mismo modelo pero con distinto n´umero de im´agenes durante el entrenamiento. Pudiendo as´ı completar lo que queda de nuestros objetivos, que es corroborar y demostrar que ha habido un progreso, y que los resultados son buenos para im´agenes de conducci´on aut´onoma. Para poder probarl todo lo anterior, se ha optado por utilizar m´etricas como el MSE, PSNR, SSIM MSSIM y LPIPS que son las medidas base para este tipo de proyectos (se recomienda leer el Anexo A). 7.1. B´usqueda de la mejor red En esta secci´on, se muestran los resultados obtenidos entre las distintas redes introducidas en el cap´ıtulo 6. Estas comparativas han servido para elegir la mejor red entre todas las creadas. Para hacerlo de una manera lo m´as representativa posible (pese a en su momento haber tomado estos resultados red a red), se ha creado una funci´on muy similar a la del entrenamiento, en ella se ha pasado una lista con todos los modelos preentrenados ya cargados. Posteriormente, toma las im´agenes del conjunto de validaci´on cargado en el train loader como se explic´o en el cap´ıtulo 5. Para evaluar todos los modelos y encontrar el mejor para el inpainting, se utiliza como base el dataset DEFACTO. El c´odigo ser´ıa el siguiente. 1from torchvision . utils import make_grid 2import cv2 3import numpy as np 4import skimage . metrics 5import lpips 6import torch 7import pytorch_msssim 8import matplotlib . pyplot as plt 9 10 # Inicializar el modelo LPIPS 11 loss_fn = lpips . LPIPS ( net =’alex ’) 12 13 # Funcion para evaluar todos los modelos en todas las imagenes 14 def evaluar_todos ( modelos ): 15 for i, modelo in enumerate( modelos , start =1) : 16 print(f ’Evaluando el modelo {i} ’) 17 modelo.eval() 18 losses = [] 19 psnrs = [] 20 ssims = [] 86
CAP´ ITULO 7. RESULTADOS 21 ms_ssims = [] 22 lpips_values = [] 23 imagenes_impresas = 0 24 for mask_batch , _ , inpainted_batch in test_loader: 25 26 mask_batch = mask_batch .to ( device ) 27 inpainted_batch = inpainted_batch.to(device) 28 29 30 # Alimentar los datos al modelo 31 with torch . no_grad () : 32 painted_batch = modelo ( mask_batch ) 33 34 35 loss = torch . mean (( inpainted_batch - painted_batch ) **2) 36 psnr = 20 * torch . log10 (1. / torch . sqrt ( loss )) 37 38 39 # Calcular el SSIM 40 ssim = pytorch_msssim . ssim ( inpainted_batch , painted_batch , data_range=1.0) 41 42 # Calcular el MS - SSIM 43 ms_ssim = pytorch_msssim . ms_ssim ( inpainted_batch , painted_batch , data_range =1.0) 44 45 # Calcular el LPIPS 46 lpips = loss_fn . forward ( inpainted_batch . cpu () , painted_batch . cpu () ) 47 48 losses . append ( loss . item () ) 49 psnrs . append ( psnr . item () ) 50 ssims . append ( ssim ) 51 ms_ssims . append ( ms_ssim ) 52 lpips_values . append ( lpips . mean (). item () ) 53 # Calcular las medias de las metricas 54 loss_promedio = sum( losses ) / len( losses ) 55 psnr_promedio = np . mean ( psnrs ) 56 ssim_promedio = sum( ssims ) / len( ssims ) 57 ms_ssim_promedio = sum(ms_ssims) / len(ms_ssims) 58 lpips_promedio = sum( lpips_values ) / len( lpips_values ) 59 # Imprimir las medias de las metricas 60 print(f ’Modelo {i }: Loss promedio = { loss_promedio }, PSNR promedio = { psnr_promedio }, SSIM promedio = { ssim_promedio }, MS - SSIM promedio = { ms_ssim_promedio }, LPIPS promedio = { lpips_promedio }’ Extracto de c´odigo 7.1: Funci´on para probar los modelos Para esta prueba, se han usado 200 im´agenes totalmente desconocidas para los modelos y que tras aplicar el c´odigo anterior, finalmente se nos muestran los siguientes resultados (ver tabla 7.1). Sobre la red GAN (correspondiente a la n´umero 5) no se pueden obtener las m´etricas de la tabla, ya que su funcionamiento es distinto. Concretamente, necesita otras m´etricas como el FID, P-IDS y U-IDS, pero gracias a la visualizaci´on de im´agenes durante el entrenamiento, se comprob´o que no era una buena red y se dej´o de lado. 87
Bibliograf´ıa [1] Introducing ChatGPT,https://openai.com/blog/chatgpt, (Accessed on 3004-2024). [2] IBM, ¿Qu´e es un chatbot? — IBM,https://www.ibm.com/eses/topics/ chatbots, (Accessed on 30-04-2024). [3] R. Leal, ChatGPT: As´ı ve la Inteligencia Artificial el futuro del autom´ovil — SoyMotor.com,https://soymotor.com/coches / articulos / chatgptasive-la-inteligencia-artificial-el-futuro-del-automovil, (Accessed on 30-04-2024). [4] E. Sandu, Inteligencia artificial en la conducci´on aut´onoma - metaverso.pro, https://metaverso.pro/blog/inteligencia-artificial-en-la-conduccionautonoma/, (Accessed on 30-04-2024). [5] La Inteligencia Artificial en el sector del autom´ovil,https://www.quadis.es/ articulos/lainteligenciaartificialenelsectordelautomovil/ 70662614, (Accessed on 30-04-2024), ene. de 2024. [6] REPSOL, La Inteligencia Artificial en veh´ıculos aut´onomos,https://openroom. fundacionrepsol.com/es/contenidos/lainteligenciaartificialenvehiculos-autonomos/, (Accessed on 30-04-2024). [7] C. G. Valenzuela, Inteligencia Artificial revoluciona el sector del autom´ovil, https://computerhoy.com/motor/inteligencia-artificial-mundo-sectorautomovil-1266250, (Accessed on 30-04-2024). [8] J. Van Brummelen, M. O’Brien, D. Gruyer y H. Najjaran, ((Autonomous vehicle perception: The technology of today and tomorrow,)) Transportation Research Part C: Emerging Technologies, vol. 89, p´ags. 384-406, 2018, issn: 0968-090X. doi:https : / / doi . org / 10 . 1016 / j . trc . 2018 . 02 . 012. direcci´on: https : //www.sciencedirect.com/science/article/pii/S0968090X18302134. [9] A. Geiger, P. Lenz y R. Urtasun, ((Are we ready for autonomous driving? The KITTI vision benchmark suite,)) en 2012 IEEE Conference on Computer Vision and Pattern Recognition, 2012, p´ags. 3354-3361. doi:10 . 1109 / CVPR . 2012 . 6248074. [10] J. P. Colom´e, Raquel Urtasun, the engineer who believes she has found the key to self-driving cars: ‘I have no doubts’ — Technology — EL PA´ IS English,https: //english.elpais.com/ technology / 2024 - 0101/raquelurtasuntheengineer-who-believes-she-has-found-the-key-to-self-driving-carsi-have-no-doubts.html#, (Accessed on 30-04-2024), ene. de 2024. [11] I. Guerrero, La navarra Raquel Urtasun, entre los cien principales l´ıderes del mundo en Inteligencia Artificial,https://navarracapital.es/la-navarraraquelurtasunentreloscienprincipaleslideresdelmundoeninteligencia-artificial/, (Accessed on 30-04-2024), dic. de 2023. [12] Fundacion Cidaut,https : / / www . cidaut . es / es / sobre - nosotros / cidaut, (Accessed on 30-04-2024). [13] L. Ma, T. Ma, R. Liu, X. Fan y Z. Luo, Toward Fast, Flexible, and Robust Low-Light Image Enhancement, 2022. arXiv: 2204.10137 [cs.CV]. 94
BIBLIOGRAF´ IA [14] K. Zhang, W. Ren, W. Luo et al., ((Deep image deblurring: A survey,)) International Journal of Computer Vision, vol. 130, n.o9, p´ags. 2103-2130, 2022. [15] J.-E. Campagne, Denoising: from classical methods to deep CNNs, 2024. arXiv: 2404.16617 [cs.CV]. [16] W. Quan, J. Chen, Y. Liu, D.-M. Yan y P. Wonka, Deep Learning-based Image and Video Inpainting: A Survey, 2024. arXiv: 2401.03395 [cs.CV]. [17] C. Drumond, What is Scrum? [+ How to Start] — Atlassian,https://www. atlassian.com/agile/scrum, (Accessed on 30-04-2024). [18] Google, ¿Qu´e es la inteligencia artificial o IA? — Google Cloud — Google Cloud — cloud.google.com, [Accessed 14-04-2024]. direcci´on: https://cloud.google. com/learn/what-is-artificial-intelligence?hl=es-419#section-2. [19] J. Mei, Y. Ma, X. Yang et al., Continuously Learning, Adapting, and Improving: A Dual-Process Approach to Autonomous Driving, 2024. arXiv: 2405 . 15324 [cs.RO]. [20] F. Liu, Z. Lu y X. Lin, Vision-Based Environmental Perception for Autonomous Driving, 2022. arXiv: 2212.11453 [cs.CV]. [21] Everything You Ever Wanted To Know About Computer Vision. — by Ilija Mihajlovic — Towards Data Science,https : / / towardsdatascience . com / everythingyoueverwantedtoknowaboutcomputervisionheresa-look-why-it-s-so-awesome-e8a58dfb641e, (Accessed on 28/05/2024). [22] Computer Vision & OpenCV — AI Planet (formerly DPhi),https://aiplanet. com / learn / getting - started - with - deep - learning - es / convolutional - neural-networks/1607/computer-vision-opencv, (Accessed on 28/05/2024). [23] An Overview of Computer Vision. Computer vision is a field of... — by Michelle Venables — Towards Data Science,https://towardsdatascience.com/anoverview-of-computer-vision-1f75c2ab1b66, (Accessed on 28/05/2024). [24] Computer Vision – 22 Technologies,https://22-tech.com/computer-vision/, (Accessed on 28/05/2024). [25] E. Alpaydin, Introduction to Machine Learning, 4.aed. The MIT Press, 2020. [26] S. R. Dubey, S. K. Singh y B. B. Chaudhuri, Activation Functions in Deep Learning: A Comprehensive Survey and Benchmark, 2022. arXiv: 2109.14545 [cs.LG]. [27] M. Franke y J. Degen, ((The softmax function: Properties, motivation, and interpretation,)) 2023. [28] A. Entezami, H. Sarmadi y B. Saeedi Razavi, ((An innovative hybrid strategy for structural health monitoring by modal flexibility and clustering methods,)) Journal of Civil Structural Health Monitoring, vol. 10, n.o4, p´ags. 845-859, 2020. [29] J. Liang, J. Cui, J. Wang y W. Wei, ((Graph-based semi-supervised learning via improving the quality of the graph dynamically,)) Machine Learning, vol. 110, p´ags. 1345-1388, 2021. doi:10.1007/s10994-021-05975-y. [30] A. Sherstinsky, ((Fundamentals of Recurrent Neural Network (RNN) and Long Short-Term Memory (LSTM) network,)) Physica D: Nonlinear Phenomena, vol. 404, p´ag. 132 306, 2020, issn: 0167-2789. doi:https://doi.org/10.1016/j.physd. 2019.132306. direcci´on: https://www.sciencedirect.com/science/article/ pii/S0167278919305974. [31] Introduction to RNN — cs231n.github.io, CS231n: Deep Learning for Computer Vision, [Accessed 19-04-2024]. direcci´on: https://cs231n.github.io/rnn/. 95
BIBLIOGRAF´ IA [32] J. Elman, ((Finding structure in time,)) Cognitive Science, vol. 14, p´ags. 179-211, 1990. [33] M. Jordan, ((Attractor dynamics and parallelism in a connectionist sequential machine,)) Proc. of the Eighth Annual Conference of the Cognitive Science Society, p´ags. 531-546, 1986. [34] M. Jordan, ((Serial Order: a parallel distributed processing approach,)) Institute for Cognitive Science. University of California, inf. t´ec., 1986. [35] P. J. Werbos, ((Backpropagation through time: what it does and how to do it,)) Proceedings of the IEEE, vol. 78, n.o10, p´ags. 1550-1560, 1990. [36] S. Hochreiter y J. Schmidhuber, ((Long short-term memory,)) Neural computation, vol. 9, n.o8, p´ags. 1735-1780, 1997. [37] Wikipedia, the free encyclopedia, Long short-term memory, [Accessed 24-042024]. direcci´on: https://commons . wikipedia.org/wiki / File:Peephole% 20Long%20Short-Term%20Memory.svg. [38] CS231n Convolutional Neural Networks for Visual Recognition — cs231n.github.io, CS231n: Deep Learning for Computer Vision, [Accessed 18-04-2024]. direcci´on: https://cs231n.github.io/convolutional-networks/. [39] Introduction to Convolution Neural Network - GeeksforGeeks,https://www. geeksforgeeks.org/introduction-convolutionneuralnetwork/, (Accessed on 27/05/2024). [40] V. N. Balasubramanian, NOC:Deep Learning for Computer Vision, IIT Hyderabad,https://nptel.ac.in/courses/106106224, (Accessed on 25-04-2024). [41] B. Xu, N. Wang, T. Chen y M. Li, ((Empirical Evaluation of Rectified Activations in Convolutional Network,)) arXiv preprint arXiv:1505.00853, 2015. [42] F. Bieder, R. Sandk¨uhler y P. C. Cattin, Comparison of Methods Generalizing Maxand Average-Pooling, 2021. arXiv: 2103.01746 [cs.CV]. [43] I. Thottam, The Cost of Conservation and Restoration - Art Business News, https://artbusinessnews.com/2015/12/the-cost-of-conservation-andrestoration/, (Accessed on 26-04-2024). [44] A. A. Efros y T. K. Leung, ((Texture synthesis by non-parametric sampling,)) Cited by: 2585, vol. 2, 1999, p´ags. 1033-1038. direcci´on: https://www.scopus. com / inward / record . uri ? eid = 2 - s2 . 0 - 0033285309 & partnerID = 40 & md5 = b329de25ee598a8d0370aac9cbfac7ea. [45] M. Bertalmio, G. Sapiro, V. Caselles y C. Ballester, ((Image inpainting,)) en Proceedings of the 27th Annual Conference on Computer Graphics and Interactive Techniques, ´ep. SIGGRAPH ’00, USA: ACM Press/Addison-Wesley Publishing Co., 2000, p´ags. 417-424, isbn: 1581132085. doi:10 . 1145 / 344779 . 344972. direcci´on: https://doi.org/10.1145/344779.344972. [46] C. Barnes, E. Shechtman, A. Finkelstein y D. B. Goldman, ((PatchMatch: A randomized correspondence algorithm for structural image editing,)) ACM Trans. Graph., vol. 28, n.o3, p´ag. 24, 2009. [47] T. Ruˇzi´c y A. Piˇzurica, ((Context-aware patch-based image inpainting using Markov random field modeling,)) IEEE transactions on image processing, vol. 24, n.o1, p´ags. 444-456, 2014. [48] H. Liu, X. Bi, G. Lu y W. Wang, ((Exemplar-based image inpainting with multi-resolution information and the graph cut technique,)) IEEE Access, vol. 7, p´ags. 101 641-101 657, 2019. 96
BIBLIOGRAF´ IA [49] M. Bertalmio, A. L. Bertozzi y G. Sapiro, ((Navier-stokes, fluid dynamics, and image and video inpainting,)) en Proceedings of the 2001 IEEE Computer Society Conference on Computer Vision and Pattern Recognition. CVPR 2001, IEEE, vol. 1, 2001, p´ags. I-I. [50] J. Shen y T. F. Chan, ((Mathematical models for local nontexture inpaintings,)) SIAM Journal on Applied Mathematics, vol. 62, n.o3, p´ags. 1019-1043, 2002. [51] J. Shen, S. H. Kang y T. F. Chan, ((Euler’s elastica and curvature-based inpainting,)) SIAM journal on Applied Mathematics, vol. 63, n.o2, p´ags. 564-592, 2003. [52] S. Liu, Y. Wang, J. Wang, H. Wang, J. Zhang y C. Pan, ((Kinect depth restoration via energy minimization with tv 21 regularization,)) en 2013 IEEE International Conference on Image Processing, IEEE, 2013, p´ags. 724-724. [53] C. Guillemot y O. Le Meur, ((Image inpainting: Overview and recent advances,)) IEEE signal processing magazine, vol. 31, n.o1, p´ags. 127-144, 2013. [54] H. Li, W. Luo y J. Huang, ((Localization of diffusion-based inpainting in digital images,)) IEEE transactions on information forensics and security, vol. 12, n.o12, p´ags. 3050-3064, 2017. [55] T. K. Shih, L.-C. Lu, Y.-H. Wang y R.-C. Chang, ((Multi-resolution image inpainting,)) en 2003 International Conference on Multimedia and Expo. ICME’03. Proceedings (Cat. No. 03TH8698), IEEE, vol. 1, 2003, p´ags. I-485. [56] J. Mairal, M. Elad y G. Sapiro, ((Sparse representation for color image restoration,)) IEEE Transactions on image processing, vol. 17, n.o1, p´ags. 53-69, 2007. [57] R.-C. Chang y T. K. Shih, ((Multilayer lnpainting on Digitalized Artworks.,)) Journal of Information Science & Engineering, vol. 24, n.o4, 2008. [58] N. Kawai, T. Sato y N. Yokoya, ((Image inpainting considering brightness change and spatial locality of textures and its evaluation,)) en Advances in Image and Video Technology: Third Pacific Rim Symposium, PSIVT 2009, Tokyo, Japan, January 13-16, 2009. Proceedings 3, Springer, 2009, p´ags. 271-282. [59] B. Shen, W. Hu, Y. Zhang e Y.-J. Zhang, ((Image inpainting via sparse representation,)) en 2009 IEEE International Conference on Acoustics, Speech and Signal Processing, IEEE, 2009, p´ags. 697-700. [60] L. He, Y. Xing, K. Xia, J. Tan et al., ((An adaptive image inpainting method based on continued fractions interpolation,)) Discrete Dynamics in Nature and Society, vol. 2018, 2018. [61] J. Jam, C. Kendrick, K. Walker, V. Drouard, J. G.-S. Hsu y M. H. Yap, ((A comprehensive review of past and present image inpainting methods,)) Computer Vision and Image Understanding, vol. 203, p´ag. 103 147, 2021, issn: 1077-3142. doi:https:// doi.org/10 .1016/j. cviu.2020.103147. direcci´on: https : //www.sciencedirect.com/science/article/pii/S1077314220301661. [62] G. Brauwers y F. Frasincar, ((A General Survey on Attention Mechanisms in Deep Learning,)) IEEE Transactions on Knowledge and Data Engineering, vol. 35, n.o4, p´ags. 3279-3298, abr. de 2023, issn: 2326-3865. doi:10.1109/tkde.2021. 3126456. direcci´on: http://dx.doi.org/10.1109/TKDE.2021.3126456. [63] D. Soydaner, ((Attention mechanism in neural networks: where it comes and where it goes,)) Neural Computing and Applications, vol. 34, n.o16, p´ags. 13 371-13 385, 97
BIBLIOGRAF´ IA mayo de 2022, issn: 1433-3058. doi:10.1007/s00521-022-07366-3. direcci´on: http://dx.doi.org/10.1007/s00521-022-07366-3. [64] A. E. Orhan y X. Pitkow, Skip Connections Eliminate Singularities, 2018. arXiv: 1701.09175 [cs.NE]. [65] D. Wu, Y. Wang, S.-T. Xia, J. Bailey y X. Ma, Skip Connections Matter: On the Transferability of Adversarial Examples Generated with ResNets, 2020. arXiv: 2002.05990 [cs.LG]. [66] V. Badrinarayanan, A. Kendall y R. Cipolla, SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation, 2016. arXiv: 1511.00561 [cs.CV]. [67] J. C. Ye y W. K. Sung, Understanding Geometry of Encoder-Decoder CNNs, 2019. arXiv: 1901.07647 [cs.LG]. [68] K. Aitken, V. V. Ramasesh, Y. Cao y N. Maheswaranathan, Understanding How Encoder-Decoder Architectures Attend, 2021. arXiv: 2110.15253 [cs.LG]. [69] I. J. Goodfellow, J. Pouget-Abadie, M. Mirza et al., Generative Adversarial Networks, 2014. arXiv: 1406.2661 [stat.ML]. [70] T. S. Silva, ((A Short Introduction to Generative Adversarial Networks,)) 2017. [71] O. Ronneberger, P. Fischer y T. Brox, U-Net: Convolutional Networks for Biomedical Image Segmentation, 2015. arXiv: 1505.04597 [cs.CV]. [72] H. Liu, B. Jiang, Y. Xiao y C. Yang, Coherent Semantic Attention for Image Inpainting, 2019. arXiv: 1905.12384 [cs.CV]. [73] H. Zheng, Z. Lin, J. Lu et al., CM-GAN: Image Inpainting with Cascaded Modulation GAN and Object-Aware Training, 2022. arXiv: 2203.11947 [cs.CV]. [74] R. E. Turner, An Introduction to Transformers, 2024. arXiv: 2304.10557 [cs.LG]. [75] W. Li, Z. Lin, K. Zhou, L. Qi, Y. Wang y J. Jia, MAT: Mask-Aware Transformer for Large Hole Image Inpainting, 2022. arXiv: 2203.15270 [cs.CV]. [76] P. Jeevan, D. S. Kumar y A. Sethi, WavePaint: Resource-efficient Token-mixer for Self-supervised Inpainting, 2023. arXiv: 2307.00407 [cs.CV]. [77] S. Zhao, J. Cui, Y. Sheng et al., Large Scale Image Completion via Co-Modulated Generative Adversarial Networks, 2021. arXiv: 2103.10428 [cs.CV]. [78] Wikipedia, GNU/Linux, Wikipedia, la enciclopedia libre, Accessed: 15-Apr2024, 2024. direcci´on: https://es.wikipedia.org/wiki/GNU/Linux. [79] Wikipedia, Microsoft Windows, Wikipedia, la enciclopedia libre, Accessed: 15Apr-2024, 2024. direcci´on: https : / / es . wikipedia . org / wiki / Microsoft Windows. [80] Canonical Ltd., Ubuntu 22.04 LTS (Jammy Jellyfish),https : / / releases . ubuntu.com/jammy/, Accessed: 15-Apr-2024, 2024. [81] Python Software Foundation, Python 3.10.14,https : / / www . python . org / downloads/release/python-31014/, Accessed: 15-Apr-2024, 2024. [82] Universidad de Valladolid, Miner´ıa de Datos - Gu´ıa Docente de la Universidad de Valladolid,https://apps.stic.uva.es/guias docentes/uploads/2023/ 551/46970/1/Documento.pdf, Accessed: 15-Apr-2024, 2023. [83] P. S. Foundation, venv — Creaci´on de entornos virtuales, Python 3.8 documentation, Accessed: 15-Apr-2024, 2024. direcci´on: https://docs.python.org/es/ 3.8/library/venv.html. 98
BIBLIOGRAF´ IA [84] OpenCV: Introduction to OpenCV-Python Tutorials, OpenCV documentation index, Accessed: 15-Apr-2024, 2024. direcci´on: https://docs.opencv.org/4. x/d0/de3/tutorial py intro.html. [85] pillow, PyPI, Accessed: 15-Apr-2024, 2024. direcci´on: https : / / pypi . org / project/pillow/. [86] F. en ciencia de datos — DataScientest.com, Matplotlib: todo lo que tienes que saber sobre la librer´ıa Python de Dataviz, Accessed: 15-Apr-2024, 2024. direcci´on: https://datascientest.com/es/todo-sobre-matplotlib. [87] PyTorch, PyTorch, PyTorch official website, Accessed: 15-Apr-2024, 2024. direcci´on: https://pytorch.org/. [88] NVIDIA Corporation, Latest Official NVIDIA Driver,https://www.nvidia. com/Download/index.aspx, Accessed: 15-Apr-2024, 2024. [89] NVIDIA Corporation, CUDA Toolkit 12.4 Update 1,https://docs.nvidia. com/cuda/cuda-toolkit-release-notes/index.html, Accessed: 15-Apr-2024, 2024. [90] Matplotlib Development Team, Matplotlib 3.8.4,https://pypi.org/project/ matplotlib/, Accessed: 15-Apr-2024, 2024. [91] Weights & Biases, Weights & Biases, Accessed: 15-Apr-2024, 2024. direcci´on: https://wandb.ai/. [92] G. MAHFOUDI, B. TAJINI, F. RETRAINT, F. MORAIN-NICOLIER, J. L. DUGELAY y M. PIC, ((DEFACTO: Image and Face Manipulation Dataset,)) en 2019 27th European Signal Processing Conference (EUSIPCO), 2019, p´ags. 1-5. doi:10.23919/EUSIPCO.2019.8903181. [93] T. Lin, M. Maire, S. J. Belongie et al., ((Microsoft COCO: Common Objects in Context,)) CoRR, vol. abs/1405.0312, 2014. arXiv: 1405.0312. direcci´on: http: //arxiv.org/abs/1405.0312. [94] N. Samet, S. Hicsonmez y E. Akbas, ((HoughNet: Integrating near and longrange evidence for bottom-up object detection,)) en European Conference on Computer Vision (ECCV), 2020. [95] Y. Cabon, N. Murray y M. Humenberger, Virtual KITTI 2, 2020. arXiv: 2001. 10773 [cs.CV]. [96] F. Yu, H. Chen, X. Wang et al., BDD100K: A Diverse Driving Dataset for Heterogeneous Multitask Learning, 2020. arXiv: 1805.04687 [cs.CV]. [97] D. P. Kingma y J. Ba, Adam: A Method for Stochastic Optimization, 2017. arXiv: 1412.6980 [cs.LG]. [98] A. Y. Ng, ((Feature selection, L 1 vs. L 2 regularization, and rotational invariance,)) en Proceedings of the twenty-first international conference on Machine learning, 2004, p´ag. 78. [99] C. Cortes, M. Mohri y A. Rostamizadeh, L2 Regularization for Learning Kernels, 2012. arXiv: 1205.2653 [cs.LG]. [100] Z. Liu, Z. Xu, J. Jin, Z. Shen y T. Darrell, Dropout Reduces Underfitting, 2023. arXiv: 2303.01500 [cs.LG]. [101] Y. Li, W. Ma, C. Chen et al., A Survey on Dropout Methods and Experimental Verification in Recommendation, 2022. arXiv: 2204.02027 [cs.LG]. [102] I. Loshchilov y F. Hutter, SGDR: Stochastic Gradient Descent with Warm Restarts, 2017. arXiv: 1608.03983 [cs.LG]. 99
BIBLIOGRAF´ IA [103] A. Al-Kababji, F. Bensaali y S. P. Dakua, Scheduling Techniques for Liver Segmentation: ReduceLRonPlateau Vs OneCycleLR, 2022. arXiv: 2202.06373 [cs.CV]. [104] L. N. Smith, Cyclical Learning Rates for Training Neural Networks, 2017. arXiv: 1506.01186 [cs.CV]. [105] T. Akiba, S. Sano, T. Yanase, T. Ohta y M. Koyama, Optuna: A Next-generation Hyperparameter Optimization Framework, 2019. arXiv: 1907.10902 [cs.LG]. [106] S. Patil, A. Joshi y S. Sawant, ((Recovering Images Using Image Inpainting Techniques,)) en Robotics, Control and Computer Vision, H. Muthusamy, J. Botzheim y R. Nayak, eds., Singapore: Springer Nature Singapore, 2023, p´ags. 27-38, isbn: 978-981-99-0236-1. [107] M. A. Ebrahimi, M. Holst y E. Lunasin, The Navier-Stokes-Voight Model for Image Inpainting, 2009. arXiv: 0901.4548 [math.NA]. [108] A. Telea, ((An image inpainting technique based on the fast marching method,)) Journal of graphics tools, vol. 9, n.o1, p´ags. 23-34, 2004. [109] S. N. Gowda, Y. Thakre, S. N. Gowda y X. Jin, Reimagining Reality: A Comprehensive Survey of Video Inpainting Techniques, 2024. arXiv: 2401 . 17883 [cs.CV]. [110] Z. Wang, A. C. Bovik, H. R. Sheikh y E. P. Simoncelli, ((Image quality assessment: from error visibility to structural similarity,)) IEEE transactions on image processing, vol. 13, n.o4, p´ags. 600-612, 2004. [111] R. Zhang, P. Isola, A. A. Efros, E. Shechtman y O. Wang, The Unreasonable Effectiveness of Deep Features as a Perceptual Metric, 2018. arXiv: 1801.03924 [cs.CV]. [112] M. Heusel, H. Ramsauer, T. Unterthiner, B. Nessler y S. Hochreiter, GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium, 2018. arXiv: 1706.08500 [cs.LG]. [113] Conv2d — PyTorch 2.3 documentation,https://pytorch.org/docs/stable/ generated/torch.nn.Conv2d.html, (Accessed on 15-05-2024). [114] MaxPool2d — PyTorch 2.3 documentation,https : / / pytorch . org / docs / stable/generated/torch.nn.MaxPool2d.html, (Accessed on 15-05-2024). [115] ConvTranspose2d — PyTorch 2.3 documentation,https://pytorch.org/docs/ stable / generated / torch . nn . ConvTranspose2d . html, (Accessed on 15-052024). [116] BatchNorm2d — PyTorch 2.3 documentation,https://pytorch.org/docs/ stable/generated/torch.nn.BatchNorm2d.html, (Accessed on 15-05-2024). [117] Linear — PyTorch 2.3 documentation,https://pytorch.org/docs/stable/ generated/torch.nn.Linear.html, (Accessed on 15-05-2024). [118] Sigmoid — PyTorch 2.3 documentation,https://pytorch.org/docs/stable/ generated/torch.nn.Sigmoid.html, (Accessed on 15-05-2024). [119] ReLU — PyTorch 2.3 documentation,https://pytorch.org/docs/stable/ generated/torch.nn.ReLU.html, (Accessed on 15-05-2024). [120] Tanh — PyTorch 2.3 documentation,https://pytorch.org/docs/stable/ generated/torch.nn.Tanh.html, (Accessed on 15-05-2024). [121] LSTM — PyTorch 2.3 documentation,https://pytorch.org/docs/stable/ generated/torch.nn.LSTM.html, (Accessed on 15-05-2024). 100
BIBLIOGRAF´ IA [122] G. Jocher, A. Chaurasia y J. Qiu, Ultralytics YOLO, ver. 8.0.0, ene. de 2023. direcci´on: https://github.com/ultralytics/ultralytics. [123] J. Redmon, S. Divvala, R. Girshick y A. Farhadi, You Only Look Once: Unified, Real-Time Object Detection, 2016. arXiv: 1506.02640 [cs.CV]. [124] J. Redmon y A. Farhadi, YOLO9000: Better, Faster, Stronger, 2016. arXiv: 1612.08242 [cs.CV]. [125] J. Redmon y A. Farhadi, YOLOv3: An Incremental Improvement, 2018. arXiv: 1804.02767 [cs.CV]. [126] A. Bochkovskiy, C.-Y. Wang y H.-Y. M. Liao, YOLOv4: Optimal Speed and Accuracy of Object Detection, 2020. arXiv: 2004.10934 [cs.CV]. [127] C. Li, L. Li, H. Jiang et al., YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications, 2022. arXiv: 2209.02976 [cs.CV]. [128] C.-Y. Wang, A. Bochkovskiy y H.-Y. M. Liao, YOLOv7: Trainable bag-offreebies sets new state-of-the-art for real-time object detectors, 2022. arXiv: 2207.02696 [cs.CV]. [129] C.-Y. Wang, I.-H. Yeh y H.-Y. M. Liao, YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information, 2024. arXiv: 2402.13616 [cs.CV]. [130] J. Terven, D.-M. C´ordova-Esparza y J.-A. Romero-Gonz´alez, ((A Comprehensive Review of YOLO Architectures in Computer Vision: From YOLOv1 to YOLOv8 and YOLO-NAS,)) Machine Learning and Knowledge Extraction, vol. 5, n.o4, p´ags. 1680-1716, nov. de 2023, issn: 2504-4990. doi:10.3390/make5040083. direcci´on: http://dx.doi.org/10.3390/make5040083. [131] YOLOv9 - Ultralytics YOLO Documentos,https://docs.ultralytics.com/ es/models/yolov9/, (Accessed on 06-06-2024). [132] Detect - Ultralytics YOLO Docs,https : / / docs . ultralytics . com / tasks / detect/, (Accessed on 06-06-2024). [133] Segment - Ultralytics YOLO Docs,https://docs.ultralytics.com/tasks/ segment/, (Accessed on 06-06-2024). [134] Y. LeCun, L. Bottou, Y. Bengio y P. Haffner, ((Gradient-Based Learning Applied to Document Recognition,)) Proceedings of the IEEE, vol. 86, n.o11, p´ags. 2278-2324, nov. de 1998. [135] Y. LeCun, LeNet-5: Unusual Patterns,http://yann.lecun.com/exdb/lenet/ weirdos.html, (Accessed on 29-04-2024). [136] A. Krizhevsky, I. Sutskever y G. E. Hinton, ((ImageNet Classification with Deep Convolutional Neural Networks,)) en Advances in Neural Information Processing Systems, F. Pereira, C. Burges, L. Bottou y K. Weinberger, eds., vol. 25, Curran Associates, Inc., 2012. direcci´on: https://proceedings.neurips.cc/paper files/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf. [137] M. D. Zeiler y R. Fergus, Visualizing and Understanding Convolutional Networks, 2013. arXiv: 1311.2901 [cs.CV]. [138] C. Szegedy, W. Liu, Y. Jia et al., Going Deeper with Convolutions, 2014. arXiv: 1409.4842 [cs.CV]. [139] K. Simonyan y A. Zisserman, Very Deep Convolutional Networks for Large-Scale Image Recognition, 2015. arXiv: 1409.1556 [cs.CV]. 101
BIBLIOGRAF´ IA [140] S. Banga, VGG-Net Architecture Explained. The company Visual Geometry Group. . . — by Siddhesh Bangar — Medium,https://medium.com/@siddheshb008/ vgg-net-architecture-explained-71179310050f, (Accessed on 29-04-2024). [141] K. He, X. Zhang, S. Ren y J. Sun, Deep Residual Learning for Image Recognition, 2015. arXiv: 1512.03385 [cs.CV]. [142] S. Ioffe y C. Szegedy, Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift, 2015. arXiv: 1502.03167 [cs.LG]. [143] C.-T. Li, 10 Papers You Must Read for Deep Image Inpainting — Towards Data Science,https://towardsdatascience.com/10-papers-you-must-read-fordeep-image-inpainting-2e41c589ced0, (Accessed on 02-05-2024). [144] D. Pathak, P. Krahenbuhl, J. Donahue, T. Darrell y A. A. Efros, Context Encoders: Feature Learning by Inpainting, 2016. arXiv: 1604.07379 [cs.CV]. [145] C. Yang, X. Lu, Z. Lin, E. Shechtman, O. Wang y H. Li, ((High-resolution image inpainting using multi-scale neural patch synthesis,)) en Proceedings of the IEEE conference on computer vision and pattern recognition, 2017, p´ags. 6721-6729. [146] S. Iizuka, E. Simo-Serra y H. Ishikawa, ((Globally and locally consistent image completion,)) ACM Trans. Graph., vol. 36, n.o4, jul. de 2017, issn: 0730-0301. doi:10 . 1145 / 3072959 . 3073659. direcci´on: https : / / doi . org / 10 . 1145 / 3072959.3073659. [147] U. Demir y G. Unal, Patch-Based Image Inpainting with Generative Adversarial Networks, 2018. arXiv: 1803.07422 [cs.CV]. [148] P. Isola, J.-Y. Zhu, T. Zhou y A. A. Efros, Image-to-Image Translation with Conditional Adversarial Networks, 2018. arXiv: 1611.07004 [cs.CV]. [149] Z. Yan, X. Li, M. Li, W. Zuo y S. Shan, Shift-Net: Image Inpainting via Deep Feature Rearrangement, 2018. arXiv: 1801.09392 [cs.CV]. [150] J. Yu, Z. Lin, J. Yang, X. Shen, X. Lu y T. S. Huang, Generative Image Inpainting with Contextual Attention, 2018. arXiv: 1801.07892 [cs.CV]. [151] Y. Wang, X. Tao, X. Qi, X. Shen y J. Jia, Image Inpainting via Generative Multicolumn Convolutional Neural Networks, 2018. arXiv: 1810.08771 [cs.CV]. [152] G. Liu, F. A. Reda, K. J. Shih, T.-C. Wang, A. Tao y B. Catanzaro, Image Inpainting for Irregular Holes Using Partial Convolutions, 2018. arXiv: 1804. 07723 [cs.CV]. [153] K. Nazeri, E. Ng, T. Joseph, F. Z. Qureshi y M. Ebrahimi, EdgeConnect: Generative Image Inpainting with Adversarial Edge Learning, 2019. arXiv: 1901. 00212 [cs.CV]. [154] J. Yu, Z. Lin, J. Yang, X. Shen, X. Lu y T. Huang, Free-Form Image Inpainting with Gated Convolution, 2019. arXiv: 1806.03589 [cs.CV]. 102
BIBLIOGRAF´ IA 103
B. Glosario y ejemplos de redes CNN en PyTorch. En este anexo, se presentan cada uno de los m´etodos utilizados de PyTorch en las distintas redes del cap´ıtulo 6. nn.Conv2d[113]: Operaci´on que aplica la convoluci´on sobre una entrada. nn.MaxPool2d[114]: Aplicaci´on del MaxPooling en PyTorch. Donde, tomando el valor m´aximo, reduce la dimensionalidad de los mapas de caracter´ısticas manteniendo la informaci´on m´as importante. nn.ConvTranspose2d[115]: Aplica una convoluci´on transpuesta o deconvoluci´on sobre la entrada. Se suele utilizar para aumentar la dimensionalidad de los mapas de caracter´ısticas junto con un stride = 2. nn.BatchNorm2d[116]: Conocida como Batch Normalization, aplica una normalizaci´on de las entradas a cada capa de la red neuronal. nn.Linear[117]: Operaci´on que aplica una transformaci´on lineal a la entrada. Se suele usar en las capas totalmente conectadas de una red. nn.Sigmoid[118]: Funci´on de activaci´on que coloca los valores de la entrada en un rango de 0 a 1. nn.ReLU[119]: Es la funci´on de activaci´on que pone los valores negativos a 0. Tiene variaciones como GeLU y LeakyReLU. nn.Tanh[120]: Funci´on de activaci´on que pone los valores entre el rango -1 y 1. Sirve para introducir no linearidad. nn.LSTM[121]: Es una variante de las RNN, con mecanismos para solucionar la evanescencia del gradiente. No se profundiza en explicar que es una convoluci´on o una deconvoluci´on, como otros t´erminos que ya se han explicado en detalle que son en el Marco Te´orico, correspondiente al cap´ıtulo 3. Y si se quiere tomar m´as informaci´on sobre su funcionamiento, recomiendo consultar la documentaci´on de PyTorch referenciada para cada uno de los t´erminos. B.1. Ejemplos de aplicaci´on de redes convolucionales A continuaci´on mediante figuras representamos como cambia la convoluci´on y la deconvoluci´on en funci´on de los par´ametros de entrada que tengan sus respectivas funciones Conv2d yConvTranspose2d como el relleno(padding), entrada (input) y stride (tama˜no de paso al recorrer la matriz), mencionando tambi´en sus equivalencias. 110
AP´ ENDICE B. GLOSARIO Y EJEMPLOS DE REDES CNN EN PYTORCH. B.1.1. Convoluci´on Figura B.1: Convoluci´on de un kernel 3×3 sobre una entrada de 4×4 utilizando stride 1 y sin padding (es decir, i= 4, k= 3, s= 1 y p= 0). Figura B.2: Convoluci´on de un kernel 4 ×4 sobre una entrada de 5 ×5 rellenada con un borde de ceros de 2 ×2 utilizando stride de 1 y padding = 2 (es decir, i= 5, k= 4, s= 1 y p= 2). Figura B.3: Convoluci´on de un kernel 3 ×3 sobre una entrada de 5 ×5 utilizando relleno 1 y stride 1 (es decir, i= 5, k= 3, s= 1 y p= 1). 111
AP´ ENDICE B. GLOSARIO Y EJEMPLOS DE REDES CNN EN PYTORCH. Figura B.4: Convoluci´on de un kernel 3 ×3 sobre una entrada de 5 ×5 utilizando relleno y stride arbitrarios (es decir, i= 5, k= 3, s= 1 y p= 2). Figura B.5: Convoluci´on de un kernel 3 ×3 sobre una entrada de 5 ×5 utilizando un stride de 2 ×2 y sin relleno (es decir, i= 5, k= 3, s= 2 y p= 0). Figura B.6: Convoluci´on de un kernel 3 ×3 sobre una entrada de 5 ×5 rellenada con un borde de ceros de 1 ×1 utilizando un stride de 2 ×2 (es decir, i= 5, k= 3, s= 2 yp= 1). Figura B.7: Convoluci´on de un kernel 3 ×3 sobre una entrada de 6 ×6 rellenada con un borde de ceros de 1 ×1 utilizando un stride de 2 ×2 (es decir, i= 6, k= 3, s= 2 y p= 1). En este caso, la fila inferior y la columna derecha de la entrada rellenada con ceros no est´an cubiertas por el kernel. 112
AP´ ENDICE B. GLOSARIO Y EJEMPLOS DE REDES CNN EN PYTORCH. B.1.2. Deconvoluci´on Figura B.8: Convoluci´on transpuesta de un kernel 3 ×3 sobre una entrada de 4 ×4 utilizando un stride = 1 (es decir, i= 4, k= 3, s= 1 y p= 0). Es equivalente a la convoluci´on de un kernel 3 ×3 sobre una entrada de 2 ×2 rellenada con un borde de ceros de 2 ×2 utilizando un stride = 1 (es decir, i′= 2, k′=k,s′= 1 y p′= 2). Figura B.9: Convoluci´on transpuesta de un kernel 4 ×4 sobre una entrada de 5 ×5 rellenada con un borde de ceros de 2×2 utilizando un stride = 1 (es decir, i= 5, k= 4, s= 1 y p= 2). Es equivalente a la convoluci´on de un kernel 4 ×4 sobre una entrada de 6 ×6 rellenada con un borde de ceros de 1 ×1 utilizando un stride = 1 (es decir, i′= 6, k′=k,s′= 1 y p′= 1). Figura B.10: Convoluci´on transpuesta de un kernel 3 ×3 sobre una entrada de 5 ×5 utilizando relleno = 1 y un stride = 1 (es decir, i= 5, k= 3, s= 1 y p= 1). Es equivalente a la convoluci´on de un kernel 3 ×3 sobre una entrada de 5 ×5 utilizando relleno = 1 y un stride = 1 (es decir, i′= 5, k′=k,s′= 1 y p′= 1). 113
AP´ ENDICE B. GLOSARIO Y EJEMPLOS DE REDES CNN EN PYTORCH. Figura B.11: Convoluci´on transpuesta de un kernel 3 ×3 sobre una entrada de 5 ×5 utilizando relleno completo y stride = 1 (es decir, i= 5, k= 3, s= 1 y p= 2). Es equivalente a la convoluci´on de un kernel 3 ×3 sobre una entrada de 7 ×7 utilizando un stride = 1 (es decir, i′= 7, k′=k,s′= 1 y p′= 0). Figura B.12: Convoluci´on transpuesta de un kernel 3 ×3 sobre una entrada de 5 ×5 utilizando stride de 2 ×2 (es decir, i= 5, k= 3, s= 2 y p= 0). Es equivalente a la convoluci´on de un kernel 3 ×3 sobre una entrada de 2 ×2 (con 1 cero insertado entre las entradas) rellenada con un borde de ceros de 2 ×2 utilizando stride = 1 (es decir, i′= 2, ˜ i′= 3, k′=k,s′= 1 y p′= 2). 114
AP´ ENDICE B. GLOSARIO Y EJEMPLOS DE REDES CNN EN PYTORCH. 115
C. YOLO YOLO, son las siglas de You Only Look Once, que el sistema SOTA de detecci´on de objetos en tiempo real, utiliza redes CNN para su prop´osito. Actualmente, las ´ultimas versiones, las implementa Ultralytics [122]. Su arquitectura inicial consta de 24 capas convolucionales, seguidas de dos totalmente conectadas. Figura C.1: Arquitectura de YOLOv1, extra´ıda de [123] C.1. Versiones Originalmente, el algoritmo de YOLO era capaz de detectar 20 clases diferentes, repartidas, en animales, veh´ıculos y otros objetos cotidianos. A lo largo de los a˜nos, se han ido desarrollando nuevas versiones de este algoritmo, con cada vez mejores resultados. Para m´as informaci´on, consultar el paper “A COMPREHENSIVE REVIEW OF YOLO: FROM YOLOV1 TO YOLOV8 AND YOLO-NAS” [130] De forma adicional, a principios de 2024, sali´o una nueva versi´on, YOLOv9, cuyas mejoras se obtienen al aplicar t´ecnicas innovadoras como la Informaci´on de Gradiente Programable (PGI) y la Red de Agregaci´on de Capas Eficiente Generalizada (GELAN). Seg´un Ultralytics, “YOLOv9 representa un avance fundamental en la detecci´on de objetos en tiempo real, ya que ofrece mejoras significativas en t´erminos de eficacia, precisi´on y adaptabilidad.”[131] 116
AP´ ENDICE C. YOLO Tabla C.1 Comparativa de las versiones de YOLO. Versi´on A˜no Descripci´on Por qu´e usar esta versi´on YOLOv1 [123] 2015 Versi´on inicial. Detecci´on de objetos m´as veloz que predecesores. Aplicaci´on red neuronal sobre imagen completa. Mejora en velocidad de detecci´on respecto a m´etodos anteriores. YOLOv2 [124] 2017 Detecta m´as de 9000 clases de objetos. Ampliaci´on significativa en la cantidad de clases detectables. YOLOv3 [125] 2018 Detecci´on de objetos a distintas escalas (Tama˜no: peque˜no, mediano y grande). Mejora en la detecci´on de objetos de diferentes tama˜nos. YOLOv4 [126] 2020 Gran salto de importancia. Aplicaci´on de redes CNN. Extrae m´as caracter´ısticas. Aumento de precisi´on de la red. Avances significativos en precisi´on y extracci´on de caracter´ısticas. YOLOv5 2020 Mejoras de rendimiento de arquitectura de la red. Optimizaciones en la arquitectura para un mejor rendimiento. YOLOv6 [127] 2022 No se conocen en detalle las mejoras de esta red. - YOLOv7 [128] 2022 No se conocen en detalle las mejoras de esta red. Super´o a todos los detectores de objetos conocidos anteriormente en velocidad y precisi´on, pasando de 5 a 160 FPS YOLOv8 2023 Vuelve a utilizar el dataset MS-COCO Versi´on m´as estable y utilizada hasta el momento YOLOv9 [129] 2024 Aplicaci´on de t´ecnicas innovadoras como PGI y GELAN. Incorporaci´on de t´ecnicas de vanguardia para mejorar la detecci´on. YOLO-NAS 2023 Uso de arquitecturas de red neuronal generadas autom´aticamente mediante algoritmos de b´usqueda de arquitectura neural (NAS). Optimizaci´on para mejorar la eficiencia y precisi´on. Capacidad de adaptarse mejor a diferentes tipos de datos y requisitos de detecci´on. Utilizar cuando se busca una arquitectura optimizada autom´aticamente para eficiencia y precisi´on. 117
AP´ ENDICE C. YOLO Figura C.2: L´ınea temporal de las distintas versiones de YOLO. C.2. Utilidad en nuestro TFG En este Trabajo de Fin de Grado, se ha empleado YOLO en su versi´on 8, (yolov8) para la detecci´on [132] y segmentaci´on (con yolo-seg [133]) de veh´ıculos, para poder obtener de una imagen cualquiera un veh´ıculo, seleccionarlo y segmentarlo. Pudiendo de esta manera obtener su m´ascara y pegarla encima de su imagen original, obteniendo as´ı la imagen de entrada para nuestro modelo. Figura C.3: YOLO Object Detection. Obtenido de [132] Figura C.4: YOLO Instance Segmentation. Obtenido de [133] 118
AP´ ENDICE C. YOLO 119
E. Arquitecturas de redes de inpainting m´as conocidas. En esta secci´on, nos basamos en el art´ıculo “10 Papers You Must Read for Deep Image Inpainting”[143] para poder ver las redes m´as conocidas y utilizadas para inpainting a lo largo de los ´ultimos a˜nos junto con su estructura. E.1. Context Encoder Red creada en el a˜no 2016 por D.Pathak et al.[144], fue la primera red basada en GAN[69] para la restauraci´on de im´agenes mediante t´ecnicas de inpainting. En ella se introducen conceptos b´asicos y una capa totalmente conectada por canales, para as´ı poder entender el contexto de la imagen. Figura E.1: Arquitectura de la red Context Encoder E.2. MSNPS Multi-Scale Neural Patch Synthesis [145] es una red creada en 2016 y se puede considerar como una versi´on mejorada de la Context Encoder[144]. Utiliza una red de textura, que logra mejorar los detalles visuales y tambi´en utiliza una perdida propuesta por ellos, la p´erdida de textura, que se relaciona con la perdida perceptual y de estilo. 126
AP´ ENDICE E. ARQUITECTURAS DE REDES DE INPAINTING M ´ AS CONOCIDAS. Figura E.2: Arquitectura de la red MSNPS E.3. GLCIC Globally and Locally Consistent Image Completion [146] es una red creada en 2017. Esta red es completamente convolucional, con dilataciones que sirven para entender el contexto evitando el uso de capas costosas y con la posibilidad de utilizar tama˜nos diferentes de imagen, tambi´en utiliza discriminadores tanto globales como locales entrenados a la par que el generador. Figura E.3: Arquitectura de la red GLCIC E.4. Patch-based Image Inpainting with GANs La red propuesta en este paper [147] se cre´o en 2018, se puede considerar una variante de la red anterior (GLCIC [146]), su novedad es la incorporaci´on de aprendizaje residual [141] y una red GAN conocida como PatchGAN [148], que sustituye la 127
AP´ ENDICE E. ARQUITECTURAS DE REDES DE INPAINTING M ´ AS CONOCIDAS. de original de GLCIC, con la combinaci´on de estas dos novedades logran mejorar la consistencia de la estructura global y los detalles en la textura de la imagen generada. Figura E.4: Arquitectura de la red propuesta en el paper [146] E.5. Shift-Net Shift-Net[149], creada en 2018, combina redes CNN modernos y el m´etodo tradicional de “copy-paste”, introduce una p´erdida de gu´ıa que busca que las caracter´ısticas decodificadas faltantes sean cercanas a las codificadas en buen estado. Tambi´en a˜naden una capa de desplazamiento que permite tomar informaci´on de los vecinos m´as cercanos a la parte faltante de la imagen, para refinar los detalles en la zona generada. Figura E.5: Arquitectura de Shift-Net E.6. DeepFill v1 DeepFill v1 (2018) [150], est´a considerada como una versi´on mejorada de ShiftNet[149]. En ella se introduce una capa de atenci´on contextual que refina las caracter´ısticas a´un m´as en las ´areas faltantes. 128
AP´ ENDICE E. ARQUITECTURAS DE REDES DE INPAINTING M ´ AS CONOCIDAS. Figura E.6: Arquitectura de red DeepFill v1 E.7. GMCNN Generative Multi-column Convolutional Neural Networks (2018) [151] tiene como caracter´ıstica especial el uso de varias ramas y tama˜nos de filtro distintos para mejorar las texturas. Asimismo, propone nuevas funciones de p´erdida para esta tarea, a esta funci´on de p´erdida se la conoce como “Implicit Diversified Marckov Random Field (ID-MRF)” Figura E.7: Arquitectura red CMCNN E.8. PartialConv En el paper “Image Inpainting for Irregular Holes using Partial Convolutions”[152] de 2018 nos permite restaurar im´agenes con m´ascaras irregulares utilizando convoluciones parciales. 129
AP´ ENDICE E. ARQUITECTURAS DE REDES DE INPAINTING M ´ AS CONOCIDAS. Figura E.8: Arquitectura de PartialConv E.9. EdgeConnect EdgeConnect: Generative Image Inpainting with Adversarial Edge Learning (2019) [153], se centra en separar el inpainting en dos pasos. Primero, trata de predecir los bordes de las regiones faltantes, y segundo, tratar de completar la imagen de acuerdo a los bordes predichos anteriormente. Figura E.9: Arquitectura de EdgeConnect E.10. DeepFill v2 Free-Form Image Inpainting with Gated Convolution (2019) [154] es uno de los mejores algoritmos que se pueden usar actualmente. Se le puede considerar como una 130
AP´ ENDICE E. ARQUITECTURAS DE REDES DE INPAINTING M ´ AS CONOCIDAS. versi´on mejorada de DeepFill v1[150], PartialConv[152] y EdgeConnect[153]. En esta estructura, se aplica una combinaci´on de Convoluciones Parciales y una versi´on aprendible de la parcial, conocida como “Gated Convolution”. Por ´ultimo, utiliza SNPatchGan [154] para estabilizar el entrenamiento de la red GAN. Figura E.10: Arquitectura DeepFill V2 Esta recopilaci´on habla de redes desde 2016 hasta 2020, pese a ello se ha tratado sobre el SOTA de inpainting para distintos datasets en la secci´on 3.4 131