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.7.0).
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のビデオ拡散スタックを基盤とする自己回帰型ビデオ・アクション・ワールドモデルポリシーです。1つの自己回帰シーケンス内で、将来のビデオ潜在変数とロボットアクション(“VA” = Video-Action)の予測を交互に行います。LeRobotの統合により、LingBot-VAは標準的な学習、評価、プロセッサのインターフェースに接続されます。

モデル概要

LingBot-VA is a dual-stream “mixture-of-transformers”: a video/latent stream (patch_embedding_mlp → blocks → proj_out) and an action stream (action_embedder → blocks → action_proj_out) share the same 30 transformer blocks and text conditioning.

コンポーネントクラス役割
DiTバックボーン(学習可能)WanTransformer3DModel約50億パラメータのデュアルストリームTransformer。
VAE(凍結)AutoencoderKLWanWan2.2 VAE、z_dim=48。ソースリポジトリから遅延取得されます。
テキストエンコーダー(凍結済み)UMT5EncoderModelUMT5-XXL、d_model=4096。ソースリポジトリから遅延取得されます。

推論時、ポリシーはチャンクごとに自己回帰ループを実行します。2つの独立したflow-matchingスケジューラを用いて、動画潜在ストリーム(CFG、約20ステップ)とアクションストリーム(約50ステップ)をデノイズし、チャンク間でKVキャッシュを維持します。チャンクが実行される間に、実際に観測されたキーフレームがKVキャッシュにフィードバックされます(クローズドループのワールドモデリング)。

LeRobot統合の範囲

  • LeRobot による標準的な policy.type=lingbot_va 設定。
  • Hub 上の LeRobot 形式のチェックポイント(公開されたアップストリームのものから変換済み)
  • 標準的なselect_actionインターフェースの背後にある、自己回帰型デュアルストリーム推論 (単一環境の評価、--eval.batch_size=1)。
  • eval / training 中のポリシーの予測(想像)された動画の保存をオプトインします。
  • LIBEROとRoboTwinでのlerobot-evalによる評価。
  • policy.forward を用いたデュアルストリームフローマッチング損失による学習 / 微調整(詳細は下記を参照)。

インストール

  1. インストールガイドに従ってLeRobotをインストールしてください。
  2. LingBot-VAの追加コンポーネントをインストールします:
pip install -e ".[lingbot_va]"

チェックポイント

リリースされたアップストリームのチェックポイントはLeRobot形式に変換され、Hubにプッシュされました:

バリアントLeRobotチェックポイント
LIBERO-Long 後学習lerobot/lingbot_va_libero_long
RoboTwinのポストトレーニングlerobot/lingbot_va_robotwin
事前学習済みベースlerobot/lingbot_va_base

