LeRobot documentation
π₀ (Pi0)
π₀ (Pi0)
π₀ 是 Physical Intelligence 推出的用于通用机器人控制的视觉-语言-动作模型。LeRobot 的实现改编自其开源的 OpenPI 仓库。
模型概览
π₀ 代表了机器人领域的一项突破,它是 Physical Intelligence 开发的首个通用机器人基础模型。与那些被编程用于执行重复性动作的传统窄域机器人程序不同,π₀ 旨在成为一种通用策略,能够理解视觉输入、解析自然语言指令,并在多样化的任务中控制多种不同的机器人。
物理智能的愿景
正如 Physical Intelligence 所述,尽管 AI 在数字领域取得了显著成功,从下棋到药物发现,但在物理世界中,人类智能仍然远远领先于 AI。借用 Moravec 悖论的说法,对 AI 而言,赢得一盘棋局是一个“简单”的问题,但叠衬衫或清理桌子则需要解决有史以来最棘手的工程难题之一。π₀ 是迈向开发人工物理智能的第一步,它使用户能够像使用大型语言模型一样,简单地要求机器人执行任何他们想要的任务。
架构与方法
π₀ 结合了多项关键创新:
- Flow Matching:使用一种新颖的方法,通过流匹配(扩散模型的一种变体)为预训练的 VLM 增强连续动作输出
- 跨本体训练:在来自 8 个不同机器人平台的数据上进行训练,包括 UR5e、双臂 UR5e、Franka、双臂 Trossen、双臂 ARX、移动 Trossen 和移动 Fibocom
- 互联网规模预训练:从预训练的 3B 参数视觉语言模型中继承语义知识
- 高频控制:以最高 50 Hz 的频率输出电机指令,实现实时灵巧操作
安装要求
按照我们的安装指南安装 LeRobot。
运行以下命令安装 Pi0 依赖项:
pip install -e ".[pi]"
训练数据与功能
π₀ 是在迄今为止最大的机器人交互数据集上训练的,该数据集结合了三个关键数据源:
- 互联网规模预训练:用于语义理解的来自网络的视觉-语言数据
- Open X-Embodiment 数据集:开源机器人操作数据集
- Physical Intelligence 数据集:涵盖 8 种不同机器人的大规模、多样化灵巧操作任务数据集
用法
要在 LeRobot 中使用 π₀,请将策略类型指定为:
policy.type=pi0训练
要训练 π₀,您可以使用标准的 LeRobot 训练脚本并配置相应的参数:
lerobot-train \
--dataset.repo_id=your_dataset \
--policy.type=pi0 \
--output_dir=./outputs/pi0_training \
--job_name=pi0_training \
--policy.pretrained_path=lerobot/pi0_base \
--policy.repo_id=your_repo_id \
--policy.compile_model=true \
--policy.gradient_checkpointing=true \
--policy.dtype=bfloat16 \
--policy.freeze_vision_encoder=false \
--policy.train_expert_only=false \
--steps=3000 \
--policy.device=cuda \
--batch_size=32关键训练参数
--policy.compile_model=true:启用模型编译以加快训练速度--policy.gradient_checkpointing=true:在训练期间显著降低内存使用量--policy.dtype=bfloat16:使用混合精度训练以提高效率--batch_size=32:训练时的批大小,请根据 GPU 内存情况进行调整--policy.pretrained_path=lerobot/pi0_base: 您想要微调的基础 π₀ 模型,可选值为:- lerobot/pi0_base
- lerobot/pi0_libero(专门在 Libero 数据集上训练)
--policy.optimizer_fused=true:使用融合版 AdamW 以加快优化器步骤;在恢复运行时,此标志将被忽略
训练参数详解
| 参数 | 默认 | 描述 |
|---|---|---|
freeze_vision_encoder | false | 不要冻结视觉编码器 |
train_expert_only | false | 不要冻结 VLM,训练所有参数 |
💡 提示:设置 train_expert_only=true 会冻结 VLM,仅训练动作专家(action expert)和投影层,从而允许以较低的内存占用进行微调。
相对动作
默认情况下,π₀ 预测绝对动作。您可以启用相对动作,使模型预测相对于当前机器人状态的偏移量。这可以提高某些配置下的训练稳定性。
要使用相对动作,首先通过 CLI 在相对空间中重新计算数据集的统计数据:
lerobot-edit-dataset \
--repo_id your_dataset \
--new_repo_id your_dataset \
--operation.type recompute_stats \
--operation.overwrite true \
--operation.relative_action true \
--operation.chunk_size 50 \
--operation.relative_exclude_joints "['gripper']" \
--push_to_hub true或者用 Python 等价地表示为:
from lerobot.datasets import LeRobotDataset, recompute_stats
dataset = LeRobotDataset("your_dataset")
recompute_stats(dataset, relative_action=True, chunk_size=50, relative_exclude_joints=["gripper"])
dataset.push_to_hub()chunk_size 应与策略的 chunk_size 保持一致(π₀ 的默认值为 50)。relative_exclude_joints 列出了应保持在绝对空间中的关节名称(例如夹爪指令)。使用 --push_to_hub true 可将更新后的统计数据上传至 Hub。
然后启用相对动作进行训练:
lerobot-train \
--dataset.repo_id=your_dataset \
--policy.type=pi0 \
--policy.use_relative_actions=true \
--policy.relative_exclude_joints='["gripper"]' \
...许可证
该模型遵循 Apache 2.0 许可证,与原始的 OpenPI 仓库 保持一致。
Update on GitHub