English | 简体中文 | Deutsch | Français | Español | 한국어
- Seguridad: Las políticas de conducción no son perfectas y pueden hacer que el robot choque. ¡Asegúrate siempre de operar en un entorno seguro! Ten en cuenta que tu teléfono podría dañarse en una colisión. Asegúrate de tener siempre un controlador de juego conectado y estar familiarizado con el mapeo de teclas para poder detener el vehículo en cualquier momento. ¡Usa bajo tu propio riesgo!
- Hardware de cómputo: Entrenar una política de conducción requiere muchos recursos y puede ralentizar o incluso congelar tu máquina. Se recomienda usar una laptop de alta gama o una estación de trabajo con gran cantidad de RAM y GPU dedicada, especialmente cuando se entrena con tamaños de lote grandes. La documentación actualmente tampoco es muy detallada. ¡Usa bajo tu propio riesgo!
- Paciencia requerida: Obtener una buena política de conducción para tu conjunto de datos personalizado requerirá algo de paciencia. No es sencillo, implica recolección de datos, ajuste de hiperparámetros, etc. Si nunca has entrenado modelos de aprendizaje automático antes, será un desafío y puede llegar a ser frustrante.
Primero necesitas configurar tu entorno de entrenamiento.
Recomendamos crear un entorno conda para OpenBot. Las instrucciones para instalar conda se pueden encontrar aquí. La forma más fácil de crear un nuevo entorno con todas las dependencias es usar uno de los archivos de entorno proporcionados. En Windows, también necesitarás instalar Microsoft C++ Build Tools. Asegúrate de estar en la carpeta policy
dentro de tu repositorio local de OpenBot. Según tu sistema operativo, ejecuta el comando correspondiente:
- MacOS:
conda env create -f environment_mac.yml
- Windows:
conda env create -f environment_win.yml
- Linux:
conda env create -f environment_linux.yml
Para soporte de GPU, asegúrate de tener también los controladores apropiados instalados. En Mac y Windows, todo debería funcionar de inmediato. En Linux, puedes instalar los controladores con el siguiente comando:
sudo apt-get install nvidia-driver-510
En Linux, probablemente también necesitarás ejecutar lo siguiente para agregar cuda y cudnn a tu ruta:
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CONDA_PREFIX/lib/' >> ~/.bashrc
source ~/.bashrc
¡Listo! Estás listo para entrenar tus propios modelos. Si esto no funciona para ti, a continuación se encuentran las instrucciones para configurar dicho entorno manualmente.
Primero crea un nuevo entorno conda con el siguiente comando:
conda create -n openbot pip python=3.9 -y
Luego, necesitas activar tu entorno conda:
conda activate openbot
Si esto no funciona (por ejemplo, en Windows), es posible que necesites activar el entorno con activate openbot
en su lugar.
Una vez que el entorno esté activo, necesitas instalar tensorflow. Ten en cuenta que el entrenamiento será muy lento en una laptop. Por lo tanto, si tienes acceso a una computadora con GPU dedicada, te recomendamos encarecidamente usarla instalando las bibliotecas necesarias; asegúrate de tener controladores de GPU recientes instalados. A continuación se encuentran los comandos para instalar tensorflow para diferentes sistemas operativos.
conda install -c apple tensorflow-deps -y
pip install tensorflow-macos~=2.9.0
Soporte de GPU
pip install tensorflow-metal~=0.5.0
pip install tensorflow~=2.9.0
Soporte de GPU
sudo apt-get install nvidia-driver-510
conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1 -y
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CONDA_PREFIX/lib/' >> ~/.bashrc
source ~/.bashrc
pip install tensorflow~=2.9.0
Soporte de GPU
conda install cudatoolkit=11.3 cudnn=8.2 -y
Asegúrate de estar en la carpeta policy
dentro de tu repositorio local de OpenBot. Ahora, puedes instalar todas las dependencias restantes con el siguiente comando:
pip install -r requirements.txt
También puedes instalar pydot (pip install pydot
) y graphviz (ver instrucciones) si deseas visualizar la arquitectura de la red.
Si deseas usar la WebApp para la recolección de datos y el entrenamiento, necesitas instalar las siguientes dependencias adicionales. (En Mac, el paquete brotlipy
está actualmente roto en pip, por lo que necesitas instalarlo primero usando conda: conda install brotlipy=0.7
)
pip install -r requirements_web.txt
Para referencia y solución de problemas, a continuación se muestra una lista de los paquetes esenciales.
Entrenamiento:
Interfaz web:
- Recuerda activar el entorno antes de ejecutar comandos en la terminal:
conda activate openbot
- Si la importación de tensorflow no funciona, intenta instalarlo a través de
pip install tensorflow --user
. (Ver este problema.)
Para entrenar una política de conducción autónoma, primero necesitarás recolectar un conjunto de datos. Cuantos más datos recolectes, mejor será la política de conducción resultante. Para los experimentos en nuestro artículo, recolectamos aproximadamente 30 minutos de datos. Ten en cuenta que la red imitará tu comportamiento de conducción. Cuanto mejor y más consistente conduzcas, mejor aprenderá la red a conducir.
- Conecta un controlador de juego bluetooth al teléfono (por ejemplo, controlador PS4: para entrar en modo de emparejamiento, presiona los botones PS y share hasta que el LED parpadee rápidamente).
- Selecciona el modelo
CIL-Mobile-Cmd
en la aplicación. - Ahora conduce el coche a través de un controlador de juego y graba un conjunto de datos. En el controlador PS4, el registro se puede alternar con el botón X.
Ahora encontrarás una carpeta llamada Documents/OpenBot en el almacenamiento interno de tu smartphone. Para cada grabación, habrá un archivo zip. El nombre del archivo zip estará en el formato yyyymmdd_hhmmss.zip correspondiente a la marca de tiempo de cuando se inició la grabación.
El cuaderno de Jupyter espera una carpeta llamada dataset
en la misma carpeta. En esta carpeta, debe haber dos subcarpetas, train_data
y test_data
. Los datos de entrenamiento se utilizan para aprender la política de conducción. Los datos de prueba se utilizan para validar la política de conducción aprendida en datos no vistos durante el proceso de entrenamiento. Esto proporciona alguna indicación de qué tan bien funcionará esta política en el robot. Aunque el robot puede conducir por la misma ruta vista durante el entrenamiento, las imágenes exactas observadas serán ligeramente diferentes en cada ejecución. La división común es 80% datos de entrenamiento y 20% datos de prueba. Dentro de las carpetas train_data
y test_data
, necesitas crear una carpeta para cada sesión de grabación y darle un nombre como my_openbot_1
, my_openbot_2
, etc. La idea aquí es que cada sesión de grabación puede tener diferentes condiciones de iluminación, un robot diferente, una ruta diferente. En el cuaderno de Jupyter, puedes entrenar solo en un subconjunto de estos conjuntos de datos o en todos ellos. Dentro de cada carpeta de sesión de grabación, debes colocar todas las grabaciones de esa sesión de grabación. Cada grabación corresponde a un archivo zip extraído que has transferido desde la carpeta Openbot en tu teléfono. Tu carpeta de conjunto de datos debería verse así:
En lugar de copiar todos los archivos manualmente desde el teléfono, también puedes subir los registros automáticamente a un servidor Python en tu computadora. En este caso, los archivos zip se subirán y desempaquetarán en la carpeta dataset/uploaded
. Aún necesitarás moverlos a la estructura de carpetas para el entrenamiento. Puedes simplemente tratar la carpeta uploaded
como una sesión de grabación y moverla a train_data
. Las grabaciones serán entonces reconocidas como datos de entrenamiento por el cuaderno de Jupyter. Si aún no tienes una sesión de grabación en la carpeta test_data
, también necesitas mover al menos una grabación de train_data/uploaded
a test_data/uploaded
.
Para un mejor rendimiento de entrenamiento, puedes convertir el conjunto de datos recolectado en un formato especializado. Puedes crear un tfrecord de los conjuntos de datos de entrenamiento y prueba con los siguientes comandos:
conda activate openbot
python -m openbot.tfrecord -i dataset/train_data -o dataset/tfrecords -n train.tfrec
python -m openbot.tfrecord -i dataset/test_data -o dataset/tfrecords -n test.tfrec
Por defecto, esta conversión se realizará automáticamente al inicio del entrenamiento.
Asegúrate de que tu entorno conda para openbot esté activado ejecutando el siguiente comando:
conda activate openbot
Proporcionamos un Cuaderno de Jupyter que te guía a través de los pasos para entrenar una política de conducción autónoma. Abre el cuaderno con el siguiente comando.
jupyter notebook policy_learning.ipynb
Ahora se abrirá automáticamente una ventana del navegador web y cargará el cuaderno de Jupyter. Sigue los pasos para entrenar un modelo con tus propios datos.
Este método asume que los datos están en el lugar correcto. Para ajustar los hiperparámetros, puedes pasar los siguientes argumentos.
'--no_tf_record', action='store_true', help='no cargar un tfrecord sino un directorio de archivos'
'--create_tf_record', action='store_true', help='crear un nuevo tfrecord'
'--model', type=str, default='pilot_net', choices=['cil_mobile', 'cil_mobile_fast', 'cil', 'pilot_net'], help='arquitectura de red (por defecto: cil_mobile)'
'--batch_size', type=int, default=16, help='número de épocas de entrenamiento (por defecto: 16)'
'--learning_rate', type=float, default=0.0001, help='tasa de aprendizaje (por defecto: 0.0001)'
'--num_epochs', type=int, default=10, help='número de épocas (por defecto: 10)'
'--batch_norm', action='store_true', help='usar normalización por lotes'
'--flip_aug', action='store_true', help='voltear imágenes y controles aleatoriamente para la augmentación'
'--cmd_aug', action='store_true', help='agregar ruido a la entrada de comandos para la augmentación'
'--resume', action='store_true', help='reanudar el entrenamiento anterior'
Si tu conjunto de datos ya ha sido convertido a un tfrecord, puedes entrenar la política desde la shell con el comando:
python -m openbot.train
Si deseas convertir tu conjunto de datos a un tfrecord antes de entrenar, necesitas agregar la siguiente bandera:
python -m openbot.train --create_tf_record
Si no deseas convertir el conjunto de datos a un tfrecord y entrenar usando los archivos directamente, necesitas agregar la siguiente bandera:
python -m openbot.train --no_tf_record
Para entrenar un modelo para el despliegue final, querrás usar un tamaño de lote grande y un número de épocas. Habilitar la normalización por lotes generalmente mejora el entrenamiento también. El modelo pilot_net
es más grande que el cil_mobile
por defecto, pero puede lograr un mejor rendimiento en algunas tareas mientras sigue funcionando en tiempo real en la mayoría de los smartphones.
python -m openbot.train --model pilot_net --batch_size 128 --num_epochs 100 --batch_norm
Al final del proceso de entrenamiento, se generan dos archivos tflite: uno corresponde al mejor punto de control según las métricas de validación y el otro al último punto de control. Elige uno de ellos y renómbralo a autopilot_float.tflite. Reemplaza el modelo existente en Android Studio y recompila la aplicación.
Si estás buscando la carpeta en tu directorio local, la encontrarás en: app/src/main/assets/networks
.
Proporcionamos una aplicación web y un servidor web en Python para facilitar el entrenamiento de políticas. (Beta)
- Carga automática de registros (sesiones)
- ver Solución de problemas para más detalles
- Listar sesiones subidas, con vista previa en GIF
- Listar conjuntos de datos, con información básica
- Mover sesión a un conjunto de datos
- Eliminar sesión
- Listar modelos entrenados y mostrar gráficos sobre el entrenamiento
- Entrenar un modelo con parámetros básicos, mostrar barra de progreso
conda activate openbot
python -m openbot.server
Ahora puedes abrir tu navegador para visualizar el conjunto de datos y ver las cargas entrantes yendo a: http://localhost:8000/#/uploaded
Puedes ejecutar el servidor de Python con el comando:
python -m openbot.server
También hay un modo desarrollador:
adev runserver openbot/server
Para el desarrollo del frontend (aplicación react):
FE_DEV=1 adev runserver openbot/server
Cuando ejecutes el servidor deberías ver algo como:
Skip address 127.0.0.1 @ interface lo
Found address 192.168.x.x @ interface wlp2s0
Registration of a service, press Ctrl-C to exit...
Running frontend: 0.7.0
Frontend path: /home/USERNAME/miniconda3/envs/openbot/lib/python3.7/site-packages/openbot_frontend
======== Running on http://0.0.0.0:8000 ========
(Press CTRL+C to quit)
Si la carga al servidor no está funcionando, aquí hay algunos consejos para solucionar problemas:
- Intenta reiniciar el servidor (computadora) y la aplicación OpenBot (smartphone)
- Asegúrate de que el smartphone y tu computadora estén conectados a la misma red WiFi
- Si tu router tiene redes de 2.4 GHz y 5 GHz con el mismo nombre, desactiva la red de 5 GHz
- Mantén el teléfono conectado a Android Studio mientras ejecutas la aplicación. En la pestaña Logcat, selecciona Debug en el menú desplegable. Escribe
NSD
en el campo de filtro para ver los mensajes de depuración relacionados con la conexión del servidor. EscribeUpload
en el campo de filtro para ver los mensajes de depuración relacionados con la carga del archivo de grabación. - Si un modelo publicado se descarga continuamente, asegúrate de que la hora en tu teléfono y laptop/estación de trabajo esté configurada correctamente.