Traffic Sign Recognition – ¿Cómo detectan las señales?

- Hace 9 meses

El TSR o Traffic Sign Recognition es una asistencia a la conducción y sirve tal como indica su nombre para identificar las señales que nos vamos encontrado durante nuestra ruta y nos las muestra en el clúster del coche. En caso de tener un Head-Up Display, hay modelos que también las muestran ahí.

BMW 7 Series - iACC con TSR
BMW 7 Series – iACC con TSR

Para detectar estas señales el vehículo debe disponer o bien de un mapa que mediante posición GPS determine la velocidad máxima o bien una cámara enfocando hacia delante y el sistema ADAS correspondiente. No es algo que se pueda añadir a posteriori ya que el sistema está vinculado a otros como el intelligent ACC para adaptar automáticamente la velocidad del coche a la vía por la que se circula.

Cámara frontal
Cámara frontal

¿Cómo funciona?

El Traffic Sign Recognition funciona mediante el procesado de las imágenes obtenidas por la cámara frontal detectando las señales y su significado. Para poder hacerlo hay muchas estrategias, desde algoritmos más manuales correspondientes a modelos antiguos pasando por la inteligencia artificial.

Dentro de este último, en función del objetivo final habría casi una infinidad de métodos. Desde métodos de región pasando por métodos de segmentación, lo único que tienen en común es que como se basan en el procesado de imágenes, todos implementan un sistema convolucional.

Hoy intentaremos explicar de una manera simplificada el sistema de segmentación. No porque sea el mejor, sino porque es el que de una manera más visible es el que mejor se puede entender. Así pues, intentaremos desgranar a un nivel básico todas estas palabras que hemos usado en el párrafo anterior y que pocos habréis entendido.

Cada fabricante (Bosch, Continental, ZF…) utiliza su propio método por tanto lo que vamos a explicar a continuación es una primera aproximación.

1. Captación de imágenes

El primer paso como ya podéis imaginaros es «ver» lo que está pasando en frente del coche. Para ello utilizaremos un sistema ya muy conocido por todos que es la cámara. En este caso servirá tanto la cámara mono como la esterero. Recordar que si queréis saber más de los sensores podéis mirar esta entrada.

2. Procesado de las imágenes

Una vez que tenemos las imágenes en directo de lo que está pasado, las vamos a enviar al chip responsable de trabajar con ellas. Este chip, normalmente lo lleva el propio sistema de cámara integrado.

En este momento queremos detectar no solo señales, sino que cualquier cosa que sea de interés. Esto es porque la cámara se utiliza también en otras operaciones como el AEB, el LSS…. Ahora el primer paso será segmentar ese fotograma.

Acordaros que cuando grabamos un video, al final, lo que tenemos es un sistema (la cámara) que graba imagen a imagen en intervalos muy pequeños. Estamos hablado de grabaciones a 45 fotogramas por segundo (sistema Bosch) o lo que es lo mismo, estamos tomando una foto cada 0,022 segundos.

El sistema, una vez tenga el fotograma los procesará. Para ello lo que utilizara será una red neuronal (inteligencia artificial) del tipo GAN (generative adversarial network). Como se ve en la imagen inferior, consta de dos partes. La parte que codifica la información o encoder y la parte que decodifica la información o decoder.

Red neuronal del tipo GAN
Red neuronal del tipo GAN

La primera parte, la parte convolucional, es la encargada de leer el fotograma que le acabamos de pasar y, de él, extraer las características básicas que lo componen. Sería algo así como hacer un listado de que objetos hay en esa imagen y donde están.

Ya os podéis imaginar, que por este motivo se necesita una inteligencia artificial. Extraer las características de una imagen no es tarea fácil si lo queremos hacer con programación convencional. Por desgracia, esta tarea es muchísima más compleja que lo explicado, sin embargo en este post no vamos a entrar en detalles demasiado técnicos. Si alguien quiere saber más sobre convoluciones y redes convolucionales puede usar estos links.

La segunda parte de la red, la parte deconvolucional, leerá la información que la primera parte ha generado y se encargará, partiendo de un array unidimensional de datos, de generar una imagen de salida. Dicha imagen será una reconstrucción de la imagen de entrada segmentando los *elementos que nos sean de interés.

