scieee AI-readable full text Open interactive document viewer

Aproximación a técnicas de visión por computador en vehículos autónomos

Aragüete Gamero, Eduardo Andrés

Abstract

En este proyecto se va realizar un estudio sobre las tecnologías implementadas gracias a la visión por computador en los vehículos autónomos como la detección de carriles y la detección de señales. Este es un campo de la industria donde muchísimas empresas invierten miles de millones en I+D+I con tal de lograr fabricar coches que puedan ser completamente autónomos, económicos y comerciales, aunque éste aún es un camino largo. Finalmente, respecto al tema de las tecnologías a estudiar, se realizarán simulaciones sobre la visión por computador, a modo de primera aproximación, para comprender mejor su funcionamiento y posible potencial. Para ello se implementará un algoritmo de detección de carriles o una red neuronal en una aplicación móvil en android que permita la detección de señales en tiempo real.

Full text

Proyecto Fin de Carrera Ingeniería de Telecomunicación Formato de Publicación de la Escuela Técnica Superior de Ingeniería Autor: F. Javier Payán Somet Tutor: Juan José Murillo Fuentes Dep. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2013 Trabajo Fin de Grado Grado en Ingeniería Electrónica, Robótica y Mecatrónica Aproximación a técnicas de visión por computador en vehículos autónomos Autor: Eduardo Andrés Aragüete Gamero Tutor: Federico Cuesta Rojo Dpto. Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2021 Trabajo Fin de Grado Grado en Ingeniería Electrónica, Robótica y Mecatrónica Aproximación a técnicas de visión por computador en vehículos autónomos Autor: Eduardo Andrés Aragüete Gamero Tutor: Federico Cuesta Rojo Profesor Titular Dpto. Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2021 Trabajo Fin de Grado: Aproximación a técnicas de visión por computador en vehículos autónomos Autor: Eduardo Andrés Aragüete Gamero Tutor: Federico Cuesta Rojo El tribunal nombrado para juzgar el trabajo arriba indicado, compuesto por los siguientes profesores: Presidente: Vocal/es: Secretario: acuerdan otorgarle la calificación de: El Secretario del Tribunal Fecha: Agradecimientos Am i padre Alfredo y a mi madre Belinda, por ser un apoyo constante a lo largo de mi vida, además de una fuente de inspiración y por realizar un esfuerzo sempiterno para que mis hermanos y yo hayamos tenido y tengamos las mejores oportunidades. A los docentes implicados con su alumnado por animar y comprender al estudiante permitiendo que el camino nos sea más llano y fácil. Finalmente, agradecer a todas las personas que conocí y que me ayudaron o me permitieron vivir tan buenos momentos aquí en Sevilla. Eduardo Andrés Aragüete Gamero Sevilla, 2021 I Resumen En este proyecto se va realizar un estudio sobre las tecnologías implementadas gracias a la visión por computador en los vehículos autónomos como la detección de carriles y la detección de señales. Este es un campo de la industria donde muchísimas empresas invierten miles de millones en I+D+I con tal de lograr fabricar coches que puedan ser completamente autónomos, económicos y comerciales, aunque éste aún es un camino largo. Finalmente, respecto al tema de las tecnologías a estudiar, se realizarán simulaciones sobre la visión por computador, a modo de primera aproximación, para comprender mejor su funcionamiento y posible potencial. Para ello se implementará un algoritmo de detección de carriles o una red neuronal en una aplicación móvil en android que permita la detección de señales en tiempo real. II Abstract In this project, an study will be carried out about the different technologies that are implemented thanks to computer vision in the autonomous vehicles such as lane detection or traffic signs detection. This is a field of the industry where lots of companies invest their money on I+D+I with the purpose of being able to make cars that get to be completely autonomous, cheap and commercials, although this is a long journey yet. Finally, regarding the technologies to be studied, there will be some simulations about computer vision, as a kind of first aproximation, in order to understand better how it works and its possible potential. Hence, it’s going to be developed an algorithm that detects the road lanes or an android app where a convolutional neural network is able to distiniguish between different traffic signs. III 2Capítulo 1. Introducción y objetivos 1.2 Objetivos y estructura de la memoria Este proyecto se centra en el estudio y comprensión de las diversas tecnologías y métodos empleados en la consecución de la autonomía en vehículos. Para ello, se implementarán simulaciones que permitan validar las metodologías y asentar su conocimiento y aprendizaje, siendo el principal objeto de estudio la visión por computador. Figura 1.1 Diagrama de bloques necesario para dotar al vehículo de autonomía (Fuente: Attia et al, 2014). En la actualidad, existen muy diversas estrategias tanto en los sistemas de percepción como en los sistemas de control, para lograr que un vehículo sea completamente autónomo. Uno de esos múltiples enfoques existentes puede ser el mostrado en la figura 1.1. Como se puede apreciar, para conseguir la autonomía del vehículo se necesita un bloque de alto nivel de percepción conformado por los sensores de captan la información del entorno. Posteriormente, hará falta un bloque que sea capaz de obtener las referencias de velocidad y trayectoria gracias a esa información facilitada por el bloque superior de percepción, para después, en el bloque de control, seguir estas referencias generando a la salida las señales de control de giro del volante δ y la aceleración y el freno de los pedales, que permitirán controlar el vehículo. Cabe destacar que en el bloque de percepción se está dando por hecho, no sólo el proceso de captación de la información , si no que también se está realizando el procesamiento de imagen por computador que es nuestro objeto de estudio principalmente. La memoria por tanto, se estructurará de forma que en los temas 3, 4 y 5 se dedican al bloque de alto de nivel de percepción y a la visión por computador. En el tercer capítulo , se expondrán las diversas tecnologías existentes respecto a los distintos sensores usados en los vehículos, entre los que destaca la cámara. 1.2 Objetivos y estructura de la memoria 3 En el capítulo 4 , de hecho, gracias al uso de las cámaras, se realizarán dos aproximaciones para la detección de carriles a partir de un video, aplicando frame a frame procesamiento de imagen, segmentando y extrayendo características de la carretera. En el capítulo 5 , gracias a la visión artificial y las cámaras, se implementará una red neuronal tanto en PC como en un teléfono móvil para la detección de señales de tráfico en tiempo real. Figura 1.2 Fotografía de un vehículo autónomo de Uber en San Francisco, Fuente:AP. 2 Estado del Arte En este capítulo se pondrá de manifiesto la situación actual de los vehículos autónomos y las empresas y países involucrados en su investigación y desarrollo actual. Es necesario también hacer hincapié en que las tecnologías en este texto expuestas son aquellas que principalmente afectan a los sistemas de control del vehículo, más concretamente al bloque de alto nivel de percepción, y que no tienen nada que ver con aspectos mecánicos o electrónicos del automóvil. 2.1 El coche autónomo y sus tecnologías 2.1.1 Características El coche autónomo se caracteriza por la inteligencia de la que ha sido dotado, permitiéndole realizar ciertas tareas sin necesidad de que un ser humano intervenga. Esta inteligencia se consigue mediante un amplio uso de sensores y cámaras que captan una gran cantidad de información y que posteriormente ha de ser procesada en un ordenador de a bordo para finalmente tomar decisiones en consecuencia con el fin de poder ir desde un origen a un destino, cumpliendo con las normas de tráfico. Además la conducción no solo debe ser autónoma si que no debe ser suave, es decir, que no haya volantazos o grandes acelereaciones o frenadas innecesarias que hagan que la experiencia de usuario sea pésima. 2.1.2 Sensores La obtención de la información para poder captar y entender el entorno que rodea al vehículo, se realiza mediante diferentes instrumentos, entre ellos, los sensores, los cuales permiten conocer bien la geolocalización del coche en tiempo real mediante tecnologías como el GPS, o bien la distancia a otros vehículos u obstáculos en la carretera gracias a los sensores rádar o bien poder realizar un escaneado del espacio alrededor del vehículo gracias al uso de LIDAR. 2.1.3 Cámaras A pesar de que las cámaras también obtienen información del espacio que rodea al vehículo, al igual que los sensores, requieren de un procesamiento posterior diferente, y ese es el procesamiento de imagen, el cual nos permite obtener informaciones muy variadas del entorno. Las cámaras tienen este apartado especial ya que es un sensor pero no un sensor cualquiera, por ejemplo, una cámara nos permite determinar distancias, detectar objetos, visualizar el escenario, etc. Por así decirlo, la cámara y el procesamiento de imagen son posiblemente el sensor más completo y útil de todos, una herramienta esencial en los vehículos autónomos y 4 2.2 Niveles de automatización 5 que cuenta con un gran potencial. 2.2 Niveles de automatización Para poder normalizar la terminología en los vehículos autónomos, en 2016, la sociedad de ingenieros automotrices, SAE, decidió realizar una clasificación de los coches en función de la intervención requerida por el conductor para su funcionamiento. Esa clasificación consta de 6 niveles que van desde el nivel 0 donde el sistema automatizado simplemente puede emitir avisos hasta el nivel 5 donde la intervención humana es innecesaria y el sistema automatizado tiene un control total del vehículo. A continuación, se van a describir los 6 niveles de una forma más detallada. • Nivel 0: Conducción puramente humana. En este nivel, el vehículo se conduce única y exclusivamente por los humanos, y el sistema como máximo, emite ciertos avisos alertando de alguna situación como la posición del vehículo o de algún obstáculo, pero jamás el coche realizará alguna acción automatizada en su conducción. • Nivel 1: Ayuda a la conducción. En este nivel lo único que realiza el sistema son acciones que puedan modificar la conducción pero solo de forma auxiliar, por lo tanto el peso de la misma sigue recayendo en el conductor pero ciertas tecnologías, como el asistente de mantenimiento de carril o el control de crucero adaptativo, pueden intervenir al mismo tiempo. • Nivel 2: Automatización parcial. En este nivel el conductor no realiza las principales tareas al movimiento aunque sigue siendo necesaria su presencia. El vehículo ya puede tomar el control de si mismo pero sigue careciendo de sistemas de frenado frente a obstáculos, lo que requiere de presencia humana en el habitáculo. • Nivel 3: Automatización condicionada. La intervención humana sigue siendo necesaria aunque en este modo la automatización alcanza ya unos niveles de indepencia humana medianamente altos, aunque según qué situaciones se puede seguir requeriendo la acción del conductor. • Nivel 4: Automatización elevada. El vehículo ahora sí cuenta con un sistema principal que le permita conducir por si mismo sin intervención humana, y además cuenta con un sistema auxiliar de respaldo por si hubiese algún fallo, sin embargo, solo es posible en determinadas circunstancias, en las cuales la presencia del conductor ya no es necesaria. • Nivel 5: Automatización completa. En este nivel las personas acceden al habitáculo para introducir su destino y es el vehículo el que sin ninguna intervención humana, bajo cualquier circunstancia, transporta a los ocupantes del mismo hasta la ubicación deseada. 2.3 Historia del vehículo autónomo Ya en los años 80 del pasado siglo, en aquellas tan peculiares películas y series de Hollywood se fantaseaba con un futuro con máquinas del tiempo, patinetes voladores e incluso coches autónomos que además hablaban. Sin embargo (López,2020) la idea del coche autónomo no surge en esta década, si no que lo hace en Nueva York en 1925, gracias al ingeniero eléctrico Francis Houdina, el cual fabricó un coche con el que fue capaz de recorrer 19km hasta que se chocó con otro vehículo. Cabe destacar que el vehículo no era completamente autónomo, si no que se controlaba a distancia, pero la primera piedra ya había sido puesta. Ya en posteriores décadas surgieron nuevos modelos, de los cuales destaca el coche eléctrico del diseñador industrial Normal Bel Geddes, cuyo vehículo parecía más de ficción que real debido a su futurista diseño, aunque seguía siendo controlado por radiocontrol. 6Capítulo 2. Estado del Arte Figura 2.1 Coche autónomo - Concept Car (Fuente: Mercedes-Benz). No es hasta los años 80 cuando llegamos al coche diseñado por el alemán Ernst Dickmanns al cual se le considera el padre del vehículo autónomo actual. Dickmanns logró ya en 1987 recorrer calles sin tráfico en Munich gracias a un sistema de visión y computador a bordo que permitía ahora si, hablar de vehículos autónomos. Su posterior desarrollo derivó en nuevos y mejores proyectos como el que realizó en 1995, donde otro coche Mercedes-Benz recorrió 1000 kilómetros entre Munich y Copenague [7]. Figura 2.2 Kitt, "El coche Fantástico" (Fuente: Flickr.com). 2.4 Panorama Actual El campo de la tecnología y la electrónica se ha desarrollado y avanzado de forma exponencial en los últimos 60 años, permitiendo la creación de microprocesadores con alta capacidad computacional, sensores de alta fiabilidad y tamaño reducido, etc, haciendo posible la creación de sistemas inteligentes a bajo coste que además cambian radicalmente nuestra vida. Los vehículos no han sido ajenos a todos estos avances y desde hace décadas han ido incorporando más elementos informáticos y electrónicos hasta el punto en el que nos hallamos actualmente, donde ciertas compañías ya desarrollan muy seriamente prototipos completamente autónomos. 2.4 Panorama Actual 7 Entre las compañías que desarrollan este tipo de automóviles, destacan Google, con su empresa Waymo, Tesla o incluso otras marcas tradicionales como la asiática Toyota. A día de hoy, el ambíto de los vehículos autónomos no es un campo cuyo desarrollo toque a su fin y no solo es debido a los retos tecnológicos que supone la carretera o las señalizaciones si no que lo es también por la conectividad de los coches. Según se afirma (El coche autónomo de Google sin conexión a internet, s.f), la empresa Waymo, propiedad de Google, trabaja en un vehículo que no se conecte a internet, salvo en ciertos momentos, impidiendo a los "hackers" poder acceder a las funciones del propio automóvil. Esta idea es diametralmente opuesta a la concepción que el usuario pueda tener, ya que con la llegada de 5G y la capacidad de esta red para transmitir grandes cantidades de datos y reducir las latencias, se antoja complicado que los vehículos inteligentes no aprovechen tal tecnología[13]. Finalmente, el futuro de estos coches es realmente prometedor y las previsiones son alentadoras, de hecho, (El futuro del automóvil ya está aquí: inteligencia artificial y conducción autónoma, s.f) la Union Europea ha fijado el año 2030 como la fecha en la que realmente lleguen estos vehículos autónomos al mercado. Además es la propia UE la que pone encima de la mesa la que deberá ser la nueva legislación ya no solo respecto a seguridad vial si no a la responsabilidad de los accidentes, ya que si se elimina el factor humano de la ecuación, ¿es el dueño del vehículo quien se haga responsable de lo ocurrido o deberá ser la empresa desarolladora del software? [14]. 3 Sensores y percepción en el vehículo autónomo Es te capítulo trata sobre los principales sensores que conforman los vehículos autónomos siempre y cuando estos sensores sean utilizados para dotar de información al vehículo, bien porque sean necesarios para determinar la posición del mismo ó para poder determinar cómo es el entorno que rodea al coche. Además se estudiarán métodos de procesamiento de la información como SLAM ó Voxel Grid. Algunos de estos sensores que conforman los vehículos autónomos son: •Radar •GPS •IMU •LIDAR •Cámaras 3.1 Radar El principio de funcionamiento de estos sensores es muy sencillo, primero emiten una onda electromagnética que rebota y vuelve debido a un cambio de la constante dieléctrica, es decir, se han encontrado con un obstáculo y éste llega de vuelta al sensor transcurrido un cierto tiempo. Conociendo las características de velocidad de estas ondas, que es aproximadamente la velocidad de la luz cuando viajan por el aire, como es en el caso de los coches, podemos calcular la distancia al objeto contra el que ha chocado la onda y así saber donde se posiciona dicho obstáculo. A este fenómeno se le conoce como reflexión. 8 3.1 Radar 9 Figura 3.1 Funcionamiento de un radar (Fuente: istockphoto.com). Las principales ventajas de los sensores radar son varias, pero entre ellas destacan la gran rapidez en la detección. Esto es debido al uso de onda electromagnéticas que viajan aproximadamente a la velocidad de luz. Además este tipo de ondas no requieren de un medio y por tanto sus lecturas son indiferentes a cambios de temperatura y presión, es decir no les afecta la altitud ni la meteorología. Finalmente, otra de sus grandes ventajas es la gran capacidad de alcance que tienen, pudiendo incluso detectar objetos a cientos de metros de distancia. Por otro lado las desventajas de estos sensores es que dependen de una variación en la constante dieléctrica para que la onda no penetre y sea rebotada, por ello es que los radar que se encuentran con objetos de baja constante dieléctrica no reciben la señal de vuelta. Esto se soluciona con los radar de alta frecuencia. Según afirma (Pérez, 2021) Tesla, ya no usará más los radar para su conocida función de piloto automático, "Autopilot" y solo se basará en sistemas de cámaras que conformarán el hardware de su sistema base TeslaVision [11]. Figura 3.2 Radar en un vehículo (Fuente: pngwing.com). Uno de los principales problemas del radar respecto a tecnologías mas novedosas como el LIDAR es que no ofrecen una detallada resolución, sin embargo los sensores LIDAR tienen un alto precio. Una posible solución (Norman, 2021) sería mejorar esta resolución de los radar, cosa que la empresa Oculli, apoyada por la surcoreana Samsung, promete conseguir hasta 100 veces más resolución que los radar clásicos gracias al software [9] 10 Capítulo 3. Sensores y percepción en el vehículo autónomo 3.2 GPS El GPS o según sus propias siglas en castellano, Sistema de Posicionamiento Global, es una tecnología basada en el espacio que permite al usuario conocer su posición con gran precisión además de la hora, sin importar lugar o número de usuarios. Esta tecnología se basa en los satélites que orbitan alrededor de la Tierra, puestos de control en el propio planeta y los receptores GPS de los usuarios, El funcionamiento del GPS se basa en la trilateración. Para entender este concepto, es necesario explicar de primeras que se llama trilateración porque requiere de tres satélites para poder determinar la posición de un usuario. No debe confundirse con triangulación. El primero de los tres satélites, si se traslada el problema al 2D, emite una señal para que sea capturada a una distancia específica, esto implica que el dispositivo receptor se encuentra en un radio de cierta distancia pero no sabemos en qué punto de ese radio. Para ello, un segundo satélite emite otra señal destinada a ser recibida a cierta distancia por el mismo dispositivo. En el corte de ambos radios, obtenemos dos posibles puntos y para poder determinar cual es la posición correcta, un tercer satélite interviene para resolver el problema. El GPS aunque es un sensor medianamente barato ya que está muy extendido y se utiliza en infinitud de aplicaciones sigue presentando limitaciones como puedan ser las pérdidas de señal debido a túneles, interferencias de radio, etc. A pesar de ser un gran instrumento requiere de otras tecnologías con las que trabajar en conjunto para dotar de información precisa al vehículo, como pueden ser los IMU, que se verán a continuación. Figura 3.3 Hallazgo de la posición mediante trilateración (Fuente: pulsometrosinbanda.com). 3.2.1 Tipos de GPS y sus tecnologías En la actualidad existen distintos tipos de sistemas de geolocalización, y aunque coloquialmente se les conoce por GPS, éstas no son más que las siglas del proyecto estadounidense que arrancó en 1973 y que es propiedad del gobierno americano. El GPS permite una precisión de centímetros si es de tipo diferencial, es decir, que lleve una correción en la medida, aunque normalmente su precisión se estima en el orden de los metros y cuyos satélites orbitan entorno a los 20.000 Km. Se distribuyen de forma que desde cualquier punto del planeta siempre haya 4 satélites "visibles" para el dispositivo receptor, consiguiendo así cobertura mundial. Debe añairse que en 2023, GPS se actualizará a GPS III permitiendo aumentar la precisión hasta 3 metros. Por otro lado, está la tecnología soviética, ahora de propiedad rusa, GLONASS, que también cuenta con una precisión parecida al 3.3 IMU 11 GPS y cuyos satélites orbitan entorno a los 19.000 Km. Muchos sensores de geolocalización a día de hoy combinan GLONASS con el GPS para obtener siempre la mejor cobertura y una buena precisión. China también cuenta con su propia tecnología denominada BeiDou que en castellano significa Osa Mayor. Cuenta con cobertura a nivel mundial e incluso en zonas de Asia su precisión puede ser centimétrica, aunque por lo general suele ser del orden de metros. Por último, la alternativa europea para lograr la independencia de GPS y GLONASS, es Galileo, en honor al famoso astrónomo italiano, Galileo Galilei. Esta tecnología aún en desarrollo y con cobertura mundial pretende tener una precisión mayor que sus competidoras, siendo hasta 5 veces mayor que GPS. Además es la única que no se ha desarrollado con fines militares. Tabla 3.1 Tecnologías de geolocalización.. Tecnología Origen Satélites Precisión Altitud Satélites GPS EEUU 32 5-10 m 20.000 Km GLONASS Rusia 31 5-10 m 19.000 Km BeiDou China 30 3.6 m 22.000 Km Galileo UE 30 Fase de desarrollo 23.000 Km 3.3 IMU Los IMU o en castellano, Unidad de Medición Inercial son sensores que miden velocidades, orientación y fuerzas. Todo ello lo logran gracias al uso de giroscopios, magnetómetros y acelerómetros, permitiendo así poder conocer la posición de un objeto en el espacio. Según apunta V.Milanés(2008), los IMU suelen acompañar a los sistemas de navegación basados en el GPS, ya que a pesar de que estos tengan un error inferior a 20 metros cuando trabajan con 5 satélites, en momentos donde se produzcan pérdidas prolongadas de señal, es necesario que los IMU actúen para que junto con los valores de odometría, la posición del vehículo sea conocida de forma ininterrumpida. Aprovechando las cualidades complementarias de ambas tecnologías, se han desarrollado distintos filtros, como los basados en el filtro de Kalman, donde se combinan ambas tecnologías, normalmente con la intención de mejorar la respuesta del GPS que en caso de ser centimétrico puede llegar a tener un margen de error realmente pequeño [8]. 3.4 LIDAR Los sensores LIDAR son uno de los sensores principales en los vehículos autónomos, ya que permiten reconstruir el espacio alrededor del vehículo con una buena precisión, aunque también puede llegar a ser el componente más caro. Su funcionamiento es parecido al de los Radar, previamente explicados, sin embargo, aquí no se usan ondas electromagnéticas, si no que se trabaja con haces de rayos infrarrojos y de una lente infrarroja que los detecta cuando estos rebotan y llegan de vuelta al sensor. La idea es precisamente la misma que en los Radar, la reflexión, es decir que la onda, en este caso el rayo infrarrojo, rebote contra los objetos alrededor del coche y al ser captados de vuelta por la lente infrarroja, en el computador se crea una nube de puntos cuya posición es precisa permitiendo construir una imagen tridimensional del entorno. Existen además diversos tipos de LIDAR, aquellos que van anclados al parabrisas y solo escanean la parte delantera del vehículo y sirven sobre todo para sistemas de frenado automático o los más interesantes y que actualmente realmente aportan una gran autonomía a los coches, como son los LIDAR de 360 º , que girando a altas revoluciones por minuto, emiten gran cantidad de haces de rayos infrarrojos permitiendo un escaneado de cientos de miles de puntos con gran exactitud. 18 Capítulo 4. Detección de los carriles de la carretera 4.1.2 Suavizado mediante máscara Gaussiana El suavizado es un método también conocido como desenfoque que se realiza de forma artificial. Es necesario aclarar que se le conoce como desenfoque pero no es igual que el proceso de desenfoque que se pueda realizar mediante el propio hardware de la cámara aunque el resultado sea semejante. Básicamente, lo que aquí se aplica es una máscara convolucional o "kernel" que permite suavizar los bordes o reducir los picos de ruido, quedando de esta forma una imagen más homogénea. La idea consiste en que a cada pixel en concreto y sus píxeles vecinos, se les multiplique su propio valor de intensidad por los de la máscara, de forma que según la operación, suavizado de la media, suavizado gaussiano ó suavizado de la mediana, el pixel central adquiera un valor final nuevo. En el caso del que aquí nos ocupamos, se ha decidido optar por utilizar un suavizado gaussiano, el cual consiste en aplicar una máscara que realiza una ponderación mayor a los píxeles vecinos más cercanos y cuyo valor depende de una campana de Gauss. De hecho, es similar al suavizado de la media, con la diferencia de que la media le da el mismo peso a todos los pixeles, estén más próximos o no. De todas formas, estas dos máscaras pueden devolver un valor del píxel "inventado". Cuando se utiliza el término "inventado", es referido a que en la imagen existen unos valores de intensidad concretos, y el valor final que adquiere el píxel que sea objeto de estudio, puede ser un valor que antes no se encontraba dentro de la imagen, es decir, un valor nuevo. Este hecho no ocurre con el filtro de la mediana, el cual no inventa nuevos valores, lo cual es mejor y más realista, pero computacionalmente es más costoso que el resto. Figura 4.3 Operación de convolución y resultado en función de dicha máscara (kernel) (Fuente: codificandobits.com). En nuestro proyecto una vez obtenida la imagen en escala de grises de la carretera, procedemos a aplicar suavizado mediante un filtro gaussiano de radio 3. El resultado es el siguiente: (a) Sin suavizado. (b) Con suavizado. Figura 4.4 Imagen sin suavizado vs suavizado gaussiano. 4.1 Post-procesado de imagen 19 Como se puede apreciar en la figura 4.4, la diferencia no es mayúsucula entre una imagen y otra debido a que el frame seleccionado muestra en gran parte una carretera con un asfalto en buenas condiciones y sin parches, y una zona exterior donde la vegetación o el cielo de por sí tampoco presentan cambios bruscos de intensidades, por lo que no existe gran ruido en la propia imagen. Dicho esto, este paso es necesario ya que el operador de Canny, que se verá en el siguiente apartado, es muy sensible al ruido. Además en otras imágenes, con distintas circunstancias, el suavizado sin ser agresivo si puede ser acarrear cambios visuales más llamativos. Por último aclarar que el comando utilizado de OpenCV ha sido cv2.GaussianBlur() al cual debemos pasarle como parámetros la imagen de origen, el tamaño de la máscara y los valores de los parámetros que condicionan la función de la campana de Gauss. 4.1.3 Detección de bordes con el operador de Canny Una vez obtenida la imagen en escala de grises y tras haber realizado el suavizado de la misma, se procede a obtener los contornos de la imagen. Para ello empleamos el operador de Canny con el cual obtendremos una imagen binaria, es decir con píxeles blancos o negros, siendo los píxeles que conforman los bordes de color blanco y el resto de color negro. Antes de proceder a explicar como funciona el operador de Canny y para realzar la figura del suavizado, explicada y mostrada en el apartado anterior, en la siguiente figura, figura 4.5, se muestra la diferencia entre los contornos obtenidos con y sin filtro gaussiano. (a) Con suavizado. (b) Sin suavizado. Figura 4.5 Contornos con suavizado vs contornos sin suavizado. Como se puede apreciar, en la figura 4.5, la obtención de los contornos de la imagen con suavizado es mucho mejor que si no se aplicase, no solo reducimos el número de contornos (más eficiente) si no que además los contornos que no se están teniendo en cuenta son irrelevantes completamente, ya que forman parte del paisaje y no de la calzada. Para entender como se consigue este resultado es necesario explicar como funciona Canny. El operador de Canny trabaja con la primera derivada de la intensidad en una imagen. Para realizar una explicación sencilla, debemos entender que la primera derivada de una función se corresponde con la pendiente de la misma, por lo tanto, si tenemos un pixel con una cierta intensidad y su vecino tiene una intensidad distinta, existirá un gradiente cuyo módulo es equivalente al valor de la derivada. Si el cambio de intensidad de un pixel a otro es brusco, el módulo será grande, y si de un pixel a otro se mantiene la misma intensidad, el valor será muy pequeño o incluso nulo. De esta forma, podemos detectar los bordes, ya que una vez aplicado el suavizado de la imagen, los píxeles de un mismo objeto, no presentan variaciones de intensidad bruscas si no que suelen ser valores homogéneos. 20 Capítulo 4. Detección de los carriles de la carretera Por el contrario, entre un elemento y otro, el valor de intensidad sí puede variar de gran manera, obteniendo ahí valores altos en la primera derivada. De una forma más precisa y matemática, si se muestrean los valores de intensidad de una imagen, lo que se obtiene es una matriz cuyos elementos corresponden a los píxeles de la misma y cuyo valor es el de la propia intensidad de cada uno de ellos. De esta forma, si se recorre de izquierda a derecha las filas y desde arriba hacia abajo las columnas, se obtienen dos matrices correspondientes a los valores de los gradientes en el eje x, Gx, y en el eje y, Gy, que combinados, mediante la siguiente operación matemática G=pGx2+Gy2 , deja una matriz que corresponde a los bordes de la imagen. Finalmente, para que la imagen sea binaria, ésta debe ser umbralizada, discriminando los bordes que se encuentren fuera de los valores de este umbral, cosa que la función de OpenCV realiza por sí misma. Dicha función que se ha usado es, cv2.Canny() , a la cual se le pasan tres parámetros, la imagen de origen, y los valores de umbral mínimo y máximo. 4.1.4 Determinar una RDI, Región De Interés Como se puede apreciar en la figura 4.5, tanto con suavizado como sin él, la cantidad de contornos extraídos es muy grande, por ello es necesario discriminar por región, ya que lo que está fuera del carril tiene poca relevancia para nuestros intereses. Es por eso que en este apartado se explica como poder extraer la información de una única zona, conocida como "Región de interés", e ignorar el resto. Para poder enmascarar unas regiones u otras, obviamente es necesario el uso de máscaras, las cuales debemos definir de una manera medianamente genérica para que el algoritmo y el resultado final sean válidos en la mayoria de los casos. La idea es simple: se crea una matriz del mismo tamaño que la imagen y se rellena con ceros, es decir, se tiene una imagen completamente negra. A partir de ahí, mediante la definición de coordenadas, se dibuja y rellena la forma de un polígono que puede ser triangular o trapezoidal y que debe tener gran anchura en la base e ir haciéndose más estrecho a medida que decrece en el eje "y". Se entiende que decrece en este eje ya que cuando se habla de imágenes, éste está invertido, por tanto su valor máximo se encuentra en la base de la imagen y su valor mínimo ó 0 se encuentra en la parte superior de la misma. El polígono, por tanto, se debe estrechar a medida que sube desde la base, ya que las cámaras al igual que la visión humana, representan un sistema cónico, que como ya es sabido, todas las líneas paralelas fugan a un punto. (a) Contornos. (b) Máscara. Figura 4.6 Imagen de contornos vs máscara trapezoidal. Una vez que hayamos obtenido dicha máscara, simplemente se debe realizar una operación AND entre ambas mátrices, por tanto todos los píxeles externos a la región de interés en la imagen resultante se mantendrán de color negro. Sin embargo, dentro de dicha región, todos los bordes que el operador de Canny haya detectado se mantendrán y por tanto la imagen resultante se puede apreciar en la figura 4.7. 4.1 Post-procesado de imagen 21 Figura 4.7 Imagen de contornos en la región de interés. La máscara se ha conseguido con la función de OpenCV, cv2.fillConvexPoly() , la cual permite definir un polígono y rellenarlo del color que se quiera en una matriz, en este caso del tamaño del frame extraido y llena de ceros. Finalmente, la aplicación de la misma se ha logrado gracias a la función cv2.bitwiseAnd(). 4.1.5 Obtención de las líneas mediante la transformada de Hough En este apartado se va a explicar el funcionamiento de la transformada de Hough y su utilidad para poder extraer las líneas de la carretera de la imagen. La transformada de Hough es un método el cual sirve para detectar figuras dentro de una imagen, ya sean líneas rectas, círculos o elipses y es bastante robusto frente al ruido. Esta herramienta funciona mediante un sistema de votación en el cual el usuario establece el umbral mínimo de votos necesarios para tener en cuenta una recta como una línea. En el caso de las líneas rectas, éstas están formadas por puntos alineados, y por tanto deben cumplir la ecuación de su propia recta. Para ello, en vez de trabajar con la pendiente y la ordenada en el origen, lo que se hace, es usar coordenadas polares cuya ecuación queda así: ρ=xcos(θ)+ysin(θ) La idea es ir variando los parámetros ρ y θ para hacer pasar por cada punto de la imagen de contornos infinitas rectas y aquellas que sí formen parte de la imagen, al contener diversos píxeles alineados, recibirán una mayor cantidad de votos. Si el número de votos es mayor que el umbral definido por el usuario, la recta en cuestión será extraída y se almacenerán dos coordenadas que unidas permitan representarla. 22 Capítulo 4. Detección de los carriles de la carretera Se utilizan coordenadas polares, ya que es mucho más cómodo trabajar de este modo, debido a que los parámetros de pendiente y ordenada en el origen de una recta, en cartesianas, pueden acarrear indeterminaciones como puede ser el caso de rectas verticales. Figura 4.8 Transformada de Hough, proceso de votación en coordenadas polares. La transformada de Hough, además cuenta con la posibilidad de utilizar un algoritmo probabilístico de la misma, el cual permite obtener mejores resultados debido a que computacionalmente es más eficiente que la transformada general. Ésta ha sido precisamente la función utilizada en OpenCV cv2.HoughLinesP() a la cual se le deben facilitar varios parámetros, entre ellos el umbral mínimo de votación, la distancia máxima entre dos puntos para ser considerados de una misma línea y los píxeles mínimos que deben estar alineados para que una línea sea considerada precisamente como tal. Figura 4.9 Transformada de Hough, obtención de líneas rectas en la imagen final. Como se puede apreciar en la figura 4.9, todo este proceso previo a este apartado, sumado a la transformada de Hough, ha permitido obtener los límites del carril de la carretera, sin embargo, si se aprecia la imagen detalladamente, existen varias líneas que conforman estos límites. Por tanto, se emplaza al lector al siguiente apartado donde se resuelve este problema. 4.2 Obtención límites del carril mediante aproximación polinómica 23 4.1.6 Mejora de la transformada de Hough En el apartado anterior, más concretamente en la figura 4.9 se puede apreciar como en la imagen se representan varias líneas. En este apartado se trata de resolver este problema, definiendo una línea por cada límite del carril en el que se halle el vehículo. Para ello, el procedimiento utilizado se basa en la obtención de las pendientes de cada recta representada y de la de sus ordenadas en el origen. De esta forma, cada pendiente negativa equivale a una recta situada en la zona izquierda del carril, mientras que por defecto, aquellas con pendiente positiva equivalen al lado derecho, ya que recordemos que el eje de ordenadas se encuentra invertido. Todos estos valores se almacenan en dos vectores, uno para cada límite, derecha e izquierda, y se realiza la media de las pendientes y de las ordenadas en el origen, lo que finalmente permite obtener dos rectas que parten de la base de la imagen y que equivalen a cada límite de la carretera. El resultado de este método se puede apreciar en la siguiente figura. Figura 4.10 Transformada de Hough, obtención de los dos límites del carril. 4.2 Obtención límites del carril mediante aproximación polinómica En el apartado anterior, al utilizar la transformada de Hough, las líneas rectas son detectadas sin problema, sin embargo, esta primera aproximación resulta un tanto simple ya que presenta inconvenientes en curvas dónde la detección es de peor calidad. Por ello, en base al apartado anterior, a partir de la obtención de la región de interés, se aplica un proceso diferente para la obtención de las líneas sin importar si son rectas o curvas. Los pasos nuevos son los siguientes: 1. Transformación geométrica de la imagen a vista de pájaro. 2. Determinación de los píxeles de las líneas. 3. Aproximación polinómica y curvatura. 4. Transformación geométrica de la imagen a la vista original. 24 Capítulo 4. Detección de los carriles de la carretera 4.2.1 Transformación geométrica de la imagen a vista de pájaro En este apartado, se realiza una transformación geométrica de la región de interés de forma que la perspectiva sea de vista de pájaro. Este proceso nos va a permitir poder visualizar la carretera en un espacio bidimensional, facilitando en gran medida el trabajo. Para ello, ha sido necesario el uso del comando cv2.getPerspectiveTransform() el cual permite definir el tipo de transformación geométrica a realizar, facilitándole las coordenadas de los puntos de origen y de fin. Como se aprecia en la figura 4.11, en dicho caso, se realiza un cambio de un rectángulo a otra forma distinta. En nuestro caso concreto, la transformada se realiza para obtener una vista cenital de la carretera, es por ello, que la región de interes, de forma trapezoidal, se convierte en un rectángulo. Figura 4.11 Transformación de un polígono rectangular en otro de distinta forma (Fuente:StackOverFlow). Además será necesario el uso de un segundo comando, en este caso cv2.warpPerspective() el cual sirve para determinar la imagen de origen y destino a la que aplicar la transformación del primer comando, cv2.getPerspectiveTransform() , obteniendo un resultado final que se puede apreciar en la siguiente figura. (a) Color. (b) Gris. Figura 4.12 Perspectiva normal vs Perspectiva cenital. 4.2.2 Determinación de los píxeles de las líneas Una vez se obtiene la imagen binaria de la región de interés con una perspectiva cenital, se procede a la extracción de los píxeles de las imagen para determinar los límites de la carretera, es decir las líneas. Para ello, mediante el uso de un histograma en la mitad inferior de la imagen, se puede averiguar en qué cordenadas del eje "x" son mayores los valores de intensidad de los píxeles, conociendo así el origen de las líneas, ya que en el histograma aparecen dos picos. Una vez conocidas las coordenas de origen, se utilizan ventanas deslizantes que se apilan en columna, una encima de otra, pero no de forma vertical, si no que tienen libertad en el eje horizontal, dentro de unos márgenes definidos, para poder ir buscando la ventana con mayor número de píxeles de mayor intensidad, 4.2 Obtención límites del carril mediante aproximación polinómica 25 recorriendo de esta forma toda la línea. Figura 4.13 Ventanas deslizantes que determinan la forma de las líneas. 4.2.3 Aproximación polinómica, curvatura y ángulo de giro Una vez las ventanas están encima de cada línea, se procede a realizar una aproximación polinómica para cada límite, con el comando np.polyfit() , que será de segundo grado incluso aunque la curvatura sea practicamente nula, es decir, sea una carretera recta, x=f(y) = ay2+by+c . A partir de ahí, una vez obtenida la aproximación polinómica de cada línea, se rellena de color azul el carril por el que circula el vehículo. Figura 4.14 Determinación del carril por el que se circula. Por otro lado, para determinar la curvatura, es necesario transformar los píxeles en metros, porque de otra forma, si no realizamos dicha transformación, el radio de curvatura tendrá un valor enorme. Finalmente, el radio de curvatura se calcula de la siguiente forma: Rc=(1+dx2 dy ) 3 2 d2x dy2 26 Capítulo 4. Detección de los carriles de la carretera Si las líneas están aproximadas por un polinomio de segundo orden, como se ha visto previamente, el radio de curvatura queda finalmente así: Rc=(1+(2ay+b)2) 3 2 2a Este cálculo se ha realizado para cada línea, ya que poseen radios de curvatura distintos y con la media de sus valores se obtendrá la curvatura final. Respecto al ángulo de giro del volante es necesario aclarar ciertos conceptos, y es que este cálculo puede llegar a ser bastante complejo. Por ejemplo, si la situación del vehículo es la toma de una curva a alta velocidad, la deformación de los neumáticos será mayor al igual que las fuerzas laterales, provocando que sea realmente significativo el hecho de que el vehículo no alcance la posición que indica la orientación de las propias ruedas. Obviamente, cuánta más baja sea la velocidad a la que se tome una curva, menor serán las fuerzas laterales y la deformación de los neumáticos, permitiendo que el sistema de dirección sea más facilmente controlable. En nuestro caso, se trabaja con un modelo de bicleta lo cual reduce el problema considerablemente y además se supone un model de neumáticos ideal con una distribución de pesos perfectamente equilibrada. La ecuación matemática que define el ángulo de giro de las ruedas es la siguiente δ=arctan(L R+KV2 x gR ) donde δ es el ángulo de giro, L R es el ángulo de Ackerman donde L es la longitud del vehículo y R el radio de curvatura. K es un valor que depende de la distribución del vehículo y la deformación de las ruedas. En el caso de que K>0 indica que el vehículo presentará sobreviraje, K<0 subviraje y K=0, conducción neutra. Vx es la velocidad a la que circula el vehículo que como se puede observar, al estar elevado al cuadrado, es el parámetro con más peso de la ecuación. En este caso, el parámetro K se considerará de valor nulo para así simplificar el problema, ya que el enfoque de este trabajo no es más que conocer las técnicas de visión por computador y realizar unas primeras aproximaciones. Figura 4.15 Modelo de bicicleta . Posteriormente, el ángulo de giro de las ruedas no es igual al del volante, existiendo una relación que en nuestro caso se ha considerado de 1:16, aunque obviamente, cada vehículo con su propio sistema de dirección tendrá valores diferentes. 4.3 Conclusiones 27 4.2.4 Transformación geométrica de la imagen a la vista original Finalmente, una vez se ha calculado el radio de curvatura desde la perspectiva cenital, se realiza la transformada inversa, con los mismos dos comandos de antes, pero variando el orden de los parámetros, para poder obtener un frame final como el mostrado en la siguiente figura: Figura 4.16 Frame final desde perspectiva original. 4.3 Conclusiones En este capítulo se ha conseguido obtener los límites del carril por el que circula un vehículo, aunque es cierto que el trabajo realizado no ha sido más que una aproximación, ya que este apartado admite una gran variedad de mejores en las técnicas y en los algoritmos. En este caso, aunque el resultado obtenido en esta aproximación ha sido satisfactorio, es mejorable, bien en la primera aproxición ya que la utilización de la transformada de Hough permite una precisa detección de las líneas rectas pero no de las curvas. Mientras tanto, la segunda aproximación, la cual sí palia este problema, también posee margen de mejora, por ejemplo mediante la calibración de la cámara, ya que como se comentó al final del capítulo 3, las cámaras, por contrapartida al contar con lentes que introducen más luz al sensor distorsionan de forma radial y tangencial la imagen, siendo necesario la corrección de este efecto. En este ejemplo, al haber obtenido el vídeo del repositorio de Github de Udacity, no se conocen los parámetros intrínsecos de la cámara y por tanto su calibración y eliminación de la distorsión no han sido realizados. Obviamente, este hecho es claramente significativo, ya que en un vehículo, el sistema de posicionamiento debe ser extremadamente preciso y por tanto, cualquier corrección de error es bienvenida. 34 Capítulo 5. Detección de señales de tráfico 5.5 Red Neuronal Convolucional (CNN) Para nuestra aplicación desarrollada en java y dónde nuestro objetivo es la detección de señales, es sumamente importante escoger bien la red neuronal para la detección de objetos. En este caso, como vamos a procesar imágenes de forma efectiva y rápida, se utiliza la red neuronal convolucional ó CNN. 5.5.1 Estructura de una CNN La estructura de las redes neuronales convolucionales, cuenta con una capa de entrada que recibe todos los píxeles de la imagen. Posteriormente se encuentran las capas ocultas que es donde ocurre todo el proceso determinante para el objetivo de nuestra red, que en el caso de este proyecto, es la detección de señales de tráfico. Para ello, de las diversas operaciones que se realizan, destaca el pooling y la convolución. El pooling es la operación que permite reducir el tamaño de la imagen, permitiendo que a cada capa que pase, la cantidad de datos a tratar sea menor. Hay dos tipos de operaciones que se realizan con el pooling: 1. Max pooling: Un filtro de cierto tamaño recorre la imagen entera dando un resultado cuyos valores son siempre el valor máximo encontrado en cada región por este filtro. 2. Average pooling: Un filtro de cierto tamaño recorre la imagen entera dando un resultado cuyos valores son siempre la media de todos los valores que existen en cada región barrida por el filtro. En la siguiente figura se puede apreciar perfectamente el funcionamiento del pooling, reduciendo la imagen. Figura 5.7 Max pooling vs Average pooling (Fuente: medrxiv.org). Por otro lado, la convolución es la operación que nos permite aplicar transformaciones en la imagen. Como se vio en el capítulo anterior, para el tratamiento de imágenes era necesario aplicar un suavizado gaussiano, el cual se realizaba con una máscara o "kernel", la cual se podía aplicar gracias a la operación matemática de convolución. 5.6 Detección de señales en el PC y aplicación android 35 5.6 Detección de señales en el PC y aplicación android La idea principal de este capítulo es la detección de señales mediante redes neuronales para así poder complementar la visión por computador ya vista en el tema anterior donde se detectaba el carril por el que circulaba un vehículo. En este caso, al trabajar en PC se ha decidido entrenar una red neuronal que sea capaz de detectar las señales de tráfico. Las tres señales de tráfico a detectar son "Stop", "Prohibido girar a la izquierda" y "Prohibido girar a la derecha". (a) Stop. (b) Prohibido izquierda. (c) Prohibido derecha. Figura 5.8 Señales a detectar por la red neuronal. 5.6.1 Entrenamiento de la red neuronal Para la creación de nuestra red neuronal ha sido necesario el uso de la herramienta de Google, TensorFlow, además de contar con una tarjeta gráfica Nvidia, así como un archivo de imágenes de estas tres señales de tráfico. Para poder elaborar una red neuronal, en nuestro caso, se ha empleado el uso de Machine Learning, ML, y no de Deep Learning, DL. Es por ello que ha sido necesario no únicamente facilitar un conjunto de imágenes si no también patrones ó etiquetas de las mismas, para que la red mediante el entrenamiento sea capaz de detectar estas señales. El dataset o conjunto de datos ha sido obtenido mediante la grabación en video de las señales de tráfico y la posterior extracción de frames, contando con un total de 100 imágenes, entre ellas algunas de las siguientes. El reparto de las 100 imágenes ha sido del 75% para entrenamiento, el 15% para validación y el 10% para test. Gracias al entrenamiento, mediante inferencia, la red puede aprender a identificar esos patrones o etiquetas que le hemos facilitado previamente. Sin embargo, es en la validación donde se ajustan los hiperparámetros de la misma. Estos hiperparámetros son los epochs, batch size, learning rate, número de capas, etc. Hay que destacar dos conceptos importantes en el entrenamiento de redes neuronales y son el "overfitting" y el "underfitting". 1. Overfitting El overfitting o sobreajuste es un error común que lastra el rendimiento de la red y no es más que un mal entrenamiento de la misma. Es decir, nuestra red sólo es capaz de reconocer casos muy concretos, bien porque se le ha facilitado un dataset con demasiadas imágenes, atípicas o con ruido y por tanto, se 36 Capítulo 5. Detección de señales de tráfico Figura 5.9 Imágenes capturadas para el dataset. sobreajusta, de forma que a pesar de contar con gran cantidad de imágenes no es capaz de extraer un patrón generalizado. 2. Underfitting El underfitting por el contrario es el subajuste, es decir, se le facilitan pocas imágenes a la red neuronal, de forma que si se pretenden reconocer varios objetos, ésta solo podrá reconocer algunos de ellos. ¿Qué se puede hacer para solucionar el overfitting? El overfitting es un error muy común que se puede solucionar de diversas formas. Una de ellas es utilizar un dataset menor, donde exista un equilibrio entre las imágenes de cada clase. Además, si nuestra red sufre de overfitting, una posible solución pasa por realizar un menor número de inferencias o cambiar el valor de ciertos parámetros. Figura 5.10 Max pooling vs Average pooling (Fuente: aprendemachinelarning.com). Dentro del entrenamiento de las redes neuronales existen también otras complicaciones que pueden afectar negativamente al rendimiendo de la red, aunque en este proyecto la idea es adquirir una noción generalizada de esta tecnología y poder aplicarlo al campo de los vehículos autónomos, siendo en este caso, la detección de señales de tráfico el objeto de estudio. El entrenamiento en PC, se ha desarollado con nuestro dataset sobre un modelo ya existente,"ssd resnet50 v1 fpn 640x640" que ha sido elegido ya que consta con un tiempo de detección media de 46 ms, con una 5.6 Detección de señales en el PC y aplicación android 37 precisión media, mAP, de 34.3, lo cual lo convierten en un modelo base medianamente rápido y bastante preciso. Este modelo toma las imágenes y las redimensiona en un tamaño de 640x640, de ahí su nombre. (a) Learning Rate. (b) Total Loss. Figura 5.11 Gráficas de learning rate y total loss de la red neuronal. En este caso, la red ha sido entrenada durante 2.30h aproximadamente y se han realizado entorno a los 6000 pasos. Si se observan las gráficas, la pérdida total es de un valor de 0.12 y el learning rate ha llegado a ascender en el paso 3000 a ser de un valor entorno a 0.04. En la detección de señales, el resultado ha sido satisfactorio, como se puede apreciar en las siguiente figura, sin embargo el proceso de detección de cada imagen ha sido demasiado lento, llegando a tomar incluso segundos, un valor realmente intolerable cuando se trata de una aproximación de detección de objetos, en este caso señales, en tiempo real. (a) Stop. (b) Prohibido izquierda. (c) Prohibido derecha. Figura 5.12 Señales detectadas por la red implementada en el PC. 38 Capítulo 5. Detección de señales de tráfico 5.6.2 Aplicación Android Como la red implementada en el PC ha resultado ser demasiado lenta, se ha dedicido finalmente usar la red neuronal en un teléfono móvil mediante una aplicación android de desarrollo propio. La gran ventaja de esta aplicación móvil es que es más rápida ya que el modelo base utilizado ha sido diferente, como se verá a continuación, pero además tiene la gran ventaja de ser portátil y cómodo de usar, ya que la implementación en Python para PC se ha realizado de forma que cada vez que se quiera analizar una imagen, este debe ser precargada antes de ejecutar el código, mientras que la app permite ir circulando por la calle e ir analizando las diferentes señales. La propia aplicación de hecho, es tan simple que muestra una interfaz con un único botón, el cual si es pulsado nos permite acceder a la cámara que toma imágenes en tiempo real. Véase la siguiente figura. (a) Pantalla inicial de la app. (b) Pantalla de cámara en tiempo real. Figura 5.13 Capturas de pantalla de la aplicación creada en Android. El entrenamiento de esta red se ha realizado con el mismo dataset, sobre un modelo ya existente pero que en este caso ha sido "SSD MobileNet V2 FPNLite 320x320" el cual está pensado para teléfonos móviles y 5.7 Resultados de la red neuronal 39 cuya rapidez en tiempos de detección es de 22 ms, siendo más rápida que el modelo previamente usado, y con una precisión media menor, mAP, con un valor de 22.2, siendo algo menos precisa de base pero más rápida. 5.7 Resultados de la red neuronal Esta red neuronal ha sido entrenada con 35000 pasos y una tasa de pérdida total de 0.05. Además todo el proceso de entrenamiento de la red ha durado aproximadamente 3 horas. Cabe destacar que aunque tenga una menor tasa de pérdida total que la red implementada en PC, parte de un modelo base distinto, por lo tanto, no son equiparables cifra a cifra. En este caso, la tasa es baja pero por la cantidad de pruebas realizadas se puede determinar que esta red es más rápida pero con menor precisión que la usada en el PC. Figura 5.14 Datos de la red neuronal. Finalmente, el modelo obtenido en TensorFlow se ha exportado y convertido en modelo "tflite" para su uso en la aplicación móvil. Véase la siguiente figura. (a) Stop. (b) Prohibido izquierda. (c) Prohibido derecha. Figura 5.15 Señales a detectadas por la red implementada en la app android. 40 Capítulo 5. Detección de señales de tráfico 5.8 Conclusiones En este tema se han implementado dos redes neuronales, una en PC y otra en una aplicación móvil en android. El tema de las redes es muy extenso y lo que aquí se ha llevado a cabo no es más que una primera aproximación del potencial de las mismas y de uno de sus posibles usos en la vida real como puede llegar a ser la detección de señales. La primera red, la implementada en el PC, al ser entrenada en base a un modelo ya existente con una buena precisión pero altos tiempos de detección, demostró ser más lenta de lo esperado y es por ello que se acabó desarrollando la red para la aplicación móvil que ha resultado muy cómoda, ya que la portabilidad del teléfono dota al usuario de una clara ventaja, pero es que además cumple con la exigencia de la tárea encomendada que no era otra que poder ser usada con imágenes en tiempo real. Para finalizar, una posible mejora de la aplicación podría darse en la detección, de forma que se puedan detectar señales en la distancia permitiendo al vehículo conocer de antemano las normas que rigen la carretera antes de tener que llegar a la posición de dichas señales. 6 Futuras líneas de trabajo y conclusiones finales Es te proyecto partió con la idea de poder llegar a comprender un poco mejor las herramientas del campo de la visión por computador y sus posibles apliaciones en los vehículos autónomos. En este trabajo se ha estudiado el uso de los diferentes sensores, una primera aproximación al campo de la detección de carriles gracias al uso de cámaras o la detección de señales mediante redes neuronales. Una posible línea de trabajo en el futuro es sin duda alguna, la implentación de nuevos algoritmos o técnicas en la detección de los carriles, bien calibrando la cámara y eliminando la distorsión, bien trabajando con otro modelo de color como el HSV en vez del RGB, siendo este último poco robusto ante las diferentes incidencias de la luz solar o de los faros de los vehículos o por ejemplo, combinar el uso de cámaras con sensores infrarrojos que permitan determinar si el coche se encuenta encima de una línea blanca. Cabe destacar, que en el tema de las redes neuronales, las aplicaciones futuras pueden llegar a ser infinitas, ya que además de reconocer señales de tráfico, se podría llegar a detectar personas ó semáforos y dotar de mayor información al vehículo sobre su entorno. Más alla de la propia detección se podrían llegar a preveer comportamientos de otros automóviles permitiendo así al vehículo ser capaz de encontrar los momentos óptimos para el adelantamiento, la incorporación en carreteras o rotondas, etc. Todas estas tecnologías están todavía en un proceso de maduración que en el futuro acabarán permitiendo la circulación de vehículos más seguros que eviten multitud de daños y accidentes. En el desarrollo de este proeycto, se han sacado las siguientes conclusiones. Primero, el uso de python y java que eran lenguajes completamente desconocidos para mí, no han resultado tener una curva de aprendizaje abrupta, de hecho, python al ser parecido a C y no necesitar compilación, ha acabado resultando ser un lenguaje muy ameno. Por otro lado, el uso de java, al no ser tan parecido a C, ha resultado algo más difícil pero al fin y al cabo, entendible. Respecto a las librerías y programas usados, OpenCV ha sido clave para la realización de la primera de las dos aproximaciones realizadas en este trabajo respecto a la detección de líneas de la carretera, resultando ser un proceso medianamente sencillo ya que aunque OpenCV no haya sido objeto de estudio en el grado, su implementación es intuitiva y más aún cuando en la asignatura de "Sistemas de Percepción" sí se estudia la teoría de todas las técnicas que han sido aplicadas para la detección de líneas mediante la transformada de Hough. A nivel técnico, cabe destacar que el tema de las cámaras y la detección de carriles es claramente dependiente de las condiciones de iluminación de la calzada ya que en condiciones de baja luminosidad o incluso en plena noche, nuestras dos aproximaciones resultarían insatisfactorias. 41 42 Capítulo 6. Futuras líneas de trabajo y conclusiones finales Finalmente, el aprendizaje de Machine Learning o ML y el desarrollo desde cero del entrenamiento e implementación de las redes neuronales sí que ha sido un camino largo y tedioso, ya que la información existente es demasiado técnica y por lo tanto para usuarios inexpertos en este tema como yo, resulta complicado de inicio. Índice de Figuras 1.1 Diagrama de bloques necesario para dotar al vehículo de autonomía (Fuente: Attia et al, 2014) 2 1.2 Fotografía de un vehículo autónomo de Uber en San Francisco, Fuente:AP 3 2.1 Coche autónomo - Concept Car (Fuente: Mercedes-Benz) 6 2.2 Kitt, "El coche Fantástico" (Fuente: Flickr.com) 6 3.1 Funcionamiento de un radar (Fuente: istockphoto.com) 9 3.2 Radar en un vehículo (Fuente: pngwing.com) 9 3.3 Hallazgo de la posición mediante trilateración (Fuente: pulsometrosinbanda.com) 10 3.4 Funcionamiento de un LIDAR (Fuente: Velodyne Lidar) 12 3.5 Cámara 3D (Fuente: Outsight) 13 3.6 Algoritmo geométrico de nube de puntos, Voxel Grid (Fuente: Researchgate.net) 14 4.1 Librería OpenCV y lenguaje Python 16 4.2 Imagen a color vs escala de grises 17 4.3 Operación de convolución y resultado en función de dicha máscara (kernel) (Fuente: codificandobits.com) 18 4.4 Imagen sin suavizado vs suavizado gaussiano 18 4.5 Contornos con suavizado vs contornos sin suavizado 19 4.6 Imagen de contornos vs máscara trapezoidal 20 4.7 Imagen de contornos en la región de interés 21 4.8 Transformada de Hough, proceso de votación en coordenadas polares 22 4.9 Transformada de Hough, obtención de líneas rectas en la imagen final 22 4.10 Transformada de Hough, obtención de los dos límites del carril 23 4.11 Transformación de un polígono rectangular en otro de distinta forma (Fuente:StackOverFlow) 24 4.12 Perspectiva normal vs Perspectiva cenital 24 4.13 Ventanas deslizantes que determinan la forma de las líneas 25 4.14 Determinación del carril por el que se circula 25 4.15 Modelo de bicicleta 26 4.16 Frame final desde perspectiva original 27 5.1 Capas de una red neuronal y neuronas (Fuente:researchgate.net) 29 5.2 Red neuronal multicapa, recurrente, completamente conectada (Fuente:researchgate.net) 30 5.3 Recta y=x 31 5.4 Problema no lineal, puerta lógica XOR (Fuente:towardsdatascience.com) 32 5.5 CNN que extrae animales de la imagen de entrada (Fuente:aprendemachinelearning.com) 33 5.6 Diferencia entre Machine Learning y Deep Learning (Fuente: neuratum.com) 33 5.7 Max pooling vs Average pooling (Fuente: medrxiv.org) 34 5.8 Señales a detectar por la red neuronal 35 5.9 Imágenes capturadas para el dataset 36 43 Índice alfabético 51