Week 2 - Captura y balanceo del dataset
Generacion del dataset
A continuación, se describe cómo fue elaborada la preparación de los datos para la implementación de la arquitectura PilotNet, con el objetivo de permitir que un automóvil, en este caso simulado, prediga los comandos o acciones requeridos para conducir el automóvil clonando el comportamiento del piloto automático ofrecido por el mismo simulador.
Recopilación de datos
Para obtener la información del comportamiento del vehículo, se utilizó la herramienta de línea de comandos rosbag ofrecida por el ROS 2 para capturar en tiempo real la información producida mediante los tópicos publicados. Los dos tópicos de interés para el vehículo son: las imágenes captadas por la cámara frontal y el tópico de valores de control actual, del cual se toman los valores de throttle, steer y brake.
Tópicos usados:
/carla/ego_vehicle/rgb_front/image
/carla/ego_vehicle/vehicle_status
ros2 bag record /carla/ego_vehicle/rgb_front/image /carla/ego_vehicle/vehicle_status
El comando anterior devuelve la información recopilada en una base de datos SQLite con extensión .db3, para lo cual se debe procesar la información para acceder a los datos producidos. El primer inconveniente encontrado es el gran tamaño de esta base de datos en cuanto al contenido de imágenes, pues al capturar una hora de conducción autónoma, se puede llegar a generar demasiada información, ocasionando que al procesarla se requiera demasiada capacidad de cómputo y un script eficiente. En mi caso, cuento con 16 GB de memoria RAM junto con una memoria Swap de 16 GB, lo que limita el procesamiento de estas imágenes, restringiendo el procesamiento a bases de datos más pequeñas. Para mejorar esto, se ha decidido ampliar la capacidad de RAM y mejorar el script de procesamiento, el cual permita tomar de la base de datos lotes de imágenes más pequeños que faciliten la recuperación de esta información.
Mientras se mejora el rendimiento del hardware, se optó por trabajar con una base de datos más pequeña con el fin de tener el dataset para probar el entrenamiento de la red PilotNet y poder realizar algunos ajustes, mientras se tiene el dataset completo. El dataset generado se obtuvo de la simulación del town03, ejecutando el piloto automático durante 20 minutos.
El script desarrollado toma las imágenes y la marca de tiempo en la que estas son producidas. Luego, estas imágenes son acumuladas en un directorio específico, y adicionalmente se genera un archivo de texto .csv en donde se guarda el nombre de la imagen asociado a su marca de tiempo. Lo mismo se realiza con la información de los valores de control de throttle, steer y brake, los cuales están asociados a una marca de tiempo, los cuales se almacenan dentro de un archivo de texto adicional csv.
Las imágenes procesadas tienen dimensiones (160, 320, 3) en formato RGB y extensión .png.
Los valores de control se encuentran en los siguientes rangos: | Control | Rango | Tipo | |———–|————————–|—————| | Throttle | 0.0 ≤ throttle ≤ 1.0 | float32 | | Steer | -1.0 ≤ steer ≤ 1.0 | float32 | | Brake | 0.0 ≤ brake ≤ 1.0 | float32 |
Debido a que la captura de los tópicos de control y las imágenes producidas ocurren en instantes de tiempo distintos y, en consecuencia, tienen marcas de tiempo distintas, el script busca para cada imagen la acción de control más cercana, producida en el instante posterior al de dicha imagen.