Ejemplo de segmentación usando una red GAN - Pix2Pix
Ejemplo de segmentación usando una red GAN – Pix2Pix

*Los elementos de interés son definidos en la fase de entrenamiento de la red neuronal. Para lograr el resultado deseado es preciso de añadir algún bloque más a la red mencionada anteriormente (pues esta sería solo para funcionar y no para ser entrenada) y pasar tanto la imagen sin segmentar como la misma imagen segmentada. De esta manera el sistema, después de muchos ciclos e imágenes de entrenamiento, será capaz de aprender como realizar la transformación entre una imagen y otra.

3. Identificación de la señal

Una vez ya tenemos los elementos de interés segmentados, solo hemos de quedarnos con las señales de tráfico.

Llegados a este punto lo más fácil sería pasar cada señal por una red neuronal convolucional, una CNN, y que ella nos diga (clasifique) que es cada señal.

Para realizar este último paso solo sería necesario, que para cada señal que exista, tener un grupo de imágenes a poder ser capturadas en diferentes escenarios (autopista, carretera inter-urbana…) y usarlas para entrenar nuestra CNN.

Red neuronal convolucional
Red neuronal convolucional

Si la imagen de arriba os suena de algo, es porque se trata de la primera parte de nuestra red GAN que hemos hablado más arriba. Esta, sin embargo, ha sido entrenada de manera diferente a la primera.

En vez de devolver un array, que nosotros a priori no le veríamos sentido y que la parte deconvolucional de la GAN si, devuelve un array con la probabilidad que hay de que sea una señal determinada dentro del grupo con la que lo hemos entrenado.

Si lo hubiésemos entrenado con las señales de 10 km/h | 50 km/h | 100 km/h, nos devolvería un array con 3 posiciones y cada posición un porcentaje de probabilidad que hay de que sea cada señal de esas.

Por ejemplo, si la imagen capturada por el coche fuese una señal de 50 km/h. obtendríamos un array similar a este [12.5 | 86.4 | 40.3]. Por tanto sabríamos que teniendo señales de [10 km/h | 50 km/h | 100 km/h], hay un 86.4% de probabilidad que sea una señal de 50 km/h.

4. Mostrar el resultado al conductor

Después de haber hecho toda la parte dura solo queda dar feedback al conductor, así pues el chip que ha procesado esa imagen enviará mediante el bus CAN del coche la información necesaria a la ECU del panel de instrumentos para que este nos muestre el icono correspondiente.

BMW - TSR
BMW – TSR

Fallos en la detección

Un sistema de inteligencia artificial, es un conjunto muy complejo que tiene que estar muy bien ajustado para que de los mejores resultados. Incuso así, hay veces que no es posible ajustarlo para que funcione en todos los casos. No olvidemos que estamos enseñando a un ordenador a ver como los humanos lo hacemos.

Podemos tener desde fallos en el entrenamiento por falta de imágenes de muestra, así el sistema no habrá visto suficientes señales como para poder identificarlas todas (el conocido underfitting). O bien podemos tener el efecto contrario, puede que le hayamos dado demasiadas imágenes y por intentar reconocerlas todas tenga overfitting.

Al final, en cualquiera de los dos casos veremos que o bien la probabilidad de que sea una señal es demasiado baja y no super el umbral mínimo. Por tanto el coche la ignorará y no nos mostrará nada. O bien, tenga dos o más candidatos de alta probabilidad y nos acabe mostrado la señal incorrecta. Imaginemos en el ejemplo anterior que tanto la señal de 50 km/h como la de 80 km/h tienen una probabilidad del 80% (debido a lo explicado en el párrafo anterior), es posible que el sistema nos acabe detectando la señal que no es.

Conclusiones

El principal propósito de esta entrada era enseñar la complejidad de una tarea tan simple como el reconocer una señal. No quisiéramos entrar en la detección de vehículos o peatones que hace el AEB. Ya sabéis, la próxima vez que vuestro coche no acierte a detectar correctamente una señal de tráfico, al menos sabréis qué ha podido pasar.