1 minute read

Reconstrucción del dataset y nuevo pipeline de sincronización

Esta semana reconstruí completamente el dataset para el modelo de conducción. Grabé escenarios variados en CARLA y dejé Town02 solo para test, para asegurar una prueba “real” sin contaminación del entrenamiento.

Con la Python API generé unas 87.000 imágenes RGB y segmentadas. Luego balanceé el dataset (steer y throttle) hasta dejarlo en unas 85.000 muestras, usando remuestreo para evitar que el modelo aprenda solo a manejar en recto.

Nuevo pipeline (mucho más estable)

Antes intentaba guardar imágenes y comandos en tiempo real, pero eso genera jitter: las imágenes tardan en escribirse y pierden sincronía con los comandos. Para solucionarlo, ahora el proceso se hace en tres pasos separados:

  1. Grabar la simulación Solo guardo el log con posiciones, frame ID y comandos del vehículo.

  2. Reproducir y capturar imágenes Uso client.replay_file() para repetir la simulación de forma determinista y ahí sí capturo las imágenes RGB y segmentadas sin afectar el tiempo.

  3. Inferir curvatura Con todas las imágenes ya sincronizadas, paso un modelo especializado para generar la etiqueta de curvatura.

De esta forma no hay retrasos ni desfases entre lo que el piloto hizo y las imágenes que se usaron para entrenar.

Prueba offline en Town02

Realicé una evaluación offline del modelo en el mapa Town02, un entorno no visto durante el entrenamiento. Estos fueron los resultados:

RMSE (steer / throttle): 0.4111 / 0.4450

MAE (steer / throttle): 0.3123 / 0.3732

Lamentablemente, los valores son más altos de lo esperado y el comportamiento del vehículo en la prueba online también confirma que el modelo no está conduciendo bien.

Por esta razón, estoy revisando nuevamente todo el pipeline:

  • Dataset: verificar la correcta sincronización entre imágenes y comandos (evitar jitter).

  • Scripts de entrenamiento y preprocesamiento: confirmar que estén alineados con lo usado durante la captura.

  • Procesamiento de imágenes: asegurar que la normalización, recortes y conversiones coincidan exactamente con los usados en entrenamiento.

Aunque este fallo apunta a un problema en los datos o en el preprocesado, aún no descarto nada; con otros datasets el mismo flujo funcionó perfectamente. Continúo depurando para identificar dónde está la inconsistencia.