LeRobot documentation
VLA-JEPA
VLA-JEPA
هذا هو إصدار LeRobot من VLA-JEPA، وهو نموذج رؤية-لغة-إجراء يجمع بين هيكل لغوي من Qwen3-VL ونموذج عالم ذاتي الإشراف للفيديو (V-JEPA2) ورأس إجراء يعتمد على مطابقة التدفق (flow-matching DiT).
نظرة عامة على البنية
يتكوّن VLA-JEPA من ثلاثة مكوّنات رئيسية:
| مكوّن | وحدة | الدور |
|---|---|---|
| هيكل Qwen3-VL | Qwen3VLInterface | يُدمج الصور + تعليمات اللغة في رموز السياق |
| رأس إجراء DiT-B | VLAJEPAActionHead | انتشار مطابقة التدفق على شريحة الإجراء |
| نموذج العالم V-JEPA2 | ActionConditionedVideoPredictor | خسارة التنبؤ الذاتي بالفيديو (للتدريب فقط) |
تدفق البيانات
التدريب:
- يُرمَّز مقطع فيديو يتكوّن من
num_video_framesإطارًا بواسطة V-JEPA2 إلى رموز بقع لكل إطار. - يعالج العمود الفقري Qwen3-VL صور متعددة الزوايا + تعليمات المهمة وينتج تسلسلًا من رموز السياق يتضمن رموز إجراء خاصة (لأغراض تكييف نموذج العالم) ورموز تجسّدية.
- يستقبل رأس الإجراء رموز السياق تلك كمفاتيح/قيم في الانتباه المتقاطع ويتنبأ بقطعة إجراء منزوعة الضوضاء عبر مطابقة التدفق.
- يستخدم متنبئ النموذج العالمي رموز الإجراءات المستخرجة من Qwen للتنبؤ بتضمينات إطارات V-JEPA2 المستقبلية؛ ويُضاف خسارة انحدار على تلك التنبؤات إلى خسارة الإجراءات.
الاستدلال: يُستخدم نموذج Qwen ورأس الإجراء فقط. لا حاجة إلى نموذج العالم أثناء الاستدلال.
تفاصيل رأس الإجراء
الإعدادات المتوفرة عبر action_model_type:
| إعداد مسبق | رؤوس | بعدد رؤوس |
|---|---|---|
DiT-B | 12 | 64 |
DiT-L | 32 | 48 |
تحدد الإعداد المسبق هندسة الانتباه فقط، ويمكن تجاوز كل إدخال بواسطة action_num_heads / action_attention_head_dim. وينتج عن ذلك عرضان:
- العرض الداخلي لـ DiT هو
heads x head_dim(768 لـDiT-B)، وهو مُشتق وليس مُعدَّداً؛ - عرض المخرجات الخاصة بـ DiT، وعرض شبكتي MLP الخاصة بفك ترميز الإجراء وترميز الحالة، هو
action_hidden_size(الافتراضي 1024).
لذلك DiT-B يشغّل محوّلاً بعرض 768 يقوم بالمشروع إلى 1024. كلاهما مستقل.
تفاصيل نموذج العالم
التنبؤ بالفيديو هو محوّل بنمط ViT (ActionConditionedVideoPredictor) يستقبل:
- رموز الإطار: تمثيلات البقع في V-JEPA2 المُسقطَة إلى
predictor_embed_dim - رموز الإجراء: تمثيلات رموز الإجراء الخاصة بـ Qwen المُسقطَة إلى
predictor_embed_dim
يستخدم الانتباه السببي على مستوى الكتل بحيث يمكن لكل خطوة زمنية الانتباه إلى جميع الخطوات السابقة. مدخلات المتنبئ embed_dim يساوي num_views × video_encoder_hidden_size (على سبيل المثال، 2 منظر × 1024 = 2048 للنقاط الفحصية المُدرَّبة مسبقًا).
نقاط التفتيش المُسبقة التدريب
يتوفر ثلاثة نقاط تحقق مباشرة داخل منظمة LeRobot هنا: lerobot/VLA-JEPA، تم تحويلها من ginwind/VLA-JEPA:
| نقطة التفتيش | مجموعة البيانات | الكاميرات | نموذج العالم | بُعد الإجراء |
|---|---|---|---|---|
lerobot/VLA-JEPA-LIBERO | LIBERO-10 | 2 (agentview + wrist) | مُفعّل | 7 |
lerobot/VLA-JEPA-Pretrain | DROID 1.0.1 | 2 (المنظورات الخارجية اليسرى) | مُفعّل | 7 |
lerobot/VLA-JEPA-SimplerEnv | جسر OXE / RT-1 | 1 (عرض مكرر ×2) | مُفعّل | 7 |
تستخدم جميع نقاط التفتيش Qwen/Qwen3-VL-2B-Instruct كهيكل لغوي أساسي.
الإعداد
أهم المعلمات في VLAJEPAConfig:
| معامل | افتراضي | الوصف |
|---|---|---|
chunk_size | 7 | عدد الإجراءات المتوقعة لكل استدعاء استنتاج |
n_action_steps | 7 | الخطوات المنفذة من المقطع المتوقع قبل إعادة التخطيط |
num_video_frames | 8 | طول مقطع الفيديو المُدخل إلى نموذج العالم |
enable_world_model | True | ما إذا كان سيتم تحميل وتدريب متنبئ V-JEPA2 |
world_model_loss_weight | 0.1 | وزن خسارة التنبؤ في JEPA مقارنةً بخسارة الإجراء |
causal_world_model_context | False | ترميز سياق نموذج العالم بشكل سببي (مرور واحد فقط لـ V-JEPA2 لكل موضع في السياق) بحيث لا يمكن للانتباه الاتجاهي تسريب الإطارات المستقبلية إلى مدخلات المتنبئ. يكلف ذلك t_enc_ctx استدعاءات إضافية للمشفّر |
num_inference_timesteps | 4 | خطوات تكامل أويلر لإزالة الضوضاء من الإجراء |
freeze_qwen | False | تجميد العمود الفقري لنموذج Qwen3-VL وتدريب رأس الإجراء فقط |
reinit_modules | None | بادئات المفاتيح المسموح بإعادة تهيئتها عشوائياً عند التحميل (لنقل التدريب عبر تجسيدات مختلفة، راجع التدريب الدقيق على تجسيد مختلف) |
resize_images_to | None | (height, width) هو الحجم الذي يُعاد ضبط كل إطار كاميرا إليه قبل مروره عبر برج الرؤية في Qwen3-VL. يُبقي None على الدقة الأصلية، ومع ذلك تزداد عدد الباتشات في Qwen3-VL مع زيادة الدقة، مما قد يستنفد ذاكرة وحدة معالجة الرسوميات (GPU) في كاميرا بدقة 720x1280. تستخدم نقاط التفتيش المنشورة [224, 224] |
gripper_dim | 6 | مؤشر بُعد الماسك في متجه الإجراء. يتم تجاهله عندما يطابق gripper_joint_names اسم إجراء في مجموعة البيانات |
gripper_joint_names | ["gripper"] | أسماء أبعاد الحركة التي تحدد الماسك؛ حيث يتفوّق المؤشر المطابق على gripper_dim |
gripper_threshold | 0.5 | العتبة المستخدمة بواسطة pre_snap_gripper_action وbinarize_gripper_action. لاحظ أن binarize يعمل بعد إلغاء التطبيع، لذا تتم مقارنته بالقيمة الفيزيائية للمقبض |
pre_snap_gripper_action | False | اجعل قيمة المقبض dim ضمن النطاق {0, 1} قبل إلغاء التطبيع. خاص بـ LIBERO، راجع ما يلي |
binarize_gripper_action | False | قم بتحويل مؤشر القبضة إلى قيم ثنائية {-1, 1} بعد إلغاء التطبيع. خاص بـ LIBERO، راجع ما يلي |
clip_normalized_actions | True | اقطع الأفعال المُعايرة إلى المجال [-1, 1] قبل إزالة المعايرة. يُطبَّق هذا فقط عندما يستخدم ACTION MIN_MAX؛ ويُتجاهل (مع تحذير) عند استخدام MEAN_STD، حيث سيؤدي إلى اقتطاع عند انحراف معياري واحد |
world_model_num_views | None | الكاميرا التي بُني مُتنبئ نموذج العالم من أجلها. مُدمجة في أشكال نقاط الحفظ. None يعود إلى jepa_tubelet_size، وهو ما ترمّزه نقاط الحفظ المنشورة |
pre_snap_gripper_actionوbinarize_gripper_actionهي نسخة مُحوَّلة من حلقة تقييم LIBERO في starVLA، وهي صحيحة فقط لمعيار الإجراءات الخاص بـ LIBERO. تكتبpre_snapالقيم {0, 1} في فضاء المُطَبَّع، ثم يُحوِّل مُزيل التطبيع تلك القيم إلى نقطة المنتصف والقيمة القصوى، ويقومbinarizeبعد ذلك بمقارنة تلك القيمة الفيزيائية معgripper_threshold(0.5). بالنسبة لمقبض يُقاس بالدرجات أو بالمليمتر أو بمقياس [0, 100]، فإن كلا القيمتين تقعان فوق العتبة، فيصبح المقبض المُمرَّر قيمة ثابتة. لهذا السبب تكون القيمة الافتراضية لهماFalse؛ فعِّلهما فقط للإعدادات من نمط LIBERO، وإذا فعلت ذلك فاضبطgripper_thresholdبوحدات المقبض الخاصة به. يُصدر مصنع المُعالج تحذيرًا عندما تُظهر إحصاءات مجموعة البيانات أن المدى لا يمكن أن يعمل.
التدريب
قد يختلف عدد خطوات التدريب اعتمادًا على حجم مجموعة البيانات والميزانية الحسابية. في الورقة الأصلية، تم تدريب النموذج مسبقًا لمدة 50 ألف خطوة على ssv2 وdroid بشكل مشترك، ثم 30 ألف خطوة إضافية لـLIBERO، لكن قد تحقق خطوات أقل أداءً جيدًا عند الضبط الدقيق انطلاقًا من نقاط التفتيش المدربة مسبقًا المقدمة.
التدريب الكامل من الصفر
lerobot-train \ --policy.type=vla_jepa \ --policy.repo_id=your_org/your_repo \ --dataset.repo_id=your_org/your_dataset
ضبط النموذج الدقيق من نقطة تحقق مسبقة التدريب
lerobot-train \ --policy.path=lerobot/VLA-JEPA-Pretrain \ --policy.repo_id=your_org/your_repo \ --dataset.repo_id=your_org/your_dataset
إذا كنت ترغب في تجميد هيكل Qwen الأساسي وتدريب رأس الإجراء فقط، فاضبط policy.freeze_qwen=True:
lerobot-train \
--policy.path=lerobot/VLA-JEPA-Pretrain \
--policy.repo_id=your_org/your_repo \
--policy.freeze_qwen=true \
--dataset.repo_id=your_org/your_datasetضبط دقيق على تجسيد مختلف
عندما تكون أبعاد الإجراء أو الحالة للروبوت المستهدف مختلفة عن نقاط التفتيش المُسبقة التدريب، فإن طبقات الإسقاط المدخلة/المخرجة لرأس الإجراء ستعاني من عدم تطابق في الأشكال ولن يمكن تحميلها مباشرة. يتيح لك reinit_modules سرد بادئات المفاتيح المسموح بعدم تطابقها — حيث تُعاد تهيئة تلك الطبقات عشوائياً بينما يُعاد استخدام كل الأوزان الأخرى من نقطة التفتيش. أي عدم تطابق في الشكل خارج البادئات المدرجة سيؤدي إلى رفع خطأ.
الطبقات التي تعتمد على action_dim وstate_dim هي:
| طبقة | بادئة المفتاح |
|---|---|
| مُشفِّر الإجراء (action_dim ← inner_dim) | model.action_model.action_encoder |
| فكّ الترميز الإجراء (hidden_size → action_dim) | model.action_model.action_decoder |
| مُشفِّر الحالة (state_dim → inner_dim) | model.action_model.state_encoder |
lerobot-train \
--policy.path=lerobot/VLA-JEPA-Pretrain \
--policy.repo_id=your_org/your_repo \
--policy.freeze_qwen=true \
--policy.reinit_modules='["model.action_model.action_encoder", "model.action_model.action_decoder", "model.action_model.state_encoder"]' \
--dataset.repo_id=your_org/your_datasetإذا لم يكن لروبوتك أي حالة إدراك ذاتي، فاحذف model.action_model.state_encoder من القائمة.
إعادة إنتاج نتائج LIBERO
التدريب على LIBERO: يبدأ التدريب من نقطة الفحص المسبق Pretrain، ويُدرب لمدة 30 ألف خطوة على مجموعة بيانات LIBERO. يذكر الورقة الأصلية التدريب عبر 8 وحدات معالجة رسومية GPU بحجم دفعة 32، مما يعني حجم دفعة عالمي 256.
lerobot-train \ --policy.path=lerobot/VLA-JEPA-Pretrain \ --policy.repo_id=your_org/your_repo \ --dataset.repo_id=HuggingFaceVLA/libero \ --steps=30000
تقييم نقطة الفحص المسبقة التدريب لـ LIBERO-10:
lerobot-eval \ --policy.path=lerobot/VLA-JEPA-LIBERO \ --env.type=libero \ --env.task=libero_spatial,libero_object,libero_goal,libero_10 \ --eval.n_episodes=10 \ --eval.batch_size=5
لتقييم مجموعة فرعية من المهام فقط:
lerobot-eval \
--policy.path=lerobot/VLA-JEPA-LIBERO \
--env.type=libero \
--env.task=libero_10 \
--env.task_ids='[0,1,2]' \
--eval.n_episodes=10 \
--eval.batch_size=5النتائج المتوقعة:
| Suite | الحلقات | النجاحات | معدل النجاح |
|---|---|---|---|
| libero_spatial | 100 | 93 | 95.0% |
| libero_object | 100 | 100 | 100.0% |
| libero_goal | 100 | 98 | 98.0% |
| libero_10 | 100 | 96 | 93.0% |
| الإجمالي | 400 | 387 | 96.5% |
ضبط النموذج على مجموعات بيانات بعدد مختلف من الكاميرات
تم تدريب متنبئ نموذج العالم المُسبق التدريب على embed_dim = world_model_num_views × 1024، أي عرضي كاميرا.
كان يُقرأ عدد العروض هذا من
jepa_tubelet_size، وهو الاسم الذي يُطلق أيضاً على حجم الأنبوبي الزمني لمشفّر JEPA. أماworld_model_num_viewsفهو الحقل المخصص لذلك الآن؛ فتركه عندNoneيعيد الرجوع إلىjepa_tubelet_sizeحتى تبقى نقاط التفتيش المنشورة تُحمّل دون تغيير.
السلوك الافتراضي — عرض الحشو / القص (لا يلزم اتخاذ إجراء)
عند الضبط الدقيق انطلاقًا من VLA-JEPA-Pretrain، يعدّل النموذج تلقائيًا عدد العروض المُقدَّمة إلى نموذج العالم ليتوافق مع world_model_num_views:
- مجموعات بيانات الرؤية الواحدة (مثل BridgeV2): يتم تكرار الكامن ذي الرؤية الواحدة لإنتاج مدخلات نموذج عالم ذي رؤيتين، مع الحفاظ على إشارة JEPA ذاتية الإشراف دون أي عدم تطابق في الأوزان.
- >مجموعات بيانات متعددة الزوايا (مثل DROID بثلاث زوايا): تُمرَّر جميع الزوايا إلى العمود الفقري Qwen (لتوفير سياق أغنى)، لكن يُستخدم فقط أول
world_model_num_viewsزوايا (مفصل واحد + منظور شخص ثالث، وفقاً لترتيب الزوايا المُهيّأ) لنموذج العالم.
الخيار 1 — تعطيل نموذج العالم
اضبط enable_world_model=False لتخطي خسارة JEPA بالكامل. يتم تحميل وتدريب عمود Qwen ورأس الإجراء فقط. وهذا كافٍ للحصول على أداء جيد للإجراءات.
lerobot-train \
--policy.path=lerobot/VLA-JEPA-Pretrain \
--policy.enable_world_model=false \
--policy.repo_id=your_org/your_repo \
--dataset.repo_id=your_org/single_camera_datasetالخيار 2 — إعادة تهيئة إسقاط مدخلات المُتنبِّئ
إذا كنت ترغب في تغيير world_model_num_views إلى قيمة أخرى غير 2، فحمّل نقطة التفتيش باستخدام strict=False وأعد تهيئة model.video_predictor.predictor_embed للـ embed_dim الجديد. جميع أوزان كتل التنبؤ الأخرى (الانتباه، MLP، التطبيع، الإسقاط الخرجي) لا تعتمد على عدد الكاميرات ويمكن إعادة استخدامها من نقطة التفتيش المُدرَّبة مسبقًا.
الاستشهاد
@misc{sun2026vlajepaenhancingvisionlanguageactionmodel,
title = {VLA-JEPA: Enhancing Vision-Language-Action Model with Latent World Model},
author = {Jingwen Sun and Wenyao Zhang and Zekun Qi and Shaojie Ren and Zezhi Liu and Hanxin Zhu and Guangzhong Sun and Xin Jin and Zhibo Chen},
year = {2026},
eprint = {2602.10098},
archivePrefix = {arXiv},
primaryClass = {cs.RO},
url = {https://arxiv.org/abs/2602.10098},
}رخصة
تُوزَّع الأوزان بموجب شروط ترخيص المستودع الأصلي ginwind/VLA-JEPA (Apache 2.0 License). ويتبع كود تكامل LeRobot Apache 2.0 License.
Update on GitHub