# Long-WAM

[論文](https://arxiv.org/abs/2610.10528) · [プロジェクトとデモ](https://nvlabs.github.io/LongLive/Long-WAM/) · [コード](https://github.com/NVlabs/LongLive/tree/main/Long-WAM)

Long-WAMは長文脈のワールドアクションモデルです。言語による指示、ロボットの状態、視覚履歴を用いて、将来のダイナミクスを予測し、アクションを生成します。

## モデル概要

- **履歴の活用方法を学習する。**LongLive2.0-Robot の自己回帰型動画事前学習は、ロボット動作への適応の前に、履歴から未来への依存関係を学習します。
- **予測してから行動する。**IDMは、未来のRGB画像をデコードせずに、観測された履歴と予測された未来の潜在変数に基づいて行動を生成します。
- **時間的コンテキストをスケールする。**より長い観測ウィンドウは、運動やタスクの進捗を捉えます。履歴の長さは、アクションのホライズンとは独立しています。

LeRobotは、IDMとジョイント動画/アクション共ノイズ除去（COD）の両方をサポートしており、ネイティブなチェックポイントの読み込み、ファインチューニング、同期アクションチャンク推論に対応しています。WanバックボーンはDiffusersから、UMT5テキストエンコーダーはTransformersから提供されます。

## 結果

公開されている LeRobot ネイティブの [IDM](https://huggingface.co/Efficient-Large-Model/Long-WAM-LIBERO-IDM-LeRobot/tree/92f09103e0393b09b06a439895c800a0a198ba57) および [COD](https://huggingface.co/Efficient-Large-Model/Long-WAM-LIBERO-COD-LeRobot/tree/8d5ff0fc4aabf926179ddecf1c57469867047272) チェックポイントについて、`lerobot-eval` で報告された結果:

| スイート          | IDMの成功率 | CODの成功率 | モデルごとのエピソード数 |
| -------------- | ---------------: | ---------------: | -----------------: |
| libero_spatial |            99.4% |            98.6% |                500 |
| libero_object  |            99.8% |            99.6% |                500 |
| libero_goal    |            97.8% |            98.2% |                500 |
| libero_10      |            99.0% |            97.4% |                500 |
| **平均**    |       **99.00%** |       **98.45%** |           **2000** |

[Evaluation](#evaluation)を参照してください。コマンドの例とエピソードの上限が記載されています。これらのコマンドは、NVIDIA GB200上でBF16および同期推論を使用してテストされました。

## インストール

LeRobotのソースチェックアウトから:

```bash
pip install -e ".[longwam]"
```

## チェックポイント

LeRobotネイティブのチェックポイントには、完全なモデルの重みと保存された前処理・後処理プロセッサが含まれます。トークナイザーは`google/umt5-xxl`から読み込まれます。

| モード | 推論                                  | チェックポイント                                                                             |
| ---- | ------------------------------------------ | -------------------------------------------------------------------------------------- |
| IDM  | 未来の動画を想像し、その後でアクションのノイズを除去します | [LIBERO IDM](https://huggingface.co/Efficient-Large-Model/Long-WAM-LIBERO-IDM-LeRobot) |
| COD  | 動画とアクションを同時にデノイズする          | [LIBERO COD](https://huggingface.co/Efficient-Large-Model/Long-WAM-LIBERO-COD-LeRobot) |

どちらもP48履歴（20 Hzで2.4秒）、224×224のカメラビュー2つ、7次元のアクション、および8次元のロボット状態を使用します。望ましいデノイジングモードに一致するチェックポイントを使用してください。元のLong-WAMの`model.pt`バンドルは直接読み込めません。

## データ要件

RGBカメラ、`observation.state`、`action`、およびタスク指示を含むLeRobotデータセットを使用します。公開されているLIBEROのカメラキーは、`observation.images.image`と`observation.images.image2`の順です。`[0, 1]`の範囲のRGBテンソルを供給してください。プロセッサは各ビューをリサイズし中央クロップし、ポリシーはビューを水平方向に連結します。カメラの順序とアクション/状態の規約は、チェックポイントと整合させてください。

## 推論

```python
from lerobot.policies import make_pre_post_processors
from lerobot.policies.longwam.modeling_longwam import LongWAMPolicy

checkpoint = "Efficient-Large-Model/Long-WAM-LIBERO-IDM-LeRobot"
policy = LongWAMPolicy.from_pretrained(checkpoint).to("cuda").eval()
preprocess, postprocess = make_pre_post_processors(
    policy.config,
    pretrained_path=checkpoint,
    preprocessor_overrides={"device_processor": {"device": "cuda"}},
)
policy.reset()
# observation contains both current camera images, observation.state, and task.
# Repeat on every control tick, including ticks that consume queued actions.
action = postprocess(policy.select_action(preprocess(observation)))
```

`predict_action_chunk` は `[batch, prediction_steps, action_dim]` を返します。各呼び出しで、指定された現在のフレームが記録されます。 **すべての制御ティック**、アクションチャンクの実行中を含めて、`select_action` を呼び出し、履歴が最新に保たれるようにしてください。 `reset()` および `drop_queued_actions()` は、履歴とキューに積まれたアクションの両方をクリアします。汎用的な非同期/RTC は、この統合ではまだ検証されていません。

デフォルトでは、`inference_seed=1` が各チャンクごとに同じシードで個別の動画/アクションノイズジェネレーターを再起動し、リリースされた推論の動作を維持します。Python では `inference_seed=None` を、CLI では `--policy.inference_seed=null` を設定することで、代わりに進行するグローバル RNG を使用できます。`reset()` はそのストリームを再シードしません。学習では常に新しいノイズがサンプリングされます。

## 評価

ベンチマークの追加パッケージをインストールし、ネイティブのチェックポイントを評価します:

```bash
pip install -e ".[longwam,libero]"

lerobot-eval --policy.path=Efficient-Large-Model/Long-WAM-LIBERO-IDM-LeRobot \
  --policy.device=cuda --policy.dtype=bfloat16 \
  --env.type=libero --env.task=libero_spatial \
  --env.observation_height=256 --env.observation_width=256 \
  --env.episode_length=300 \
  --eval.batch_size=1 --eval.n_episodes=50 --seed=1
```

他の短いスイートには`libero_object`または`libero_goal`を使用します。LIBERO-Long の場合は、`--env.task=libero_10 --env.episode_length=600`を設定します。co-denoising を評価するには、チェックポイントのパス内の`IDM`を`COD`に置き換えます。

### 履歴とアクションチャンク分割

| パラメータ                  | 意味                                    | 公開されたLIBEROの値 |
| -------------------------- | ------------------------------------------ | --------------------- |
| `past_obs_steps`           | 保持された過去の制御ティック                | 48                    |
| `video_stride`             | サンプリングされた動画フレーム間のティックを制御します | 4                     |
| `future_video_steps`       | 将来の動画監督ホライズン           | 32                    |
| `action_horizon`           | トレーニング用アクションチャンク長               | 32                    |
| `inference_action_horizon` | 予測されたアクションチャンクの長さ              | 80                    |
| `n_action_steps`           | 新しい予測の実行前に実行されるアクション   | 10                    |

History の持続時間は `past_obs_steps / control_frequency` です。初期の History は最初の観測値でパディングされます。意図した History に対して学習されたチェックポイントを使用してください。推論時にウィンドウを変更することは、コンテキストスケーリングの学習ではありません。

## ファインチューニング

```bash
lerobot-train --policy.path=Efficient-Large-Model/Long-WAM-LIBERO-IDM-LeRobot \
  --policy.device=cuda --policy.dtype=bfloat16 \
  --accelerator.mixed_precision=bf16 \
  --dataset.repo_id=YOUR_ORG/YOUR_DATASET \
  --output_dir=outputs/longwam --batch_size=1 --steps=30000 \
  --policy.push_to_hub=false
```

`--policy.dtype` は、**読み込み前**のパラメータの保存形式を選択します。ネイティブの AdamW の勾配とモーメントは、その dtype を使用します。`--accelerator.mixed_precision` はオートキャストを制御するものであり、FP32 のマスターウェイトを制御するものではありません。この例では、[元のパラメータの dtype](https://github.com/NVlabs/LongLive/blob/1b9e348897cafa206fc6dd6feb80b59e2a8b1aa9/Long-WAM/src/longwam/runtime/factory.py#L616-L619) に合わせて、両方に BF16 を使用しています。FP32 のパラメータ/勾配/モーメントと BF16 のオートキャストを使用するには、`--policy.dtype=float32 --accelerator.mixed_precision=bf16` を使用します。この場合、凍結された VAE とテキストエンコーダーも FP32 となり、メモリ使用量が増加します。読み込み前に選択してください。BF16 で読み込まれたウェイトを FP32 にキャストしても、失われた精度は回復できません。

リリースされた gripper postprocessor は、最後のアクション次元を`[0, 1]`から符号付きコマンドに変換します。ファインチューニングデータがすでに環境の符号付き open/close 規約を使用している場合は、`--policy.toggle_action_dimensions=[]`を使用してください。有効な設定は保存されたプロセッサにも適用され、明示的な`postprocessor_overrides`が優先されます。正規化統計は上書きされない限り保持されるため、ファインチューニングデータに合わせてください。

Trainingでは将来の動画とアクションのチャンクを監督し、推論では過去/現在の観測のみを受け取ります。`--batch_size`はGPUメモリに合わせて調整し、チェックポイントのカメラ順序、アクション/状態の定義、およびデノイジングモードを維持してください。

## 引用

```bibtex
@misc{huang2026longwamscalingcontextworldaction,
  title={Long-WAM: Scaling the Context of World-Action Models},
  author={Wei Huang and Bohan Zhang and Chenzhi Liu and Isabella Liu and
          Shuai Yang and Weian Mao and Luozhou Wang and Yicheng Xiao and
          Weifeng Lin and Qixin Hu and Bryan Chu and Sifei Liu and
          Linxi Fan and Xiaojuan Qi and Song Han and Yukang Chen},
  year={2026},
  eprint={2610.10528},
  archivePrefix={arXiv},
  primaryClass={cs.RO},
  url={https://arxiv.org/abs/2610.10528},
}
```

