Técnico

Los primeros pasos hacia un sistema de detección de vehículos autónomo

Share

Los vehículos autónomos son geniales, pero parece difícil entrar en ese mundo, ¿verdad? ¿Cuál debería ser tu punto de partida? Los vehículos autónomos deben ser capaces de manejar múltiples sensores y actuadores. Estas tareas se organizan en un hardware potente y deben gestionar un sistema de control extremadamente fiable. No te sientas abrumado si no sabes qué hacer primero, ya que empezar una nueva asignatura implica mucha investigación y mucha práctica de prueba y error para poder empezar. Dado que los sistemas autónomos son, de hecho, un tema muy amplio, queremos centrarnos especialmente en la información visual, abordando la detección de objetos en los marcos de las cámaras. Esta publicación tiene como objetivo analizar algunos de los desafíos que implica diseñar e implementar un sistema para la detección de señales de tráfico. [caption id="attachment_1098" align="aligncenter» width="564"]

Salida esperada del sistema de detección [/caption]

¿Dónde se ejecuta el software?

Una de las principales preguntas que nos hacemos si queremos construir un sistema primero pero escalable es: ¿dónde implementarlo? ¿Debería ejecutarse en la periferia (en el vehículo) o en la nube? ¿La computación en nube es adecuada en términos de seguridad? ¿Sería posible confiar en una conexión a Internet? ¿Y qué pasa si falla o la latencia es crítica? Para resolver estos problemas, la computación periférica viene al rescate y NVIDIA Jetson parece la mejor opción. Los dispositivos Jetson funcionan con el sistema operativo Linux, lo que lo convierte en una herramienta de desarrollo fácil de usar y permiten la comunicación con actuadores físicos, ya sea transmitiéndolos a una red local o mediante salidas de voltaje GPIO. Las aplicaciones de aprendizaje automático se pueden optimizar mediante Tensor RT, una biblioteca de C++ para inferencias de alto rendimiento en las GPU de NVIDIA. Te recomendamos elegir un SDK de Jetpack adecuado a los requisitos de tu proyecto (nosotros utilizamos la versión 4.4) y prestar atención a las versiones de TensorRT, cuDNN y CUDA. Ten cuidado con las versiones de los paquetes de tu aplicación de destino, ya que los problemas de compatibilidad son frecuentes.

Cómo ¿pegar las piezas?

Ahora que tienes un hardware candidato, hablemos del software que hay detrás. Debe interactuar con los datos de los sensores (por ejemplo, los marcos de las cámaras), procesarlos y generar una respuesta adecuada para los actuadores. Puedes crear una canalización de procesamiento personalizada o aprovechar las herramientas existentes. ROS, para Robot Operating System, es un marco de software de código abierto reconocido en el campo de la programación robótica y, en particular, en vehículos autónomos. Es ideal para el manejo de datos entre módulos de procesamiento (llamados nodos), que pueden escribirse en C++ o Python. Como desarrolladores de ML adoramos Python, pero no podemos ocultar el hecho de que C++ es mucho mejor para las aplicaciones integradas. Como lenguaje compilado, hace un uso más eficiente de los recursos de memoria. Sugerimos usar la infraestructura ROS, no solo porque es relativamente fácil de usar, sino también porque tiene una gran cantidad de código libre desarrollado para el tipo de aplicaciones que necesitamos, como la recepción de señales de cámara y la definición de tipos de mensajes. [caption id="attachment_1093" align="aligncenter» width="506"]

Ejemplo de arquitectura ROS [/caption]

¿Qué estamos construyendo después de todo?

En este punto tenemos el dónde y el cómo, centrémonos en el qué: la aplicación de detección de objetos. Como se mencionó al principio, el objetivo es diseñar un sistema para la detección de señales de tráfico que funcione en vehículos autónomos. Puedes considerarlo como un nodo ROS que ejecuta la inferencia de una red neuronal, entrenado con un conjunto de datos apropiado para la tarea y realizando algún tipo de procesamiento adicional. Y esa es toda la historia, pero queremos compartir con ustedes algunas ideas sobre este proceso. En primer lugar, debe elegir la arquitectura de red. Faster-R-CNN, ResNet o YOLO son buenos candidatos para la detección de objetos en Tensorflow. Discutiremos el Yolo V4 procedimiento, pero debe ser similar para cualquier arquitectura elegida. Tenga en cuenta que YoloV4 se adjuntó originalmente a Darknet, una biblioteca de código abierto creada por sus autores. Para la conversión de TensorRT, es posible que tengas que convertir el modelo entrenado al formato ONNX y luego a TensorRT. En segundo lugar, puedes crear o aprovechar un conjunto de datos para el entrenamiento de modelos, etiquetado para la detección de objetos (coordenadas y clases de cajas). El conjunto de datos COCO tiene una clase de «señal de alto» y hay conjuntos de datos de señales de tráfico disponibles al público con diferentes licencias. Por último, tendrá que procesar los resultados de la inferencia. ROS tiene bibliotecas públicas con tipos de mensajes predefinidos, como vision_msgs para los recuadros delimitadores y las puntuaciones de las clases. En el contexto del procesamiento de vídeo, la detección fotograma a fotograma debe ir seguida de una fase de posprocesamiento para suavizar las señales y generar una salida estable. Imagínese una situación en la que, tras un minuto de vídeo sin que se detecte ninguna señal, se detecte una sola señal de parada. ¿Te detienes inmediatamente? ¿Y si fue un falso positivo? No querrás activar una alerta en ese caso, pero si permanece igual durante un par de segundos, es más probable que sea una buena suposición.

¿Nos falta algo?

Hemos analizado los principales conocimientos sobre la interacción entre el hardware y el software en un sistema de aplicaciones para vehículos autónomos. Hablamos de los beneficios del procesamiento perimetral y de las optimizaciones de Jetson, junto con el marco de desarrollo de ROS. También describimos un caso práctico sobre la detección de señales de tráfico y los pasos clave para capacitar e implementar el modelo. Se enfrentarán a más desafíos en función de su caso de uso particular. ¿Es tolerable la velocidad de fotogramas de procesamiento para nuestra aplicación? ¿Qué protocolo debe usar el proveedor del marco de la cámara? ¿Cómo se gestionan las prioridades de los recursos compartidos? Estas y otras preguntas comienzan a surgir cuando se profundiza en los requisitos del proyecto. Esperamos haber ampliado su perspectiva sobre los aspectos más relevantes del diseño de una aplicación integrada para la detección de objetos. Se podría pensar que el aprendizaje automático consiste en analizar las arquitecturas de los modelos y ajustar los hiperparámetros, pero como se muestra en la siguiente imagen, los sistemas de aprendizaje automático de producción son enormes ecosistemas de los que el modelo es solo una parte.

Enlaces de interés:

Cada viaje de IA comienza con una conversación

Hablemos
Hablemos