En los sistemas avanzados de asistencia al conductor, conocidos como ADAS por su sigla en inglés, la segmentación semántica es una de las tecnologías de visión por computador más importantes. A diferencia de la detección de objetos tradicional, que solo identifica y ubica objetos usando rectángulos delimitadores, la segmentación semántica analiza cada píxel de la imagen. Clasifica cada uno en una categoría específica, como calzada, demarcación de pista, vehículo, peatón, vereda, señal de tránsito, vegetación o edificio. Eso permite al sistema entender no solo qué objetos hay presentes, sino también su forma y su posición exacta dentro de la escena.

En conducción autónoma y en ADAS, la segmentación semántica cumple un rol crítico al habilitar la comprensión de la escena, es decir, la capacidad del vehículo de interpretar su entorno en tiempo real. Ayuda a identificar el área transitable exacta, distinguiendo la superficie del camino de veredas, pasto, barreras y otras zonas no transitables. Esa información es esencial para la planificación segura de trayectorias, el mantenimiento de pista y la navegación.

La segmentación semántica también mejora la comprensión de los objetos, al distinguir entre distintos tipos de obstáculos, como peatones, ciclistas, vehículos, conos de tránsito o postes fijos, identificando con precisión sus límites. A diferencia de los rectángulos delimitadores, que suelen incluir áreas vacías de fondo, la segmentación a nivel de píxel delinea la forma real de cada objeto, lo que facilita al vehículo estimar el espacio disponible y mantener distancias seguras.

Otra ventaja es su buen desempeño en entornos complejos, como calles urbanas congestionadas, autopistas, zonas de faena y condiciones difíciles de clima o iluminación. Como cada cuadro se analiza en detalle, el vehículo recibe una comprensión más rica de su entorno, lo que ayuda a reducir las probabilidades de decisiones incorrectas causadas por malinterpretar el ambiente.

Al entregar predicciones detalladas píxel a píxel, la segmentación semántica cierra la brecha entre las imágenes crudas de la cámara y los algoritmos de decisión de alto nivel que usan los vehículos autónomos. El resultado es un sistema de percepción más confiable, que mejora la seguridad y reduce el riesgo de errores críticos de conducción.

Presentación del proyecto

Este proyecto usa segmentación semántica en tiempo real combinada con seguimiento de objetos para aplicaciones ADAS, con modelos YOLO de Ultralytics sobre una Raspberry Pi. Demuestra cómo modelos livianos de segmentación semántica YOLO, como el YOLO26n-sem, pueden correr de forma eficiente en dispositivos de borde con recursos limitados, como la Raspberry Pi o placas de desarrollo tipo NVIDIA Orin.

Combinar segmentación semántica con seguimiento de múltiples objetos crea una cadena de percepción que no solo entiende qué hay presente en la escena, sino que además sigue a los objetos en movimiento a lo largo de cuadros consecutivos. El seguimiento permite estimar cómo se desplazan los objetos en el tiempo, algo importante para predecir posibles colisiones y planificar trayectorias más seguras.

Fig 1. Prototipo del autor de la segmentación semántica para ADAS con YOLO
Fig 1. Prototipo del autor de la segmentación semántica para ADAS con YOLO
Fig 2. Funcionamiento de la segmentación ADAS en marcha
Fig 2. Funcionamiento de la segmentación ADAS en marcha

¿Qué hardware y qué código se necesitan?

El diseño usa el modelo YOLO26 para segmentación semántica a través del entorno de trabajo de Ultralytics. La aplicación puede correr en una Raspberry Pi con 8GB de RAM o más. Sin embargo, usar una placa NVIDIA Orin entrega un rendimiento bastante mejor gracias a su hardware dedicado de inteligencia artificial. Durante el desarrollo, el mejor rendimiento se observó en un MacBook Air con Apple Silicon, donde la aplicación alcanzó aproximadamente 30 a 40 cuadros por segundo. Un valor de FPS más alto significa que el sistema procesa más cuadros de video cada segundo, lo que se traduce en una detección en tiempo real más fluida y con mejor respuesta.

Para empezar, hay que instalar Ultralytics y las bibliotecas de software necesarias. Se abre el terminal y se ejecutan los siguientes comandos:

Código
sudo pip3 install ultralytics
sudo pip3 install numpy
sudo pip3 install opencv-python
Fig 3. Instalación de las dependencias
Fig 3. Instalación de las dependencias

Tras instalar con éxito todas las dependencias necesarias, se descarga el modelo de segmentación semántica YOLO26. Los modelos oficiales y sus enlaces de descarga están disponibles en la página de documentación de Ultralytics:

https://docs.ultralytics.com/models/yolo26#supported-tasks-and-modes.

Se recomienda el modelo semántico nano yolo26n-sem.pt, porque está optimizado para dispositivos de borde y entrega buen rendimiento en tiempo real exigiendo relativamente poca capacidad de cómputo.

