Naviground

Sistema de percepción para vehículo autónomo

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.

    Segmentación semántica
  • Redes de clasificación de objetos

    Mediante una YOLO, se pueden detectar objetos en la imagen

    Clasificación de objetos con YOLO
  • 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.

    Profundidad

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

Captura de videos de Naviground

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

YOLO labeling

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.

ASCOD
Naviground system

Seguir leyendo

Últimos posts -->

¿Has visto estos proyectos?

Horeca chatbot

Horeca chatbot Horeca chatbot
Python
LangChain
PostgreSQL
PGVector
React
Kubernetes
Docker
GitHub Actions

Chatbot conversacional para cocineros de hoteles y restaurantes. Un cocinero, jefe de cocina o camaeror de un hotel o restaurante puede hablar con el chatbot para obtener información de recetas y menús. Pero además implementa agentes, con los cuales puede editar o crear nuevas recetas o menús

Naviground

Naviground Naviground

Subtify

Subtify Subtify
Python
Whisper
Spaces

Generador de subtítulos para videos en el idioma que desees. Además a cada persona le pone su subtítulo de un color

Ver todos los proyectos -->

¿Quieres aplicar la IA en tu proyecto? Contactame!

¿Quieres mejorar con estos tips?

Últimos tips -->

Usa esto en local

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.

Flow edit

Flow edit Flow edit

Edita imágenes con este modelo de Flow. Basándose en SD3 o FLUX puedes editar cualquier imagen y generar nuevas

FLUX.1-RealismLora

FLUX.1-RealismLora FLUX.1-RealismLora
Ver todos los contenedores -->

¿Quieres aplicar la IA en tu proyecto? Contactame!

¿Quieres entrenar tu modelo con estos datasets?

short-jokes-dataset

Dataset de chistes en inglés

opus100

Dataset con traducciones de inglés a español

netflix_titles

Dataset con películas y series de Netflix

Ver más datasets -->