LeRobot documentation

LingBot-VA

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

LingBot-VA

LingBot-VA هو سياسة نموذج عالم ذاتي التوليد للفيديو والإجراءات مبني على مجموعة Wan2.2 للفيديو التوليدية. وهو يمزج، في تسلسل ذاتي التوليد واحد، بين التنبؤ بـ كائنات الفيديو الكامنة المستقبلية وإجراءات الروبوت (حيث “VA” تعني فيديو-إجراء). وتقوم تكاملية LeRobot بربط LingBot-VA بواجهات التدريب والتقييم والمعالج القياسية.

نظرة عامة على النموذج

LingBot-VA هو «مزيج من محوّلات» مزدوج التدفّق: تتشارك تدفّقة الفيديو/الكامن (patch_embedding_mlp → blocks → proj_out) وتدفّقة الإجراء (action_embedder → blocks → action_proj_out) نفس كتل المحوّل الثلاثين وتكييف النص.

مكوّنفئةالدور
هيكل DiT الأساسي (قابل للتدريب)WanTransformer3DModelمحوّل (transformer) مزدوج التدفق يحتوي على حوالي 5 مليارات من المعاملات.
VAE (مجمّد)AutoencoderKLWanWan2.2 VAE، z_dim=48. يُسحب بشكل كسول من المستودع المصدر.
مُشفِّر النص (مجمّد)UMT5EncoderModelUMT5-XXL، d_model=4096. يُسحب بشكل كسول من المستودع المصدر.

عند الاستدلال، تُنفّذ السياسة حلقة توليد ذاتية التراجع لكل شريحة: فهي تُزيل الضوضاء عن تدفق الكامنة للفيديو (CFG، ~20 خطوة) وتدفق الإجراء (~50 خطوة) باستخدام جدولي جدولة مستقلين لتطابق التدفق، مع الحفاظ على ذاكرة KV عبر الشرائح. تُعاد إطارات المفاتيح المرصودة فعليًا إلى ذاكرة KV أثناء تنفيذ الشريحة (نمذجة العالم في حلقة مغلقة).

ما تغطيه تكامل LeRobot

  • إعداد policy.type=lingbot_va القياسي من خلال LeRobot.
  • نقاط تفتيش جاهزة للاستخدام بصيغة LeRobot على Hub (تم تحويلها من نقاط التفتيش الأصلية المنشورة).
  • الاستدلال التلقائي التتابعي ذو التدفق المزدوج خلف واجهة select_action القياسية (تقييم بيئة واحدة، --eval.batch_size=1).
  • حفظ اختياري للفيديوهات المُتنبَّأ بها (المُتخيَّلة) الخاصة بالسياسة أثناء التقييم / التدريب.
  • التقييم باستخدام lerobot-eval على LIBERO و RoboTwin.
  • التدريب/الضبط الدقيق عبر خسارة مطابقة التدفق ذات التدفق المزدوج (policy.forward)، راجع ما يلي.

التثبيت

  1. قم بتثبيت LeRobot باتباع دليل التثبيت.
  2. قم بتثبيت إضافة LingBot-VA الإضافية:
pip install -e ".[lingbot_va]"

نقاط التفتيش

تم تحويل نقاط التفتيش الصادرة من المصدر إلى صيغة LeRobot ودفعها إلى Hub:

النوعنقطة التفتيش LeRobot
LIBERO-Long ما بعد التدريبlerobot/lingbot_va_libero_long
التدريب اللاحق لـ RoboTwinlerobot/lingbot_va_robotwin
قاعدة مُسبقة التدريبlerobot/lingbot_va_base

