LeRobot documentation

π₀ (Pi0)

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

π₀ (Pi0)

π₀ 是 Physical Intelligence 推出的用于通用机器人控制的视觉-语言-动作模型。LeRobot 的实现改编自其开源的 OpenPI 仓库。

模型概览

π₀ 代表了机器人领域的一项突破,它是 Physical Intelligence 开发的首个通用机器人基础模型。与那些被编程用于执行重复性动作的传统窄域机器人程序不同,π₀ 旨在成为一种通用策略,能够理解视觉输入、解析自然语言指令,并在多样化的任务中控制多种不同的机器人。

An overview of Pi0

物理智能的愿景

正如 Physical Intelligence 所述,尽管 AI 在数字领域取得了显著成功,从下棋到药物发现,但在物理世界中,人类智能仍然远远领先于 AI。借用 Moravec 悖论的说法,对 AI 而言,赢得一盘棋局是一个“简单”的问题,但叠衬衫或清理桌子则需要解决有史以来最棘手的工程难题之一。π₀ 是迈向开发人工物理智能的第一步,它使用户能够像使用大型语言模型一样,简单地要求机器人执行任何他们想要的任务。

架构与方法

π₀ 结合了多项关键创新:

  • Flow Matching:使用一种新颖的方法,通过流匹配(扩散模型的一种变体)为预训练的 VLM 增强连续动作输出
  • 跨本体训练:在来自 8 个不同机器人平台的数据上进行训练,包括 UR5e、双臂 UR5e、Franka、双臂 Trossen、双臂 ARX、移动 Trossen 和移动 Fibocom
  • 互联网规模预训练:从预训练的 3B 参数视觉语言模型中继承语义知识
  • 高频控制:以最高 50 Hz 的频率输出电机指令,实现实时灵巧操作

安装要求

  1. 按照我们的安装指南安装 LeRobot。

  2. 运行以下命令安装 Pi0 依赖项:

    pip install -e ".[pi]"

训练数据与功能

π₀ 是在迄今为止最大的机器人交互数据集上训练的,该数据集结合了三个关键数据源:

  1. 互联网规模预训练:用于语义理解的来自网络的视觉-语言数据
  2. Open X-Embodiment 数据集:开源机器人操作数据集
  3. 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: 您想要微调的基础 π₀ 模型,可选值为:
  • --policy.optimizer_fused=true:使用融合版 AdamW 以加快优化器步骤;在恢复运行时,此标志将被忽略

训练参数详解

参数默认描述
freeze_vision_encoderfalse不要冻结视觉编码器
train_expert_onlyfalse不要冻结 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