LeRobot documentation
LingBot-VA
LingBot-VA
LingBot-VA, Wan2.2 video-diffusion yığını üzerine kurulu bir otoregresif video-aksiyon dünya modeli politikasıdır. Gelecekteki video latentlerini ve robot aksiyonlarını (“VA” = Video-Aksiyon) tek bir otoregresif dizide iç içe geçirerek tahmin eder. LeRobot entegrasyonu, LingBot-VA'yı standart eğitim, değerlendirme ve işlemci arayüzlerine bağlar.
Model Genel Bakış
LingBot-VA, çift akışlı “mixture-of-transformers” mimarisine sahiptir: video/latent akışı (patch_embedding_mlp → blocks → proj_out) ve eylem akışı (action_embedder → blocks → action_proj_out), aynı 30 transformer bloğunu ve metin koşullandırmasını paylaşır.
| Bileşen | Sınıf | Rol |
|---|---|---|
| DiT omurgası (eğitilebilir) | WanTransformer3DModel | ~5B parametreli çift akışlı transformer. |
| VAE (donmuş) | AutoencoderKLWan | Wan2.2 VAE, z_dim=48. Kaynak depodan tembel çekilir. |
| Metin kodlayıcı (donmuş) | UMT5EncoderModel | UMT5-XXL, d_model=4096. Kaynak depodan tembel çekilir. |
Çıkarım sırasında politika, parça başına otoregresif bir döngü çalıştırır: video-gizli akışını (CFG, ~20 adım) ve eylem akışını (~50 adım) iki bağımsız akış-eşleştirme zamanlayıcısıyla gürültüden arındırır ve parçalar arasında bir KV önbelleği sürdürür. Gerçek gözlemlenen ana kareler, parça çalıştırılırken KV önbelleğine geri beslenir (kapalı döngü dünya modellemesi).
LeRobot Entegrasyonunun Kapsamı
- LeRobot üzerinden standart
policy.type=lingbot_vayapılandırması. - Hub'da hazır LeRobot formatında kontrol noktaları (yayınlanan üst akışkilerden dönüştürülmüş).
- Standart
select_actionarayüzünün arkasındaki otoregresif çift akışlı çıkarım (tek ortam değerlendirme,--eval.batch_size=1). - Değerlendirme / eğitim sırasında politikanın öngörülen (hayali) videolarının isteğe bağlı olarak kaydedilmesi.
- LIBERO ve RoboTwin üzerinde
lerobot-evalile değerlendirme. - Çift akış akış eşleştirme kaybı (
policy.forward) ile eğitim / ince ayar, aşağıya bakın.
Kurulum
- LeRobot'u Yükleme Kılavuzu'nu izleyerek yükleyin.
- LingBot-VA ek bileşenini yükleyin:
pip install -e ".[lingbot_va]"Kontrol Noktaları
Yayınlanan upstream kontrol noktaları LeRobot formatına dönüştürüldü ve Hub'a gönderildi:
| Varyant | LeRobot kontrol noktası |
|---|---|
| LIBERO-Long post-eğitim | lerobot/lingbot_va_libero_long |
| RoboTwin post-train | lerobot/lingbot_va_robotwin |
| Önceden eğitilmiş taban | lerobot/lingbot_va_base |
LeRobot model.safetensors dosyasında yalnızca eğitilebilir ~5B transformer saklanır. Donmuş VAE + UMT5 + tokenizer (~20 GB), yükleme sırasında config.wan_pretrained_path konumundan çekilir (varsayılan olarak kaynak robbyant/* deposu kullanılır).
UMT5-XXL metin kodlayıcı varsayılan olarak CPU üzerinde çalışır (config.text_encoder_device), böylece 5B
transformer + VAE tek bir 24–32 GB GPU'ya sığar.
Değerlendirme (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_liberoLingBot-VA’nın akış çıkarımı (KV önbelleği + gözlemlenen ana kare geri bildirimi) tek ortam değerlendirmesi için uygulanmıştır; --eval.batch_size=1 kullanın.
Değerlendirme (RoboTwin)
RoboTwin 2.0, SAPIEN + CuRobo simülatör yığınına ihtiyaç duyar. Benchmark Docker görüntüsünü kullanabilirsiniz (docker/Dockerfile.benchmark.robotwin, bu görüntü ayrıca warp-lang==1.3.1 ve GPU'nun hesaplama yeteneğinin TORCH_CUDA_ARCH_LIST içinde tanımlandığı bir CuRobo derlemesi gerektirir). RoboTwin uç efektor duruşu kontrolü kullandığı için --env.action_mode=ee ile çalıştırın: politika, her kol için xyz+quaternion+gripper delta değerlerini (robotwin_tshape latent düzeni) tahmin eder; bu değerler bölümün başlangıç eef duruşuna uygulanır ve CuRobo IK üzerinden yürütülür.
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_robotwinTahmin edilen (hayal edilen) videoların kaydedilmesi
Tahmin edilen video latentlerini VAE ile çözmek ve ortam tarafından oluşturulan eval_episode_*.mp4 videolarının yanına pred_episode_*.mp4 dosyalarını yazmak için --policy.save_predicted_video=true değerini ayarlayın.
Aynı bayrak, lerobot-train sırasında periyodik değerlendirme için de geçerlidir.
Hayal edilen videoyu canlı olarak izleme
lerobot-rollout --display_data=true sırasında --policy.return_predicted_video=true ayarlayın; böylece her parçanın tahmin edilen videosu çözümlenir ve her eylem uygulandıkça, ait olduğu hayali kamera kareleri (her gerçek kameranın yanında prediction.images.<camera>) gösterilir. Bunun maliyeti parça başına bir VAE çözümlenmesidir.
Eğitim / ince ayar
LingBotVAPolicy.forward(batch), makaledeki çift akışlı flow-matching kaybını (latent_loss + action_loss, zaman adımı ağırlıklı, eylem maskeli) uygular: kamera kliplerini video latentlerine VAE ile kodlar, görevi UMT5 ile kodlar, her iki akışı da gürültüler, transformer’ın blok-sebebiyetli eğitim geçişini çalıştırır ve (loss, metrics) döndürür. Optimizer ön ayarı, doğrusal ısınma sonrası sabit zaman çizelgesiyle AdamW’dir (yukarı akışla uyumlu).
Gereksinimler:
- Block-causal mask'ler PyTorch flex-attention kullanır, bu nedenle eğitim için politikayı
--policy.attn_mode=flexile oluşturun (varsayılantorchSDPA yalnızca çıkarım içindir). - Tam 5B DiT, AdamW altında tek bir 24–32 GB GPU'ya sığmaz; LoRA (
--peft.method_type=LORA) ve/veya optimizer offload ile ince ayar yapın.get_optim_paramsyalnızca eğitilebilir (ör. adapter) parametreleri döndürür; VAE + UMT5 metin kodlayıcı donmuş kalır. PEFT desteğini etkinleştirmek içinlerobot[peft]ekini yükleyin (bkz. PEFT eğitim kılavuzu).
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_vaSmolVLA / π₀'dan farklı olarak LingBot-VA, yerleşik varsayılan LoRA hedefleriyle birlikte gelmez; bu nedenle --peft.target_modules parametresini açıkça iletmeniz gerekir. Sadece self.transformer (çift akışlı Wan transformer) eğitilebilir; yukarıdaki örnek, hem kendi dikkati (attn1) hem de çapraz dikkati (attn2) bloklarındaki sorgu/değer projeksiyonlarını uyarlar; bu, standart LoRA hedef kümesidir. Daha yüksek kapasiteli bir adaptöre ihtiyacınız varsa bu küme genişletilebilir (ör. to_k/to_out veya ffn katmanları ekleyerek). --peft.method_type parametresini iletmek PEFT'yi varsayar, bu yüzden --policy.use_peft=true gerekmez.
Veri seti, kamera kliplerini (kamera başına bir zaman penceresi, frame_chunk_size latent kareye VAE kodlanmış) ve her öğe için frame_chunk_size * action_per_frame eylem adımını sağlamalıdır.
Veri biçimi (aksiyon kanalları & kamera sırası)
LingBot-VA bir uç efektor (Kartezyen) duruşu politikasıdır; eklem konumları yerine EEF duruşları + kavrayıcıyı tahmin eder. Eylemler, sabit çok gövdeli 30 boyutlu bir düzen içinde yer alır; robotunuzun eylem boyutlarını bu kanallara eşleyin ve kalan kısımları 0 ile doldurun (used_action_channel_ids, belirli bir kontrol noktasının fiilen kullandığı kanalları seçer):
| kanallar | anlam |
|---|---|
| 0–6 | Sol kol uç efektoru duruşu |
| 7–13 | Sağ kol son ekleme durumu |
| 14–20 | Sol kol eklemleri (yayınlanan kontrol noktaları tarafından kullanılmıyor) |
| 21–27 | Sağ kol eklemleri (yayınlanan kontrol noktaları tarafından kullanılmıyor) |
| 28 | Sol kavrama |
| 29 | Sağ kavrama |
- LIBERO,
0–6kanallarını kullanır: 6-DoF EEF delta (xyz + rotasyon) + gripper (tek kollu). - RoboTwin,
[0–6, 28, 7–13, 29]kanallarını kullanır: sol EEF (xyz + kuaterniyon) + sol gripper + sağ EEF + sağ gripper (16 boyut). Ortam, bu pozları CuRobo IK aracılığıyla eklem yörüngelerine dönüştürür — eklemler asla tahmin edilmez.
Ortak uzay veri setleri (veya farklı bir EEF kuralı), bu kontrol noktalarının ince ayarı yapılmadan önce bu şemaya yeniden eşlenmelidir.
Kamera sırası sabittir ve sıraya duyarlıdır, kamera başına latentler obs_cam_keys sırasına göre uzamsal olarak birleştirilir, bu nedenle fiziksel kamera→slot eşlemesi eğitimle eşleşmelidir:
| benchmark | obs_cam_keys (sırasıyla) | camera_layout |
|---|---|---|
| LIBERO | observation.images.image (ajan görünümü / üçüncü şahıs), observation.images.image2 (el içi bilek) | width_concat (genişlik yönünde birleştirilen latensler) |
| RoboTwin | observation.images.head_camera, observation.images.left_camera, observation.images.right_camera | robotwin_tshape (aşağıda tam çözünürlüklü baş, üstte iki yarım çözünürlüklü bilek) |
İlk kamera dış/ön görünüm, diğerleri ise bilek görünümleridir.
Çıkarım Hiperparametreleri (LIBERO)
| Anahtar | Değer |
|---|---|
| yükseklik × genişlik | 128 × 128 |
| kameralar | observation.images.image (agentview), observation.images.image2 (eye-in-hand) |
| kullanılan eylem kanalları | 0–6 (7-DoF kol + kavrama) |
| action_per_frame / frame_chunk_size | 4 / 4 |
| attn_window | 30 |
| video / aksiyon gürültü azaltma adımları | 20 / 50 |
| guidance_scale / action_guidance_scale | 5 / 1 |
| snr_shift / action_snr_shift | 5.0 / 0.05 |
Bunlar LingBotVAConfig varsayılanlarıdır; bunlardan herhangi birini --policy.<name>=... ile geçersiz kılabilirsiniz.
Notlar
- Dikkat arka ucu: çıkarım,
torchSDPA arka ucunu kullanır (her zaman kullanılabilir).flashattnveflexarka uçları isteğe bağlıdır;flexyalnızca eğitim için gereklidir. - Model boyutu: DiT ~5B parametreye sahipken dondurulmuş VAE+UMT5 ~20 GB ekler; çıkarım için yaklaşık 18–24 GB VRAM gerekir.
Lisans
LingBot-VA, Apache-2.0 lisansı altında yayınlanmıştır. yukarıdaki depoyu inceleyin.
Update on GitHub