跳转至

VLA训练流程梳理

目的:基于实验室现有半人形机器人,采集了大概50条双臂抓取方块的任务数据,现在在此基础上,先跑通smolVLA的本地微调及部署全流程。

0724已完成:

✓ ROS1 rosbag 数据采集
✓ Foxglove / rosbag info 数据查看
✓ 各话题频率统计
✓ LeRobot环境安装
✓ SmolVLA下载
✓ 官方数据集加载
✓ Rerun可视化
✓ 官方数据20步冒烟训练
✓ RTX 3060 CUDA训练验证
✓ TorchCodec问题绕过,使用PyAV

  • 对rosbag中的数据进行分析 1、使用rosbag info xxx.bag来查看都有哪些话题消息
    2、使用/vla_data/data_process/bag_rate.py来一次性检测所有rosbag包中所有话题消息的频率,需要首先进入到ros1的docker环境,然后执行具体命令python3 bag_rate.py ../rosbags/2026-xxx.bag
    3、使用foxglove来查看具体图像信息以及关节数据变化曲线

  • lerobot框架及基座模型权重下载 1、lerobot的环境似乎和ros1 noetic环境会有什么冲突,所以lerobot的conda环境直接建立在宿主机上,需要回放rosbag消息或对原始bag消息进行处理时进入ros1的docker环境
    2、具体参照官方文档

  • 官方数据集加载进行冒烟测试 1、下载官方数据集

    lerobot-edit-dataset \
      --repo_id lerobot/svla_so100_pickplace \
      --operation.type info \
      --operation.show_features true
    
    2、官方数据集可视化
    lerobot-dataset-viz \
      --repo-id lerobot/svla_so100_pickplace \
      --episode-index 0
    
    3、进行20次冒烟测试
    lerobot-train \
      --policy.path=lerobot/smolvla_base \
      --policy.push_to_hub=false \
      --policy.empty_cameras=1 \
      --dataset.repo_id=lerobot/svla_so100_pickplace \
      --dataset.video_backend=pyav \
      --rename_map='{"observation.images.top":"observation.images.camera1","observation.images.wrist":"observation.images.camera2"}' \
      --batch_size=1 \
      --steps=20 \
      --log_freq=1 \
      --output_dir=outputs/train/smolvla_smoke_test \
      --job_name=smolvla_smoke_test \
      --policy.device=cuda \
      --wandb.enable=false
    
    其中视频解码采用的是PyAV,PyAV通常比TorchCodec慢一些,但更容易部署和排查。后续想加快速度,可以修复环境来支持TorchCodec。 标准是放入3路图像,现在只放入了2路,所以empty=1.

下一步任务:

→ 明确自己的 state/action
→ 标注 1 个 Episode
→ 转换为本地 LeRobotDataset
→ 可视化检查
→ 用 1~3 个 Episode 过拟合
→ 批量转换全部 Episode
→ 正式微调
→ 离线推理
→ 真机 Shadow Mode