跳转至

VLA训练流程梳理

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

对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

明确数据格式

切分episode

在foxglove中,播放视频定位任务操作的时间区间,然后在vla_data/config/episodes.csv中增加记录。注意index那里不要重复。 格式如下:

bag_path,episode_index,start_s,end_s,task,success,use_for_training,variation,failure_reason,notes
../rosbags/2026-05-21-21-29-58.bag,0,22.88,35.38,"Use the left arm to pick up the green cube and place it in the container",1,1,bag_212958_take_01,,"successful demonstration; timing manually annotated"

episode数据转换为中间数据

原因:ros1中的python版本和lerobot环境中的不一致,怕冲突,所以增加中间数据转换过程。

中间数据转换为LerobotDataset数据