LeRobot documentation

TOPReward

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

TOPReward

TOPReward — это zero-shot reward model, которая извлекает лог-вероятности токенов из готовой vision-language модели (VLM) в качестве сигнала вознаграждения для робототехники. Получив видеотраекторию и инструкцию к задаче, модель возвращает лог-правдоподобие того, что инструкция верна, — без необходимости дообучения.

Статья: TOPReward: Token Probabilities as Hidden Zero-Shot Rewards for Robotics Проект: topreward.github.io Исходный код: github.com/TOPReward/TOPReward Базовая модель по умолчанию: Qwen/Qwen3-VL-8B-Instruct

Обзор

TOPReward запрашивает у универсальной VLM вероятность того, что инструкция к задаче является правдоподобной, с учётом видео робота, пытающегося выполнить эту задачу. Конкретно, при наличии:

  • Видео траектории (последовательность кадров).
  • Инструкция к задаче (например, «открой ящик»).

он формирует чат-запрос вида

<video>
"The above video shows a robot manipulation trajectory that completes the
 following task: <instruction> Decide whether the above statement is True
 or not. The answer is: True"

пропускает его через VLM, маскирует все токены, кроме последнего, и считывает лог-вероятность этого токена — по умолчанию это литерал "True", закрывающий шаблон суффикса. Полученное значение log P("True" | video + prompt + instruction) является наградой.

Поскольку метод опирается только на замороженную VLM, TOPReward является zero-shot: размещать веса дообученной модели не нужно. «Модель» в LeRobot представляет собой небольшой обёрточный слой вокруг Qwen3VLForConditionalGeneration из transformers с логикой маскирования меток. Процессор управляет токенизатором и формирует полный чат-промпт (паттерн EO-1/Robometer).

Что охватывает интеграция LeRobot

  • Стандартная конфигурация reward_model.type=topreward через LeRobot.
  • Загрузка VLM через API transformers Qwen3VLForConditionalGeneration.
  • Сборка промпта и токенизация в процессоре (в соответствии с QwenClient.compute_instruction_reward из исходного кода).
  • compute_reward() возвращает одно скалярное значение лог-вероятности на каждый образец.
  • Сохранение и загрузка reward-модели LeRobot — save_pretrained записывает только config.json (VLM идентифицируется по vlm_name).
  • Скрипт офлайн-разметки, создающий файл topreward_progress.parquet (со схемой, совместимой с SARM) для RA-BC и оверлея.

Текущая реализация LeRobot поддерживает только клиент Qwen3-VL. Другие клиенты из исходного репозитория (Gemini, OpenAI, Gemma, Molmo) могут быть добавлены в качестве дополнительных функций.

Требования к установке

  1. Установите LeRobot, следуя Руководству по установке.
  2. Установите дополнительный пакет TOPReward:
pip install -e ".[topreward]"

или, с uv из исходного кода:

uv sync --extra topreward

Это подключает transformers. При первом запуске TOPReward Hugging Face также скачает веса VLM с Hub (~16 ГБ для Qwen3-VL-8B-Instruct). Желательно использовать GPU.

Входы и выходы модели

TOPReward ожидает:

  • Видео траектории или последовательность кадров.
  • Описание задачи на естественном языке.

В наборах данных LeRobot предобработчик читает:

Поле конфигурацииПо умолчаниюЗначение
reward_model.image_keyobservation.images.topНаблюдение камеры, используемое в TOPReward
reward_model.task_keytaskВведите дополнительные данные для строки задачи
reward_model.max_frames16Ограничение количества кадров на образец
reward_model.fps2.0Метаданные, передаваемые в видеопроцессор Qwen
reward_model.vlm_nameQwen/Qwen3-VL-8B-InstructИдентификатор базовой VLM в Hugging Face Hub

Модель возвращает:

  • compute_reward(batch): одна логарифмическая вероятность на образец. Чем выше значение, тем лучше согласованность задачи и видео. Если success_threshold конечно, возвращается бинарное пороговое значение.

Использование

Загрузите модель вознаграждения напрямую

from lerobot.rewards.topreward import TOPRewardConfig, TOPRewardModel

cfg = TOPRewardConfig(
    vlm_name="Qwen/Qwen3-VL-8B-Instruct",
    device="cuda",
)
reward_model = TOPRewardModel(cfg)

Используйте фабрику вознаграждений

from lerobot.rewards import make_reward_model, make_reward_model_config, make_reward_pre_post_processors

cfg = make_reward_model_config(
    "topreward",
    vlm_name="Qwen/Qwen3-VL-8B-Instruct",
    device="cuda",
    image_key="observation.images.top",
)
reward_model = make_reward_model(cfg)
preprocessor, postprocessor = make_reward_pre_post_processors(cfg)

Предобработчик токенизирует полный промпт (видео + префикс + суффикс инструкции), записывает тензоры Qwen-VL и prompt_length в observation.topreward.*. Модель считывает эти тензоры, применяет маску меток на основе prompt_length и извлекает награду в виде лог-вероятности.

Разметка набора данных в автономном режиме

Создайте topreward_progress.parquet для обучения RA-BC и наложения видео:

# Sparse-dense (15 anchors per episode, matches upstream)
uv run python -m lerobot.rewards.topreward.compute_rabc_weights \
    --dataset-repo-id lerobot/libero_10_image \
    --num-samples 15 \
    --device cuda

Затем отобразите оверлей прогресса для любого эпизода:

uv run examples/dataset/create_progress_videos.py \
    --repo-id lerobot/libero_10_image \
    --episode 0 \
    --progress-file topreward_progress.parquet \
    --gif

Заметки по конфигурации

Параметры промпта

Промпт по умолчанию повторяет оригинальную статью:

prompt_prefix = "The above video shows a robot manipulation trajectory that completes the following task: "
prompt_suffix_template = "{instruction} Decide whether the above statement is True or not. The answer is: True"

Оба параметра доступны в TOPRewardConfig для анализа влияния. Шаблон суффикса должен содержать {instruction}.

Шаблон чата

add_chat_template=True оборачивает полный промпт (включая инструкцию) в шаблон чата токенизатора перед токенизацией. По умолчанию установлено значение False, что соответствует основным экспериментам в исходной статье.

Ограничения

  • Текущая реализация LeRobot поддерживает только инференс и zero-shot; метод forward() не переопределён, а is_trainable возвращает False.
  • Поддерживается только семейство Qwen3-VL; другие клиенты из исходного проекта не входят в область применения.
  • TOPReward наследует предвзятость базовой VLM.

Ссылки

Цитирование

@article{chen2026topreward,
  title={TOPReward: Token Probabilities as Hidden Zero-Shot Rewards for Robotics},
  author={Chen, Shirui and Harrison, Cole and Lee, Ying-Chun and Yang, Angela Jin and
          Ren, Zhongzheng and Ratliff, Lillian J and Duan, Jiafei and Fox, Dieter and
          Krishna, Ranjay},
  journal={arXiv preprint arXiv:2602.19313},
  year={2026}
}

Лицензия

Исходная кодовая база TOPReward распространяется по лицензии MIT. Порт для LeRobot следует лицензии LeRobot Apache 2.0; обёрнутые веса Qwen3-VL подчиняются исходной лицензии Qwen.

Update on GitHub