Naviground es un sistema de navegación implementable en vehículos terrestres tripulados y no tripulados. Permite navegar en entornos estructurados y no estructurados. Participé en el desarrollo del sistema de percepción, especialmente en el de detección del entorno mediante cámaras.
Sistema de visión
Aunque el sistema de navegación contaba con sensores LIDAR y RADAR, por varios motivos se quería tener un sistema de percepción formado únicamente por cámaras.
Auque el precio de los LIDAR y RADAR ha disminuido mucho en los últimos años, sigue siendo más caro que el de las cámaras.
Los sensores LIDAR y RADAR son sensores activos (emiten una onda electromagnética y miden la reflexión), por lo que en un entorno de guerra hacen que el vehículo pueda ser detectado.
Al ser un vehículo autónomo, el procesamiento no se puede hacer en una máquina potentísima, por lo que si se puede eliminar el procesamiento de la cantidad de datos que generan los LIDAR y RADAR, mejor.
Para poder realizar la detección del entorno, utilizamos tres tipos de redes neuronales:
Redes de segmentación semántica
Clasifican a qué clase pertenece cada pixel de la imagen, obteniendo una máscara de segmentación.
Redes de clasificación de objetos
Mediante una YOLO, se pueden detectar objetos en la imagen
Profundidad
Mediante una red neuronal, se puede estimar la profundidad de cada pixel de la imagen, con lo que se puede obtener a qué distancia se encuentra cada objeto.
Entrenamiento
Nuestro problema era que al ser un vehículo para entornos estructurados y no estructurados, no nos valían las redes preentrenadas, por lo que tivimos que hacer entrenamientos de las redes de segmentación y de clasificación de objetos.
Dataset
Como teníamos horas de videos grabados durante pruebas en entornos como este, creamos un dataset
Creamos un algoritmo que mediante un clasificador no supervisado, creó varios clusteres de imágenes, donde las imágenes de cada cluster eran similares entre sí. De esta manera, nos quedábamos con unas pocas imágenes de cada cluster, para así tener un dataset con imágenes heterogéneas.
Etiquetador
Etiquetar objetos para la YOLO, aunque es pesado, es un proceso más o menos rápido y fácil
Sin embargo, etiquetar las imágenes para la segmentación semántica, donde hay que etiquetar cada pixel, es un proceso lento y tedioso. Como no nos convencía ninguna herramienta de etiquetado para segmentación, construimos nuestra propia herramienta de etiquetado. Fue tan buena que se reutilizó en otros proyectos e incluso se habló de comercializarla.
Generación de imágenes de entrenamiento
Uno de los problemas que teníamos es que todas las imágenes de entrenamiento eran de día, con sol, sin lluvia, etc. Por lo que para poder hacer las redes más robustas neecsitábamos más imágenes. Pero eso supone que alguien tenga que salir de noche, esperar a que llueva para tener imágenes con lluvia, esperar a que nieve, que es más complicado, etc.
En aquel momento ya había muchas redes de generación de imágenes bastante buenas, por lo que podíamos generar imágenes con nuevas condiciones ambientales, pero el problema era que había que etiquetarlas, y para la segmentación requería mucho tiempo.
Así que realicé un pipeline que mediante IA generativa, modificaba las condiciones ambientales de las imágenes que ya teníamos etiquetadas, teniendo imágenes en diferentes condiciones ambientales, pero sin tener que perder tiempo etiquetándolas.
Optimización con TensorRT
Como esto tenía que funcionar en un vehículo, no se podía utilizar un ordenador con una GPU potente. Por lo que se utilizaba un dispositivo embebido, una Jetson Orin. Por lo que era importante poder optimizar las redes neuronales para que hicieran la inferencia lo más rápido posible.
Me encargué de optimizarlas con TendorRT, haciendo que en algunos casos se ejecutaran hasta un 40% más rápido.
Los espacios de Hugging Face nos permite ejecutar modelos con demos muy sencillas, pero ¿qué pasa si la demo se rompe? O si el usuario la elimina? Por ello he creado contenedores docker con algunos espacios interesantes, para poder usarlos de manera local, pase lo que pase. De hecho, es posible que si pinchas en alún botón de ver proyecto te lleve a un espacio que no funciona.