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 builds on Qwen/Qwen3-VL-4B-Instruct and adds three lightweight prediction heads:
- رأس التقدم: يتنبأ بتقدم المهمة لكل إطار في
[0, 1]. - رأس النجاح: يتنبأ باحتمال نجاح المهمة لكل إطار.
- رأس التفضيل: يتنبأ بأي من المسارين الاثنَين يُكمل المهمة بشكل أفضل أثناء التدريب.
تدرّب الورقة ROBOMETER باستخدام هدف مركّب:
L = L_pref + L_prog + L_succ
تكامل LeRobot حالياً للاستدلال فقط. إنه يحافظ على رأس التفضيل بحيث يتم تحميل نقطة الفحص المنشورة Robometer-4B دون إعادة تعيين، لكن compute_reward() يستعلم عن رأس التقدم أو النجاح فقط.
ما تغطيه تكامل LeRobot
- إعداد
reward_model.type=robometerالقياسي من خلال LeRobot. - معالجة الصور والنصوص الأولية لنموذج Qwen3-VL عبر
RobometerEncoderProcessorStep. - واجهات برمجة التطبيقات لحفظ/تحميل نماذج المكافآت في LeRobot عبر
PreTrainedRewardModel. - تنبؤات داخلية كثيفة على مستوى الإطار للتقدم والنجاح.
- مكافأة قياسية (scalar) عبر
compute_reward()لاستخدامها في نموذج المكافآت الخاص بـ LeRobot في المراحل اللاحقة.
يركز هذا الصفحة على استخدام نقطة الفحص (checkpoint) المنشورة لـ ROBOMETER كنموذج مكافأة (reward model) بطريقة zero-shot. أما تدريب ROBOMETER من الصفر فهو خارج نطاق تكامل LeRobot الحالي.
متطلبات التثبيت
- قم بتثبيت LeRobot باتباع دليل التثبيت.
- قم بتثبيت تبعيات ROBOMETER:
pip install -e ".[robometer]"إذا كنت تستخدم uv مباشرةً من نسخة المصدر:
uv sync --extra robometerيستخدم ROBOMETER هيكل 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 |
يتنبأ النموذج داخلياً بالتقدم ونجاح كل إطار. تُعيد واجهة مكافآت 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)ترميز الإطارات وحساب المكافأة
لإجراء استدعاء مباشر بلغة بايثون، قدّم الإطارات كمصفوفات من نوع 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 هو متجه (tensor) على شكل (batch_size,).
استخدام مصنع المكافآت
يمكنك أيضًا إنشاء 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 خمسة رموز خاصة إلى مُجزّئ الرموز (tokenizer) بترتيب ثابت:
<|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 الأصلي.
توقع النجاح
تُخرج رأس النجاح قيم logits خام لكل إطار. يقوم LeRobot بتحويلها إلى احتمالات باستخدام sigmoid. عند تعيين reward_output="success"، يستخدم compute_reward() العتبة success_threshold لتحديد احتمال النجاح في الإطار الأخير.
القيود
- تكامل LeRobot الحالي مخصص للاستدلال فقط؛ فهو لا ينفّذ تدريب ROBOMETER أو تدريب أزواج التفضيلات.
compute_reward()يعيد قيمة عددية لكل عينة لواجهة نموذج المكافآت في LeRobot، على الرغم من أن 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