يُخزَّن فقط محوّل ~5B القابل للتدريب في model.safetensors الخاص بـ LeRobot. أما VAE المجمّد + UMT5 + مُرمّز الرموز (~20 جيجابايت) فيُستَدعى من config.wan_pretrained_path عند التحميل (القيمة الافتراضية هي المستودع المصدر robbyant/*). يعمل مُرمّز النصوص UMT5-XXL على وحدة المعالجة المركزية (CPU) افتراضيًا (config.text_encoder_device) بحيث يتّسع محوّل 5B + VAE على بطاقة رسومات واحدة بسعة 24–32 جيجابايت.

التقييم (LIBERO)

lerobot-eval \
    --policy.path=lerobot/lingbot_va_libero_long \
    --policy.device=cuda \
    --env.type=libero --env.task=libero_10 \
    --env.observation_height=128 --env.observation_width=128 \
    --eval.n_episodes=50 --eval.batch_size=1 \
    --output_dir=outputs/eval/lingbot_va_libero

يُنفَّذ الاستدلال البثي في LingBot-VA (ذاكرة KV + ملاحظات الإطارات الرئيسية المرصودة) للتقييم في بيئة واحدة؛ استخدم --eval.batch_size=1.

التقييم (RoboTwin)

يتطلب RoboTwin 2.0 مجموعة محاكاة SAPIEN + CuRobo. يمكنك استخدام صورة Docker الخاصة بالمعايير (docker/Dockerfile.benchmark.robotwin، والتي تتطلب أيضًا warp-lang==1.3.1 وبناء CuRobo مع قدرة وحدة معالجة الرسوميات الحاسوبية في TORCH_CUDA_ARCH_LIST). يستخدم RoboTwin التحكم في وضع طرف الأداة، لذا قم بالتنفيذ باستخدام --env.action_mode=ee: يتنبأ النموذج الاستراتيجي بفروقات xyz+quaternion+gripper لكل ذراع (تخطيط كامن robotwin_tshape) تُدمج مع وضع طرف الأداة الأولي للحلقة وتُنفَّذ عبر CuRobo IK.

lerobot-eval \
    --policy.path=lerobot/lingbot_va_robotwin \
    --policy.device=cuda \
    --env.type=robotwin --env.task=beat_block_hammer --env.action_mode=ee \
    --eval.n_episodes=10 --eval.batch_size=1 \
    --output_dir=outputs/eval/lingbot_va_robotwin

حفظ مقاطع الفيديو المتوقعة (المُتخيَّلة)

اضبط --policy.save_predicted_video=true لتفكيك كود VAE للفيديو المتوقع بالإضافة إلى ذلك، وكتابة pred_episode_*.mp4 بجانب مقاطع eval_episode_*.mp4 المُصوّرة من البيئة. يعمل نفس العلم مع التقييم الدوري أثناء lerobot-train.

مشاهدة الفيديو المتخيل مباشرة

اضبط --policy.return_predicted_video=true أثناء lerobot-rollout --display_data=true لفك ترميز الفيديو المتوقع لكل جزء وعرض، مع تنفيذ كل إجراء، إطارات الكاميرا المتخيلة التي ينتمي إليها (prediction.images.<camera>، بجانب كل كاميرا حقيقية). يتسبب هذا في إجراء فك ترميز واحد بواسطة VAE لكل جزء.

التدريب / الضبط الدقيق

LingBotVAPolicy.forward(batch) ينفّذ خسارة flow-matching ذات التدفّق المزدوج (latent_loss + action_loss، موزونة بخطوة الزمن، ومقنّعة للإجراء) كما ورد في الورقة البحثية: إذ يقوم بتشفير مقاطع الكاميرا إلى كامنات فيديو باستخدام VAE، وتشفير المهمة باستخدام UMT5، وإضافة ضجيج إلى كلا التدفّقين، وتنفيذ مسار التدريب السببي على مستوى الكتل في المحوّل، ثم إرجاع (loss, metrics). الإعداد المسبق للمحسّن هو AdamW مع جدول خطي التسخين ثم الثابت (مطابقًا للإصدار الأصلي).

المتطلبات:

  • تستخدم أقنعة السبب الكتلوية flex-attention في PyTorch، لذا ابنِ السياسة باستخدام --policy.attn_mode=flex للتدريب (الوضع الافتراضي torch SDPA مخصص للاستدلال فقط).
  • لا يتسع نموذج DiT الكامل بحجم 5B على بطاقة GPU واحدة بسعة 24–32 GB عند استخدام AdamW؛ قم بإجراء الضبط الدقيق باستخدام LoRA (--peft.method_type=LORA) و/أو تفريغ المُحسِّن. تُرجع get_optim_params فقط المعاملات القابلة للتدريب (مثل مُكيِّف المحلِّلات)؛ بينما تبقى مُشفِّر النص VAE + UMT5 مجمَّدة. ثبّت الحزمة الإضافية lerobot[peft] لتفعيل دعم PEFT (انظر دليل تدريب PEFT).
lerobot-train \
  --policy.path=lerobot/lingbot_va_libero_long --policy.attn_mode=flex \
  --peft.method_type=LORA --peft.r=32 --peft.lora_alpha=32 \
  --peft.target_modules='transformer\.blocks\.\d+\.attn[12]\.(to_q|to_v)' \
  --dataset.repo_id=<your LeRobot-format dataset> \
  --batch_size=1 --steps=... --output_dir=outputs/train/lingbot_va

على عكس SmolVLA / π₀، لا يوفر LingBot-VA أهداف LoRA افتراضية مدمجة، لذا يجب عليك تمرير --peft.target_modules بشكل صريح. الجزء الوحيد القابل للتدريب هو self.transformer (محوّل Wan ذو التدفق المزدوج)؛ ويكيّف المثال أعلاه إسقاطات الاستعلام/القيمة لكلٍّ من كتل الانتباه الذاتي (attn1) والانتباه المتقاطع (attn2)، وهو مجموعة أهداف LoRA القياسية. وسّع هذه المجموعة (مثل إضافة to_k/to_out، أو طبقات ffn) إذا كنت بحاجة إلى مُكيّف بسعة أعلى. إن تمرير --peft.method_type يعني تفعيل PEFT، لذا لا يلزم تمرير --policy.use_peft=true.

يجب أن يوفّر مجموعة البيانات مقاطع كاميرا (نافذة زمنية لكل كاميرا، مشفّرة بواسطة VAE إلى frame_chunk_size إطارات كامنة) وframe_chunk_size * action_per_frame خطوات إجراء لكل عنصر.

تنسيق البيانات (قنوات الإجراءات & ترتيب الكاميرات)

LingBot-VA هو سياسة وضع الطرف النهائي (الإحداثي)، حيث يتنبأ بأوضاع الطرف النهائي + الماسك، وليس بمواضع المفاصل. تقع الإجراءات في تخطيط ثابت متعدد الأجسام بأبعاد 30؛ قم بترجمة أبعاد إجراء روبوتك إلى هذه القنوات واملأ الباقي بـ 0 (يحدد used_action_channel_ids القنوات التي يستخدمها نقطة التفتيش المعينة فعلياً):

القنواتالمعنى
0–6وضعية الطرف النهائي للذراع اليسرى
7–13وضعية الطرف النهائي للذراع اليمنى
14–20مفاصل الذراع اليسرى (غير مستخدمة في نقاط التفتيش المنشورة)
21–27مفاصل الذراع اليمنى (غير مستخدمة في نقاط التفتيش المنشورة)
28المقبض الأيسر
29المقبض الأيمن
  • يستخدم LIBERO القنوات 0–6: فرق EEF بست درجات حرية (xyz + دوران) + قابض (ذراع واحدة).
  • يستخدم RoboTwin القنوات [0–6, 28, 7–13, 29]: EEF الأيسر (xyz + quaternion) + قابض الأيسر + EEF الأيمن + قابض الأيمن (16 بُعدًا). يقوم البيئة بتحويل هذه الأوضاع إلى مسارات مفصلية عبر CuRobo IK — حيث لا يتم التنبؤ بالمفاصل أبدًا.

يجب إعادة تعيين مساحات البيانات المشتركة (أو أي اتفاقية مختلفة لمفهوم النهاية) إلى هذا المخطط قبل ضبط هذه النقاط الفاحصة.

ترتيب الكاميرات ثابت وحساس للترتيب، حيث يتم دمج الكمونيات الخاصة بكل كاميرا مكانياً وفق ترتيب obs_cam_keys، لذا يجب أن يتطابق إسقاط الكاميرات الفيزيائية إلى الفتحات مع التدريب:

مقياس الأداءobs_cam_keys (بالترتيب)camera_layout
LIBEROobservation.images.image (منظور الوكيل / الشخص الثالث)، observation.images.image2 (كاميرا معصم اليد)width_concat (المتغيرات الكامنة مدمجة على محور العرض)
RoboTwinobservation.images.head_camera, observation.images.left_camera, observation.images.right_camerarobotwin_tshape (رأس بدقة كاملة في الأسفل، ورسغان بدقة نصفية في الأعلى)

الكاميرا الأولى هي الكاميرا الخارجية/للقبّة، والباقي هي كاميرات المعصم.

معلمات الاستدلال (LIBERO)

المفتاحالقيمة
الارتفاع × العرض128 × 128
كاميراتobservation.images.image (منظور الوكيل)، observation.images.image2 (العين في اليد)
قنوات الإجراءات المستخدمة0–6 (ذراع بـ 7 درجات حرية + قابض)
action_per_frame / frame_chunk_size4 / 4
attn_window30
خطوات إزالة الضوضاء من الفيديو / الإجراء20 / 50
guidance_scale / action_guidance_scale5 / 1
snr_shift / action_snr_shift5.0 / 0.05

هذه هي القيم الافتراضية لـLingBotVAConfig؛ يمكنك تجاوز أيٍّ منها عبر --policy.<name>=....

ملاحظات

  • واجهة الانتباه: يستخدم الاستدلال واجهة torch SDPA (متاحة دائمًا). واجهتا flashattn وflex اختياريتان؛ ولا يُحتاج إلى flex إلا للتدريب.
  • حجم النموذج: يحتوي DiT على حوالي 5 مليارات من المعاملات، بينما يضيف VAE وUMT5 المجمّدةان حوالي 20 غيغابايت؛ ويتطلب الاستدلال ما يقارب 18–24 غيغابايت من ذاكرة VRAM.

رخصة

تم إصدار LingBot-VA تحت رخصة Apache-2.0. راجع المستودع الأصلي.

Update on GitHub