Semana 25 - Mejorando piloto neuronal cruza ventanas
Índice
Aumento de dataset
La semana pasada se observó que el piloto neuronal aún no funcionaba lo suficientemente bien. Se pensó que esto se debía a la falta de datos en el dataset, por lo que se procedió a aumentarlo con datos del piloto manual, consiguiendo así muchos más escenarios que el piloto experto no emulaba. Esto dejó la siguiente distribución del dataset:
En el entrenamiento, se realizó la prueba de continuar entrenando el modelo de la semana pasada mientras paralelamente se entrenaba uno desde cero. El modelo entrenado desde cero dio buenos resultados, pero el modelo reentrenado dio mejores resultados. También se redujo el learning rate para evitar las oscilaciones que ocurren cuando el error es relativamente pequeño.
También se desarrolló una interfaz con rviz2 para ver la cámara en primera persona:
Team Viewer
Esta herramienta ayudó bastante durante esta semana, ya que permitía revisar el dataset o la grabación del entrenamiento desde el móvil, permitiendo aprovechar el tiempo en transporte público. De esta manera, se dejaban para casa las tareas que requieren más concentración y tiempo, como la redacción y la implementación de DeepPilot.
DeepPilot
En el siguiente repositorio de JdeRobots se encuentra la implementación de DeepPilot. Gracias a seguir la implementación estándar de redes neuronales en PyTorch, cambiar de red neuronal fue bastante sencillo siguiendo los siguientes pasos:
- Añadir la clase de DeepPilot a models.
- Añadir las transformaciones en otro documento para aumentar la modularidad.
- Adaptar el entrenamiento para su correcto funcionamiento, ya que esta segunda red consta de una red por cada componente de velocidad que queramos manejar.
- Unificación del código (se aprovechó para unificar adecuadamente el entrenamiento del sigue-lineas con el cruza-ventanas).
El objetivo ahora es ampliar aún más el dataset para poder poner a prueba ambos modelos y mejorar las prestaciones del drone.
Un fallo es que, a la hora de grabar los rosbags, no se tuvo en cuenta la velocidad en z. Sin embargo, eso no significa que el dataset anteriormente grabado no sirva para nuestra aplicación. Ya que DeepPilot usa una red neuronal para la inferencia de cada velocidad, podremos reutilizar este dataset y reforzar el anterior grabando aún más muestras.