Semanas 11, 12 y 13 - M4thinking/RLDuckietown GitHub Wiki

SEMANA 11

Previo al código

       Vimos una serie de videos explicativos sobre redes neuronales convolucionales para tener una mejor idea de como implementar el código en nuestro caso en particular. Donde entendimos que el vector de salida de la red debía estar expresado en un array de 1xn.

Momento sin corbata

       Subimos todo el repositorio a Google Drive para poder usar los módulos en Google Colab con el potencial de una GPU para correr la red neuronal y no consumir la RAM de nuestros computadores. Modificamos las tareas en proceso en Trello y generamos un nuevo Doodle para asignar la próxima reunión.

The real working process

       Creamos un diccionario para definir cada movimiento del duckiebot en una sola variable, conviertiendo el vector de posibles salidas de 2x7 a 1x7, lo que permitío correr por primera vez y de buena manera la red. Luego de esto, creamos un nuevo módulo llamado autoduck.py que tiene como propósito probar la funcionalidad de la red sobre el ambiente virtual de Duckietown.

Dificultades

  • Una vez creada la arquitectura de la red neuronal, el problema que se presentó fue que la red no corría con las dimensiones correctas todos los vectores de entrada y salida en las diferentes capas. Probando cambiando el parametro de categorical_crossentropy a sparse_categorical_crossentropy, tambien probamos sin cambiar los vectores a 'float32', cambiamos las dimensiones con una función right_levels para transformar un vector de velocidades al correcto de una sola fila. Finalmente, para solucionar el problema creamos este diccionario de velocidades donde a cada velocidad se le asigno un numero entre 0 y 6.
  • Otra dificultad que se presento, es que la red presentaba un rendimiento bajo el esperado tanto en procesamiento como en resultados. El "accuracy" era del 60% aproximadamente con 200 imagenes y al querer subir el numero de imagenes, la red tomaba demasiado tiempo en aprender las imagenes.
  • No sabiamos donde estaba guardado el obs, el key para relacionarlo con el action y los pasos intermedios que debiamos modificar para instalar a la red en vez de al usuario en el proceso de conducción del duckiebot.

Trabajos para la próxima reunión

       Comenzar a modificar autoduck.py para que la red pueda ejecutar los comandos por cuenta propia y mejorar el rendimiento de la red neuronal con grandes volúmenes de imágenes.


SEMANA 12

Previo al código

       Corrimos el recorder y guardamos 5000 imágenes del simulador mientras conducíamos para poder usar en la red y así entrenar el modelo.

Momento sin corbata

       Seguimos los procedimientos que ya habíamos establecido (hacer un Doodle y modificar el Trello), organizándonos con fechas para seguir con el proyecto. Además, avanzamos en la bitácora 2.

The real working process

       Entrenamos el modelo con 5000 imágenes y sus respectivas velocidades y lo guardamos en formato h5. Completamos autoduck.py agregando la función argmax para que el simulador pueda utilizar los datos de la red y así moverse autónomamente, de modo que pudimos comenzar a hacer pruebas de la red neuronal y nos dimos cuenta de que debíamos eliminar algunas clases no representativas en la conducción. Por lo tanto, modificamos el diccionario de velocidades que estaba mal planteado dentro del programa, eliminando "quedarse parado" y "retroceder".

       Volvimos a correr el simulador sin las velocidades ya eliminadas y el duckiebot manejaba hacia adelante y hacia los lados pero generaba un movimiento constante correspondiente a las teclas "a" y "d" tratando de ajustarse al camino. Por lo tanto, siguiendo el mismo procedimiento de antes, eliminamos los movimientos sin velocidad lineal (teclas a y d). Ya finalizado el día logramos ejecutar nuevamente la red y el simulador, lo que resultó en que el duckiebot se movía autónomamente de buena manera. Aún así debemos corregir ciertos errores para que el duckiebot se mueva de la manera más perfecta posible.

Dificultades

  • Cuando intentamos correr el autoduck, hubo problemas con TensorFlow porque las dimensiones de la imagen de entrada eran distintas a las del modelo. Eso lo arreglamos con la función resized.
  • Al correr el autoduck, nos dimos cuenta de que no necesitábamos todas las variables de velocidad para que el duckiebot conduzca de manera correcta. Para arreglarlo, modificamos tanto el diccionario, como el recorder para que no se guarden las imágenes y velocidades que no corresponden a los movimientos necesarios.

Trabajos para la próxima reunión

       Perfeccionar la conducción del duckiebot.


SEMANA 13

Semana actual

       Hasta la fecha seguimos trabajando en perfeccionar la conducción, hemos probado a lo menos 15 modelos distintos, obteniendo resultados muy diversos en cada uno de ellos. Seguimos buscando encontrar el optimo de los procesos, ya sea la densidad de las capas, el numero de fotos, los parámetros de conducción ,etc. Esperamos poder esta semana culminar con las pruebas preliminares, para comenzar el desarrollo del informe seguido con la presentación. Previo a la ultima clase del semestre hemos recibido varios feedbacks de Christopher nuestro tutor, los cuales observaremos y aplicaremos el futuro día miércoles.