Motus: A Unified Latent Action World Model
Authors: Hongzhe Bi, Hengkai Tan, Shenghao Xie, Zeyuan Wang, Shuhe Huang, Haitian Liu, Ruowen Zhao, Yao Feng, Chendong Xiang, Yinze Rong, Hongyan Zhao, Hanyu Liu, Zhizhong Su, Lei Ma, Hang Su, Jun Zhu Affiliations: Tsinghua University (Dept. of Comp. Sci. and Tech., Institute for AI, BNRist Center, THBI Lab, Tsinghua-Bosch Joint ML Center), Peking University, Horizon Robotics arXiv: 2512.13030 Project Page: motus-robotics.github.io/motus GitHub: thu-ml/Motus
1. Motivation (研究动机)
-
现有方法碎片化: 当前 embodied AI 方法将理解 (understanding)、世界建模 (world modeling)、动作控制 (control) 分别建模为独立系统。一些方法依赖 Vision-Language-Action Models (VLAs) 学习静态策略,另一些使用 World Models 或生成模型预测未来,还有如 将 VLA 与 Inverse Dynamics Models (IDMs) 结合但排除了 World Models 和 Video Generation Models。这种碎片化阻碍了从大规模异质数据中学习。
-
统一五种建模范式的挑战: 一个通用的 embodied agent 需要同时具备以下五种能力:
- VLA:
- World Model:
- IDM:
- VGM:
- Video-Action Joint Prediction:
现有 Unified World Models (UWMs) 虽然提出了统一原型,但通常从头训练或基于较小模型,缺乏 VLM 的视觉语言理解先验或 VGM 的物理交互知识。
-
异质数据利用困难: 不同 embodiment 的动作空间在维度、范围、语义上差异巨大,且大量互联网视频和人类视频缺少动作标注,这使得跨 embodiment 预训练 action expert 非常困难。
2. Idea (核心思想)
Motus 提出了一个统一的 latent action world model,核心创新在于:
-
Mixture-of-Transformers (MoT) 架构: 通过 Tri-model Joint Attention 将预训练的 VGM (Wan 2.2 5B)、VLM (Qwen3-VL-2B) 和 Action Expert 三个专家融合,共享多头自注意力层实现跨模态知识融合,同时保持各自的专业功能。
-
UniDiffuser-style 调度器: 为视频和动作分配不同的 timestep 和噪声尺度,实现一个模型在 VLA、WM、IDM、VGM、Joint Prediction 五种模式间灵活切换。
-
光流 Latent Action: 利用光流作为像素级 “delta action”,通过 VAE 压缩到低维 latent space,使 action expert 能从海量无标注视频中预训练,跨越 embodiment 差异。
与 UWM 等方法的根本区别在于:Motus 不是从头训练或简单拼接,而是通过 MoT 架构将各领域最强的预训练模型有机融合,继承了互联网规模的多模态先验。
3. Method (方法)
3.1 整体框架
Figure 1 解读: 此图展示了 Motus 的核心 MoT 架构。底部三个模块分别是 Video Encoder(处理视频帧)、Action Encoder(处理动作序列)和 Pre-trained VLM(处理语言指令和视觉输入)。三个专家各自维护独立的 Transformer 模块(包含 QKV 投影、AdaLN/LayerNorm、FFN),但在中间层通过 Tri-model Joint Attention 共享自注意力层。Video Gen. Model 和 Action Expert 使用 AdaLN 注入 rectified flow timestep( 和 ),而 Understanding Expert 使用标准 LayerNorm。Video Gen. Model 额外有 Cross Attn & FFN 处理 T5 文本嵌入。顶部通过 Video Decoder 和 Action Decoder 分别输出视频帧和动作。
Motus 的设计思路是作为一个通用的生成模型,通过 MoT 结构整合三个预训练专家:
- Video Generation Model (Wan 2.2 5B): 生成专家,提供视频生成和物理交互先验
- Understanding Expert (Qwen3-VL-2B): 理解专家,提供 3D grounding、空间理解和精确物体定位
- Action Expert (~641.5M): 动作专家,预测机器人动作序列
三个专家在每一层通过 Tri-model Joint Attention 交互:各自计算 QKV,然后将 token 拼接后执行联合自注意力,再拆分回各自的序列。这种设计保留了各专家的专业功能,同时实现了跨模态特征融合。
3.2 UniDiffuser-style 调度器
Figure 2 解读: 此图展示了 Action-Dense Video-Sparse Prediction 策略。上方的采样帧(Sampled Frames)在时间线上稀疏分布(8帧@5Hz),而下方的采样动作(Sampled Actions)则密集分布(48帧@30Hz)。这种设计平衡了视频 token 和动作 token 的数量比例,避免在 Tri-model Joint Attention 中视频 token 数量远超动作 token 导致的过拟合问题。
Motus 通过为视频和动作分配独立的 timestep 和 ,实现 UniDiffuser-style 的统一建模。训练时对视频和动作分别采样噪声:
其中 ,。
通过设置不同模态 timestep 的起始值,可以实现五种推理模式的灵活切换:
- VLA: (视频始终加噪), 从 逐步去噪到 0
- VGM: (动作始终加噪), 从 逐步去噪到 0
- World Model: 动作清晰 (), 从 去噪
- IDM: 视频清晰 (), 从 去噪
- Joint Prediction: 两者同时从 去噪到 0
3.3 训练损失函数
模型使用 Rectified Flow 进行训练,预测速度场 :
实际实现中,video_loss 和 action_loss 通过可配置权重加权:
total_loss = video_weight * video_loss + action_weight * action_loss
3.4 Latent Actions
Figure 3 解读: 此图展示了 Latent Action VAE 的架构。首先用 DPFlow 计算相邻帧之间的光流,转换为 RGB 图像后送入 Deep Compression Autoencoder (DC-AE) 进行编码。DC-AE 的 Encoder 将光流压缩为 4 个 512 维的 token,通过轻量级 Encoder 投影为 14 维的 latent action 。Decoder 则反向重建光流。
Latent Action 的设计动机是解决大量视频数据缺少动作标注的问题:
- 光流表示: 使用 DPFlow 计算连续帧之间的光流,捕获像素级位移
- VAE 压缩: 使用预训练的 DC-AE 编码光流,将高维表示压缩为 4 个 512 维 token,再通过轻量级 encoder 投影到 14 维向量(与典型机器人动作空间维度匹配)
- 分布对齐: 混合 90% 无标注数据进行自监督重建与 10% 有标注数据进行弱动作监督
Latent Action VAE 的总损失函数:
其中 为光流重建误差,第二项对齐 latent 与真实动作, 正则化 latent space;,。
3.5 三阶段训练与数据金字塔
Figure 4 解读: 此图展示了六层 Embodied Data Pyramid。从底层到顶层分别是:Level 1 Web Data(网络数据,数据量最大)、Level 2 Egocentric Human Videos(以人为中心的视频)、Level 3 Synthetic Data(合成数据)、Level 4 Task-Agnostic Data(任务无关数据)、Level 5 Multi-Robot Task Trajectory Data(多机器人任务轨迹数据)、Level 6 Target-Robot Task Trajectory Data(目标机器人任务轨迹数据,数据质量最高但数量最少)。数据量从下往上递减,数据质量从下往上递增。
三阶段训练流程:
| 阶段 | 数据 | 训练内容 |
|---|---|---|
| Stage 1: Video Generation | Level 2 + Level 3 + Level 5 | 仅训练 VGM,使其适应真实物理交互场景 |
| Stage 2: Unified Training with Latent Actions | Level 2 + Level 3 + Level 4 + Level 5 | 训练全部 3 个专家,使用 latent actions 桥接 |
| Stage 3: SFT | Level 6 | 训练全部 3 个专家,使用真实动作,微调至目标机器人 |
3.6 推理算法
模型通过设定不同 timestep 初始值实现五种推理模式。以 VLA 模式为例:
Algorithm: VLA Inference
Input: o_t (当前观测), ℓ (语言指令), θ (模型参数)
Output: a_{t+1:t+k} (预测动作序列)
1: ε_o, ε_a ~ N(0, I)
2: o_{t+1:t+k}^{T_τ} ← ε_o # 视频初始化为纯噪声
3: a_{t+1:t+k}^{T_τ} ← ε_a # 动作初始化为纯噪声
4: for τ = T_τ ... 1 do
5: v_o, v_a = Model_θ(o_t, o_{t+1:t+k}^{T_τ}, a_{t+1:t+k}^τ, T_τ, τ, ℓ)
6: a_{t+1:t+k}^{τ-1} = a_{t+1:t+k}^τ + v_a * dτ # Euler 积分更新动作
7: # 视频保持噪声(o timestep 固定为 T_τ)
8: end for
9: return a_{t+1:t+k}^0类似地,World Model 模式固定动作为清晰状态去噪视频,Joint Prediction 模式同时去噪两者。
3.7 伪代码: 核心组件
Tri-model Joint Attention
Algorithm: Tri-model Joint Attention
Input: video_tokens (B, N_v, D_v), action_tokens (B, N_a, D_a),
und_tokens (B, N_u, D_u), layer_idx
Output: updated video_tokens, action_tokens, und_tokens
1: # 各专家独立计算 QKV
2: q_v, k_v, v_v = video_qkv_proj(video_tokens) # WAN 维度
3: q_a, k_a, v_a = action_to_wan_proj(action_tokens) # 投影到 WAN 维度
4: q_u, k_u, v_u = und_to_wan_proj(und_tokens) # 投影到 WAN 维度
5:
6: # 拼接所有 token 进行联合自注意力
7: Q = concat([q_v, q_a, q_u], dim=seq)
8: K = concat([k_v, k_a, k_u], dim=seq)
9: V = concat([v_v, v_a, v_u], dim=seq)
10:
11: out = MultiHeadSelfAttention(Q, K, V)
12:
13: # 拆分回各自的序列
14: video_out, action_out, und_out = split(out, [N_v, N_a, N_u])
15:
16: # 各自通过反向投影回原始维度
17: video_tokens = video_out # 保持 WAN 维度
18: action_tokens = wan_to_action_proj(action_out) # 投影回 Action 维度
19: und_tokens = wan_to_und_proj(und_out) # 投影回 Und 维度
20: return video_tokens, action_tokens, und_tokensMotus Training Step
Algorithm: Motus Training Step
Input: batch (frames, actions, language, vlm_inputs), config
Output: loss_dict
1: # 视频处理
2: frames = normalize_to_minus1_1(batch.frames)
3: video_latents = vae_encode(frames) # 编码到 latent space
4: τ_o ~ Uniform({1, ..., T_τ})
5: ε_o ~ N(0, I)
6: noisy_video = (1 - σ_o) * video_latents + σ_o * ε_o # Flow Matching 加噪
7: video_target = ε_o - video_latents # 目标: noise - clean
8:
9: # 动作处理
10: τ_a ~ Uniform({1, ..., T_τ})
11: ε_a ~ N(0, I)
12: noisy_action = (1 - σ_a) * actions + σ_a * ε_a
13: action_target = ε_a - actions
14: action_tokens = action_encoder(noisy_action, state) # 编码动作+状态
15:
16: # 理解特征提取 (VLM frozen)
17: und_features = extract_vlm_last_layer(vlm_inputs)
18: und_tokens = project_to_und_dim(und_features)
19:
20: # 30 层 Transformer 前向
21: for layer in range(30):
22: adaln_v = compute_video_adaln(time_emb_v, layer)
23: adaln_a = compute_action_adaln(time_emb_a, layer)
24: video_tokens, action_tokens, und_tokens = \
25: tri_model_joint_attention(video_tokens, action_tokens, und_tokens, layer)
26: video_tokens = wan_cross_attention(video_tokens, t5_embeddings, layer)
27: video_tokens = video_ffn(video_tokens, adaln_v, layer)
28: action_tokens = action_ffn(action_tokens, adaln_a, layer)
29: und_tokens = und_ffn(und_tokens, layer)
30:
31: # 计算损失
32: video_pred = video_output_head(video_tokens)
33: action_pred = action_decoder(action_tokens)
34: video_loss = MSE(video_pred[mask], video_target[mask])
35: action_loss = MSE(action_pred, action_target)
36: total_loss = w_v * video_loss + w_a * action_loss
37: return {total_loss, video_loss, action_loss}Latent Action VAE Training
Algorithm: Latent Action VAE Training
Input: consecutive_frames, optional real_actions
Output: loss
1: optical_flow = DPFlow(frame_t, frame_{t+1}) # 计算光流
2: flow_rgb = flow_to_rgb(optical_flow) # 转为 RGB 图像
3:
4: # DC-AE 编码
5: flow_tokens = dc_ae_encoder(flow_rgb) # 4 x 512 维 tokens
6: z_t, mu, logvar = lightweight_encoder(flow_tokens) # 14 维 latent action
7:
8: # 解码重建
9: flow_tokens_recon = lightweight_decoder(z_t)
10: flow_recon = dc_ae_decoder(flow_tokens_recon)
11:
12: # 损失计算
13: L_recon = reconstruction_loss(flow_recon, flow_rgb)
14: L_KL = kl_divergence(mu, logvar)
15: if real_actions is not None: # 10% 有标注数据
16: L_align = ||real_actions - z_t||^2
17: else:
18: L_align = 0
19: loss = L_recon + λ_a * L_align + β * L_KL
20: return loss3.8 Code-to-Paper 映射表
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| Motus 主模型 | models/motus.py | Motus |
| Tri-model Joint Attention | models/motus.py | VideoModule.process_joint_attention() |
| Action Expert | models/action_expert.py | ActionExpertBlock, ActionDecoder |
| Understanding Expert | models/und_expert.py | UndModule |
| WAN Video Model 封装 | models/wan_model.py | VideoModule |
| 训练循环 | train/train.py | main training loop |
| 训练步骤 & 损失计算 | models/motus.py | Motus.training_step() |
| 推理步骤 | models/motus.py | Motus.inference_step() |
| Action Encoder (State+Action) | models/action_expert.py | StateActionEncoder |
| Action Encoder (Action only) | models/action_expert.py | ActionEncoder |
| 学习率调度器 | utils/scheduler.py | LambdaLinearScheduler |
| 数据加载 | data/dataset.py | create_dataset() |
| 配置文件 | configs/ | ac_one.yaml, aloha_agilex_2.yaml, etc. |
4. Experimental Setup (实验设置)
数据集
| 数据集 | 规模 | Embodiment | 数据金字塔层级 |
|---|---|---|---|
| Egodex | 230,949 | Human | Level 2: Egocentric Human Videos |
| Agibot | 728,209 | Genie-1 Robot | Level 5: Multi-Robot Task Trajectory |
| RDT | 6,083 | Aloha Robot | Level 5: Multi-Robot Task Trajectory |
| RoboMind Franka | 9,589 | Franka Robot | Level 5: Multi-Robot Task Trajectory |
| RoboMind Aloha | 7,272 | Aloha Robot | Level 5: Multi-Robot Task Trajectory |
| RoboTwin | 27,500 | Aloha Robot | Level 3: Synthetic Data |
| Task-Agnostic Data | 1,000 | Aloha Robot | Level 4: Task-Agnostic |
| In-house Data | 2,000 | Aloha Robot | Level 6: Target-Robot Task Trajectory |
Baseline 方法
- : vision-language-action model with open-world generalization
- X-VLA: soft-prompted cross-embodiment VLA model
- GO-1, GR00T-N1, UniVLA, OpenVLA-OFT (在部分 benchmark 上比较)
评估指标
- 仿真: RoboTwin 2.0 上 50+ 任务的 success rate(100 次执行),分 Clean 和 Randomized 场景
- 真实世界: AC-One 和 Agilex-Aloha-2 平台上的 partial success rate(将任务分解为子目标,部分完成也计分)
- 其他 benchmark: LIBERO-Long (success rate), VLABench (success rate across In-Distribution and Cross-Category)
- 生成质量: FID, FVD, SSIM, LPIPS, PSNR (World Model mode)
- IDM 质量: Action MSE
训练配置
| 配置项 | Stage 1 | Stage 2 | Stage 3 |
|---|---|---|---|
| Batch Size | 256 | 256 | 256 |
| Learning Rate | |||
| Optimizer | AdamW | AdamW | AdamW |
| Weight Decay | 0.01 | 0.01 | 0.01 |
| GPU Hours | ~8000 | ~10000 | ~400 |
模型规模: VGM 5.00B + VLM 2.13B + Action Expert 641.5M + Understanding Expert 253.5M = 总计 ~8B 参数
关键超参数: Flow Matching 推理步数 10,采样策略 Logit Normal,视频帧 8@5Hz,动作 chunk 48@30Hz
5. Experimental Results (实验结果)
RoboTwin 2.0 仿真结果
| 方法 | Clean (%) | Randomized (%) |
|---|---|---|
| 42.98 | 43.84 | |
| X-VLA | 72.80 | 72.84 |
| w/o Pretrain | 72.8 | 77.00 |
| Stage1 only | 82.86 | 81.86 |
| Motus | 88.66 | 87.02 |
Motus 在 Randomized 设置下较 提升 +43.18%(绝对值),较 X-VLA 提升 +14.18%。
真实世界结果
AC-One 平台 (Partial Success Rate %):
| 任务 | w/o Pretrain | Motus | |
|---|---|---|---|
| Fold Towel | 4 | 1 | 14.5 |
| Brew Coffee using Coffee Maker | 0 | 0 | 62 |
| Get Water from Dispenser | 30 | 8 | 36 |
| Place Cube into Plate | 46 | 60 | 100 |
| Place Cube (OOD) | 28.125 | 18.75 | 75 |
| Grind Coffee Beans | 8 | 0 | 92 |
| Pour Water from Kettle | 5 | 5 | 65 |
| Touch Instructed Keyboard | 0 | 100 | 82.5 |
| Put Bread into Oven | 12 | 40 | 42 |
| Average | 14.79 | 25.86 | 63.22 |
Agilex-Aloha-2 平台:
| 任务 | w/o Pretrain | Motus | |
|---|---|---|---|
| Average | 48.60 | 26.60 | 59.30 |
真实世界场景提升 +11~48%。
其他 Benchmark
- LIBERO-Long: Motus 达到 97.6,与 X-VLA 并列 SOTA
- VLABench In-Distribution: Motus 0.48 vs 0.43
- VLABench Cross-Category: Motus 0.25 vs 0.22
Ablation Study
- Stage 2 预训练的贡献: 去掉 Stage 2 预训练后,Randomized 场景从 87.02% 降至 77.00%(-10.02%),证明 latent action 预训练的重要性
- Stage 1 的贡献: 仅 Stage 1 预训练可达 81.86%,说明 VGM 适应对性能有显著贡献
- IDM 能力: Motus 在 IDM 模式下 Action MSE 为 0.014,显著优于 ResNet18+MLP (0.044) 和 DINOv2+MLP (0.122)
- VLA vs Joint: VLA 模式 83.90% vs Joint 模式 87.02%,联合预测视频和动作优于仅预测动作
关于 Reinforcement Learning
本文不使用 Reinforcement Learning。Motus 采用纯监督学习方式训练:
- 使用 Rectified Flow Matching 的 MSE 损失进行去噪训练
- Latent Action VAE 使用重建损失 + KL 正则 + 动作对齐损失
- 没有 Reward Model、没有 VLM 作为 zero-shot judge、没有 RL reward signals
- 整个训练流程是三阶段监督预训练 + 微调,属于 Behavior Cloning 范式
局限性
- 论文未详细讨论 Motus 在更长 horizon 任务(超过当前 action chunk 长度)上的表现
- 总模型规模 ~8B,推理效率和部署成本较高
- 依赖预训练模型质量(Wan 2.2, Qwen3-VL-2B)