Una vez descargado el modelo, se crea el script de Python. Primero se importan las bibliotecas necesarias, como OpenCV (cv2) para el procesamiento de imágenes, Ultralytics YOLO para cargar el modelo de aprendizaje profundo, y NumPy para manejar operaciones numéricas.

Luego se carga el modelo YOLO indicando el nombre del archivo, por ejemplo yolo26n-sem.pt. Si el archivo del modelo está guardado en el mismo directorio que el script de Python, basta con el nombre del archivo. En caso contrario, hay que especificar su ruta completa (ver Fig. 3).

Después se usa OpenCV para capturar video en vivo desde la cámara. Un flujo de video no es más que una secuencia continua de cuadros de imagen capturados muchas veces por segundo. Cada cuadro se pasa de inmediato al modelo de segmentación semántica YOLO26 para su procesamiento.

A diferencia de la detección de objetos convencional, que simplemente dibuja rectángulos alrededor de los objetos detectados, la segmentación semántica analiza cada píxel del cuadro. Cada píxel se asigna a una clase predefinida, como calzada, vehículo, persona, edificio, vereda, vegetación, cielo o señal de tránsito. Eso produce una comprensión mucho más detallada de la escena, porque cada región visible queda etiquetada.

Internamente, el modelo procesa cada imagen a través de varias etapas. Una red troncal extrae primero características visuales importantes, como bordes, texturas y formas. Esas características se combinan luego a distintas escalas mediante la red intermedia, lo que permite reconocer con precisión tanto objetos grandes como pequeños. Finalmente, la cabeza de segmentación genera un mapa denso de predicción en el que a cada píxel se le asigna una probabilidad para cada clase disponible. La clase con mayor probabilidad se convierte en la etiqueta final de ese píxel.

La salida resultante se conoce como máscara semántica. Esa máscara es esencialmente un mapa codificado por colores, donde cada categoría de objeto se representa con un color distinto. Por ejemplo, las calles pueden aparecer en un color, los peatones en otro y los vehículos en un tercero. La máscara se redimensiona para coincidir con la imagen original de la cámara y se mezcla con el video en vivo, creando una superposición que resalta con claridad cada objeto detectado sin dejar de mostrar la escena original.

Esta visualización permite al sistema mostrar calles, vehículos, peatones, edificios, señales de tránsito y otros elementos de la escena con límites muy precisos en cada cuadro. Esa información a nivel de píxel es extremadamente valiosa para ADAS, porque permite una detección precisa del área transitable, mejor reconocimiento de obstáculos, mejor comprensión de las pistas y una interpretación de la escena más confiable que la detección basada en rectángulos delimitadores.

Fig 4. Fragmento de código con la configuración del modelo y la ruta del archivo
Fig 4. Fragmento de código con la configuración del modelo y la ruta del archivo

¿Cómo se conecta y se pone en marcha?

Se conecta la cámara al puerto CSI, la interfaz serial de cámara, de la Raspberry Pi, la NVIDIA Orin o la placa que se haya elegido. La interfaz CSI entrega una conexión directa de alta velocidad entre la cámara y el procesador, lo que permite transferir los cuadros de video con baja latencia, algo importante para aplicaciones de visión en tiempo real.

Después de conectar la cámara, se alimenta la placa con el adaptador de 5V.

Tras crear el script de Python, se ejecuta la aplicación. En pocos segundos se abre una ventana de cámara que muestra la salida de segmentación semántica en tiempo real. Se puede mover la cámara o montarla en el frente o la parte trasera de un vehículo para simular condiciones de conducción.

A medida que se procesa el flujo de video, cada cuadro se analiza píxel por píxel. El modelo resalta calles, vehículos, peatones, árboles, edificios, veredas, señales de tránsito y otros objetos usando distintos colores. A diferencia de la detección de objetos convencional, que dibuja cajas rectangulares, la segmentación semántica delinea con precisión la forma real de cada objeto, entregando una comprensión mucho más rica de la escena.

Esta información detallada de la escena ayuda a distinguir las áreas transitables de los obstáculos, y se puede extender agregando planificación de trayectorias, seguimiento de objetos o detección de área transitable para aplicaciones de conducción autónoma en plataformas como la Raspberry Pi o la NVIDIA Orin.

¿Qué placa conviene para replicarlo?

La brecha de cómputo entre las opciones habituales explica buena parte de los resultados. Una Raspberry Pi 5 depende exclusivamente de su CPU para la inferencia, salvo que se le agregue el acelerador Hailo-8L del kit de IA, que aporta unos 13 TOPS por el zócalo M.2. Una NVIDIA Jetson Orin Nano, en cambio, parte en torno a los 40 TOPS con hardware dedicado, y ahí la diferencia de cuadros por segundo deja de ser marginal.

Conviene tener presente que un modelo nano como el yolo26n-sem prioriza velocidad sobre exactitud. Es la elección correcta para un prototipo de escritorio, y también la razón por la que este montaje sirve para aprender la técnica, no para tomar decisiones de frenado.