LeRobot documentation
TOPReward
TOPReward
TOPReward est un modèle de récompense en zéro tirage qui extrait les log-probabilités des jetons d'un modèle de vision-langage (VLM) existant pour servir de signal de récompense robotique. À partir d'une trajectoire vidéo et d'une instruction de tâche, il renvoie la log-vraisemblance du VLM que l'instruction est vraie — sans nécessité de fine-tuning.
Article : TOPReward: Token Probabilities as Hidden Zero-Shot Rewards for Robotics Projet : topreward.github.io Code original : github.com/TOPReward/TOPReward Backbone par défaut : Qwen/Qwen3-VL-8B-Instruct
Aperçu
TOPReward demande à un VLM générique quelle est la probabilité d'une instruction de tâche, conditionnée par la vidéo d'un robot tentant de réaliser cette tâche. Concrètement, étant donné :
- Une vidéo de trajectoire (une séquence d'images).
- Une instruction de tâche (par exemple « ouvrir le tiroir »).
il construit un prompt de chat de la forme
<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"
forwards it through the VLM, label-masks everything except the very last token, and reads back the log-probability of that token — by default the literal "True" that closes the suffix template. The resulting log P("True" | video + prompt + instruction) is the reward.
Comme la méthode ne dépend que d'un VLM figé, TOPReward est zero-shot : il n'y a pas de poids affinés à héberger. Le « modèle » dans LeRobot est un petit wrapper autour de Qwen3VLForConditionalGeneration de transformers, plus la logique de masquage des étiquettes. Le processeur gère le tokeniseur et construit le prompt de chat complet (modèle EO-1/Robometer).
Ce que couvre l'intégration LeRobot
- Configuration standard
reward_model.type=toprewardvia LeRobot. - Chargement de VLM via l'API
Qwen3VLForConditionalGenerationdetransformers. - Assemblage du prompt + tokenisation dans le processeur (correspondant à
QwenClient.compute_instruction_rewarden amont). compute_reward()renvoie une log-probabilité scalaire par échantillon.- LeRobot reward-model save/load —
save_pretrainedn'écrit queconfig.json(le VLM est identifié parvlm_name). - Un script d'étiquetage hors ligne qui écrit un fichier
topreward_progress.parquet(schéma compatible SARM) pour RA-BC et l'overlay.
Le port LeRobot actuel prend en charge uniquement le client Qwen3-VL. Les autres clients en amont (Gemini, OpenAI, Gemma, Molmo) peuvent être ajoutés dans des extensions ultérieures.
Prérequis d'installation
- Installez LeRobot en suivant le Guide d'installation.
- Installer l’option supplémentaire TOPReward :
pip install -e ".[topreward]"ou, avec uv depuis un checkout source :
uv sync --extra toprewardCela importe transformers. Lors de la première exécution de TOPReward, Hugging Face téléchargera également les poids du VLM depuis le Hub (environ 16 Go pour Qwen3-VL-8B-Instruct). L’utilisation d’un GPU est fortement recommandée.
Entrées et sorties du modèle
TOPReward s'attend à :
- Une vidéo de trajectoire ou une séquence d'images.
- Description de la tâche en langage naturel.
Dans les jeux de données LeRobot, le préprocesseur lit :
| Champ de configuration | Par défaut | Signification |
|---|---|---|
reward_model.image_key | observation.images.top | Observation de la caméra utilisée par TOPReward |
reward_model.task_key | task | Saisissez des données complémentaires pour la chaîne de tâches |
reward_model.max_frames | 16 | Limite du nombre d'images par échantillon |
reward_model.fps | 2.0 | Métadonnées passées au processeur vidéo Qwen |
reward_model.vlm_name | Qwen/Qwen3-VL-8B-Instruct | Identifiant du modèle VLM sous-jacent sur le Hugging Face Hub |
Le modèle renvoie :
compute_reward(batch): une log-probabilité par échantillon. Plus la valeur est élevée, meilleure est l’alignement tâche-vidéo. Sisuccess_thresholdest fini, renvoie la valeur binaire seuillée à la place.
Utilisation
Charger le modèle de récompense directement
from lerobot.rewards.topreward import TOPRewardConfig, TOPRewardModel
cfg = TOPRewardConfig(
vlm_name="Qwen/Qwen3-VL-8B-Instruct",
device="cuda",
)
reward_model = TOPRewardModel(cfg)Utiliser la fabrique de récompenses
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)Le préprocesseur tokenise le prompt complet (vidéo + préfixe + suffixe d'instruction), écrit les tenseurs Qwen-VL + prompt_length sous observation.topreward.*. Le modèle lit ces tenseurs, applique un masque de labels basé sur prompt_length, et extrait la récompense de log-prob.
Étiquetage de jeu de données hors ligne
Écrivez un topreward_progress.parquet pour l’entraînement RA-BC et les vidéos superposées :
# 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 cudaPuis, affichez le superposé de progression pour tout épisode :
uv run examples/dataset/create_progress_videos.py \
--repo-id lerobot/libero_10_image \
--episode 0 \
--progress-file topreward_progress.parquet \
--gifNotes de configuration
Réglages du prompt
Le prompt par défaut reprend celui de l'article original :
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"Les deux sont exposés sur TOPRewardConfig pour l’ablation. Le modèle de suffixe doit contenir {instruction}.
Modèle de chat
add_chat_template=True enveloppe le prompt complet (y compris l’instruction) avec le modèle de chat du tokenizer avant la tokenisation. La valeur par défaut est False, ce qui correspond aux expériences principales du papier d’origine.
Limites
- Le port LeRobot actuel est limité à l’inférence et au zéro-shot ;
forward()n’est pas redéfini etis_trainablerenvoieFalse. - Seule la famille Qwen3-VL est prise en charge ; les autres clients en amont sont hors périmètre.
- TOPReward hérite des biais du VLM sous-jacent.
Références
Citation
@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}
}Licence
Le code source original de TOPReward est sous licence MIT. La portée LeRobot suit la licence Apache 2.0 de LeRobot ; les poids Qwen3-VL encapsulés sont soumis à la licence Qwen d'origine.
Update on GitHub