LeRobot documentation

VLA-JEPA

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

VLA-JEPA

هذا هو إصدار LeRobot من VLA-JEPA، وهو نموذج رؤية-لغة-إجراء يجمع بين هيكل لغوي من Qwen3-VL ونموذج عالم ذاتي الإشراف للفيديو (V-JEPA2) ورأس إجراء يعتمد على مطابقة التدفق (flow-matching DiT).


نظرة عامة على البنية

يتكوّن VLA-JEPA من ثلاثة مكوّنات رئيسية:

مكوّنوحدةالدور
هيكل Qwen3-VLQwen3VLInterfaceيُدمج الصور + تعليمات اللغة في رموز السياق
رأس إجراء DiT-BVLAJEPAActionHeadانتشار مطابقة التدفق على شريحة الإجراء
نموذج العالم V-JEPA2ActionConditionedVideoPredictorخسارة التنبؤ الذاتي بالفيديو (للتدريب فقط)

تدفق البيانات

التدريب:

  1. يُرمَّز مقطع فيديو يتكوّن من num_video_frames إطارًا بواسطة V-JEPA2 إلى رموز بقع لكل إطار.
  2. يعالج العمود الفقري Qwen3-VL صور متعددة الزوايا + تعليمات المهمة وينتج تسلسلًا من رموز السياق يتضمن رموز إجراء خاصة (لأغراض تكييف نموذج العالم) ورموز تجسّدية.
  3. يستقبل رأس الإجراء رموز السياق تلك كمفاتيح/قيم في الانتباه المتقاطع ويتنبأ بقطعة إجراء منزوعة الضوضاء عبر مطابقة التدفق.
  4. يستخدم متنبئ النموذج العالمي رموز الإجراءات المستخرجة من Qwen للتنبؤ بتضمينات إطارات V-JEPA2 المستقبلية؛ ويُضاف خسارة انحدار على تلك التنبؤات إلى خسارة الإجراءات.

الاستدلال: يُستخدم نموذج Qwen ورأس الإجراء فقط. لا حاجة إلى نموذج العالم أثناء الاستدلال.

تفاصيل رأس الإجراء

الإعدادات المتوفرة عبر action_model_type:

إعداد مسبقرؤوسبعدد رؤوس
DiT-B1264
DiT-L3248

تحدد الإعداد المسبق هندسة الانتباه فقط، ويمكن تجاوز كل إدخال بواسطة 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-LIBEROLIBERO-102 (agentview + wrist)مُفعّل7
lerobot/VLA-JEPA-PretrainDROID 1.0.12 (المنظورات الخارجية اليسرى)مُفعّل7
lerobot/VLA-JEPA-SimplerEnvجسر OXE / RT-11 (عرض مكرر ×2)مُفعّل7

تستخدم جميع نقاط التفتيش Qwen/Qwen3-VL-2B-Instruct كهيكل لغوي أساسي.


الإعداد

أهم المعلمات في VLAJEPAConfig:

معاملافتراضيالوصف
chunk_size7عدد الإجراءات المتوقعة لكل استدعاء استنتاج
n_action_steps7الخطوات المنفذة من المقطع المتوقع قبل إعادة التخطيط
num_video_frames8طول مقطع الفيديو المُدخل إلى نموذج العالم
enable_world_modelTrueما إذا كان سيتم تحميل وتدريب متنبئ V-JEPA2
world_model_loss_weight0.1وزن خسارة التنبؤ في JEPA مقارنةً بخسارة الإجراء
causal_world_model_contextFalseترميز سياق نموذج العالم بشكل سببي (مرور واحد فقط لـ V-JEPA2 لكل موضع في السياق) بحيث لا يمكن للانتباه الاتجاهي تسريب الإطارات المستقبلية إلى مدخلات المتنبئ. يكلف ذلك t_enc_ctx استدعاءات إضافية للمشفّر
num_inference_timesteps4خطوات تكامل أويلر لإزالة الضوضاء من الإجراء
freeze_qwenFalseتجميد العمود الفقري لنموذج Qwen3-VL وتدريب رأس الإجراء فقط
reinit_modulesNoneبادئات المفاتيح المسموح بإعادة تهيئتها عشوائياً عند التحميل (لنقل التدريب عبر تجسيدات مختلفة، راجع التدريب الدقيق على تجسيد مختلف)
resize_images_toNone(height, width) هو الحجم الذي يُعاد ضبط كل إطار كاميرا إليه قبل مروره عبر برج الرؤية في Qwen3-VL. يُبقي None على الدقة الأصلية، ومع ذلك تزداد عدد الباتشات في Qwen3-VL مع زيادة الدقة، مما قد يستنفد ذاكرة وحدة معالجة الرسوميات (GPU) في كاميرا بدقة 720x1280. تستخدم نقاط التفتيش المنشورة [224, 224]
gripper_dim6مؤشر بُعد الماسك في متجه الإجراء. يتم تجاهله عندما يطابق gripper_joint_names اسم إجراء في مجموعة البيانات
gripper_joint_names["gripper"]أسماء أبعاد الحركة التي تحدد الماسك؛ حيث يتفوّق المؤشر المطابق على gripper_dim
gripper_threshold0.5العتبة المستخدمة بواسطة pre_snap_gripper_action وbinarize_gripper_action. لاحظ أن binarize يعمل بعد إلغاء التطبيع، لذا تتم مقارنته بالقيمة الفيزيائية للمقبض
pre_snap_gripper_actionFalseاجعل قيمة المقبض dim ضمن النطاق {0, 1} قبل إلغاء التطبيع. خاص بـ LIBERO، راجع ما يلي
binarize_gripper_actionFalseقم بتحويل مؤشر القبضة إلى قيم ثنائية {-1, 1} بعد إلغاء التطبيع. خاص بـ LIBERO، راجع ما يلي
clip_normalized_actionsTrueاقطع الأفعال المُعايرة إلى المجال [-1, 1] قبل إزالة المعايرة. يُطبَّق هذا فقط عندما يستخدم ACTION MIN_MAX؛ ويُتجاهل (مع تحذير) عند استخدام MEAN_STD، حيث سيؤدي إلى اقتطاع عند انحراف معياري واحد
world_model_num_viewsNoneالكاميرا التي بُني مُتنبئ نموذج العالم من أجلها. مُدمجة في أشكال نقاط الحفظ. 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_spatial1009395.0%
libero_object100100100.0%
libero_goal1009898.0%
libero_101009693.0%
الإجمالي40038796.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