学習可能な約5BのtransformerのみがLeRobotのmodel.safetensorsに保存されます。凍結されたVAE + UMT5 + トークナイザー(約20 GB)は、読み込み時にconfig.wan_pretrained_pathから取得されます(デフォルトではソースのrobbyant/*リポジトリを参照します)。 UMT5-XXLテキストエンコーダーはデフォルトでCPU上で実行されます(config.text_encoder_device)ため、5BのtransformerとVAEが単一の24〜32 GBのGPUに収まります。

評価 (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/Dockerfile.simのrobotwin_nativeステージは参照インストールです(LingBot-VAもwarp-lang==1.3.1と固定されたpytorch3d、およびTORCH_CUDA_ARCH_LISTでGPUの計算能力を指定してビルドされたCuRoboが必要です)。シミュレータサーバーのRoboTwin設定はジョイント制御を使用しているため、以下のエンドエフェクタモードはローカルで実行されます。RoboTwinはエンドエフェクタ姿勢制御を使用しているため、--env.action_mode=eeで実行してください。ポリシーはアームごとのxyz+quaternion+gripperのデルタ(robotwin_tshape潜在レイアウト)を予測し、エピソードの初期eef姿勢に合成して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 でデコードされ、環境レンダリングされた eval_episode_*.mp4 ビデオの隣に pred_episode_*.mp4 が書き出されます。 同じフラグは、lerobot-train 実行中の定期評価にも適用できます。

想像上の動画をライブで視聴する

lerobot-rollout --display_data=true を実行する際に --policy.return_predicted_video=true を設定すると、各チャンクの予測動画をデコードし、各アクションの実行に伴って、それが属する想像上のカメラフレーム(各実カメラの隣に prediction.images.<camera> として表示)を表示します。これにはチャンクごとに1回のVAEデコードのコストがかかります。

トレーニング / ファインチューニング

LingBotVAPolicy.forward(batch) は、論文に準拠したデュアルストリーム flow-matching ロス(latent_loss + action_loss、タイムステップ重み付き、アクションマスク付き)を実装しています。カメラクリップを VAE でエンコードしてビデオ潜在変数に変換し、タスクを UMT5 でエンコードし、両方のストリームにノイズを加えた後、transformer のブロック因果学習パスを実行し、(loss, metrics) を返します。オプティマイザーのプリセットは AdamW で、線形ウォームアップ後に一定になるスケジュールを使用しています(アップストリームと一致)。

要件:

  • ブロック因果マスクは PyTorch の flex-attention を使用するため、学習には --policy.attn_mode=flex でポリシーを構築してください(デフォルトの torch SDPA は推論専用です)。
  • 完全な5B DiTは、AdamWを使用する場合、単一の24〜32 GBのGPUに収まりません。LoRA(--peft.method_type=LORA)および/またはオプティマイザーのオフロードを使用してファインチューニングしてください。get_optim_paramsは、学習可能な(例:アダプター)パラメータのみを返します。VAEとUMT5テキストエンコーダーは凍結されたままです。PEFTサポートを有効にするには、lerobot[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 transformer)のみです。上記の例では、その自己注意(attn1)と相互注意(attn2)ブロックの両方のクエリ/バリュー射影を適応させており、これは標準的な LoRA ターゲットセットです。より高容量のアダプタが必要な場合は、範囲を広げてください(例:to_k/to_out、または ffn レイヤーを追加する)。--peft.method_type を渡すと PEFT が有効になるため、--policy.use_peft=true は不要です。

データセットは、カメラクリップ(各カメラの時間ウィンドウ、frame_chunk_size個の潜在フレームにVAEエンコード)と、各アイテムあたりframe_chunk_size * action_per_frameのアクションステップを提供する必要があります。

データ形式(アクションチャネルとカメラの順序)

LingBot-VA はエンドエフェクタ(デカルト)姿勢のポリシーであり、関節位置ではなく EEF 姿勢とグリップを予測します。アクションは固定のマルチエンボディメント30 次元レイアウトに存在します。ロボットのアクション次元をこれらのチャネルにマッピングし、残りは0でパディングします(used_action_channel_idsは、特定のチェックポイントが実際に使用するチャネルを選択します):

チャンネル意味
0–6左腕の末端エフェクタの姿勢
7–13右腕の末端エフェクタの姿勢
14–20左腕の関節(公開されたチェックポイントでは未使用)
21–27右腕の関節(公開されたチェックポイントでは未使用)
28左グリップ
29右グリップ
  • LIBERO はチャンネル 0–6 を使用します: 6-DoF EEF デルタ (xyz + 回転) + グリッパー (単一アーム)。
  • RoboTwinはチャンネル[0–6, 28, 7–13, 29]を使用します。左EEF(xyz + クォータニオン)+ 左グリップ + 右EEF + 右グリップ(16次元)です。環境はこれらのポーズをCuRobo IKを介して関節軌跡に変換します。関節は予測されません。

Joint-space datasets(または別のEEF規約)は、これらのチェックポイントのファインチューニングの前に、このスキーマに再マッピングする必要があります。

カメラの順序は固定されており、順序に依存します。各カメラの潜在変数はobs_cam_keysの順序で空間的に連結されるため、物理的なカメラとスロットの対応関係は学習時と一致させる必要があります。

ベンチマークobs_cam_keys(順不同)camera_layout
LIBEROobservation.images.image(エージェント視点 / 第三者視点)、observation.images.image2(ハンドマウント / 手首)width_concat(幅方向に連結された latents)
RoboTwinobservation.images.head_camera, observation.images.left_camera, observation.images.right_camerarobotwin_tshape(下部にフル解像度のヘッド、上部に2つの半解像度のリスト)

最初のカメラは外観/ヘッドビューであり、残りはリストビューです。

推論ハイパーパラメータ (LIBERO)

キー値
高さ × 幅128 × 128
カメラobservation.images.image(agentview)、observation.images.image2(eye-in-hand)
使用されたアクションチャネル0–6(7自由度アーム+グリップ)
action_per_frame / frame_chunk_size4 / 4
attn_window30
video / action 去噪ステップ20 / 50
guidance_scale / action_guidance_scale5 / 1
snr_shift / action_snr_shift5.0 / 0.05

これらはLingBotVAConfigのデフォルト値です。--policy.<name>=...を介して、これらを上書きできます。

注記

  • Attention バックエンド: 推論には torch SDPA バックエンド(常に利用可能)が使用されます。flashattn および flex バックエンドはオプションです。flex は学習にのみ必要です。
  • モデルサイズ: DiTは約50億パラメータ、凍結されたVAE+UMT5は約20 GBを追加します。推論には、おおよそ18〜24 GBのVRAMが必要です。

ライセンス

LingBot-VAはApache-2.0の下で公開されています。アップストリームリポジトリを参照してください。

Update on GitHub