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 adalah model reward robotika video-bahasa serbaguna. Model ini memprediksi kemajuan tugas dan keberhasilan pada tingkat frame yang padat dari video trajektori dan deskripsi tugas.

Makalah: ROBOMETER: Scaling General-Purpose Robotic Reward Models via Trajectory Comparisons Proyek: robometer.github.io Kode asli: github.com/robometer/robometer Checkpoint: lerobot/Robometer-4B

Ikhtisar

ROBOMETER dibangun di atas Qwen/Qwen3-VL-4B-Instruct dan menambahkan tiga kepala prediksi ringan:

  • Progress head: memprediksi kemajuan tugas per-frame dalam [0, 1].
  • Success head: memprediksi probabilitas keberhasilan tugas per bingkai.
  • Preference head: memprediksi mana dari dua trajektori yang lebih baik menyelesaikan tugas selama pelatihan.

Paper tersebut melatih ROBOMETER dengan tujuan komposit:

L = L_pref + L_prog + L_succ

Integrasi LeRobot saat ini hanya untuk inferensi. Integrasi ini mempertahankan preferensi head sehingga checkpoint Robometer-4B yang dipublikasikan dapat dimuat tanpa pemetaan ulang, tetapi compute_reward() hanya menanyakan progress atau success head.

Cakupan Integrasi LeRobot

  • Konfigurasi standar reward_model.type=robometer melalui LeRobot.
  • Prapemrosesan gambar dan teks Qwen3-VL melalui RobometerEncoderProcessorStep.
  • API simpan/muat model reward LeRobot melalui PreTrainedRewardModel.
  • Prediksi kemajuan dan keberhasilan pada tingkat frame secara internal.
  • Reward skalar melalui compute_reward() untuk penggunaan model reward LeRobot di hilir.

Halaman ini berfokus pada penggunaan checkpoint ROBOMETER yang telah dipublikasikan sebagai model reward zero-shot. Pelatihan ROBOMETER dari awal berada di luar cakupan integrasi LeRobot saat ini.

Persyaratan Instalasi

  1. Install LeRobot dengan mengikuti Panduan Instalasi.
  2. Instal dependensi ROBOMETER:
pip install -e ".[robometer]"

Jika Anda menggunakan uv langsung dari checkout sumber:

uv sync --extra robometer

ROBOMETER menggunakan backbone Qwen3-VL-4B, sehingga inferensi GPU sangat disarankan.

Input dan Output Model

ROBOMETER mengharapkan:

  • Video lintasan atau rangkaian bingkai.
  • Deskripsi tugas dalam bahasa alami.

Dalam dataset LeRobot, preprocessor membaca:

Bidang konfigurasiDefaultArti
reward_model.image_keyobservation.images.topObservasi kamera/video yang digunakan oleh ROBOMETER
reward_model.task_keytaskKetikkan data pelengkap yang menyimpan string tugas
reward_model.max_frames8Jumlah maksimum frame yang diteruskan ke ROBOMETER

Model memprediksi kemajuan dan keberhasilan per bingkai secara internal. API reward LeRobot mengembalikan skalar per sampel:

  • reward_output="progress" (default): mengembalikan progres frame terakhir, dibatasi pada [0, 1].
  • reward_output="success": kembalikan 1.0 jika probabilitas keberhasilan frame terakhir di atas success_threshold, jika tidak 0.0.

Penggunaan

Muat Model Reward Secara Langsung

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)

Enkode Frame dan Hitung Reward

Untuk pemanggilan Python langsung, berikan frame sebagai array uint8 dengan bentuk (T, H, W, C) dan string tugas:

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 adalah tensor dengan bentuk (batch_size,).

Gunakan Reward Factory

Anda juga dapat menginstansiasi ROBOMETER melalui pabrik reward:

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)

Preprocessor menulis tensor Qwen-VL di bawah namespace observation.robometer.*, dan compute_reward() membaca tensor yang telah dikodekan tersebut.

Catatan Konfigurasi

Backbone dan Kosakata

Checkpoint yang dipublikasikan menggunakan backbone Qwen3-VL-4B. ROBOMETER menambahkan lima token khusus ke tokenizer dalam urutan tetap:

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

<|prog_token|> disisipkan setelah setiap frame dan merupakan posisi hidden-state yang digunakan untuk prediksi progress dan success per frame. <|split_token|> dan <|pref_token|> digunakan oleh objective preferensi trajektori pairwise dari paper tersebut. <|reward_token|> dan <|sim_token|> dipertahankan untuk kompatibilitas checkpoint.

Konfigurasi LeRobot menyimpan vlm_config yang diserialisasi dengan kosakata setelah pengubahan ukuran agar model dapat dimuat ulang dari config.json tanpa perlu mengunduh bobot dasar Qwen terlebih dahulu. Untuk Qwen/Qwen3-VL-4B-Instruct, panjang tokenizer adalah 151669, dan lima token ROBOMETER menghasilkan ukuran kosakata checkpoint 151674.

Prediksi Progres

Pada checkpoint yang dipublikasikan, progres bersifat diskrit. Kepala progres (progress head) menghasilkan logit di atas progress_discrete_bins=10 pusat bin yang berjarak seragam dalam [0, 1]. LeRobot mengonversi logit ini menjadi nilai kontinu dengan menerapkan softmax dan mengambil ekspektasi di atas pusat bin, sesuai dengan implementasi ROBOMETER hulu (upstream).

Prediksi Keberhasilan

Kepala keberhasilan (success head) menghasilkan logit mentah per frame. LeRobot mengonversinya menjadi probabilitas dengan sigmoid. Ketika reward_output="success", compute_reward() menerapkan ambang batas pada probabilitas keberhasilan frame terakhir menggunakan success_threshold.

Keterbatasan

  • Integrasi LeRobot saat ini hanya untuk inferensi; tidak mengimplementasikan pelatihan ROBOMETER atau pelatihan pasangan preferensi.
  • compute_reward() mengembalikan skalar per sampel untuk API model reward LeRobot, meskipun ROBOMETER memprediksi kemajuan dan keberhasilan per bingkai secara internal.
  • ROBOMETER berbasis video-bahasa; ia tidak menggunakan status robot yang istimewa seperti gaya kontak atau pose objek.

Referensi

Sitasi

@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},
}

Lisensi

Integrasi LeRobot ini mengikuti Lisensi Apache 2.0 yang digunakan oleh LeRobot. Periksa kode ROBOMETER dan halaman model upstream untuk lisensi implementasi asli dan checkpoint yang dirilis.

Update on GitHub