3. LeRobot项目速览
在正式进入 VLA 策略微调之前,先把 LeRobot 这个仓库“摸清楚”非常关键。LeRobot 是 Hugging Face 主导的开源机器人学习框架,目标是把机器人数据、策略模型、训练脚本和真机部署统一到一套接口里。它既不是单纯的模型库,也不是单纯的数据集工具,而是一个“数据—策略—训练—部署”闭环工程。理解它的目录结构和模块职责,能让你在后续微调时快速定位配置、数据和权重。
一、仓库结构:从目录看职责边界
LeRobot 的仓库结构大致可以按“数据、策略、训练、部署、工具”五类来理解。下面是一个典型目录的简化视图:
lerobot/
├── lerobot/
│ ├── common/ # 通用工具:配置、日志、设备、随机种子
│ ├── datasets/ # 数据集加载、转换、统计、采样
│ ├── policies/ # 策略模型:ACT、Diffusion、VLA 等
│ ├── envs/ # 仿真与真机环境封装
│ ├── scripts/ # 训练、评估、部署入口脚本
│ └── utils/ # 可视化、回放、数据校验
├── examples/ # 示例配置与快速上手脚本
├── tests/ # 单元测试与集成测试
└── pyproject.toml # 依赖与项目元信息
其中 datasets/ 和 policies/ 是微调时最常打交道的两个目录。datasets/ 负责把 LeRobotDataset 格式的数据读进来,policies/ 则定义策略网络、损失函数和推理接口。训练脚本通常放在 scripts/ 下,通过配置文件组合数据集与策略。
二、核心模块与数据流关系
LeRobot 的核心模块之间不是孤立的,而是围绕“数据流”组织起来的。数据集提供观测与动作序列,策略消费这些序列并输出动作,训练脚本负责把两者连接起来,环境则用于评估和部署。下图展示了这一关系:
从图中可以看到,数据从 LeRobotDataset 流向策略接口,训练脚本负责调度,环境提供交互反馈,评估与部署则消费训练好的权重。这条链路就是后续微调工作的主干。
三、数据集格式:LeRobotDataset 的组成
LeRobot 使用统一的 LeRobotDataset 格式,核心是“元数据 + 分片数据”。一个数据集通常包含以下内容:
| 组成部分 | 文件/目录 | 作用 |
|---|---|---|
| 元信息 | meta/info.json |
记录 fps、特征维度、机器人类型、总帧数 |
| 任务描述 | meta/tasks.jsonl |
每条轨迹对应的语言指令或任务标签 |
| 统计量 | meta/stats.json |
观测与动作的均值、方差,用于归一化 |
| 帧数据 | data/chunk-*/file.parquet |
存储状态、动作、时间戳等结构化字段 |
| 视频数据 | videos/chunk-*/ |
存储多路相机视频,按 episode 分片 |
这种设计的好处是:结构化数据用 parquet 高效读取,视频用 mp4 分片存储,元数据集中管理。微调时,你通常只需要关注 meta/info.json 中的特征定义,以及 stats.json 中的归一化参数。
info.json 中的 features 字段与策略输入输出维度一致,否则训练会在第一批数据就报维度错误。四、策略接口:统一但不失灵活
LeRobot 的策略接口设计遵循“统一注册、按名加载”的思路。所有策略都继承自基类,并实现几个关键方法:
forward(batch):训练前向,返回损失或预测动作。select_action(observation):推理时根据当前观测选择动作。reset():重置策略内部状态,例如动作队列或历史缓存。get_optimizer():返回优化器与学习率调度器。
以 ACT 和 Diffusion Policy 为例,它们都实现了上述接口,但内部结构差异很大。ACT 使用 Transformer 编码器-解码器加动作分块,Diffusion Policy 则用去噪扩散过程生成动作序列。VLA 策略通常在此基础上引入视觉-语言 backbone,因此接口保持一致,但配置项更多。
from lerobot.policies.act import ACTPolicy
policy = ACTPolicy.from_pretrained("lerobot/act_aloha")
action = policy.select_action(observation)
这种“接口统一、实现多样”的设计,使得切换策略时只需改配置,而不需要重写训练循环。
五、训练脚本与配置:微调的入口
LeRobot 的训练脚本通常以 train.py 为入口,通过 Hydra 或类似配置系统加载 YAML 文件。一个典型的训练命令如下:
python -m lerobot.scripts.train \
--config_path examples/act_aloha.yaml \
--dataset.root ./data/aloha \
--policy.type act \
--training.batch_size 8 \
--training.steps 100000
配置文件中会分别定义数据集、策略、训练超参和日志选项。训练脚本负责构建 DataLoader、初始化策略、加载预训练权重、执行优化循环,并定期保存 checkpoint。评估脚本则加载 checkpoint,在仿真或真机上运行 rollout,统计成功率。
stats.json 的归一化参数。如果直接用自己的数据统计替换,可能导致动作尺度不一致,表现为策略输出抖动或收敛缓慢。六、常见误区与复盘建议
初学者在速览 LeRobot 时容易陷入两个误区。第一,把 LeRobot 当成纯模型库,忽略数据集格式和元数据的重要性,结果在自定义数据上频繁报错。第二,直接修改策略网络结构,却没有同步更新配置中的特征维度,导致训练脚本无法正确构建输入输出。
建议的复盘路径是:先跑通官方示例数据集和预训练策略,确认环境与依赖无误;再替换为自己的数据集,检查 info.json 与 stats.json;最后才调整策略配置和训练超参。这样能把问题定位在数据、接口还是模型层面,避免混在一起排查。