HuggingFace镜像/pi0_base
模型介绍文件和版本分析
下载使用量0

π₀ (Pi0) (LeRobot)

π₀ 是 Physical Intelligence 推出的视觉-语言-动作(VLA)基础模型,它能对视觉、语言和动作进行联合推理以控制机器人,是后续实现 π₀.₅ 开放世界泛化能力的基础架构。

原始论文: π0: A Vision-Language-Action Flow Model for General Robot Controlion
参考实现: https://github.com/Physical-Intelligence/openpi
LeRobot 实现: 为确保兼容性,遵循原始参考代码。

模型说明

  • 输入: 图像(多视角)、本体感知/状态、可选的语言指令
  • 输出: 连续动作
  • 训练目标: 流匹配
  • 动作表示: 连续型
  • 预期用途: 用于在特定用例上进行微调的基础模型

快速开始(真实批次推理)

安装

pip install "lerobot[pi]@git+https://github.com/huggingface/lerobot.git"

有关完整的安装详情(包括可选的视频依赖项,如用于 torchcodec 的 ffmpeg),请参阅官方文档:https://huggingface.co/docs/lerobot/installation

加载模型 + 数据集,运行 select_action

import torch
from lerobot.datasets.lerobot_dataset import LeRobotDataset
from lerobot.policies.factory import make_pre_post_processors

# Swap this import per-policy
from lerobot.policies.pi0 import PI0Policy

# load a policy
model_id = "lerobot/pi0_base"  # <- swap checkpoint
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

policy = PI0Policy.from_pretrained(model_id).to(device).eval()

preprocess, postprocess = make_pre_post_processors(
    policy.config,
    model_id,
    preprocessor_overrides={"device_processor": {"device": str(device)}},
)
# load a lerobotdataset
dataset = LeRobotDataset("lerobot/libero")

# pick an episode
episode_index = 0

# each episode corresponds to a contiguous range of frame indices
from_idx = dataset.meta.episodes["dataset_from_index"][episode_index]
to_idx   = dataset.meta.episodes["dataset_to_index"][episode_index]

# get a single frame from that episode (e.g. the first frame)
frame_index = from_idx
frame = dict(dataset[frame_index])

batch = preprocess(sample)
with torch.inference_mode():
    pred_action = policy.select_action(frame)
    # use your policy postprocess, this post process the action
    # for instance unnormalize the actions, detokenize it etc..
    pred_action = postprocess(pred_action)

训练步骤(损失 + 反向传播)

如果您正在进行训练/微调,通常会调用 forward(...) 来获取损失,然后:

policy.train()
batch = dict(dataset[0])
batch = preprocess(batch)

loss, outputs = policy.forward(batch)
loss.backward()

注意:

  • 部分策略会公开 policy(**batch) 或返回字典;请确保本代码片段与策略 API 保持一致。
  • 请使用训练器脚本(lerobot-train)执行完整的训练循环。

如何训练/微调

lerobot-train \
  --dataset.repo_id=${HF_USER}/<dataset> \
  --output_dir=./outputs/[RUN_NAME] \
  --job_name=[RUN_NAME] \
  --policy.repo_id=${HF_USER}/<desired_policy_repo_id> \
  --policy.path=lerobot/[BASE_CHECKPOINT] \
  --policy.dtype=bfloat16 \
  --policy.device=cuda \
  --steps=100000 \
  --batch_size=4

在下方添加特定于策略的标志:

  • -policy.chunk_size=...
  • -policy.n_action_steps=...
  • -policy.max_action_tokens=...
  • -policy.gradient_checkpointing=true

实际推理与评估

您可以使用来自 lerobot-record 的 record 脚本,并将策略检查点作为输入,来运行推理并评估您的策略。

例如,运行以下命令或 API 示例以运行推理并记录 10 个评估 episode:

lerobot-record  \
  --robot.type=so100_follower \
  --robot.port=/dev/ttyACM1 \
  --robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}, side: {type: intelrealsense, serial_number_or_name: 233522074606, width: 640, height: 480, fps: 30}}" \
  --robot.id=my_awesome_follower_arm \
  --display_data=false \
  --dataset.repo_id=${HF_USER}/eval_so100 \
  --dataset.single_task="Put lego brick into the transparent box" \
  # <- Teleop optional if you want to teleoperate in between episodes \
  # --teleop.type=so100_leader \
  # --teleop.port=/dev/ttyACM0 \
  # --teleop.id=my_awesome_leader_arm \
  --policy.path=${HF_USER}/my_policy