Full text
Eficiencia de las redes neuronales y uso de EfficientDet sobre redes anteriores como yolov3 Equation Chapter 1 Section 1 Trabajo Fin de Grado Ingeniería de las Tecnologías de la Telecomunicación Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. Autor: Alberto García Hernández Tutor: Antonio Jesús Sierra Collado Dpto. Ingeniería Telemática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2021
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. Trabajo Fin de Grado
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 3 Ingeniería de las Tecnologías de la Telecomunicación Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. Autor: Alberto García Hernández Tutor: Antonio Jesús Sierra Collado Dpto. de Ingeniería Telemática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2021
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet.
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 5 Proyecto Fin de Carrera: Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. Autor: Alberto García Hernández Tutor: Antonio Jesús Sierra Collado El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2021 El Secretario del Tribunal
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet.
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 7 A mi familia A mis amigos
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. Agradecimientos A mi familia, de los que aprendo cada día. A mis amigos, las personas más importantes de mi vida, a todas las personas que de algún modo u otro me han ayudado a la concepción de este proyecto y a Alicia, por siempre apoyarme y estar a mi lado cuando más lo necesito. Alberto García Hernández Sevilla, 2021
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 9
Eficiencia de las redes neuronales y uso de EfficientDet sobre redes anteriores como yolov3 1 INTRODUCCIÓN as redes neuronales, la inteligencia artificial y el aprendizaje automático están más presentes en nuestras vidas de lo que solemos pensar. Cuando usamos redes sociales (Instagram, YouTube, Facebook…), estas estudian y analizan nuestro comportamiento para ofrecernos publicidad y contenido a medida. Cada día son más las empresas que solicitan que la información acerca de sus clientes se almacene en la nube (AWS, Azure, …) para que gracias a algoritmos de machine learning puedan automatizar sus procesos y realizar funciones automatizadas. Con lo cual, creamos o no, estamos rodeados de inteligencias artificiales. Haciendo un buen uso de ellas, se obtiene un beneficio para nuestra sociedad, como es en el caso de detectar señales de tráfico en tiempo real, ya que la velocidad en la carretera es uno de los factores más importantes en la mortalidad de los accidentes. La detección de señales de tráfico y la correcta actuación ante estas supone un importante desafío para la seguridad vial. En este proyecto, se va a hacer un estudio de la red neuronal EfficientDet, testeándola y estableciendo una base teórica y práctica de porqué EfficientDet supera a Yolov-3 en la detección de señales de tráfico. Se estudiará el método de ajuste compuesto como modelo de mejora eficiente para las redes neuronales y en concreto su aplicación a EfficientDet. EfficientDet es una red neuronal con un tiempo de respuesta, de entrenamiento y precisión mejores que Yolov-3. Vamos a comparar por separado esos tres parámetros en una simulación de entrenamiento de ambas redes, visualizando los resultados obtenidos. La eficiencia dentro de las redes neuronales es un concepto muy importante, ya que en vez de desarrollar algoritmos cada vez más potentes, podríamos centrarnos en optimizar los ya existentes, pues buscamos ahorrar recursos computacionales y energéticos. No debemos olvidar que el uso de menos recursos es muy importante hoy en día, ya que está en nuestra mano reducir las emisiones de CO2 tanto individualmente, como en conjunto. Aunque ahora son recomendaciones y hábitos de uso para mejorar el planeta, cada vez se acerca más la fecha planteada por la Unión Europea como desafío para producir cero emisiones de CO2 a la atmósfera en 2050. 1.1 Motivación y Objetivos Como se ha comentado en el resumen, se van a realizar simulaciones de ambas redes neuronales, EfficientDet y Yolov-3. Vamos a entrenar las redes neuronales con un dataset (conjunto de datos que su usan para alimentar la red) de 1000 señales de tráfico, para que, con los resultados obtenidos, la hipótesis planteada en el estudio teórico pueda ser confirmada y obtengamos las conclusiones esperadas. Este trabajo se ha realizado con el propósito de acercar el funcionamiento de EfficientDet y determinar por qué debemos usar sistemas que premien el ahorro energético de forma directa o indirecta como es L
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 18 nuestro caso, ya que se van a utilizar menos recursos y por menos tiempo. Por lo tanto, el uso de redes neuronales como EfficientDet que como su nombre indica tratan de ser más eficientes. Esto puede ser el inicio de un futuro en el que tecnología y sostenibilidad vayan de la mano para darnos en los próximos años un planeta Tierra, más verde, eficiente y tecnológico. Para la demostración de estos resultados propuestos se ha hecho uso de tres APIs (Application Programming Interface) que nos ayudarán a obtener los resultados propuestos en este trabajo. 1.1.1 Herramientas utilizadas TensorFlow: Plataforma de código abierto que permite facilitarnos la tarea de ejecutar y realizar aprendizaje automático; cuenta con multitud de librerías y redes disponibles para nuestro uso. Ilustración 1 – Logo TensorFlow Es una plataforma para la creación y el entrenamiento de redes neuronales, que pueden descifrar patrones y encontrar características como la que hemos usado en este experimento. TensorFlow puede ser usado en multitud de aplicaciones prácticas, como puede ser en salud, para ayudar a los médicos en la detección de patologías mediante la inspección de radiografías, ecografías o para la detección de señales de tráfico en tiempo real, como es nuestro caso. Fue creado por el equipo de Google Brain y liberado como plataforma de código abierto con el nombre de TensorFlow en 2015. Dentro de las librerías que tiene, están los pesos y la configuración de las redes neuronales utilizadas hoy en día. Basta con llamar a la librería deseada y esta carga y ejecuta la red que deseamos y así está disponible para nosotros de manera sencilla y sin necesidad de tener que programar la red desde cero, lo cual puede ser muy tedioso y acarrear muchos fallos de programación. En definitiva, gracias a esta plataforma tenemos a nuestra disposición la posibilidad de tener al alcance de la mano la mayoría de las redes neuronales que se utilizan en la actualidad. RoboFlow: Plataforma de código abierto que ayuda a etiquetar las imágenes de un dataset de manera rápida e intuitiva y ayuda a generar el dataset en un formato que pueda ser leído por otras plataformas como TensorFlow. Gracias a RoboFlow he realizado la etiquetación de las imágenes utilizadas para este estudio.
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 19 Ilustración 2 – Clases para las señales Como se puede ver en la ilustración 2, se crea una clase para cada señal de tráfico diferente y se hace un recuadro en la imagen que corresponda con la clase correspondiente. Después de realizar el etiquetado de todas las imágenes una a una, se generan los metadatos que leerá la red neuronal para que sea capaz de identificar en qué parte de la imagen está la información importante para nosotros. Este proceso es muy importante, ya que un incorrecto etiquetado de las imágenes puede conducir a posteriores errores de la red. Es fundamental este trabajo previo de etiquetar las imágenes de manera correcta, para que luego la red neuronal aprenda y pueda detectarlas de manera automática. Si se realiza un etiquetado incorrecto o ineficiente, la red neuronal aprenderá a partir de las imágenes que le hemos pasado etiquetadas de manera incorrecta y como consecuencia los resultados obtenidos serán erróneos. Tras etiquetar las imágenes, la web de Roboflow, cuenta con una pequeña API auxiliar que entrena nuestro modelo de imágenes etiquetadas y con la webcam del ordenador nos permite probar en tiempo real si las imágenes que mostramos a la cámara se etiquetan de manera correcta. Ilustración 3 – Prueba de inferencia con móvil Como podemos observar en la Ilustración 3, tras enseñar a la cámara del ordenador varias señales de 40 km/h, es capaz de identificarlas correctamente y de manera casi inmediata. GoogleColab: Entorno de ejecución que nos permite usar la GPU y TPU de un ordenador de Google en remoto y tener así la posibilidad de realizar nuestras simulaciones más rápido que con la potencia de cálculo más reducida que tiene un portátil.
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 20 Ilustración 4 – Logo de Google Colab Estas herramientas nos sirven de apoyo para obtener los resultados de nuestro estudio y determinar que usar EfficientDet es más seguro para detectar señales de tráfico que Yolov-3. 1.2 Antecedentes Se parte de la base de otros proyectos realizados para dotar de más autonomía y seguridad a la conducción del vehículo, como son los proyectos realizados por: Lucia Reina López con Aplicación Android y Servicio Web Spring para la detección y registro de señales de tráfico de velocidad usando Deep Learning con tiny-yolov3 y OpenCV Ángel Moreno Prieto con Detección de Objetos con TinyYOLOv3 sobre Raspberry Pi 3 Sergio Mellado Contigioso titulado Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE Álvaro Carmona Palomares con Securización mediante Keyrock y Wilma de Aplicación y Servicios Web para Vehículo Inteligente Dentro del marco de la seguridad vial y la detección de señales de tráfico en un vehículo hay que resolver una necesidad muy importante, como es la de encontrar un algoritmo más eficiente y rápido que los que estaban siendo usados hasta la fecha. El objetivo es evidenciar que EfficientDet es más preciso y eficiente que otras redes neuronales y en concreto que Yolov-3. En primera instancia, se ha realizado una introducción teórica al mundo de las redes neuronales en global, dando una idea general de cómo funcionan, para luego centrarnos en las redes neuronales convoucionales (CNN). Nos centraremos en el método de ajuste compuesto y cómo este se aplica para formar la familia de redes neuronales de EfficientDet, para finalizar simulando esta red neuronal y comprobar si la hipótesis formulada durante la teoría es cierta.
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 21 2 ESTADO DEL ARTE n este capítulo se presenta la investigación que hemos realizado sobre las redes neuronales, para explicar cuál son sus bases de funcionamiento y posteriormente comentar cuáles son las mejoras que aporta EfficientDet, cuáles son las características que la hacen más eficiente y por qué recomendamos su uso frente a otras redes neuronales. El uso de las redes neuronales es muy popular hoy en día y seguirá creciendo exponencialmente en los próximos años, por lo que la eficiencia es un aspecto que debería preocuparnos más cada día. El blockchain y el mundo de las criptomonedas usa algoritmos de machine learning, muy pesados, que consumen enormes recursos para conseguir resultados, lo que produce que los ordenadores en los que estos algoritmos están alojados estén siempre ejecutándose, gastando recursos computacionales y energéticos que se podrían reducir. Si hacemos un repaso por la historia e introducción de las redes neuronales podremos entender cómo funcionan estos algoritmos y cómo podemos trabajar para que eficiencia y precisión sean dos parámetros que vayan de la mano en el futuro, para promover un mundo mejor. Después de sentar las bases de cómo funcionan las redes neuronales en general, pasaremos a explicar las especializadas en detectar imágenes, que son las redes neuronales convolucionales CNN (Convolutional Neural Network) y en nuestro caso el funcionamiento de la red EfficientDet, para explicar qué mecanismos utiliza que la hace más eficiente que otras redes neuronales. 2.1. Redes neuronales En esta sección se va a desarrollar cómo es el funcionamiento general y la base de las redes neuronales, para luego poder entender y comparar por qué en este caso nos hemos decantado por EfficientDet como nuestro modelo de estudio. Con el paso del tiempo poco a poco cada vez son más las personas que se acercan a este mundo y conocen más de cerca las redes neuronales. Como su nombre indica, las redes neuronales intentan copiar el funcionamiento neuronal de un cerebro humano. Podríamos entenderlo como un conjunto de unidades llamadas neuronas artificiales que trabajan de manera conjunta para realizar un objetivo común. Como ya se ha mencionado anteriormente el propósito de las redes neuronales es muy diverso. Puede ser utilizado para ofrecer un contenido determinado a los usuarios de una red social según el contenido que hayan visualizado, ofrecer publicidad personalizada, simular comportamientos y respuestas humanas en robots, reconocimiento de voz y texto, prevención de fraudes, conducción autónoma y miles de aplicaciones más que podríamos seguir enumerando sin contar las que cada día a algún ingeniero/a desarrolla. En el caso de la detección de objetos en imágenes a tiempo real, la unidad mínima de información que requiere nuestra atención son los pixels de las imágenes y el comportamiento que tiene nuestra red cuando tiene que analizarlos. Este trabajo lo realizan las redes neuronales convolucionales CNN que luego explicaremos. Una neurona artificial es la unidad de procesamiento básica, que puede realizar una de las funciones E
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 22 comentadas anteriormente de manera sencilla, como podemos ver en la Ilustración 5. Ilustración 5 – Modelo de neurona Lo que entendemos como neurona, no es más que una función matemática que recibe como parámetros de entrada, una serie de valores a los cuales se les hace la suma ponderada y se obtiene un resultado. Se denomina suma ponderada porque cada entrada está multiplicada por un valor, que es el peso o la importancia que se le da a cada entrada. Este peso determina qué entrada tiene más importancia y será transportado a lo largo de la red por todas las neuronas. 2.1.1 Recta de regresión Si analizamos un poco más la ecuación de una neurona, podríamos darnos cuenta de otro concepto importante, ya que la operación interna que realiza una neurona es análoga a lo que conocemos como recta de regresión. Por lo tanto, lo que realiza la neurona es establecer una región de decisión sobre la que orientar la variable de entrada con los valores que nos aportan información y ser estos los que se transmiten a la siguiente neurona. La ecuación de la recta de regresión tiene la siguiente fórmula, que es la suma ponderada de los valores de entrada de la neurona: Z = X1*W11 + X2*W12 +X3*W13 +W1B El parámetro independiente W1B se define como sesgo (bias). Este término nos permite ajustar la recta de regresión para aumentar la precisión con la que acotar nuestra región de decisión. Ilustración 6 – Recta de regresión
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 23 La ecuación de una recta de regresión mantiene la misma estructura que la que realiza la neurona de manera interna. Con lo cual, podríamos decir que internamente la neurona está actuando como un modelo de regresión lineal, el cual podemos ajustar poniendo los valores deseados en los pesos (Wli) y en el sesgo (bias). El concepto de neurona a nivel lógico es parecido al funcionamiento de una puerta AND o una OR en el que se toma una decisión binaria simple como pudiera ser Verdadero o Falso. Se evoluciona al concepto de redes neuronales con la unión de estas neuronas para que formen una red, que en conjunto pueden realizar operaciones más complejas. Para completar el funcionamiento de las neuronas es necesario introducir los conceptos que explicaremos a continuación, como son las funciones de activación o los filtros de detección de características. 2.1.2 Funciones de activación Si solo concatenamos neuronas, nuestro problema se vería reducido a suma de rectas de regresión, las cuales nos aportan poca información. Necesitamos un parámetro no lineal para que las capas en su conjunto al realizar operaciones regresivas tengan un valor añadido. Ilustración 7 – Función de Activación La función de activación podemos entenderla como un filtro que da valor al resultado de la neurona y dará más o menos importancia al resultado según el valor que decidamos darle. Existen varios tipos de filtros o funciones de activación como son la ReLu, la Función Escalonada, la Función Sigmoide o la Función Tangente Hiperbólica, que son las más importantes. Variando los valores de estas y combinándolas en diferentes capas se pueden obtener resultados significativos. Ilustración 8 – Filtros
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 24 2.1.3 Capas de la red neuronal Sabiendo todo esto, podemos decir que, si colocamos las neuronas de manera sucesiva, ya sea una detrás de otra en serie o en paralelo por columnas, estamos formando la denominada red neuronal que, realizando operaciones iterativas, forman una red inteligente capaz de realizar muchas de las funciones que hemos comentado en la introducción. Ilustración 9 – Capas de una red neuronal Como podemos observar en la Ilustración 9, las neuronas que se encuentran en la misma columna forman una capa. La entrada de las neuronas de la capa siguiente está ligada a las salidas de las neuronas de la capa anterior, de forma que, si se van añadiendo más capas intermedias, la red será capaz de tomar decisiones más complejas. Esto se llama Deep Learning y es el concepto fundamental que permite a las redes neuronales realizar funciones complejas. 2.2 Redes neuronales convolucionales Las redes neuronales convolucionales son un tipo de red que se especializa en la detección de objetos en tiempo real. La diferencia principal con las redes normales es que estas realizan operaciones de convolución en sus capas. Pero sin olvidar todo lo mencionado anteriormente como es el cálculo de los errores, establecer pesos en las entradas y el sesgo. Ilustración 10 – Esquena CNN Como se puede ver en la ilustración 10, lo que ocurre en las redes neuronales convolucionales es que estas crean un embudo, de manera que al principio toman toda la resolución de la imagen al completo y poco a poco la resolución se va disminuyendo, para que capa tras capa se puedan ir detectando patrones o características cada vez más complejos, aumentando así la profundidad (depth) de nuestra
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 25 red. En las primeras capas se detectarán texturas, colores, cambios de contraste, etc. Conforme vamos avanzando en estas detecciones, al final se convierte realmente en detectar objetos, que para nosotros tienen relevancia visual, como pueden ser las señales de tráfico que queremos detectar. Podremos afirmar que según avanzamos en las capas podrá haber filtros especializados en detectar alguna característica en concreto. Ilustración 11 - Filtro especializado En la Ilustración 11, se puede apreciar un filtro diseñado para detectar filamentos, que se activará cuando reciba la imagen adecuada. Si echamos un vistazo al dataset de la Ilustración 12, este filtro se activa y genera un mapa de características positivo. Ilustración 12 – Mapa de características Toda esta información acerca de filtros y datasets está disponible en la plataforma microscope.openAI.com que permite visualizar de manera intuitiva diversas redes neuronales y cuáles son los filtros que utilizan. Al principio, en las capas iniciales, se observan filtros que se activan con cosas simples y a medida que avanzamos, estos van aumentando la complejidad. Como pasaba anteriormente, de manera análoga una neurona sola no hace nada, de igual manera un único filtro no hace nada, es el Deep Learning de la red lo que hace que las sucesivas iteraciones permitan la detección de objetos.
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 32 disponibles. Por norma general, se pueden tomar las siguientes consideraciones: doblar el ancho de la red, dobla las operaciones de coma flotante por segundo, pero duplicar el ancho o la resolución de entrada, multiplica por cuatro las operaciones de coma flotante por segundo. En el caso de EfficientNet, se ha realizado un estudio de los parámetros de su red y se ha establecido que la configuración óptima para el ancho, profundidad y resolución es: d=1.2 w=1.15 r=1.10 Esto significa, que si aumento la resolución en un 10% el ancho tiene que aumentar en un 15% y la profundidad en un 20 % y así estaríamos trabajando con una EfficientNet óptima. Lo que se quiere decir, es que el método de ajuste compuesto utilizado no modifica la arquitectura de la red, solamente modifica sus dimensiones ya que estas están fuertemente ligadas a la eficiencia de la red. Por lo que este método es aplicable y debería ser utilizado de ahora en adelante para ajustar las dimensiones de la red antes de ponerlas a funcionar y ser así más eficientes a la hora de realizar sus funciones. 2.3.3 BiPFN (Bidirectional Feature Piramid Network) Esto es un tipo de arquitectura piramidal que utiliza la red neuronal EfficientDet, pero existen muchas otras las cuales vamos a explicar. 2.3.3.1 Arquitectura de redes piramidales Algo muy común y utilizado dentro de las redes neuronales convolucionales, son las FPN (Feature Piramid Network) es una estructura dentro de la red, que se especializa en detectar características. Dentro de esta arquitectura englobamos las diferentes operaciones de convolución y los mapas de características para detectar objetos a lo largo de la pirámide de detección. Se crea una estructura piramidal que, trabajando conjuntamente, facilita y da una mejor precisión a la hora de detectar objetos en una imagen. Este concepto de red piramidal es independiente a la red utilizada y es aplicable a todas las redes neuronales para la detección de objetos. Existe un flujo de información a lo largo de esta pirámide y podemos observar lo que se conoce como 2 caminos. Ilustración 24 – Caminos de detección
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 33 Como se puede ver en la ilustración 23 tenemos 2 caminos, uno ascendente, otro descendente y unas conexiones laterales: Botton-up pathway: es el camino ascendente, en él se realizan las operaciones de convolución de manera sucesiva. La salida de la convolución de cada etapa capa será la entrada de los mapas de características utilizados en el camino descendente. Top-down pathway: en este camino descendente las características de más alta resolución se muestrean y son entradas de los mapas de características, las conexiones laterales hacen una fusión de los mapas de características con la convolución de la capa correspondiente. La operación de fusión, y los mapas de características no son más que otra operación de convolución, ya sea matricial, como en el caso de los mapas de características o convolución 1x1, para fusionar una operación concreta. 2.3.3.2 Arquitecturas piramidales Teniendo esto en cuenta, existen diferentes acercamientos y algoritmos que realizan esta función de diferente manera, cada vez se va buscando más precisión y sobre todo eficiencia. El camino de la eficiencia intenta reducir las operaciones de convolución innecesarias y que solo llevan el acarreo de una característica deseada. Para entender este problema se necesita entender cómo se realiza la fusión de características en la red, se trata de fusionar diferentes características de diferente resolución. Ilustración 25 – Características de entrada Donde cada elemento es una característica de nivel li y se intenta dar solución a la agregación de características en la salida de la capa. Ilustración 26 – Características de salida Ilustración 27 – aquitecturas de fusión de características Como podemos observar en la Ilustración 26, existen diferentes topologías que intentan cada una a su manera arreglar el problema de la eficiencia y precisión dentro de la red neuronal.
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 34 2.3.3.2.1 PaNet PaNet (Path Aggregation Network): como vemos en la figura, esta red da una segunda oportunidad a las características de bajo nivel, para que puedan subir y ser reevaluadas de nuevo. Explicado de manera más profunda. Ilustración 28 – Arquitectura de FPN Como se ve en la ilustración 27, esta arquitectura, cuenta con 5 entradas P3-P7 donde cada nodo de entrada representa una característica de entrada con un nivel de resolución determinado y como se ha dicho, esta arquitectura fusiona las características de manera descendente. Ilustración 29 – Características de salida FPN Lo que ocurre es que en FPN, solo tenemos camino descendente, luego las características de bajo nivel no tienen oportunidad de ser reevaluadas y pierden importancia en el camino. Esto se resuelve con la arquitectura de PANet. 2.3.3.2.2 PaNet y NAS-FPN En estos modelos se da una nueva oportunidad y se agrega un camino ascendente para que las características de bajo nivel puedan ser reevaluadas de nuevo. Ilustración 30 – Aquitectura PaNet y FPN En el caso de PaNet es justo lo que acabamos de explicar y en NAS-FPN (Neural Archithecture Search–Feature Piramid Network), se realiza una búsqueda de cuáles son los mejores caminos para
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 35 hacer la fusión de características mediante machine learning, es decir la propia red hace machine learning para ver como fusionar mejor sus características y tomar mejores decisiones, pero esto es un proceso lento y hace que el tiempo de ejecución sea alto. Luego se decide simplificar PaNet y crear PaNet Simplified aplicando un concepto muy fácil, aquellos nodos a los que solo les llega una característica de entrada se pueden quitar, con otras palabras, aquellos que no hacen fusión de características no aportan información relevante para el objetivo final de la red. Ilustración 31 – Simplified PANet 2.3.3.2.3 BiFPN Partiendo de la premisa de Simplified PANet, se eliminan los nodos que no realizan fusión de características. Cómo se puede observar, se han quitado aquellos nodos que solo reciben un input de entrada o característica de entrada ya que no aportan mucho y se dejan solo aquellos que tienen varios inputs o lo que podríamos decir una fusión de características. Además, el bloque básico de la red se repite tantas veces como hace falta, lo que hace más potente y precisa la detección de características. Ilustración 32 – Aquitectura BiFPN Además, es interesante, porque como se ve en la Ilustración 31 existen unos saltos entre neuronas (skip connections) esto permite que, si tenemos una característica muy buena que queremos seguir manteniendo, en lugar de mantenerla en una operación iterativa que lo único que sirve es para recordar esa característica y que no se pierda, se guarda y se lleva de forma rápida a la fusión con otra característica deseada en un punto de la red. Lo cual es un ahorro de cálculo computacional. La última de las optimizaciones y lo que da nombre a esta red, existe un flujo bidireccional de información, un camino ascendente y otro descendente, que se tratan de manera independiente y hacen más potente la fusión de características.
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 36 2.3.4 EfficientDet Usando el método de ajuste compuesto, la arquitectura básica de EfficientNet y la arquitectura de fusión de características de características de BiFPN, llegamos por fin a tener la deseada EfficientDet Ilustración 33 – Arquitectura EfficientDet Como podemos ver en la Ilustración, se toma como red base EfficientNet y para clasificar las características utilizamos la arquitectura de fusión de BiFPN. Usando el método de ajuste compuesto que se explicó anteriormente, si tomamos el coeficiente Φ, para escalar las 3 dimensiones de la red a la vez y de forma balanceada. Por último, usando las fórmulas anteriores de las Ilustraciones 22 y 20. Se obtienen las siguientes fórmulas para escalar partiendo de EfficientNet. Ilustración 34 – Formulas para escalar ancho y profundidad En profundidad y ancho como se observa en la Ilustración 33. Ilustración 35 – Fórmula para escalar resolución Para hacerlo en resolución se ha tomado la fórmula que se ve en la ilustración 34. Así llegamos a la familia de redes neuronales de EfficientDet, las diferentes versiones salen de dar a Φ valores entre 0 y 6. De forma que las dimensiones de la red quedan de la siguiente manera: Ilustración 36 Familia de redes de EfficientDet Como podemos ver, se realiza un ajuste de las dimensiones de la red eficiente y de forma balanceada
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 37 obteniendo una nueva red, que consigue resultados de eficiencia mejores además de conseguir un menor uso de los recursos y de tiempo de ejecución. Ilustración 37 – Precisión de EfficientDet 2.3.5 Conclusión del estudio teórico En base a la teoría expuesta anteriormente, se podría afirmar que EfficientDet es una red precisa y que requiere menos parámetros que otras redes neuronales similares, ya que usa menos potencia computacional para hacer los cálculos. En la siguiente sección aplicaremos los conocimientos teóricos anteriormente expuestos, para testear EfficientDet y verificar que los resultados obtenidos son tal y como hemos formulado hasta ahora. Realizaremos dos simulaciones diferentes, primero entrenaremos EfficientDet en comparación con los resultados obtenidos por Lucía Reina López en su trabajo de Aplicación Android y Servicio Web Spring para la detección y registro de señales de tráfico de velocidad usando Deep Learning con tiny-yolov3 y OpenCV y en segundo lugar simularemos EfficientDet y Yolov-3 en un mismo entorno y con la misma configuración inicial y verificar que los resultados obtenidos confirman la teoría expuesta.
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 38 3 SIMULACIÓN COMPARATIVA a simulación que se va a realizar en este trabajo final de grado consiste en tratar de obtener unos mejores resultados en cuanto a precisión y eficiencia sobre un dataset de imágenes de señales de tráfico obtenido gracias a la ayuda de María Reina López en su trabajo Aplicación Android y Servicio Web Spring para la detección y registro de señales de tráfico de velocidad usando Deep Learning con tiny-yolov3 y OpenCV, que nos fue cedido para poder realizar este estudio. En este estudio se seleccionó dentro del dataset de 5000 imágenes un lote de 1000 imágenes de señales de tráfico, que se etiquetaron utilizando el software de RoboFlow, para después ser utilizado en entrenar la red y obtener los resultados deseados. Debido a que RoboFlow no permite etiquetar más de 1000 imágenes, se limitó el dataset inicial y se seleccionaron de manera equitativa 100 imágenes de cada tipo de señal de tráfico disponible (10 tipos de señales). En definitiva, comprobaremos de manera experimental la hipótesis planteada, si EfficientDet es mejor en cuanto a precisión y eficiencia para la detección de señales de tráfico. Si se confirma el resultado esperado, deberíamos fomentar el uso de tecnologías que sean más eficientes y no malgasten recursos computacionales innecesarios, ya que, aunque todos queremos resultados inmediatos, es relevante que estos puedan ser obtenidos de manera eficiente. 3.1 Entrenamiento EfficientDet Para poder realizar el entrenamiento de una red neuronal, esta tiene que ser alimentada con un gran número de imágenes. Cuanta más información reciba, mejor ajustará sus parámetros en el proceso de entrenamiento, para que luego cuando sea necesario, pueda trabajar sin supervisión tomando decisiones inteligentes. En nuestra simulación el objetivo final de esta red es que pueda detectar señales de tráfico en tiempo real. Para poder realizar este estudio se ha hecho uso de dos plataformas que ofrecen APIs, una para la correcta etiquetación de imágenes, RoboFlow y TensorFlow, librería de código abierto que nos proporciona el código necesario para ejecutar las redes neuronales. Además, hemos utilizado Google Colab, herramienta de Google que nos permite usar la GPU de un ordenador con conexión en remoto, y así poder realizar operaciones complejas mucho más rápido. En primer lugar, se etiquetaron las imágenes distinguiendo 10 clases de señales diferentes. L
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 39 Ilustración 38 – Clases de señales En RoboFlow, se etiquetaron una a una de manera manual. Hay que marcar dentro de un recuadro la zona de la imagen que es interesante para nosotros y darle una clase determinada y así con las 1000 imágenes. Ilustración 39- Clases en RoboFlow Ilustración 40 – Imagen etiquetada Tras realizar el etiquetado de todas las imágenes se genera una dataset que es exportable a otras plataformas en diferentes formatos según la red que queramos entrenar.
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 40 3.1.1 Entrenamiento en Google Colab Gracias al uso de la plataforma de Google Colab ha sido posible ejecutar el código y desarrollar la idea expuesta en este proyecto. Al final lo que pretendemos explicar es por qué la arquitectura de EfficientDet y sobre todo el modelo de ajuste compuesto propuesto para este caso obtiene mejores resultados que Yolov3 detectando señales de tráfico. Hemos usado un código disponible en la web de Roboflow, la cual cuenta con múltiples ayudas para que cualquier usuario pueda experimentar con las redes neuronales y entrenarlas. 3.1.1.1 Ejecución de EfficientDet con respecto al trabajo previo Como se ha comentado anteriormente se ha utilizado la plataforma de Google Colab como entorno de ejecución. Se ha usado en este proyecto para entrenar nuestra red neuronal EfficientDet y Yolov-3 ya que podemos usar la potente 12GB NVIDIA Tesla K80 GPU durante 12h seguidas. 1. En primer lugar, hemos importado desde TensorFlow todas las librerías necesarias para llevar a cabo el entrenamiento de la red necesario. import os import pathlib # Clone the tensorflow models repository if it doesn't alread y exist if "models" in pathlib.Path.cwd().parts: while "models" in pathlib.Path.cwd().parts: os.chdir('..') elif not pathlib.Path('models').exists(): !git clone --depth 1 https://github.com/tensorflow/models En este código se clona el repositorio de TensorFlow en el que está la estrucuta y librerías de la red. 2. Descargamos el enlace con el dataset de imágenes de RoboFlow. #Downloading data from Roboflow %cd /content !curl - L "https://app.roboflow.com/ds/Yu5BX8HLjP?key=VC82kha3Mh" > r oboflow.zip; unzip roboflow.zip; rm roboflow.zip Con el comando curl descargamos desde RoboFlow todo el dataset de señales de tráfico para poder entrenar la red. 3. Establecemos la carpeta de donde viene la información de nuestro proyecto. test_record_fname = '/content/valid/signals.tfrecord' train_record_fname = '/content/train/signals.tfrecord' label_map_pbtxt_fname = '/content/train/signals_label_map.pbt xt'
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 41 Se establecen las carpetas en las que se van a guardar las etiquetas de las imágenes y los resultados del entrenamiento. 4. Establecemos los parámetros de la red neuronal EfficientDet para que queden fijados antes de comenzar el entrenamiento. ##change chosen model to deploy different models available in the TF2 object detection zoo MODELS_CONFIG = { 'efficientdet-d0': { 'model_name': 'efficientdet_d0_coco17_tpu-32', 'base_pipeline_file': 'ssd_efficientdet_d0_512x512_co co17_tpu-8.config', 'pretrained_checkpoint': 'efficientdet_d0_coco17_tpu- 32.tar.gz', 'batch_size': 8 }, 'efficientdet-d1': { 'model_name': 'efficientdet_d1_coco17_tpu-32', 'base_pipeline_file': 'ssd_efficientdet_d1_640x640_co co17_tpu-8.config', 'pretrained_checkpoint': 'efficientdet_d1_coco17_tpu- 32.tar.gz', 'batch_size': 16 }, 'efficientdet-d2': { 'model_name': 'efficientdet_d2_coco17_tpu-32', 'base_pipeline_file': 'ssd_efficientdet_d2_768x768_co co17_tpu-8.config', 'pretrained_checkpoint': 'efficientdet_d2_coco17_tpu- 32.tar.gz', 'batch_size': 16 }, 'efficientdet-d3': { 'model_name': 'efficientdet_d3_coco17_tpu-32', 'base_pipeline_file': 'ssd_efficientdet_d3_896x896_co co17_tpu-32.config', 'pretrained_checkpoint': 'efficientdet_d3_coco17_tpu- 32.tar.gz', 'batch_size': 16 } } #in this tutorial we implement the lightweight, smallest stat e of the art efficientdet model #if you want to scale up tot larger efficientdet models you w ill likely need more compute! chosen_model = 'efficientdet-d0'
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 48 El modelo ha detectado una señal de 80 km/hora correctamente en 0.37 segundos. 2. Si realizamos la misma operación, pero con Yolov-3. img_path = "TrafficSignals/test/signals_00369_jpg.rf.99ae139e5530a 25980b7acdd56a4317c.jpg"; duration, scores, labels, boxes = gtf.Predict(img_path, class_list, vis_ threshold=0.2); Obtenemos el resultado que se puede ver en la ilustración. Ilustración 46 – Tiempo de respuesta Yolov-3 Se ha detectado la señal de 80km/hora en 0,89 segundos, tiempo superior al de EfficientDet. 4.1.2.1 Análisis tiempo de respuesta Después de testear ambas redes, pasándole la misma imagen a ambas, se ha obtenido que EfficientDet tardó en detectar una señal de 80km/h en 0.37 segundos y Yolov-3 tardó 0.89 segundos. Por tanto, EfficientDet ha sido un 140% más rápido que Yolov3 en cuanto al tiempo que tardan en clasificar una imagen. Figure 2 0 0,2 0,4 0,6 0,8 1 EfficientDet Yolov-3 tiempo de respuesta
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 49 Este parámetro analizado es muy importante, pues si detectamos antes un objeto, en nuestro caso una señal de velocidad, el algoritmo encargado de procesar esta información podrá actuar antes, con lo cual estaríamos creando un sistema más seguro para las personas. Cuanto antes se detecten los objetos mejor. 4.1.3 Precisión Por último, para demostrar y cerrar el eje de comparaciones entre EfficientDet y Yolov-3 se mostrarán los resultados de precisión obtenidos durante el entrenamiento. Para ello seguiremos los siguientes pasos. 1- Ejecutamos el siguiente código para obtener la precisión de cada señal durante el entrenamiento. for f in os.listdir('test'): if f.endswith('.jpg'): duration, scores, labels, boxes = gtf.Predict('test/'+f, class_list, vis_threshold=0.2); scores = scores.tolist() boxes = boxes.tolist() labels = labels.tolist() with open('mAP/input/detection-results/' + f[:- 4] + '.txt', 'w') as out_file: #write detection result for i in range(len(scores)): #print(scores) line = class_list[labels[i]] + ' ' + str(scores[i]) + ' ' + str(' '.join([str(j) for j in boxes[i]])) out_file.write(line) if i < len(scores) - 1: out_file.write('\n') Se obtuvo el siguiente resultado. Ilustración 47 – Precisión EfficientDet
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 50 2. Si hacemos lo mismo para Yolov-3. %cd .. %cd yolov3/ !python3 detect.py --weights weights/last.pt -- source=../test/ --names=../train/roboflow_data.names --save-txt #reorder and write to mAP calc %cd .. %rm -rf mAP/input/detection-results/ %mkdir mAP/input/detection-results/ for f in os.listdir('yolov3/output/'): if f.endswith('txt'): with open('mAP/input/detection-results/' + f[:- 8] + '.txt', 'w') as out_file: with open('yolov3/output/' + f) as read_file: lines = read_file.readlines() for line in lines: line = line.split() out_file.write(class_list[int(line[4]) + 1] + ' ' + lin e[5] + ' ' + ' '.join(line[0:4])) out_file.write('\n') %cd mAP #!python scripts/extra/intersect-gt-and-dr.py !python main.py -na En este fragmento de código se lee el archivo correspondiente que contiene los valores de precisión obtenidos durante el entrenamiento y se obtiene el siguiente resultado. Ilustración 48 – Precisión de Yolov-3 4.1.3.1 Análisis de resultados de precisión Tras observar los resultados, se puede ver que EfficientDet ha obtenido más precisión tanto
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 51 individual, si vemos los datos de cada señal por separado, como precisión media total. Tenemos un 74,94% de precisión media en EfficientDet, frente a un 66,79 % de precisión media total en Yolov-3. Esto quiere decir que EfficientDet se va a equivocar menos que Yolov-3 a la hora de detectar una señal de tráfico. EfficientDet va a cometer menos errores a la hora de detectar señales de tráfico, siendo más seguro que Yolov-3. Figure 3 4.2 Reevaluación de resultados Tras haber realizado todas las simulaciones necesarias, hemos obtenido que EfficientDet es más rápida en la detección de señales de tráfico, cualidad vital, ya que detectar señales de tráfico en menos tiempo en seguridad vial es crucial. En cuestión de milisegundos se tienen que tomar decisiones de suma importancia. También es un sistema que requiere menos tiempo de entrenamiento, luego puede ponerse a funcionar antes y es más eficiente en el uso de recursos. Por último y no menos importante es más preciso, ya que comete menos errores a la hora de etiquetar y detectar las señales de tráfico correspondientes. Tiempo de ejecución Tiempo de respuesta mAp EfficientDet 37 minutos 0,37 67,79 % Yolov-3 109 minutos 0,89 74,94 % Figure 4 En esta tabla podemos ver a modo de resumen cómo EfficientDet es superior en todos los aspectos analizados; por lo tanto, sería más conveniente usar EfficientDet antes que Yolov-3 para la detección de señales de tráfico. 0,00% 20,00% 40,00% 60,00% 80,00% yolov3 Efficiendet mAP
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 52 5 CONCLUSIÓN Y LÍNEAS FUTURAS as redes neuronales han supuesto un avance en lo que a resolución de problemas de manera automática y rápida se refiere, pues cuestiones que antes requerían de la actuación humana, ahora pueden ser realizadas por un algoritmo inteligente que funcione de manera autónoma. EfficientDet es una red neuronal que mejora en prestaciones a otras redes neuronales y en concreto a Yolov-3, por lo que para futuras implementaciones de software para la detección de señales de tráfico en tiempo real conviene usar redes que tengan un mejor comportamiento ante estímulos externos. La aplicación del método de ajuste compuesto para convertir otras redes neuronales en su versión eficiente supondría un importante ahorro en recursos computacionales. En lugar de crear nuevos algoritmos con mayor potencia, se podría mejorar los ya existentes ajustando las dimensiones de las redes neuronales. Asimismo, la consecuente agilización del tiempo de uso de los equipos que albergan los algoritmos de machine learning, y por tanto la optimización de la energía consumida, conduciría a una reducción del impacto medioambiental y de la huella de carbono. Como líneas futuras dentro del marco de este estudio, podría realizarse el entrenamiento de la red para la detección de señales de tráfico con dos datasets etiquetados de diferente manera, cruzando los resultados para obtener una mayor precisión. En primer lugar, un dataset preparado para que la red detecte la propia señal, círculo de bordes rojos con interior blanco, con otro dataset especializado en detectar los números de las señales; así, con ambos resultados de entrenamiento, se podrían tomar decisiones con mayor precisión. Otra potencial mejora sería la de aplicar el método de ajuste compuesto a otras redes más complejas y de mayor precisión para tratar de convertirlas en su versión eficiente. Para darle una continuación a los resultados obtenidos en este trabajo, sería muy interesante probar la aplicación en condiciones reales, ya que en este escenario podríamos demostrar la fiabilidad real de este algoritmo especializado en identificar señales de tráfico. L
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 53 ANEXO A: CÓDIGO DE EJECUCIÓN DE LAS REDES NEURONALES Código para la ejecución de EfficientDet en Google Colab A.1 Código de EficientDet 1. Importamos desde TensorFlow las dependencias para crear EfficientDet. import os import pathlib # Clone the tensorflow models repository if it doesn't alread y exist if "models" in pathlib.Path.cwd().parts: while "models" in pathlib.Path.cwd().parts: os.chdir('..') elif not pathlib.Path('models').exists(): !git clone --depth 1 https://github.com/tensorflow/models # Install the Object Detection API %%bash cd models/research/ protoc object_detection/protos/*.proto --python_out=. cp object_detection/packages/tf2/setup.py . python -m pip install . 2. Importamos todas las librerías necesarias para poder realizar los cálculos y visualizar los resultados. import matplotlib import matplotlib.pyplot as plt import os import random import io import imageio import glob import scipy.misc import numpy as np from six import BytesIO from PIL import Image, ImageDraw, ImageFont from IPython.display import display, Javascript from IPython.display import Image as IPyImage import tensorflow as tf
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 54 from object_detection.utils import label_map_util from object_detection.utils import config_util from object_detection.utils import visualization_utils as viz _utils from object_detection.utils import colab_utils from object_detection.builders import model_builder %matplotlib inline 3. Ejecutamos el builder de testeo de la red, para ver si todo los ejecutado anteriormente fue correctamente. #run model builder test !python /content/models/research/object_detection/builders/mo del_builder_tf2_test.py 4. Instalamos más dependencias para la correcta visualización de imágenes y traducir las anotaciones que hace RoboFlow en nuestro dataset. def load_image_into_numpy_array(path): """Load an image from file into a numpy array. Puts image into numpy array to feed into tensorflow graph. Note that by convention we put it into a numpy array with s hape (height, width, channels), where channels=3 for RGB. Args: path: a file path. Returns: uint8 numpy array with shape (img_height, img_width, 3) """ img_data = tf.io.gfile.GFile(path, 'rb').read() image = Image.open(BytesIO(img_data)) (im_width, im_height) = image.size return np.array(image.getdata()).reshape( (im_height, im_width, 3)).astype(np.uint8) def plot_detections(image_np, boxes, classes, scores, category_index, figsize=(12, 16), image_name=None): """Wrapper function to visualize detections. Args:
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 55 image_np: uint8 numpy array with shape (img_height, img_w idth, 3) boxes: a numpy array of shape [N, 4] classes: a numpy array of shape [N]. Note that class indi ces are 1-based, and match the keys in the label map. scores: a numpy array of shape [N] or None. If scores=No ne, then this function assumes that the boxes to be plotted are groundtruth boxes and plot all boxes as black with no classes or sc ores. category_index: a dict containing category dictionaries ( each holding category index `id` and category name `name`) keyed by category indices. figsize: size for the figure. image_name: a name for the image file. """ image_np_with_annotations = image_np.copy() viz_utils.visualize_boxes_and_labels_on_image_array( image_np_with_annotations, boxes, classes, scores, category_index, use_normalized_coordinates=True, min_score_thresh=0.8) if image_name: plt.imsave(image_name, image_np_with_annotations) else: plt.imshow(image_np_with_annotations) 5. Descargamos nuestro dataset de RoboFlow. #Downloading data from Roboflow %cd /content !curl - L "https://app.roboflow.com/ds/Yu5BX8HLjP?key=VC82kha3Mh" > r oboflow.zip; unzip roboflow.zip; rm roboflow.zip 6. Configuramos el modelo de EfficientDet que vamos a entrenar. ##change chosen model to deploy different models available in the TF2 object detection zoo MODELS_CONFIG = { 'efficientdet-d0': { 'model_name': 'efficientdet_d0_coco17_tpu-32', 'base_pipeline_file': 'ssd_efficientdet_d0_512x512_co co17_tpu-8.config',
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 56 'pretrained_checkpoint': 'efficientdet_d0_coco17_tpu- 32.tar.gz', 'batch_size': 8 }, 'efficientdet-d1': { 'model_name': 'efficientdet_d1_coco17_tpu-32', 'base_pipeline_file': 'ssd_efficientdet_d1_640x640_co co17_tpu-8.config', 'pretrained_checkpoint': 'efficientdet_d1_coco17_tpu- 32.tar.gz', 'batch_size': 16 }, 'efficientdet-d2': { 'model_name': 'efficientdet_d2_coco17_tpu-32', 'base_pipeline_file': 'ssd_efficientdet_d2_768x768_co co17_tpu-8.config', 'pretrained_checkpoint': 'efficientdet_d2_coco17_tpu- 32.tar.gz', 'batch_size': 16 }, 'efficientdet-d3': { 'model_name': 'efficientdet_d3_coco17_tpu-32', 'base_pipeline_file': 'ssd_efficientdet_d3_896x896_co co17_tpu-32.config', 'pretrained_checkpoint': 'efficientdet_d3_coco17_tpu- 32.tar.gz', 'batch_size': 16 } } #in this tutorial we implement the lightweight, smallest stat e of the art efficientdet model #if you want to scale up tot larger efficientdet models you w ill likely need more compute! chosen_model = 'efficientdet-d0' num_steps = 30000 #The more steps, the longer the training. I ncrease if your loss function is still decreasing and validat ion metrics are increasing. num_eval_steps = 500 #Perform evaluation after so many steps model_name = MODELS_CONFIG[chosen_model]['model_name'] pretrained_checkpoint = MODELS_CONFIG[chosen_model]['pretrain ed_checkpoint'] base_pipeline_file = MODELS_CONFIG[chosen_model]['base_pipeli ne_file'] batch_size = MODELS_CONFIG[chosen_model]['batch_size'] #if yo u can fit a large batch in memory, it may speed up your train ing
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 57 7. Descargamos los pesos preentrenados para EfficientDet. #download pretrained weights %mkdir /content/models/research/deploy/ %cd /content/models/research/deploy/ import tarfile download_tar = 'http://download.tensorflow.org/models/object_ detection/tf2/20200711/' + pretrained_checkpoint !wget {download_tar} tar = tarfile.open(pretrained_checkpoint) tar.extractall() tar.close() 8. Descargamos el fichero básico de configuración de la red. O#download base training configuration file %cd /content/models/research/deploy download_config = 'https://raw.githubusercontent.com/tensorfl ow/models/master/research/object_detection/configs/tf2/' + ba se_pipeline_file !wget {download_config} 9. Obtenemos los datos necesarios para sobre escribir el fichero de configuración adaptado a nuestro caso. #prepare pipeline_fname = '/content/models/research/deploy/' + base_pi peline_file fine_tune_checkpoint = '/content/models/research/deploy/' + m odel_name + '/checkpoint/ckpt-0' def get_num_classes(pbtxt_fname): from object_detection.utils import label_map_util label_map = label_map_util.load_labelmap(pbtxt_fname) categories = label_map_util.convert_label_map_to_categori es( label_map, max_num_classes=90, use_display_name=True) category_index = label_map_util.create_category_index(cat egories) return len(category_index.keys()) num_classes = get_num_classes(label_map_pbtxt_fname) 10. Escribimos en el fichero de configuración los datos necesarios. #write custom configuration file by slotting our dataset, mod el checkpoint, and training parameters into the base pipeline file import re
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 64 %cp test/*jpg mAP/input/images-optional/ %cp test/*jpg mAP/input/images/ #%ls test %cp test/*jpg mAP/input/images-optional/ %cd mAP/scripts/extra/ !python convert_gt_yolo.py %cd /content/mAP %cat input/groundtruth/1c0060ef868bdc326ce5e6389cb6732f_jpg.rf.a07af6147d4a79376c18 2d2d95c639ec.txt %rm -rf mAP/input/detection-results/ %mkdir mAP/input/detection-results/ 12. Código para obtener la precisión de EfficientDet. for f in os.listdir('test'): if f.endswith('.jpg'): duration, scores, labels, boxes = gtf.Predict('test/'+f, class_list, vis_threshold=0.2); scores = scores.tolist() boxes = boxes.tolist() labels = labels.tolist() with open('mAP/input/detection-results/' + f[:- 4] + '.txt', 'w') as out_file: #write detection result for i in range(len(scores)): #print(scores) line = class_list[labels[i]] + ' ' + str(scores[i]) + ' ' + str(' '.join([str(j) for j in boxes[i]])) out_file.write(line) if i < len(scores) - 1: out_file.write('\n') 13. Código para enseñar los resultados. %cd mAP/ #evaluation results for EfficientDet !python main.py -na 14. Si hacemos lo mismo para Yolov-3. %cd .. %cd yolov3/ !python3 detect.py --weights weights/last.pt -- source=../test/ --names=../train/roboflow_data.names --save-txt #reorder and write to mAP calc %cd .. %rm -rf mAP/input/detection-results/ %mkdir mAP/input/detection-results/ for f in os.listdir('yolov3/output/'):
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 65 if f.endswith('txt'): with open('mAP/input/detection-results/' + f[:- 8] + '.txt', 'w') as out_file: with open('yolov3/output/' + f) as read_file: lines = read_file.readlines() for line in lines: line = line.split() out_file.write(class_list[int(line[4]) + 1] + ' ' + line [5] + ' ' + ' '.join(line[0:4])) out_file.write('\n') %cd mAP #!python scripts/extra/intersect-gt-and-dr.py !python main.py -na
Ajuste de la eficiencia en redes neuronales para la detección de señales de tráfico. Comparativa de rendimiento de Yolov-3 y EfficientDet. 66 REFERENCIAS [1] S. Mellado Contigioso, Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE, Sevilla: Universidad de Sevilla, 2020 [2] Lucia Reina Lopez, Aplicación Android y Servicio Web Spring para la detección y registro de señales de tráfico de velocidad usando Deep Learning con tiny-yolov3 y OpenCV, Sevilla: Universidad de Sevilla, 2020 [3] Ángel Moreno Prieto, Detección de Objetos con TinyYOLOv3 sobre Raspberry Pi 3, Sevilla, Universidad de Sevilla, 2020 [4] https://github.com/AlexeyAB/darknet [5] https://arxiv.org/pdf/1911.09070.pdf [6] https://arxiv.org/pdf/1905.11946.pdf [7] https://microscope.openai.com/ [8] https://towardsdatascience.com/review-fpn-feature-pyramid-network-object-detection-262fc7482610 [9] https://github.com/google/automl/master/efficientdet://github.com/google/automl/tree/master/efficientdet [10] https://ai.googleblog.com/2019/05/efficientnet-improving-accuracy-and.html [11]https://colab.research.google.com/driveAX3ol7gcZ7qmKuwn8zUld524sUZ#scrollTo=D9MM2WA49zyj [12] https://paperswithcode.com/paper/efficientdet-scalable-and-efficient-object#code [13] https://www.iro.umontreal.ca/~vincentp/ift3395/lectures/backprop_old.pdf [14]https://jonathan-hui.medium.com/understanding-feature-pyramid-networksobjectdetectionfpn227b9106c [15]https://playground.tensorflow.org