LeRobot documentation

ROBOMETER

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

ROBOMETER

ROBOMETER 是一个通用视频-语言机器人奖励模型。它根据轨迹视频和任务描述,预测密集的帧级任务进度和帧级成功状态。

论文:ROBOMETER: Scaling General-Purpose Robotic Reward Models via Trajectory Comparisons 项目:robometer.github.io 原始代码:github.com/robometer/robometer 检查点:lerobot/Robometer-4B

概述

ROBOMETER 基于 Qwen/Qwen3-VL-4B-Instruct 构建,并添加了三个轻量级预测头:

  • 进度头:预测每帧的任务进度,取值范围为 [0, 1]。
  • 成功头:预测每帧的任务成功概率。
  • 偏好头:在训练过程中预测哪条轨迹能更好地完成任务。

该论文使用复合目标训练 ROBOMETER:

L = L_pref + L_prog + L_succ

LeRobot 集成目前仅支持推理。它保留了偏好头,以便发布的 Robometer-4B 检查点无需重新映射即可加载,但 compute_reward() 仅查询进度头或成功头。

LeRobot 集成涵盖的内容

  • 通过 LeRobot 进行标准的 reward_model.type=robometer 配置。
  • 通过 RobometerEncoderProcessorStep 对 Qwen3-VL 的图像和文本进行预处理。
  • 通过 PreTrainedRewardModel 实现的 LeRobot 奖励模型保存/加载 API。
  • 内部进行稠密的、帧级别的进度和成功预测。
  • 用于下游 LeRobot 奖励模型使用的标量奖励,通过 compute_reward() 返回。

本页重点介绍如何使用已发布的 ROBOMETER 检查点作为零样本奖励模型。从零开始训练 ROBOMETER 不在当前 LeRobot 集成的范围内。

安装要求

  1. 按照安装指南安装 LeRobot。
  2. 安装 ROBOMETER 依赖项:
pip install -e ".[robometer]"

如果您直接从源代码检出使用 uv:

uv sync --extra robometer

ROBOMETER 使用 Qwen3-VL-4B 作为骨干网络,因此强烈建议使用 GPU 进行推理。

模型输入和输出

ROBOMETER 预期:

  • 轨迹视频或帧序列。
  • 自然语言任务描述。

在 LeRobot 数据集中,预处理器读取:

配置字段默认含义
reward_model.image_keyobservation.images.topROBOMETER 使用的相机/视频观测
reward_model.task_keytask输入用于存储任务字符串的互补数据
reward_model.max_frames8传递给 ROBOMETER 的最大帧数

模型在内部预测每帧的进度和成功状态。LeRobot 奖励 API 为每个样本返回一个标量:

  • reward_output="progress"(默认值):返回最后一帧的进度,并将其限制在 [0, 1] 范围内。
  • reward_output="success":如果最后一帧的成功概率高于 success_threshold,则返回 1.0,否则返回 0.0。

用法

直接加载奖励模型

from lerobot.rewards.robometer import RobometerConfig, RobometerRewardModel

cfg = RobometerConfig(
    pretrained_path="lerobot/Robometer-4B",
    device="cuda",
    reward_output="progress",
)
reward_model = RobometerRewardModel.from_pretrained(cfg.pretrained_path, config=cfg)

编码帧并计算奖励

对于直接的 Python 调用,请以形状为 (T, H, W, C) 的 uint8 数组形式提供帧,并指定一个任务字符串:

from lerobot.rewards.robometer.modeling_robometer import ROBOMETER_FEATURE_PREFIX
from lerobot.rewards.robometer.processor_robometer import RobometerEncoderProcessorStep

# frames: np.ndarray, shape (T, H, W, C), dtype uint8
# task: str
encoder = RobometerEncoderProcessorStep(
    base_model_id=cfg.base_model_id,
    use_multi_image=cfg.use_multi_image,
    use_per_frame_progress_token=cfg.use_per_frame_progress_token,
    max_frames=cfg.max_frames,
)

encoded = encoder.encode_samples([(frames, task)])
batch = {f"{ROBOMETER_FEATURE_PREFIX}{key}": value for key, value in encoded.items()}

reward = reward_model.compute_reward(batch)

reward 是一个形状为 (batch_size,) 的张量。

使用 Reward Factory

你还可以通过奖励工厂实例化 ROBOMETER:

from lerobot.rewards import make_reward_model, make_reward_model_config, make_reward_pre_post_processors

cfg = make_reward_model_config(
    "robometer",
    pretrained_path="lerobot/Robometer-4B",
    device="cuda",
    image_key="observation.images.top",
)
reward_model = make_reward_model(cfg)
preprocessor, postprocessor = make_reward_pre_post_processors(cfg)

预处理器将 Qwen-VL 张量写入 observation.robometer.* 命名空间下,compute_reward() 会读取这些编码后的张量。

配置说明

骨干网络和词汇表

发布的检查点使用 Qwen3-VL-4B 骨干网络。ROBOMETER 以固定顺序向分词器添加了五个特殊标记:

<|split_token|>
<|reward_token|>
<|pref_token|>
<|sim_token|>
<|prog_token|>

<|prog_token|> 插入在每一帧之后,是用于逐帧进度和成功预测的隐藏状态位置。<|split_token|> 和 <|pref_token|> 用于论文中的成对轨迹偏好目标。<|reward_token|> 和 <|sim_token|> 为保持检查点兼容性而保留。

LeRobot 配置存储了序列化后的 vlm_config,其中包含调整大小后的词汇表,以便模型无需先下载基础 Qwen 权重即可从 config.json 重新加载。对于 Qwen/Qwen3-VL-4B-Instruct,分词器长度为 151669,而五个 ROBOMETER 令牌使检查点的词汇表大小变为 151674。

进度预测

在发布的检查点中,进度是离散的。进度头输出在 progress_discrete_bins=10 个位于 [0, 1] 区间内均匀分布的 bin 中心上的 logits。LeRobot 通过应用 softmax 并计算 bin 中心的期望值,将这些 logits 转换为连续值,这与上游 ROBOMETER 实现保持一致。

成功预测

成功头输出每帧的原始 logits。LeRobot 使用 sigmoid 将其转换为概率。当 reward_output="success" 时,compute_reward() 会使用 success_threshold 对最后一帧的成功概率进行阈值处理。

局限性

  • 当前的 LeRobot 集成仅支持推理;它未实现 ROBOMETER 训练或偏好对训练。
  • compute_reward() 为 LeRobot 奖励模型 API 返回每个样本的标量,尽管 ROBOMETER 内部预测的是逐帧的进度和成功状态。
  • ROBOMETER 基于视频和语言;它不使用诸如接触力或物体位姿等特权机器人状态。

参考

引用

@inproceedings{liang2026robometer,
title = {Robometer: Scaling General-Purpose Robotic Reward Models via Trajectory Comparisons},
author={Anthony Liang and Yigit Korkmaz and Jiahui Zhang and Minyoung Hwang and Abrar Anwar and Sidhant Kaushik and Aditya Shah and Alex S. Huang and Luke Zettlemoyer and Dieter Fox and Yu Xiang and Anqi Li and Andreea Bobu and Abhishek Gupta and Stephen Tu and Erdem Biyik and Jesse Zhang},
year={2026},
booktitle={Robotics: Science and Systems 2026},
}

许可证

此 LeRobot 集成遵循 LeRobot 所使用的 Apache 2.0 许可证。请查阅上游 ROBOMETER 代码和模型页面,以了解原始实现和已发布检查点的许可证。

Update on GitHub