LeRobot documentation
ROBOMETER
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]. - Головка успеха: предсказывает вероятность успешного выполнения задачи для каждого кадра.
- Preference head: предсказывает, какая из двух траекторий лучше выполняет задачу во время обучения.
В статье ROBOMETER обучается с использованием составной целевой функции:
L = L_pref + L_prog + L_succ
Интеграция LeRobot в настоящее время поддерживает только инференс. Она сохраняет preference head, чтобы опубликованный чекпоинт Robometer-4B загружался без переназначения, но compute_reward() обращается только к progress или success head.
Что охватывает интеграция LeRobot
- Стандартная конфигурация
reward_model.type=robometerчерез LeRobot. - Предобработка изображений и текста Qwen3-VL с помощью
RobometerEncoderProcessorStep. - API сохранения и загрузки reward-моделей LeRobot через
PreTrainedRewardModel. - Плотные предсказания прогресса и успеха на уровне кадров внутри модели.
- Скалярное вознаграждение через
compute_reward()для использования в моделях вознаграждения LeRobot.
Эта страница посвящена использованию опубликованного чекпоинта ROBOMETER в качестве reward-модели в режиме zero-shot. Обучение ROBOMETER с нуля не входит в текущую интеграцию LeRobot.
Требования к установке
- Установите LeRobot, следуя Руководству по установке.
- Установите зависимости ROBOMETER:
pip install -e ".[robometer]"Если вы используете uv непосредственно из исходного кода:
uv sync --extra robometerROBOMETER использует базовую модель Qwen3-VL-4B, поэтому настоятельно рекомендуется выполнять инференс на GPU.
Входы и выходы модели
ROBOMETER ожидает:
- Видео траектории или последовательность кадров.
- Описание задачи на естественном языке.
В наборах данных LeRobot предобработчик читает:
| Поле конфигурации | По умолчанию | Значение |
|---|---|---|
reward_model.image_key | observation.images.top | Наблюдение с камеры/видео, используемое в ROBOMETER |
reward_model.task_key | task | Введите ключ, хранящий строку задачи |
reward_model.max_frames | 8 | Максимальное количество кадров, передаваемых в ROBOMETER |
Модель внутренне предсказывает прогресс и успех для каждого кадра. API вознаграждения LeRobot возвращает скаляр для каждого образца:
reward_output="progress"(по умолчанию): возвращает прогресс последнего кадра, ограниченный диапазоном[0, 1].reward_output="success": возвращает1.0, если вероятность успеха на последнем кадре вышеsuccess_threshold, иначе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 передайте кадры в виде массивов uint8 с формой (T, H, W, C) и строку с задачей:
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() читает эти закодированные тензоры.
Заметки по конфигурации
Backbone и словарь
Опубликованный контрольный пункт использует базовую модель 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 со словарём после изменения размера, чтобы модель могла быть загружена из config.json без предварительной загрузки базовых весов Qwen. Для Qwen/Qwen3-VL-4B-Instruct длина токенизатора составляет 151669, а пять токенов ROBOMETER формируют размер словаря чекпоинта 151674.
Прогнозирование прогресса
В опубликованном контрольном пункте прогресс является дискретным. Головка прогресса выводит логиты для progress_discrete_bins=10 равномерно расположенных центров бинов в диапазоне [0, 1]. LeRobot преобразует эти логиты в непрерывное значение, применяя softmax и вычисляя математическое ожидание по центрам бинов, что соответствует реализации ROBOMETER в исходном проекте.
Предсказание успеха
Голова успеха выводит необработанные логиты для каждого кадра. LeRobot преобразует их в вероятности с помощью sigmoid. Когда reward_output="success", compute_reward() применяет порог success_threshold к вероятности успеха последнего кадра.
Ограничения
- Текущая интеграция LeRobot поддерживает только инференс; обучение ROBOMETER и обучение на парах предпочтений не реализованы.
compute_reward()возвращает скаляр для каждого примера в соответствии с API модели вознаграждения LeRobot, хотя ROBOMETER внутренне предсказывает прогресс и успех для каждого кадра.- ROBOMETER основан на видео и языке; он не использует привилегированное состояние робота, такое как контактные силы или позы объектов.
Ссылки
- проект ROBOMETER
- статья ROBOMETER
- Исходный код ROBOMETER
- Опубликован чекпоинт ROBOMETER-4B
- Qwen3-VL-4B-Instruct
Цитирование
@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 следует лицензии Apache 2.0, используемой в LeRobot. Проверьте лицензии исходной реализации и опубликованных контрольных точек в исходном коде ROBOMETER и на страницах моделей.
Update on GitHub