scieee AI-readable full text Open interactive document viewer

Detección de objetos extraños (FODs) en pistas de aeropuertos utilizando drones e inteligencia artificial

González Hernández, Christian

Abstract

In this work, a study will be carried out on the task of inspecting airport runways using drones and artificial intelligence. Different aspects are evaluated based on verifying the feasibility of the operation. Aspects such as the impact of the drone's characteristics on the operation, and the possibility of training deep learning algorithms in FOD detection have been studied. Simulations have also been carried out emulating the real environment in order to see how the created environment would behave. The results provided by the different stages of the study confirm that the operation could be carried out for the majority of drones on the market, thus demonstrating the potential of performing this operation.

Full text

TRABAJO FINAL DE GRADO TÍTULO DEL TFG: Detección de objetos extraños (FODs) en pistas de aeropuertos utilizando drones e inteligencia artificial TITULACIÓN: Grado en Ingeniería de Sistemas de Telecomunicaciones AUTOR: Christian González Hernández DIRECTOR: Esther Salamí San Juan FECHA: 20 de junio de 2023 Resumen TÍTULO: Detección de objetos extraños (FODs) en pistas de aeropuertos utilizando drones e inteligencia artificial AUTOR: Christian González Hernández DIRECTOR: Esther Salamí San Juan FECHA: 20 de junio de 2023 En este trabajo se realizará el estudio sobre realizar la tarea de inspeccionar pistas de aeropuertos mediante el uso de drones e inteligencia artificial. Se evalúan diferentes aspectos basados en verificar la viabilidad de la operación. Se han estudiado aspectos como el impacto de las características del dron en la operación, y la posibilidad de entrenar algoritmos de aprendizaje profundo en detección de FOD’s. También se han realizado simulaciones emulando el entorno real para de esta manera ver cómo se comportaba el entorno creado. Los resultados otorgados por las diferentes etapas del estudio confirman que la operación podría ser llevada a cabo para la mayoría de drones en el merco, por lo que se demuestra el potencial de realizar esta operación. Organización del trabajo 4 Overview TITLE: Foreign Object Detection (FODs) on airport runways using drones and artificial intelligence AUTHOR: Christian González Hernández DIRECTOR: Esther Salamí San Juan DATE: 20th June 2023 In this work, a study will be carried out on the task of inspecting airport runways using drones and artificial intelligence. Different aspects are evaluated based on verifying the feasibility of the operation. Aspects such as the impact of the drone's characteristics on the operation, and the possibility of training deep learning algorithms in FOD detection have been studied. Simulations have also been carried out emulating the real environment in order to see how the created environment would behave. The results provided by the different stages of the study confirm that the operation could be carried out for the majority of drones on the market, thus demonstrating the potential of performing this operation. DICCIONARIO DE ACRÓNIMOS FOD Foreign Object Damage IA Inteligencia Artificial RTMP Real Time Messaging Protocol PCA Principal Component Analisys GAN Generative Adversarial Networks DNN Deep Neuronal Networks SSD Single Shot Multibox GSD Ground Sampling Distance OBS Open Broadcaster Software Organización del trabajo 6 ÍNDICE CAPÍTULO 1. INTRODUCCIÓN ........................................................................ 8 1.1 Motivación .......................................................................................................................... 8 1.2 Objetivos ............................................................................................................................ 8 1.3 Estructura del documento ................................................................................................ 9 CAPÍTULO 2. MARCO TEÓRICO ................................................................... 11 2.1 Diferencia entre Inteligencia Artificial, Machine Learning y Deep learning .............. 11 2.1.1 Inteligencia artificial .............................................................................................. 11 2.1.2 Machine Learning ................................................................................................. 11 2.1.3 Categorías de algoritmos ...................................................................................... 12 2.1.4 Deep Learning ....................................................................................................... 12 2.2 Redes neuronales y aplicaciones .................................................................................. 13 2.2.1 Cómo entrenar una red neuronal ........................................................................... 13 2.2.2 Proceso de aprendizaje de una red neuronal ........................................................ 14 2.2.3 Parámetros y optimizadores importantes en el entrenamiento .............................. 16 2.3 Redes neuronales convolucionales .............................................................................. 16 2.3.1 Definición y conceptos ............................................................................................ 16 2.3.2 Operación de convolución ..................................................................................... 17 2.3.3 Operación de pooling ............................................................................................. 18 2.4 Data augmentation .......................................................................................................... 19 2.4.1 Definición y conceptos ............................................................................................ 19 2.4.2 Diferentes técnicas y uso ....................................................................................... 20 2.5 Transfer Learning ............................................................................................................ 21 2.5.1 Definición y conceptos ........................................................................................... 21 2.5.2 Feature extraction .................................................................................................. 22 2.5.3 Fine tuning ............................................................................................................. 22 2.6 Detección de objetos ....................................................................................................... 23 2.6.1 Definición y conceptos ........................................................................................... 23 2.6.2 Funcionamiento y modo de entrenamiento ........................................................... 23 2.6.3 Métricas importantes ............................................................................................. 23 2.6.4 Modelos de detección de objetos existentes ........................................................ 24 2.6.4.1 R-CNN ................................................................................................................ 24 2.6.4.2 YOLO .................................................................................................................. 25 2.6.4.3 SSD .................................................................................................................... 26 2.6.4.4 Mask R-CNN ...................................................................................................... 26 2.7 Protocolo RTMP ............................................................................................................... 27 2.7.1 Definición y conceptos .............................................................................................. 27 CAPÍTULO 3. DESARROLLO DEL TRABAJO ............................................... 28 3.1 Viabilidad de la utilización de drones para detección de FOD’s .................................... 28 3.1.1 Plataforma ............................................................................................................ 28 3.1.2 Cálculos de la altura de vuelo .............................................................................. 29 3.1.3 Cálculos de la velocidad de vuelo ........................................................................ 33 3.1.4 Plan de vuelo ......................................................................................................... 34 3.2 Preparación de los datos .................................................................................................. 35 3.2.1 FOD-A Dataset ...................................................................................................... 35 3.2.2 Análisis y preprocesado ......................................................................................... 37 3.2.3 Dataset procesado ............................................................................................... 38 3.2.4 Dataset aumentado .............................................................................................. 38 3.3 Selección del modelo de detección ............................................................................... 40 3.3.1 YOLOv5 ................................................................................................................ 40 3.3.1.1 Entorno y parámetros ........................................................................................... 40 3.3.1.2 Entrenamiento y resultados YOLOv5n ................................................................. 42 3.3.1.3 Entrenamiento y resultados YOLOv5x ................................................................. 43 3.3.2 Simulación con los modelos de la red YOLOv8 ................................................... 44 3.3.2.1 Entorno y parámetros .......................................................................................... 44 3.3.2.2 Entrenamiento y resultados YOLOv8n ................................................................ 44 3.3.2.3 Entrenamiento y resultados YOLOv8x ................................................................ 45 3.3.3 Análisis y comparación de las redes entrenadas ................................................... 46 3.3.3.1 Valoración de los resultados ............................................................................. 46 3.3.3.2 Comparación de resultados .............................................................................. 46 3.4 Desarrollo de la aplicación ............................................................................................. 50 3.4.1 Prueba del detector de objetos en local .................................................................. 50 3.4.2 Conexión con servidor RTMP.................................................................................. 51 3.4.2.1 Enlace y método de conexión .............................................................................. 51 3.4.2.2 Procedimiento y herramientas usadas ................................................................. 53 3.4.3 Resultados y conclusiones extraídas ...................................................................... 54 3.5 Vuelos de test ...................................................................................................................... 56 CAPÍTULO 4. CONCLUSIONES Y MEJORAS FUTURAS ............................. 62 4.1 Conclusiones del trabajo desarrollado ............................................................................. 62 4.2 Mejoras futuras .................................................................................................................... 64 5. BIBLIOGRAFÍA Y WEBGRAFÍA ................................................................. 66 6. ANEXO......................................................................................................... 68 6.1 Resultados YOLOv5n ................................................................................................. 68 6.2 Resultados YOLOv5x ................................................................................................. 70 6.3 Resultados YOLOv8n ................................................................................................. 72 6.4 Resultados YOLOv8x ................................................................................................. 74 6.5 Código para realizar el entrenamiento de YOLOv5 .................................................... 76 6.6 Código para realizar el entrenamiento de YOLOv8 .................................................... 77 Organización del trabajo 8 CAPÍTULO 1. INTRODUCCIÓN 1.1 Motivación La motivación de este trabajo viene dada por el gran problema que suponen los FODs hoy en día [7]. Estos objetos extraños en pistas de aeropuertos provocan contables accidentes y, actualmente, es necesario que un trabajador haga una revisión del estado de las pistas para comprobar que están libres de estos objetos. Estos FOD’s pueden causar severos daños en los motores de un avión si, por ejemplo, entrasen en las turbinas en el momento de despegue. También pueden ocasionar un daño estructural, ocasionando una ruptura de algún neumático o la rotura de un ala. Un ejemplo de esto se pudo ver en el accidente del Concorde en el año 2000 [27], el cual sufrió un desprendimiento de un pedazo de neumático al pisar una tira metálica dejada por otro avión. En la figura 1 puede verse el momento del accidente. Fig.1 Imágenes del momento del accidente del Concorde F-BTSC Hoy en día siguen ocurriendo muchos de estos accidentes, y la única manera de revisar las pistas es haciéndolo manualmente. Por lo tanto, la idea del proyecto es hacer uso del reciente auge en tecnologías de aprendizaje profundo para crear una IA que permita realizar esta tarea, sin la necesidad de que una persona verifique estas imágenes. Si no que sea la propia IA la que, gracias a un entrenamiento anterior, pueda clasificar estas imágenes automáticamente a partir de un vídeo captado por un dron. Gracias a esto se podrá agilizar mucho la tarea de revisar las pistas, y se ahorrarán costes en personal dedicado a esta misma. 1.2 Objetivos El objetivo de este proyecto, es la verificación de que sería posible realizar la tarea de detectar FOD’s en un aeropuerto utilizando drones y algoritmos de aprendizaje profundo. Para ello, se deberán cumplir varios objetivos, que son necesarios para el desarrollo de esta actividad en un entorno real y que se explicarán a continuación. Organización del trabajo 9 El primer objetivo, es el de comprobar que físicamente es posible realizar esta operación. En términos de demostrar esto, se realizarán una serie de cálculos simples para evaluar que el dron tiene la capacidad, tanto a nivel de cámara como de movilidad, de efectuar la tarea de manera óptima. Se estudiarán aspectos como la velocidad de vuelo y su altura, de esta manera, se comprobará si con el modelo de dron que tenemos a nuestra disposición (DJI Mini 2 [8]) podemos realizar una detección de objetos de manera eficiente. El siguiente objetivo es el de crear un algoritmo capaz de detectar objetos extraños (FODs) en pistas de aeropuertos. Para cumplir este objetivo se usará un tipo especial de red neuronal llamada red neuronal convolucional, la cual está diseñada concretamente para el tratamiento, análisis, clasificación y segmentación de imágenes. Partiendo de que ya se tiene un dataset con más de 30 objetos catalogados que se suelen encontrar en pistas, se procederá a entrenar un modelo de redes neuronales convolucionales, para que sea capaz de identificar estos objetos en una imagen. Partiendo de esta problemática, una de las metas importantes del trabajo es realizar una investigación de los modelos de detección de objetos actuales, y comprobar en qué medida de lo posible sería viable llegar a implementar esta idea. Para ello se estudiarán varios modelos distintos para evaluar su rendimiento y se escogerá un candidato. Esta evaluación se realizará con el dataset mencionado anteriormente, para el cual se realizará un preprocesado y se decidirán unas condiciones específicas para el correcto entrenamiento de todos los modelos. Finalmente, como objetivo último, se realizarán simulaciones tanto en local como en tiempo real, dónde se estudiará si es viable realizar un procesado a tiempo real de las imágenes captadas por el dron. De esta manera, se podrá tener una idea clara y precisa de la viabilidad del proyecto. El cual, será de gran ayuda para realizar las inspecciones rutinarias en las pistas de aeropuertos, haciendo de esta manera mucho más rápida y segura la inspección de estas mismas. 1.3 Estructura del documento La estructura de este documento se divide en tres partes. La primera parte, el marco teórico, es una introducción teórica sobre todos los temas tratados durante el desarrollo del proyecto. Se explicará la teoría básica sobre qué es y cómo se entrena una red neuronal convolucional. También se centrará en discernir qué métricas de estos entrenamientos son importantes en la detección de objetos. Por último, en este capítulo se hablará sobre cuáles son los detectores de objetos más usados en la actualidad, y de algunos métodos para realizar el envío de la información procesada por el detector, que se necesitará para la realización de simulaciones a lo largo del proyecto. Si se tiene conocimiento previo sobre herramientas de detección de objetos, y sobre el funcionamiento y entrenamiento Organización del trabajo 16 2.2.3 Parámetros y optimizadores importantes en el entrenamiento En este apartado se verán algunos parámetros y optimizadores que se deben tener en cuenta a la hora de crear un modelo basado en redes neuronales y entrenarlo. • Número de épocas: Este parámetro presenta cuantas veces se va a realizar el entrenamiento para un mismo conjunto de datos de entrada. Cuanto más alto sea el número de épocas, más veces se realizará el recorrido de entrenamiento completo, por lo que la función de loss será cada vez más cercana a cero. Hay que tener en cuenta que poner un número muy elevado de épocas hará que el modelo se sobre ajuste a un mismo input, por lo que esto será contraproducente. • Momentum: Este hiperparámetro es muy útil, ya que cuando se realiza la técnica del gradient descent no se tiene siempre solamente un único punto mínimo, por lo que es fácil que se quede en un mínimo local y no global como se desea. Debido a ello, momentum permite saltarse en gran medida este error y poder conseguir efectuar el gradient descent con mayor eficacia. 2.3 Redes neuronales convolucionales 2.3.1 Definición y conceptos Para el desarrollo de este trabajo se utilizará la técnica de Deep learning, que utiliza modelos de aprendizaje basados en redes neuronales convolucionales. Una red neuronal convolucional es un modelo de red neuronal que presenta una estructura no muy diferente de una red neuronal tradicional. Contiene una primera capa de entrada o input que es donde se introducen los datos, después viene seguida de una o varias (normalmente varias) capas en donde se realizan todas las operaciones necesarias que serían operaciones de convolución y pooling. Estas capas se denominan capas ocultas y para finalizar, hay una última capa llamada capa de salida, que es donde se obtiene la predicción final de la red neuronal. Las redes neuronales convolucionales están diseñadas explícitamente para tener como entrada de datos una imagen. Gracias a esto, estas redes pueden dar por hecho que entrada reciben y, por lo tanto, ajustar sus operaciones, teniendo en cuenta esto para poder utilizar características y transformaciones efectivas en una imagen. Debido a esta característica, estas redes neuronales presentan resultados muy satisfactorios a la hora de clasificar y segmentar imágenes, y hasta incluso de detectar objetos dentro de estas mismas. La transformación de los datos de estas redes neuronales viene dada por el uso de matrices bidimensionales en las operaciones, como si de un filtro de una Organización del trabajo 17 imagen normal se tratara. Dentro de estas operaciones se usa la convolución y el pooling, la cual, es una técnica que reduce la información que se tiene en una pequeña área en un solo punto. En la figura 4 se puede ver un esquema de cómo está formada una red neuronal convolucional: Fig. 4 Esquema de una red neuronal convolucional [17] 2.3.2 Operación de convolución En las capas destinadas a realizar la operación de convolución se reservan todas las neuronas de la capa para realizarla, por lo que todas las neuronas serán convolucionales. Esta transformación de datos trata de aprender las características de la entrada no de una manera global, sino de una manera local. Esto quiere decir que, en esta operación, se fija el tamaño de una ventana bidimensional (una matriz más pequeña que la entrada), y se va pasando por toda la matriz de input convolucionándola. De esta manera se obtiene toda la información del área que abarca la ventana en un punto. Las capas de convolución se suelen ordenar de forma jerárquica, es decir, en las primeras capas de convolución que se usan en el modelo se deberán aprender características simples de la imagen como sus aristas y sus bordes. Mientras que en las capas más avanzadas se aprenderá (usando la información adquirida en las capas precedentes), características más complejas como la forma completa o el tamaño de lo que se quiera aprender. Si se usa esto de una manera eficiente y con sentido, la red será capaz de lograr detectar y aprender patrones complejos en las imágenes. En la figura 5 puede verse un ejemplo de la operación de convolución. Organización del trabajo 18 Fig. 5 Representación sencilla del funcionamiento de la capa convolucional [17] 2.3.3 Operación de pooling En esta operación ocurre lo mismo que en la etapa de convolución, se reserva una capa entera, es decir, todas sus neuronas están destinadas a realizar la operación de pooling. La operación de pooling se realiza justo después de cada etapa de convolución, por lo que habrá tantas etapas de pooling como de convolución. Esta capa sirve para poder condensar toda la información obtenida de la capa de convolución en un punto, y permite reducir el espacio que ocupa esta misma. Poniendo un ejemplo para que se entienda mejor, si se tiene una matriz 24x24 resultado de una capa de convolución y se pasa por una pequeña ventana de 2x2 de pooling, se obtendrá como resultado una matriz 12x12 con toda la información de la matriz de entrada, pero concentrada y manteniendo la relación espacial de esta. Hay varias maneras de aplicar la operación de pooling, pero se ha visto que la que mejores resultados ofrece es el max-pooling, que trata de quedarse con el valor más grande obtenido de la pequeña ventana de pooling. En la figura 6 se puede ver un ejemplo de una operación de pooling. Organización del trabajo 19 Fig. 6 Representación sencilla del funcionamiento de la capa de pooling [17] 2.4 Data augmentation 2.4.1 Definición y conceptos Para explicar el uso de la técnica de Data augmentation primero se debe ver qué significa tener un sobreajuste (overfitting) en el modelo. El sobreajuste en el entrenamiento de un modelo, se produce cuando se entrena al mismo modelo muchas veces con el mismo conjunto de datos de entrada. Esto hará que el modelo sea muy bueno prediciendo los casos que tengan que ver con el dataset. Sin embargo, a la hora de usarlo con otro dataset que presente algunos pequeños cambios, se verá como el modelo pasa a ser casi totalmente ineficiente. Debido a este sobre entrenamiento se han ideado técnicas como el data augmentation. Esta técnica trata sobre que, a partir del propio dataset de entrada que se tenga, crear nuevas imágenes con pequeños retoques, para que de esta manera el modelo esté más preparado y reciba un entrenamiento más diverso. Los pequeños retoques que se suelen hacer son transformaciones aleatorias que, gracias a keras (una biblioteca de Python) existe la posibilidad de realizarlo en cada época de manera online. De esta forma, no tendremos que almacenar nuevos datos en nuestro sistema de almacenamiento. Otra opción sería realizar un preprocesado de un dataset y obtener a partir de ahí las imágenes del data augmentation. Se puede aplicar la técnica del data augmentation para entradas de texto, audio e imágenes. En este proyecto se tendrán en cuenta las diferentes transformaciones que se realizan en imágenes. Organización del trabajo 20 2.4.2 Diferentes técnicas y uso A la hora de definir qué transformaciones hará la técnica de data augmentation sobre el dataset que se tenga, hay diferentes opciones. Primero de todo se puede diferir entre datos aumentados y datos sintéticos, los primeros son los que se originan a partir del propio dataset original, mientras que los segundos se generan sin usar el dataset original haciendo uso de DNNs (Deep Neuronal Networks) y GANs (Generative Adversarial Networks). En el caso de este proyecto, se utilizarán los tipos de datos aumentados. E stos tipos de datos se consiguen aplicando simples transformaciones geométricas de la imagen, como reajustar el tamaño o invertirla, o por otras transformaciones en el color de la imagen, como cambiar los componentes RGB de la misma o ir variando los niveles de brillo y contraste. Aparte de estas simples transformaciones, también se puede optar por cambios un poco más distintos como mezclar imágenes, pasarlas por filtros o borrar alguna parte de esta misma. Hay que tener en cuenta que, si se usa el data augmentation cómo una extensión de datos para solventar la problemática de tener pocos datos iniciales o muy similares, también arrastrará la inclinación que presente el dataset original, con lo que habrá que ver bien cómo usar esta técnica. En la figura 7 puede verse un ejemplo de esta técnica. Fig. 7 Ejemplo de uso de data augmentation sobre una imagen [11] Organización del trabajo 21 2.5 Transfer Learning 2.5.1 Definición y conceptos El transfer learning es una de las técnicas más populares y eficaces dentro del mundo del Deep learning. Este método es una técnica derivada del data augmentation que, como se ha visto antes, se suele usar cuando se tenga un conjunto de datos de entrada pequeño, y se necesita, por lo tanto, generar algunos datos adicionales que difieran un poco del conjunto de datos original para evitar el sobreajuste en el modelo. El transfer learning nace de la premisa de que, para desarrollar y entrenar un modelo lo suficientemente complejo desde cero, se necesita un gran conjunto de datos. Además de estos datos, el tiempo que se tardaría en entrenar una red grande sería demasiado largo, sin mencionar que computacionalmente hablando esto conllevaría un gran coste a al ordenador o máquina que se use. Debido a estos inconvenientes nació el transfer learning, el cual permite poder utilizar un modelo de red neuronal ya entrenado previamente con un conjunto de datos muy grande y con unos pesos y parámetros ya establecidos, de esta manera se puede ahorrar mucho tiempo y coste en entrenar un modelo de cero. Todo este traspaso de conocimiento e información es posible gracias a que (como se ha visto en puntos anteriores), las capas de aprendizaje de una red neuronal se organizan jerárquicamente. Las primeras capas detectan aspectos sencillos y simples de una imagen, como sus bordes aristas o formas, por lo que se pueden usar estas capas como punto de partida, y usar las capas posteriores, que son las que se encargan de definir aspectos más complejos, para reentrenarlas con el conjunto específico de datos. De esta manera, usando modelos preentrenados, la técnica del transfer learning permite desarrollar rápidamente nuevos modelos adaptados a un conjunto específico de datos que se le presente. En la figura 8 se puede ver un esquema simplificado del funcionamiento del transfer learning. Organización del trabajo 22 Fig. 8 Comparativa entre Machine learning y Transfer learning [12] 2.5.2 Feature extraction Dentro del transfer learning hay varias maneras de poder usar esta técnica, una de ellas es la extracción de características (feature extraction). Esta modalidad del transfer learning consiste en cambiar la última capa del modelo preentrenado, es decir, la capa que actúa como clasificador, por una nueva basada en los nuevos datos que se usen para entrenar la red. Dicho de otro modo, en el feature extraction se deja al modelo tal cual está, usando todos sus parámetros y toda su estructura de capas, es un método útil si se quiere un clasificador puro sin tener en cuenta parámetros importantes. 2.5.3 Fine tuning Otra modalidad importante del transfer learning es el ajuste fino (fine tuning), si en la modalidad anterior lo único que se cambia es el clasificador final, en esta variante se va un poco más allá y, aparte de cambiar también el clasificador, también se cambian algunas de las últimas capas convolucionales del modelo preentrenado. De esta manera, permite tener una red más compleja y más adaptada al dataset, lo que otorgará cotas de precisión mayores. Esta técnica es muy útil si no se espera que los datos de entrada que vaya a recibir el modelo no se asemejen mucho a los datos de entrenamiento, ya que el modelo tendrá un ajuste mayor a las imágenes que se han usado para entrenarlo. Organización del trabajo 23 2.6 Detección de objetos 2.6.1 Definición y conceptos La detección de objetos usando redes neuronales es una tarea de visión por ordenador, que trata sobre localizar y clasificar objetos específicos en una imagen o vídeo. Para entrenar estos sistemas, se usan redes neuronales capaces de reconocer patrones y características específicas de los objetos que se deseen identificar en una imagen, lo que permite detectarlo y ubicarlo en esta misma. Esta localización en la imagen se usa “dibujando” un rectángulo (Bounding Box), y asignándole una clase al objeto, lo que permite saber en qué lugar de la imagen se ubica ese objeto y de qué objeto se trata. La detección de objetos usando redes neuronales se utiliza en una variedad de aplicaciones, como la conducción autónoma, la vigilancia y la seguridad, la robótica, el análisis de imágenes médicas y la industria del entretenimiento. Por ejemplo, en la conducción autónoma, los sistemas de detección de objetos pueden detectar y reconocer objetos en las imágenes como vehículos, peatones y señales de tráfico, para ayudar al sistema de conducción a conducir de una manera segura. 2.6.2 Funcionamiento y modo de entrenamiento Para lograr entrenar una red neuronal que permita detectar objetos de manera correcta se debe pasar por varias etapas. En primer lugar, se necesita un conjunto de datos de entrada que tenga un formato adecuado para usarlo en detección de objetos. Existen varios formatos como el Pascal [19] el COCO [18] o el TXT, pero todos tienen en común que se necesitan imágenes etiquetadas. Estas imágenes etiquetadas son imágenes que tienen un archivo referenciado en el que se indican varios parámetros acerca del objeto que se desea detectar, como por ejemplo la clase a la que pertenece el objeto o las coordenadas del bounding box dónde se encuentra este mismo. Durante el entrenamiento, la red neuronal analiza cada imagen con su correspondiente etiqueta, lo que le permite aprender como se ve un objeto de una determinada clase y posteriormente saber identificarlo. En general, la detección de objetos con redes neuronales usa técnicas como la detección de características, la segmentación de objetos y la clasificación de objetos. 2.6.3 Métricas importantes A la hora de entrenar tanto un clasificador como un detector de objetos, existe la posibilidad de poder evaluar la predicción del modelo a través de unas métricas específicas. Hay muchas métricas, pero para este proyecto se tendrán en cuenta las más importantes para, de esta manera, poder comparar diferentes modelos y tener una idea de cuál podría funcionar mejor. Organización del trabajo 24 • Precisión: La precisión es una métrica muy útil, ya que se refiere a la proporción de detecciones verdaderamente positivas (True positives) en relación con todas las detecciones (True positives + False positives). Es una medida de cuantas detecciones son correctas entre todas las detecciones realizadas por el modelo. Una alta precisión indica que el modelo realiza pocas detecciones incorrectas. • Recall: El recall se refiere a la proporción de detecciones verdaderamente positivas (True positives) en relación con todas las instancias de objetos presentes en las imágenes (True positives + False negatives en una misma imagen). Es una medida que mide cuán bueno es un modelo para detectar todos los objetos presentes en una imagen. Un alto recall significa que el modelo detecta la mayoría de los objetos presentes. • F1-Score: El F1-Score es una medida que combina la precisión y el Recall. Se calcula como la media armónica de la precisión y el Recall, y es útil para comparar modelos en función de su equlibrio entre precisión y recall. Cuanto más alto sea la puntuación de F1-Score frente a la de otro modelo significará que es un modelo mejor en cuanto a detectar objetos. • IoU (Intersección sobre unión): IoU se refiere a la proporción de área entre la predicción y la anotación verdadera. Se utiliza para medir la superposición entre la predicción del modelo y la verdadera ubicación del objeto. Un alto IoU indica que la predicción del modelo se superpone en gran medida con la verdadera ubicación del objeto. • AP (Promedio de precisión): El AP es una medida que se utiliza para evaluar el rendimiento del modelo en una variedad de umbrales de confianza. Es una medida de la precisión del modelo en la detección de objetos en todas las imágenes de prueba. Comúnmente se divide en dos submedidas, AP-50 y AP-50:95. o AP-50: significa que la precisión promedio se calcula solo para los objetos que presenten una confianza (o probabilidad) mayor o igual al 50%. o AP-50:95: indica la precisión promedio en la detección de objetos para umbrales de confianza que varían del 50% al 95% en incrementos del 5%. Es útil para evaluar el rendimiento y la robustez del modelo frente a diferentes umbrales de confianza. 2.6.4 Modelos de detección de objetos existentes 2.6.4.1 R-CNN R-CNN [20] o Region-Based Convolutional Nueral Network es un modelo de detección de objetos basado en regiones que fue presentado en 2014. R-CNN Organización del trabajo 25 primero propone una gran cantidad de regiones candidatas a ser procesada mediante la técnica de selective search. Luego, cada región candidata se redimensiona a un tamaño fijo y se procesa a través de una red neuronal convolucional (CNN) preentrenada para extraer características visuales. Finalmente, las características de cada región candidata se sirven como entrada a un clasificador SVM para predecir la presencia o ausencia de un objeto en la región y su posición. R-CNN logró un alto rendimiento en conjuntos de datos desafiantes, pero es relativamente lento en la fase de prueba debido al proceso de extracción de características por región. 2.6.4.2 YOLO YOLO [21] (You Only Look Once) es un modelo de detección de objetos en tiempo real que fue presentado en 2016. YOLO divide la imagen en una cuadrícula y asigna a cada celda un conjunto de cuadros delimitadores (bounding boxes) y una puntuación de confianza para cada clase de objeto. Luego, YOLO utiliza una única red neuronal convolucional para predecir la posición y la clase del objeto en cada celda de la cuadrícula. Debido a su enfoque de cuadrícula, YOLO es capaz de detectar objetos de diferentes tamaños y escalas. YOLO también es muy rápido y puede ejecutarse en tiempo real en dispositivos con recursos limitados. Gracias a esta característica se decidió usar YOLO en este proyecto, ya que uno de los principales problemas que se encontró fue la limitación de recursos disponibles. Bajo esta premisa, se descartaron modelos como R-CNN al considerarse unos modelos con un proceso de entrenamiento muy exhaustivo. Des de que fue presentado en 2016, YOLO ha lanzado varias versiones diferentes, cada una con mejoras y diferencias respecto a la anterior. La última versión disponible, a fecha de realización de este proyecto, es la versión 8, siendo la versión 5 la más famosa de YOLO. En la figura 9 podemos ver la línea de tiempo de las versiones de YOLO. Organización del trabajo 32 𝐺𝑆𝐷= 𝑑𝑥·ℎ 𝑓 Debido a realizar la grabación con un aspect ratio de 16:9, el FOV del dron se verá un poco reducido a unos 76º. El valor de distancia focal para el dron es de 4.45 mm, por lo tanto, se obtenía el siguiente valor de anchura del sensor: 𝑎𝐻𝐹𝑂𝑉=2 𝑡𝑎𝑛−1(𝑊 2𝑓) 𝑊=6.95 𝑚𝑚 Con la altura del sensor y la anchura de la imagen en píxeles (3840 píxeles), se calculó el tamaño de un píxel en el sensor: 𝑑𝑥=𝑊𝑠𝑒𝑛𝑠𝑜𝑟 𝑊𝑖𝑚𝑎𝑔𝑒𝑛=0.0018 𝑚𝑚 Una vez calculado el valor del tamaño de un píxel en el sensor, se procedió a realizar el cálculo del GSD para las distintas alturas de vuelo: Altura de vuelo (m) GSD (m) 10 0,0040 15 0,0061 20 0,0081 25 0,0101 30 0,0121 Tabla 2. Comparación de GSD por altura de vuelo En la tabla 2 se pueden ver los valores obtenidos de GSD en función de la altura. Como es de esperar, cuanto más alto vuele el dron, menos resolución se logrará tener, ya que un píxel ocupará más espacio en el suelo, por lo que se captarán menos detalles. Para poder escoger la altura de vuelo idónea, se observó cúal era el objeto más pequeño que contenía el dataset. Este objeto era la tuerca, y se tomó aproximadamente una media de tamaño de esta misma de unos 1,25 cm. Teniendo en cuenta esto, y que para la correcta visualización de un objeto en la imagen tuviera que ser como mínimo representado por un cuadrado de 2x2 píxeles, se decidió que el dron volaría a una altura máxima de unos 15 metros con relación a los cálculos obtenidos. Organización del trabajo 33 3.1.3 Cálculos de la velocidad de vuelo Para calcular la velocidad a la que puede volar el dron en línea recta, se necesita saber cuántos metros recorre en cada frame de video, siendo un frame de video uno de los 30 frames que capta el dron por segundo. Para ello, podemos calcular el desplazamiento en cada frame y luego multiplicarlo por la frecuencia de frames por segundo que en el caso del dron que se usará es 30. Dado que se quiere un solapamiento mínimo del 60% entre frames, se puede asumir que en cada frame el dron se desplaza un 40% de la distancia total recorrida entre dos frames consecutivos. Por lo tanto, se puede calcular el desplazamiento en cada frame como: 𝐷𝑒𝑠𝑝𝑙𝑎𝑧𝑎𝑚𝑖𝑒𝑛𝑡𝑜 𝑒𝑛 𝑐𝑎𝑑𝑎 𝑓𝑟𝑎𝑚𝑒=0.4 · 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑖𝑎 𝑒𝑛𝑡𝑟𝑒 𝑓𝑟𝑎𝑚𝑒𝑠 Ahora, para calcular la distancia de desplazamiento entre dos frames consecutivos, se puede utilizar la frecuencia de frames por segundo y la velocidad a la que se mueve el dron. Si se llama V a la velocidad del dron y f a la frecuencia de frames por segundo, entonces la distancia recorrida en un segundo es: 𝐷𝑒𝑠𝑝𝑙𝑎𝑧𝑎𝑚𝑖𝑒𝑛𝑡𝑜 𝑒𝑛 𝑐𝑎𝑑𝑎 𝑓𝑟𝑎𝑚𝑒=𝑣𝑓 Utilizando la ecuación anterior y despejando, queda la siguiente expresión para calcular la velocidad a la que se debería mover el dron: 𝑣=𝑓· 0.4 · 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑖𝑎 𝑒𝑛𝑡𝑟𝑒 𝑓𝑟𝑎𝑚𝑒𝑠 La distancia entre frames es aquella distancia que tiene el frame medido en la realidad. Este valor se puede deducir con el GSD (en este caso 0.0061 m) y con el número de píxeles de altura que cuenta el sensor de la cámara, en este caso tenemos una resolución de 3840x2160, por lo que la distancia entre frames será: 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑖𝑎 𝑒𝑛𝑡𝑟𝑒 𝑓𝑟𝑎𝑚𝑒𝑠=0.0061 𝑚 𝑝í𝑥𝑒𝑙·2160 𝑝í𝑥𝑒𝑙 𝑓𝑟𝑎𝑚𝑒 = 13.17 m/frame Con esto, ya se puede calcular la velocidad máxima a la que debería sobrevolar el dron la pista: 𝑣=30 𝑓𝑟𝑎𝑚𝑒𝑠 𝑠·0.4·13.17 𝑚 𝑓𝑟𝑎𝑚𝑒𝑠=158.04 𝑚 𝑠 Teniendo en cuenta el resultado, y que la velocidad de vuelo máxima del dron DJI Mini 2 es de 16 m/s [8] se puede asegurar que se cumplen los requisitos de solapamiento entre frames, por lo que esta operación sería viable. Cómo ya se vio que no había restricción por velocidad, se decidió que el dron volaría a una velocidad típica de unos 10 m/s. Organización del trabajo 34 3.1.4 Plan de vuelo Una vez calculadas la velocidad aproximada a la que debería volar el dron, y la altura que sería más conveniente para realizar la detección de objetos, se creará un plan de vuelo para determinar el tiempo total de la operación. Para ello, se tratará la pista de aeropuerto como un rectángulo perfecto de 3.352 x 60 metros. Lo primero que se tuvo en cuenta fue cuanto espacio se captaría al grabar con el dron, este aspecto se puede deducir fácilmente gracias al GSD que se obtuvo en cálculos de puntos anteriores. Si se tiene un GSD = 0.0061 y se tiene en cuenta que tenemos una resolución de 3840x2160: 𝐷ℎ𝑜𝑟𝑖𝑧𝑜𝑛𝑡𝑎𝑙=𝐺𝑆𝐷𝑚𝑒𝑡𝑟𝑜𝑠 𝑝í𝑥𝑒𝑙 · 3840 𝑝í𝑥𝑒𝑙𝑒𝑠= 23.42 𝑚𝑒𝑡𝑟𝑜𝑠 Con la distancia horizontal total de una imagen, se puede concluir en que se necesitaría dividir la pista en aproximadamente 4 secciones. Cada sección tendría alrededor de 15 metros de ancho, de esta manera el dron debería sobrevolar la pista 4 veces, una vez por cada sección. De esta manera, el dron sería capaz de captar en vídeo toda la pista, sin temor a dejarse un trozo de la misma y acabaría en el punto de partida. En cuanto al tiempo que se tardaría en realizar toda la inspección, se compararán el tiempo que tardaría el dron, con el tiempo que tardaría una persona normal. Se supondrá que el operario al cargo de realizar la inspección va a pie. Esto se debe a que, después de la revisión de varios documentos oficiales [16], se detalla como la revisión debe ser exhaustiva, por lo que realizarla en un vehículo no sería posible. También se asumirá que el operario debe realizar, de igual manera que el dron, una división de la pista en 4 secciones para poder revisarla completamente. Por último, en cuanto a la velocidad de desplazamiento del operario, se tomará la velocidad media al caminar de una persona, la cual es 4 km/h o 1.11 m/s Con todos estos datos se procedió a realizar el cálculo: 𝑇𝑜𝑝𝑒𝑟𝑎𝑟𝑖𝑜=4·(3.352 𝑚𝑒𝑡𝑟𝑜𝑠 1.11𝑚𝑒𝑡𝑟𝑜𝑠 𝑠𝑒𝑔𝑢𝑛𝑑𝑜)=12.079,28 𝑠𝑒𝑔𝑢𝑛𝑑𝑜𝑠=201 𝑚𝑖𝑛𝑢𝑡𝑜𝑠 𝑇𝑑𝑟𝑜𝑛=4·(3.352 𝑚𝑒𝑡𝑟𝑜𝑠 10𝑚𝑒𝑡𝑟𝑜𝑠 𝑠𝑒𝑔𝑢𝑛𝑑𝑜)=1.340,8 𝑠𝑒𝑔𝑢𝑛𝑑𝑜𝑠 ≅22 𝑚𝑖𝑛𝑢𝑡𝑜𝑠 Debido a los resultados de tiempo de inspección obtenidos, se puede afirmar que usar un dron, sería una solución mucho más eficiente y rápida que realizar la revisión de pistas de manera tradicional. También se puede ver que se podría usar el modelo DJI Mini 2 ya que presenta una autonomía de 30 minutos. Por lo que sería viable usarlo en la operación. Organización del trabajo 35 3.2 Preparación de los datos 3.2.1 FOD-A Dataset Para poder desarrollar un entrenamiento adecuado para entrenar la red neuronal se necesita un dataset adecuado. El objetivo del detector es identificar y localizar objetos extraños en una pista de aeropuerto, para conseguir este propósito se necesitará un dataset que englobe varios objetos que se suelen encontrar en pistas, y que tengan una cierta relevancia al provocar accidentes en estas mismas. Para este proyecto, se encontró un dataset [7] apropiado que englobaba los objetos extraños o FOD’s más recurrentes. Por lo que una parte complicada de todo el trabajo que era encontrar una buena fuente de datos ya estaba cubierta. En la figura 3 se pueden ver algunas imágenes originales del dataset. Fig. 3 Algunas imágenes del dataset [7] Este dataset originalmente cuenta con un total de 33.793 fotografías, que se distribuyen de forma no equitativa entre 31 tipo de clases diferentes, cada clase representa un FOD distinto, y para cada una de las imágenes se tiene su anotación en un archivo XML. Cada archivo XML da información acerca de su imagen correspondiente, de esta información, lo que más interesa es la clase a la que pertenece y las coordenadas del bounding box, que sería el recuadro donde se ubica el objeto a identificar que se quiere tener en cuenta. En la figura 4 se puede ver un ejemplo de la anotación en XML. Organización del trabajo 36 Fig. 4 Ejemplo de una anotación XML del dataset [7] En la figura 5 se puede ver la distribución original del dataset en cuanto a imágenes por clase: Organización del trabajo 37 Fig 5. Distribución original del dataset de FOD’s [7] 3.2.2 Análisis y preprocesado A la hora de usar este dataset se debe tener en cuenta varias cosas. Este dataset se encuentra en un formato Pascal VOC, el cual se caracteriza por tener para cada imagen una anotación XML. Hay que puntualizar que este formato de dataset no es aceptado por todos los modelos de redes de entrenamiento de detección de objetos existentes, por lo que habrá que modificar o cambiar su formato. Un ejemplo de esto es la red YOLO, que se usa como modelo de entrenamiento en este proyecto, la cual utiliza como entrada de datos un formato completamente diferente al del Pascal, caracterizándose por tener archivos TXT en lugar de XML para las anotaciones. También se debe tener en cuenta que, aunque la teoría se base en la idea de tener un dataset lo más grande posible, se ha tomado la decisión de disminuir este dataset, tanto en imágenes como en número de clases, existen dos principales motivos por los que se ha tomado esta decisión: • Coste computacional: más imágenes en un dataset se traducen en una mayor precisión, pero también en un mayor coste de recursos de hardware. Al no disponer de una potencia lo suficientemente grande, se ha visto que recortando las imágenes del dataset se agilizaría mucho el proceso de entrenamiento y comparación de los modelos (que es el verdadero objetivo del proyecto), por lo tanto, la idea de disminuir imágenes se volvió bastante atractiva. • Representación e importancia de cada clase: como se ha podido ver en la anterior figura, hay muchas clases donde hay una representación muy pobre en cuanto a cantidad de imágenes. También se puede ver que según el paper oficial del dataset [7], estas clases están representadas de izquierda a derecha según lo presentes que están en accidentes, o, dicho de otro modo, cuanto más a la izquierda esté ubicada una clase, más Organización del trabajo 38 relevancia tiene a la hora de causar accidentes. Siguiendo esta premisa, se decidió eliminar algunas clases completas que eran poco importantes en cuanto a accidentes y que tenían poca representación. 3.2.3 Dataset procesado Después de analizar y tomar decisiones sobre cómo se va a utilizar el dataset, se han realizado varias modificaciones sobre este, hay que tener en cuenta que para hacer este primer procesado del dataset no se realizará un cambio en su formato Pascal, ya que se dedicará un apartado en específico para constatar todos los cambios de formato que se deban realizar y que red se usará para cada formato. La primera modificación que se ha realizado ha sido la de eliminar clases que, como se ha explicado en el punto anterior, no tenían relevancia tanto en la causa de accidentes como en representación. En total se han eliminado 17 clases completas, en este apartado se deja en constancia el listado de las clases que se han eliminado: MetalSheet, Hose, AdjustableClamp, AdjustableWrench, BoltNutSet, Hammer, LuggagePart, MetalPart, PaintChip, Pen, Rock, Screw, Screwdriver, SodaCan, Wire, Wood, Tape. Al realizar este gran recorte en el dataset eliminando todas estas clases, se observó que aún se tenía un elevado número de imágenes, por lo tanto, se decidió que una buena idea sería limitar el número de imágenes por clase. De esta manera, se reduciría la presencia de clases que tenían muchas imágenes, y otras que tenían menos no se verían afectadas, por lo que quedaría un dataset bastante balanceado. El objetivo era tener un dataset en torno a unas 9000 imágenes que, después, se aumentarían usando técnicas de Data Augmentation, por lo que haciendo unos cálculos aproximados, se vio que si se limitaba el número de imágenes por clase a 650 se obtendría el resultado deseado. Después de realizar todas estas modificaciones en el dataset, quedó un conjunto de datos con un total de 8.998 imágenes (sin contar data augmentation), distribuidas en 14 clases muy equitativamente. 3.2.4 Dataset aumentado Al tener el dataset ya con el tamaño deseado se debe pasar por un proceso de Data Augmentation, esto permitirá que el modelo no esté tan sobre ajustado al dataset inicial. Para realizar este aumentado, se ha usado una aplicación web llamada RoboFlow [5]. RoboFlow es una aplicación web que permite crear e importar rápidamente conjuntos de datos para poder usarlos como input en un modelo de red neuronal. Aparte de poder crear o importar el dataset esta plataforma es capaz de realizar el pre-procesado y el procesado del mismo, permite añadir nuevas clases y labels en las imágenes, y además da la posibilidad de realizar un data augmentation. Gracias a la posibilidad que ofrece Organización del trabajo 39 de realizar el data augmentation, se pueden llegar a realizar transformaciones de todo tipo sobre las imágenes, desde transformaciones simples como aumentar el brillo o cambiar la tonalidad de los colores, hasta retoques más complejos como realizar un mosaico con distintas imágenes o recortar alguna de estas. Usando esta función se pudo llegar a crear un dataset bastante diverso en comparación al original, y con muchas más imágenes. En la figura 6 se pueden ver dos imágenes generadas por el data augmentation de tipo mosaico. Fig. 6 Imágenes generadas por el Data Augmentation Se eligió realizar los siguientes retoques (basándose en que retoques eran más efectivos a la hora de realizar un aumentado): • Rotación del bounding box: entre -15º y +15º • Brillo del bounding box: entre el -15% y +15% • Mosaico aplicado (juntar varias imágenes en una sola) • Generar 3 imágenes por cada imagen de entrenamiento Después de realizar todo el proceso de aumentado, quedó un dataset con la siguiente distribución en imágenes para TRAIN, VALIDATION y TEST (ver figura 7). Organización del trabajo 40 Fig. 7 Distribución del dataset aumentado 3.3 Selección del modelo de detección Para realizar el estudio sobre qué modelo de detección sería el más idóneo se han escogido las familias de YOLOv5 y YOLOv8. Se ha decidido esto ya que, YOLOv5 fue la versión que más impacto tuvo, y con esta versión saltó a la fama YOLO. Por ello, esta versión ha tenido mucho soporte y se han logrado obtener resultados muy efectivos usando esta versión. Por otro lado, la versión 8 es la última que se ha lanzado de YOLO, por lo que será interesante ver si ha habido alguna mejora respecto a su anterior versión. Se evaluarán un total de 4 modelos, ya que el objetivo del proyecto no es encontrar el mejor detector de objetos. Si no que es ver si alguno de estos modelos existentes encajaría con el propósito del proyecto. 3.3.1 YOLOv5 3.3.1.1 Entorno y parámetros En este apartado se ha realizado una simulación de 2 redes de diferente tamaño pertenecientes a los modelos de YOLOv5. En concreto, se comparó su red más pequeña, y más grande para ver cuál de las tres ofrecía un mejor rendimiento y cómo se comportaba en términos de tiempos de procesamiento y entrenamiento. Se utilizó el entorno de Google Colab con GPU para hacer que sea todo el proceso más rápido, este entorno ofrece este modelo de GPU: Tesla T4. En la figura 8 se pueden ver los diferentes tamaños de modelos para a familia de la versión 5 de YOLO. Fig. 8. Diferentes modelos de YOLOv5 [3] Lo primero de todo es ajustar el entorno y el conjunto de datos para que sean compatibles con la red YOLOv5. En cuanto al entorno, se trabajó en Google Organización del trabajo 41 Colab, ya que ofrece la posibilidad de usar un entorno con GPU y conectarlo con Google Drive para acceder a los archivos en la nube. Por otra parte, se debió cambiar el formato del dataset, puesto que originalmente se encontraba en formato Pascal y era necesario pasarlo a formato YOLO que es TXT. Este formato de dataset cuenta con dos tipos de archivo importantes, uno sería un archivo .YAML dónde se debe indicar el número de clases totales y el nombre de cada una, y también deberá dar información sobre las rutas o directorios donde se guarden las imágenes para traint test y validation. En la figura 9 se muestra un ejemplo de cómo sería un archivo .YAML: Fig. 9 Archivo .YAML utilizado Por otro lado, el otro tipo de archivo serían las anotaciones, en lugar de tenerlas en un .XML como en el formato Pascal, en YOLO son en formato TXT. En la figura 10 se puede ver un ejemplo. Fig. 10 Ejemplo de archivo TXT de anotaciones Este archivo de texto constará de 5 elementos, primero habrá un número entero que indicará la clase a la que pertenece, este número entero está relacionado con el orden de las clases indicadas en el archivo .YAML, los últimos 4 elementos son las coordenadas del Bounding Box en la imagen, lo que permitirá saber dónde se encuentra el objeto de interés. Organización del trabajo 48 dataset por alguna razón. Por otro lado, el modelo grande de la versión 8 ofrece buenos valores de resultados, pero se ve como en la segunda época, esta versión de YOLO presenta unos picos negativos en rendimiento, se debería tener en cuenta, ya que, por ejemplo, si se hubiera puesto un número más o menos de épocas se podría haber caído en uno de estos picos, obteniendo un resultado no concorde con el rendimiento real del modelo. También es recalcable que la red que presenta una mayor constancia a través de las épocas es el modelo grande de la versión 5, también concuerda con los valores más altos de recall y AP:50, por lo que de momento la hacen una fuerte candidata a ser la red seleccionada. Después de analizar las gráficas de recall y AP:50, si se presta atención a gráficas un poco menos relevantes como la de box_loss (ver Anexo), se puede observar como la tendencia de las gráficas es de bajada. Esto quiere decir que, seguramente, si se entrenaran los modelos con más épocas, se podría conseguir incluso resultados mejores, lo cual es interesante para futuras mejoras. Al haber analizado cómo se comportan las diferentes redes según las métricas, se ha visto como estaban bastante parejas en cuanto a resultados, por lo que siguiendo el criterio de evaluación se comparó sus tiempos de entrenamiento y predicción. Fig. 17 Comparación de tiempo de entrenamiento y predicción entre modelos Lo primero que se puede observar en la figura 17 es que, efectivamente como era de esperar, la versión 8 de YOLO ofrece unos tiempos menores respecto a su versión anterior. Partiendo de que ya no se tiene en cuenta a la YOLOv8n, se observa que la red más atractiva en cuanto a tiempo de entrenamiento y predicción sería la YOLOv5n. Después de realizar una comparación de todas las redes, se puede observar que, a pesar de que la versión 5 de YOLO sale Organización del trabajo 49 perdiendo en cuanto a tiempos de ejecución, estos tiempos no presentan una diferencia tan grande como para opacar los resultados de rendimiento, por lo que se podría dejar apartada también al modelo grande de YOLOv8 y se tendrán en cuenta a los dos modelos pertenecientes a la versión 5. Comparación entre los modelos de YOLOv5 Ventajas Desventajas YOLOv5n Tiempo de predicción bastante bajo Red de rápido entrenamiento con alta eficacia Menos estable Rendimiento un poco peor que v5x YOLOv5x Más estable Mejor rendimiento que v5n en general Posibilidad de aumentar más el rendimiento con más épocas Tiempo de entrenamiento elevado Necesidad de más recursos computacionales para entrenar Tabla 3. Comparación de las versiones 5 y 8 de YOLO En la tabla 3 se puede ver una comparativa general entre el modelo v5n y el v5x de YOLO. En resumen, se puede ver como cada red presenta diferentes ventajas y desventajas. Para poder elegir entre una de ellas, se debe tener presente siempre el objetivo del proyecto, el cual era poder desarrollar el entrenamiento de una red que permita detectar objetos extraños en las pistas de aeropuertos, a partir de esto, se ha decidido que lo más conveniente sería usar la red YOLOv5x. Esta decisión viene dada porque, aunque sí que es cierto que es una red más costosa de entrenar y con un tiempo de predicción elevado, se pudo observar como la diferencia con respecto al modelo más simple no es tanta, y la v5x ofrece unos resultados de rendimiento más estables y precisos. Cabe destacar que, en la decisión ha tenido un peso importante la métrica de recall, ya que, como se explicó en la valoración de resultados, para este proyecto es mucho más importante que detecte todos los objetos que hay en una imagen, a que acierte qué tipo de objetos son. Sin mencionar que, al ser una red más compleja, deja las puertas abiertas a poder realizar un entrenamiento mucho más elaborado en un futuro, lo cual, es algo a tener en cuenta en futuras mejoras. Organización del trabajo 50 3.4 Desarrollo de la aplicación 3.4.1 Prueba del detector de objetos en local Al tener ya seleccionado el modelo que se usará en la detección de objetos, se quiso primero realizar una prueba en local para comprobar que al enviarle frames de un vídeo el detector de objetos funcionaba. Para realizar esta prueba, se necesitó exportar el modelo de YOLOv5x, esta exportación lo que hace es recoger los pesos entrenados de la red y guardarlos en un archivo .pt para que se puedan usar en cualquier otra aplicación o servico, en este caso una aplicación de Python. Para este proyecto se usó la aplicación PyCharm. PyCharm es un entorno de desarrollo que se centra en el lenguaje de programación de Python. Para este caso se utilizó la versión de Python 3.8 la cual ofrecía compatibilidad con el modelo de YOLO, y permitía realizar las acciones necesarias tanto para la captura del vídeo como su procesamiento. La prueba consistió en capturar vídeo a tiempo real con la videocámara de un portátil, de esta manera se simuló que era un vídeo capturado por el dron. Primero de todo, se descargaron los requerimientos necesarios para utilizar de manera correcta el archivo .pt con los pesos entrenados de la red neuronal. Estos requerimientos vienen especificados en la página oficial de ultralytics de YOLOv5 [9]. Seguidamente, se realizó la lectura de los pesos para poder utilizarlos en el proyecto gracias a la librería de torch. Luego este vídeo se recogía gracias a las librerías que ofrece Python de opencv, y cada frame del vídeo se insertaba como input al archivo de pesos entrenados para que lo procesara. Al realizar el procesado, si el detector creía que había reconocido un objeto, se marcaba con un rectángulo para señalar que ahí estaba. Para esta prueba no se tuvo en cuenta el rendimiento que presentaba el detector, su objetivo era asegurar que se podían utilizar los pesos de la red en otra aplicación y capturar vídeo a tiempo real, para poder simular un comportamiento semejante al que presentaría el escenario con el dron. En la figura 18 se muestra qué código se usó para realizar esta prueba. Organización del trabajo 51 Fig. 18 Código usado para realizar la prueba de simulación El resultado de esta prueba fue exitoso. Se pudo verificar que se podían recoger frames de un vídeo en tiempo real y procesarlos con el detector de objetos. Como ya se comentó anteriormente no se tuvieron en cuenta los resultados de rendimiento, ya que se buscaba validar el funcionamiento del entorno. 3.4.2 Conexión con servidor RTMP 3.4.2.1 Enlace y método de conexión La realización de esta prueba consistió en realizar una simulación del escenario real que se daría con el dron. Este escenario consta de un emisor emulando el comportamiento del dron, este comportamiento sería el de realizar una transmisión en vivo usando el protocolo RTMP. Esa transmisión RTMP sería un vídeo grabado a 30 frames/s y se enviaría a un servidor para su posterior recepción y procesamiento. El escenario planteado es el siguiente. Todo el escenario se sustenta sobre un servidor ubicado en el Departamento de Arquitectura de Computadores de la EETAC, el cual hace de nodo de conexión entre el emisor (el PC que se usó para emular al dron), y el receptor (otro PC donde recibimos y procesamos el vídeo). El servidor NGINX [14] es un servidor web y proxy inverso de alto rendimiento, Organización del trabajo 52 ampliamente utilizado para servir sitios web y aplicaciones en Internet. Se destaca por ser ligero, escalable y eficiente en el manejo de solicitudes HTTP y HTTPS. Para poner todo el entorno en funcionamiento el servidor se debe poner en marcha accediendo al escritorio remoto donde está ubicado: – ssh [email protected] Al estar en el escritorio remoto se debe encender el servidor con el siguiente comando: – start-nginx / stop-nginx Después de encender el servidor con las siguientes URL’s se permite el envío y recepción de información: Link para enviar un stream: – rtmp://rtmpserver.pc.ac.upc.edu/icarus/NOM_STREAM?pwd=R3botado Link para recibir: – rtmp://rtmpserver.pc.ac.upc.edu/icarus/NOM_STREAM En la figura 19 se puede ver un esquema simplificado de la estructura del entorno. Fig. 19 Representación del escenario incluyendo, emisor, servidor y receptor Organización del trabajo 53 3.4.2.2 Procedimiento y herramientas usadas Cabe destacar que para esta prueba no se tuvo en cuenta el rendimiento del detector, ya que el objetivo era ver si era posible realizar la conexión RTMP y procesar la recepción del video con el detector de objetos entrenado. Para realizar la emulación del dron enviando el vídeo, se usó un portátil con videocámara que permitiera grabar. Para la grabación y transmisión del vídeo se utilizó la aplicación OBS [15]. OBS (Open Broadcaster Software) es una aplicación de software gratuita y de código abierto que se utiliza para la grabación y transmisión en vivo de contenido multimedia. Con OBS, los usuarios pueden capturar diversas fuentes, como cámaras web, ventanas de aplicaciones, pantallas de escritorio y dispositivos de captura de video, y combinarlas en una única transmisión en vivo o grabación. Para configurar la URL de transmisión se usó el link para enviar un stream hacia el servidor NGINX de la siguiente manera (ver figura 20): Fig. 20 Configuración del transmisor para RTMP Después de tener listo el transmisor y corroborar que se conectaba correctamente al servidor, se procedió a configurar el receptor. Como receptor se usó PyCharm, concretamente la librería OpenCV de Python 3.8. El código usado para recepcionar y procesar el vídeo es muy parecido al que se usó para realizar la prueba en local. Para poder recibir el vídeo proveniente del servidor RTMP, la única modificación que tuvo que hacerse fue la de cambiar la fuente de origen de los datos capturados por el método VideoCapture() de la librería OpenCV. Se usó la URL de recepción anteriormente mostrada para indicar al programa dónde se hallaba la fuente de vídeo de la siguiente manera (ver figura 21): Organización del trabajo 54 Fig. 21 Ejemplo de captura de stream RTMP usando la librería OpenCV Para esta prueba se realizaron dos configuraciones distintas. Una de ellas se realizaría usando los pesos de la red seleccionada a partir de los resultados de entrenamiento, la YOLOv5X. Mientras que, para la otra configuración, se usarían los pesos del modelo que quedó en segundo lugar, el modelo YOLOv5n. Esto se decidió así, ya que, para realizar la recepción, influye de manera notable el tiempo que tarda el modelo en procesar los datos y realizar la tarea de detección. Cabe recordar que, al cuantificar el tiempo que tardaba un modelo en realizar la detección durante el entrenamiento, se usó la GPU: Tesla T4 proporcionada por Google Colab. Por lo tanto, se quiso comprobar la diferencia real que había en usar un modelo con un tiempo de detección elevado, y otro modelo con el tiempo más reducido usando un receptor corriente. 3.4.3 Resultados y conclusiones extraídas Al realizar la simulación del envío y procesamiento de vídeo en tiempo real se han podido sacar varias conclusiones. Lo primero de todo es que la prueba de transmisión y recepción resultó exitosa, por lo que queda demostrado que es posible realizar una transmisión RTMP y recibirla para procesarla más tarde por código, lo cual era una de las dudas antes de empezar la simulación. También se comprobó que, efectivamente, podíamos recoger este vídeo y usar el archivo .pt que contiene los pesos entrenados del modelo para procesar los frames y realizar una detección. Este último paso se realizó de la misma manera que la prueba en local, de tal manera que se ha explicado en el punto anterior. Una de las cosas que se pudieron ver en la simulación, es que, al realizar la prueba con los pesos del modelo YOLOv5X (el más grande), el tiempo que tardaba en procesarse la función de detección (alrededor de 1 segundo), producía que el buffer de entrada de datos se colapsara. Esto ocasionaba que el vídeo dónde aparecían las detecciones se visualizara a una tasa de frames/s muy pequeña, por lo que el resultado final no se visualizaba de manera fluida. En la figura 22 se puede ver el código usado para visualizar el tiempo de detección. Organización del trabajo 55 Fig. 22 Código usado para visualizar el tiempo de ejecución de la detección Esta acumulación de frames en el buffer debido al tiempo de ejecución de la detección puede ser atribuido a la poca potencia de hardware, ya que, si contásemos con una máquina más potente, esta sería capaz de realizar la tarea de predicción mucho más rápido. Esta teoría puede comprobarse si nos respaldamos en los datos extraídos del entrenamiento, donde disponíamos de un hardware más potente gracias a Google Colab. Este hardware nos permitía tener tiempos de detección de alrededor de 30 ms, lo cual difiere bastante del segundo que tenemos para este caso. Para intentar paliar este efecto se propuso la idea de procesar menos frames/s a la hora de detectar. Dicho de otro modo, si originalmente se le pasaban 30 frames/s al modelo para que realizara la detección, ahora se intentaría procesar 15 frames/s. De este modo conseguiríamos que no se visualizara un retraso tan importante a la hora de reproducir el resultado de la detección respecto al video original. Después de realizar la prueba con el modelo YOLOv5X, se procedió a realizar la misma simulación, pero cargando esta vez los pesos entrenados del modelo YOLOv5n. Para ello, lo único que debíamos hacer era cambiar la línea del código donde le indicábamos que archivo .pt debía usar. Este modelo es bastante más pequeño en cuanto a parámetros que el YOLOv5x, por lo que se esperaba que funcionara de una manera más rápida. El resultado fue mucho más rápido, se obtuvo un tiempo de ejecución de unos 0.3 segundos, lo cual hace que el procesamiento de los frames con el detector sea casi 3 veces más rápido que YOLOv5x. Teniendo en cuenta la gran diferencia de tiempos entre el modelo grande y el más pequeño, y que, en cuanto a resultados de entrenamiento, los dos modelos son muy parejos, se podría incluso proponer al modelo YOLOv5n como candidato final. Cabe destacar que, como ya se ha comentado antes, en esta prueba no se contaba con un receptor que tuviera un hardware potente. Por lo que se puede asegurar que, si se tuviera más potencia, el tiempo de ejecución obtenido sería aún menor. Organización del trabajo 56 Tesla T4 Sin GPU YOLOv5n 7 ms 300 ms YOLOv5x 30 ms 1000 ms Tabla 4. Comparativa de tiempos de detección entre modelos En la tabla 4 se puede apreciar lo anterior mencionado de la necesidad de un hardware potente. Se puede observar que, si no disponemos de una máquina potente, el rendimiento de nuestro modelo puede aumentar hasta el punto de que sea una solución inviable, como ocurre en el caso de YOLOv5x. 3.5 Vuelos de test Para realizar un test de vuelo con el dron físico, se hizo uso de la instalación DroneLab [26] ubicada en el campus del Baix Llobregat. El propósito de este test era simular el escenario que se presentaba como objetivo del proyecto. Para ello, se dispuso de todo lo estudiado y desarrollado durante el transcurso del proyecto. Como ya se ha mencionado anteriormente, se usó el modelo de dron DJI Mini 2, el cual era perteneciente al grupo de investigación ICARUS. En la figura 23 se puede ver una imagen del dron. Fig. 23 Imagen del dron captada durante el test de vuelo Organización del trabajo 57 Para realizar la prueba se debe configurar el dron para que envíe el vídeo al servidor RTMP. Esta configuración se realiza de la siguiente manera: En la aplicación de DJI para manejar el dron: 1. Ir al menú de configuración en la esquina superior derecha 2. Desplazarse hacia abajo y seleccionar "Configuración de retransmisión en directo" 3. Escribir la dirección RTMP (rtmp://rtmpserver.pc.ac.upc.edu/icarus/NOM_STREAM?pwd=R3botado) 4. Hacer clic en "Empezar" En la imagen 24 se puede ver el menú de configuración de transmisión en el dron. Fig. 24 Menú de configuración de transmisión de DJI Mini 2 Debido a que la superficie del DroneLab no era similar a la de una pista de aeropuerto, se propuso construir un pequeño escenario para simular esta situación. Lo primero que se hizo fue colocar una lona negra, de esta manera, se logró hacer que la superficie fuera lo más parecida posible a un suelo compuesto de pavimento negro. Lo siguiente, fue colocar objetos que se pudieran encontrar en el conjunto de datos con los que habíamos entrenado al modelo. Con esta acción, podríamos determinar si el modelo es capaz de detectar objetos de una manera correcta, o si, por el contrario, no funcionaba y era necesario realizar ajustes en los entrenamientos. Concretamente se usaron los siguientes tipos de objetos: Llave inglesa, tuerca, tornillo, trozo de plástico rojo, alicates. Todos ellos se encuentran en el dataset por lo que el modelo debía ser capaz de detectar al menos a alguno de ellos. Organización del trabajo 64 4.2 Mejoras futuras Después de extraer las conclusiones finales de todo el proyecto, se realizarán una serie de propuestas para que, en una futura revisión del trabajo o deseo de realizar la operación, se realicen una serie de mejoras que ayudarán al mejor cumplimiento de los objetivos. Comenzando con la parte del procesado del dataset, se podría considerar realizar una mejora del conjunto de datos, la mejor manera de realizarla sería poder definir un dataset propio, invirtiendo tiempo en diseñarlo tanto en la toma de imágenes como en la distribución de clases. Esto se propone, ya que, según las pruebas realizadas con el dataset, se ha podido observar cómo el dataset presenta mucho contenido de imágenes que podría ser reemplazado por el hecho de que puede provocar overfitting o sobre ajuste en el modelo. En cuanto al entrenamiento de los modelos, se pudo observar como el candidato principal, el modelo YOLOv5x presentaba un gran potencial para realizar un entrenamiento exhaustivo. Esto requeriría un hardware de alta potencia, por ello, como una mejora futura, se propone el invertir en una máquina con alta potencia de hardware para realizar un entrenamiento más largo. Gracias a tener un hardware más potente, se podría volver a considerar la anterior idea mencionada de cambiar el conjunto de datos, lo cual nos permitiría usar una mayor cantidad de imágenes. De esta manera podríamos reducir el overfitting o sobre ajuste del modelo sobre el dataset, y en términos generales, conseguir unos resultados mucho más precisos y correctos. Con una máquina más potente tardaríamos menos en realizar los entrenamientos, y los tiempos de inferencia serían menores, por lo que nuestro sistema sería mucho más rápido y eficiente. Por ejemplo, si en un futuro se quisiese introducir una nueva clase al dataset, gracias a tener un hardware potente podríamos entrenar de nuevo al modelo y hacer que sea funcional en mucho menos tiempo. También existe la posibilidad de poder investigar otros modelos de detección existentes, y valorar la idea de usar un detector de anomalías. En cuanto a los resultados obtenidos en las pruebas de test de vuelo, se pudo ver como el modelo más pequeño presentaba tiempos de inferencia elevados si no se contaba con una GPU. Teniendo en cuenta este aspecto clave, se podría debatir en futuras revisiones si, realizando un entrenamiento exhaustivo y con una máquina más potente, se consigue una gran diferencia entre los modelos más y menos complejos. De no conseguir una diferencia muy notoria en cuanto a resultados, debido a lo observado durante esta prueba se recomendaría usar un modelo de detección más pequeño. Al usar este modelo más pequeño, podríamos realizar detecciones casi instantáneas contando con una GPU. Para finalizar se podría debatir la propuesta de desarrollar una aplicación externa para diseñar el plan de vuelo. Esta aplicación permitiría en función de la pista de aeropuerto y del modelo de dron usado, diseñar un plan de vuelo sencillo para recorrer e inspeccionar toda la pista. La aplicación también permitiría sabes las coordenadas en las que se ha producido una detección. En este momento se enviaría un aviso al operario, permitiéndole indicar como se debería proceder. Organización del trabajo 65 Por ejemplo, dar la orden de descender para verificar visualmente la presencia del objeto. Esto permitiría una mayor precisión y confianza a la hora de revisar las pistas de aeropuertos. Organización del trabajo 66 5. BIBLIOGRAFÍA Y WEBGRAFÍA [1] Torres i Viñals, J, DEEP LEARNING Introducción práctica con Keras, publicación independiente, 10 de junio de 2018, Revisado: 25 de febrero de 2023 [2] Torres i Viñals, J, Python Deep Learning: Introducción práctica con Keras y TensorFlow 2, 30 de enero de 2020, Revisado: 26 de febrero de 2023 [3] GitHub oficial de YOLOv5, Revisado: 2 de marzo de 2023 https://github.com/ultralytics/yolov5 [4] GitHub oficial de YOLOv8, Revisado: 2 de marzo de 2023 https://github.com/ultralytics/ultralytics [5] Herramienta para procesar el dataset RoboFlow, Revisado: 20 de marzo de 2023 https://app.roboflow.com/ [6] GitHub oficial del dataset de FOD’s, Revisado: 9 de marzo de 2023 https://github.com/FOD-UNOmaha/FOD-data [7] Travis Munyer, Pei-Chi Huang, Chenyu Huang, Xin Zhong, “FOD-A: A Dataset for Foreign Object Debris in Airports”, Revisado: 9 de marzo de 2023 https://arxiv.org/abs/2110.03072 [8] Website oficial del dron Mini 2 DJI, https://www.dji.com/es/mini-2 [9] Ultralytics, “Ultralytics YOLOv8 Docs”, Revisado: 15 de marzo de 2023 https://docs.ultralytics.com/yolov5/tutorials/pytorch_hub_model_loading/ [10] Haivision, “RTMP vs. SRT: Comparing Latency and Maximum Bandwidth”, Revisado: 15 de abril de 2023 https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE41c8N [11] ResearchGate, Revisado: 28 de abril de 2023 https://www.researchgate.net/ [12] Diego Lopez Yse, “Introduction to Transfer Learning”, Revisado: 15 de mrzo de 2023 https://www.pinecone.io/learn/transfer-learning/ [13] MathWorks, “MATLAB para Machine Learning”, Revisado: 4 de abril de 2023 https://www.mathworks.com/solutions/machine-learning.html [14] Web oficial de NGINX, Revisado: 10 de mayo de 2023 https://www.nginx.com/ [15] Web oficial de OBS, Revisado: 8 de mayo de 2023 https://obsproject.com/es/ Organización del trabajo 67 [16] Agencia Estatal de Seguridad Aérea, “Programa de gestión de riesgos de FOD”, Revisado: 6 de abril de 2023 https://www.seguridadaerea.gob.es/sites/default/files/csa_17_itc_114.pdf [17] Diego Calvo, “Red Neuronal Convolucional CNN”, Revisado: 2 de abril de 2023 https://www.diegocalvo.es/red-neuronal-convolucional/ [18] Página oficial de COCO, Revisado: 24 de abril de 2023 https://cocodataset.org/#home [19] Página oficial de PASCAL, Revisado: 24 de abril de 2023 http://host.robots.ox.ac.uk/pascal/VOC/ [20] Xingxing Xie, Gong Cheng, Jiabao Wang, Xiwen Yao, Junwei Han, “Oriented R-CNN for Object Detection” Revisado: 24 de marzo de 2023 https://arxiv.org/abs/2108.05699 [21] Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi, “You Only Look Once: Unified, Real-Time Object Detection”, Revisado: 24 de marzo de 2023 https://arxiv.org/abs/1506.02640 [22] Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, Alexander C. Berg, “SSD: Single Shot MultiBox Detector”, Revisado: 26 de marzo de 2023 https://arxiv.org/abs/1512.02325 [23] Kaiming He, Georgia Gkioxari, Piotr Dollár, Ross Girshick, “Mask R-CNN”, Revisado: 26 de marzo de 2023 https://arxiv.org/abs/1703.06870 [24] Página oficial de DJI Matrice 300, Revisado: 1 de mayo de 2023 https://enterprise.dji.com/es/matrice-300 [25] Página oficial de DJI MAvic 3, Revisado: 1 de mayo de 2023 https://www.dji.com/es/mavic-3 [26] EETAC, “La UPC y el Ayuntamiento de Castelldefels inauguran el DroneLab, un laboratorio y espacio único de vuelo para drones”, Revisado: 1 de junio de 2023 https://www.upc.edu/es/sala-de-prensa/noticias/la-upc-y-el-ayuntamientode-castelldefels-inauguran-el-dronelab-un-laboratorio-y-espacio-de-vuelo-dedrones-lider-para-la-investigacion-y-la-docencia [27] Incidente del Concorde, Revisado: 10 de marzo de 2023 https://es.wikipedia.org/wiki/Vuelo_4590_de_Air_France Organización del trabajo 68 6. ANEXO 6.1 Resultados YOLOv5n Fig. 1 Métricas analíticas de detección de objetos de YOLOv5n Organización del trabajo 69 Fig. 2 Métricas de ajuste de YOLOv5n Fig. 3 Matriz de confusión de YOLOv5n Organización del trabajo 70 6.2 Resultados YOLOv5x Fig. 4 Métricas analíticas de detección de objetos de YOLOv5x Organización del trabajo 71 FIg. 5 Métricas de ajuste de YOLOv5x Fig. 6 Matriz de confusión de YOLOv5x Organización del trabajo 72 6.3 Resultados YOLOv8n Fig. 7 Métricas analíticas de detección de objetos de YOLOv8n Organización del trabajo 73 Fig. 8 Métricas de ajuste de YOLOv8n Fig. 9 Matriz de confusión de YOLOv8n