MultiWorld: Scalable Multi-Agent Multi-View Video World Models

Paper: arXiv:2604.18564 Code: CIntellifusion/MultiWorld Code reference: main @ 6e0a1c34 (2026-05-12)

1. Motivation(研究动机)

  • 现有方法的问题:多数 video world model 把环境动力学建模为「单用户/单 agent」条件下的视频生成:输入历史帧与当前动作,预测未来帧。这样隐含假设场景中只有一个 agent,难以刻画协作机器人、多人联机游戏中同时作用、相互依赖的多 agent 交互;且每个 agent 对应不同视点,必须在不同视角的局部观测之间保持几何与外观一致,而以往工作常在多视角间出现割裂。
  • 本文要解决的问题:在统一框架内实现agent 精确可控(每帧联合动作与身份对齐)与跨视角一致multi-view 视频 world modeling,并支持 agent 数量与相机视角数量的可变扩展,以及多视角并行合成以降低延迟。
  • 为何值得研究:一旦能在学习到的世界模型里稳定模拟多 agent + 多视角共享场景,可直接支撑游戏内容生成、具身 VLA 训练数据增广、多机协作策略评估等,而无需完全依赖重型游戏引擎或物理仿真器手工搭环境。

2. Idea(核心思想)

  • 核心洞察:多 agent 世界建模的瓶颈不只是「把更多动作向量拼进条件」,而是**(1) 动作—身份对称性导致的控制混淆,以及(2) 各视角只看到局部、却共享同一 3D 场景这一结构;因此需要在条件路径上显式打破 agent 对称在生成前压缩出共享的 3D 感知全局状态**,再把每个视角的生成视作「同一全局状态下的并行单视角任务」。
  • 关键创新(1–3 句):提出 Multi-Agent Condition Module (MACM):用沿 agent 维的 RoPEAgent Identity Embedding (AIE) 区分身份,再用 agentself-attention 建模交互,并用 Adaptive Action Weighting (AAW) 突出当前帧「在动」的 agent;提出 Global State Encoder (GSE):以冻结的 VGGT 从多视角图像抽取隐式 3D 场景潜变量,经 MLP 对齐后跨 attention 注入 DiT。二者与 Flow Matching 及带因果掩码的动作 cross-attention 骨干结合,实现可扩展的多视角并行 rollout 与长程自回归块生成。
  • 与典型路线的本质区别:相比「每视角各训一个单 agent 模型」的 Standard、把固定多视角拼进单一序列的 Concat-View(视角一多即显存爆炸)、以及组合单 agent 子模型却难建模交互的 COMBOMultiWorldGSE 把可变多视角压到共享全局条件,用 MACM 解决谁在执行动作,从设计上同时瞄准可控性、跨视角一致性与伸缩性

3. Method(方法)

直觉说明(intuition)

如果把多 agent 动作简单堆在一起,Transformer 很难稳定回答「这一帧到底是 agent 1 往左还是 agent 2 往左」,镜像动作会混淆;AIE 相当于在身份维度上给每个 agent 一套可外推的相位旋转,使注意力内积自然依赖 agent 相对索引,从表示层面打破对称。另一方面,各相机只看到局部,若条件里只有「本视角上一帧」,模型容易在每个视角各自「编故事」;VGGT3D foundation model 的多图编码,把多视角纳入同一场景的潜空间GSE 再把它压成 DiT 可用的全局 token,相当于告诉扩散模型「大家都在同一个世界里」,从条件上约束几何一致。最后,多视角生成拆成共享全局状态的并行单视角 FM 问题,算力随视角近似线性扩展,便于并行;块自回归时用最新帧刷新 GSE,把误差累积控制在工程可用范围。

符号与 Flow Matching 骨干(Sec. 3.1)

考虑 agent 个相机。第 个视角的视频记为 ,联合动作序列 ,其中 。环境观测 由各视角视频的初始帧构成(并随模拟更新)。

对每个视角 独立做 FM:采样 速度场 拟合 。对动作 cross-attention 使用按帧因果掩码:第 帧视频 token 只能看见 的动作,避免泄漏未来动作,利于长程自回归。

Figure 1 解读:展示 MultiWorld 在「双人游戏 + 三机械臂协作」两类设置下,给定多视角初始帧与每步 agent 控制(键位、鼠标/手柄或机器人动作),生成动作可控跨视角一致的未来帧;它强调本文不是单视角视频预测,而是同时面对多 agent、多视角、异构控制信号的统一世界模型。

Figure 2 解读:这是方法主图。噪声视频经 DiT 块去噪;MACM 将多 agent 动作变为带身份与交互的 token,并经 AAW 聚合后以因果 cross-attention 注入;GSE 用冻结 VGGT 从多视角观测抽取隐式全局 3D 环境状态,经 MLP 对齐后作为跨视角共享条件;不同视角在同一全局状态下并行生成,并可通过块自回归延长时域。

Multi-Agent Condition Module(MACM,Sec. 3.2)

动机:(1) 身份歧义;(2) 部分 agent 静止、部分活跃时,均等对待会稀释有效动力学信号。 流程:动作嵌入为每 agent 的 latent → AIE(沿 agentRoPE)→ agentself-attention 建模交互 → AAWMLP 预测权重,加权求和为每帧统一动作 token)→ 注入 DiT 的因果 cross-attention。 对 agent 的动作嵌入 AIE 为: 其中 由频率 的标准 RoPE 构造;二维旋转作用于维度对 Agent 间注意力满足 使相对身份进入核函数,减轻镜像动作混淆。AAW 对每个 agent token 预测标量权重,softmax 或归一化后加权求和,突出当前帧主导变化的 agent

论文公式与 released code 实现差异:正文消融把 AIE 的 base frequency 作为最佳设置;当前公开代码 main@6e0a1c34 的 ItTakesTwo toy 训练配置 ittakestwo/configs/train_ua_480P_toy.yaml 使用 action_pe_config.base_n: 2pe_type: relative1d。因此上面的公式按论文概念解释 AIE,复现实验时应以对应 release/config 为准,不要把论文表格数值直接当作当前 toy config 的覆盖值。

Global State Encoder(GSE,Sec. 3.3)

给定同步多视角图像集合 通过 cross-attention 注入 DiT。论文强调不显式重建点云,而是利用 VGGT latent 中内嵌的 3D 结构先验,以共享全局表征约束多视角合成。

可扩展与并行多视角(Sec. 3.4)

  • Agent 数:依赖 AIE 的相对身份嵌入外推,架构不随 改变形状(实现上需处理变长 agent 时的掩码与池化)。
  • 视角数GSE 将可变 压到统一全局条件;每个视角仍是独立的 FM 轨迹,但共享 ,从而可同步并行生成。论文报告双视角并行相对顺序生成约 加速(在可相应扩展算力时,延迟近似不随视角恶化)。
  • 长程自回归:按块生成多视角视频,每块结束后用各视角最后一帧刷新 GSE 的全局状态,再滚动下一块;实验可在约 训练上下文长度上保持较小退化,并可达约 仅轻微质量损失。

伪代码(与开源实现一致)

下列伪代码分别对应 FM 条件生成、MACMSoftmaxAgentPooling、以及 GSEWanEnvEncoder)。实现细节以仓库为准。

import torch
import torch.nn.functional as F
from torch import nn
 
 
def flow_matching_velocity_loss(v_theta, x_c, actions, obs, noise_scale=1.0):
    """Single-view FM training objective for camera c (schematic)."""
    b = x_c.shape[0]
    t = torch.rand(b, device=x_c.device, dtype=x_c.dtype)
    eps = torch.randn_like(x_c) * noise_scale
    t_expand = t.view(b, *([1] * (x_c.ndim - 1)))
    x_t = (1.0 - t_expand) * x_c + t_expand * eps
    u_tgt = eps - x_c
    u_pred = v_theta(x_t, t, actions, obs)
    return F.mse_loss(u_pred, u_tgt)
class SoftmaxAgentPooling(nn.Module):
    """MACM: agent-dim RoPE self-attention + adaptive softmax weights (repo-aligned)."""
 
    def __init__(self, agent_attn: nn.Module, dim: int, adaptive_agent_pooling: bool = True):
        super().__init__()
        self.agent_attn = agent_attn
        hidden = max(dim // 4, 1)
        self.adaptive_agent_pooling = adaptive_agent_pooling
        self.weight_proj = (
            nn.Sequential(nn.Linear(dim, hidden), nn.GELU(), nn.Linear(hidden, 1))
            if adaptive_agent_pooling
            else None
        )
 
    def forward(self, x: torch.Tensor) -> torch.Tensor:
        # x: [B, N, F, D] — N agents, F frames
        x = self.agent_attn(x)
        x = x.permute(0, 2, 1, 3)  # [B, F, N, D]
        if self.adaptive_agent_pooling:
            logits = self.weight_proj(x)  # [B, F, N, 1]
            weights = torch.softmax(logits, dim=2)
            return (x * weights).sum(dim=2)  # [B, F, D]
        return x.sum(dim=2)
import torch
from torch import nn
from einops import rearrange
from diffsynth.models.vggt.models.vggt import VGGT
 
 
class WanEnvEncoder(nn.Module):
    """GSE: frozen VGGT trunk + trainable MLP connector (repo-aligned)."""
 
    def __init__(self, input_dim: int = 2048, output_dim: int = 3072):
        super().__init__()
        self.env_encoder = VGGT.from_pretrained("facebook/VGGT-1B").eval()
        for head in ("camera_head", "point_head", "depth_head", "track_head"):
            delattr(self.env_encoder, head)
        self.env_encoder.requires_grad_(False)
        self.connector = nn.Sequential(
            nn.Linear(input_dim, 2048),
            nn.GELU(),
            nn.Linear(2048, output_dim),
        )
 
    def forward(self, images: torch.Tensor) -> torch.Tensor:
        # images: [B, F, K, 3, H, W]
        b, f = images.shape[0], images.shape[1]
        x = rearrange(images, "B F K C H W -> (B F) K C H W")
        with torch.no_grad():
            env_states_list, _ = self.env_encoder.shortcut_forward(x)
            env_states_list = [torch.mean(t, dim=1) for t in env_states_list]
            env_states = torch.stack(env_states_list, dim=1).mean(dim=1)  # (B*F, N, L, D)
        env_states = rearrange(env_states, "(B F) N L -> (B F N) L", B=b)
        env_states = self.connector(env_states)
        return rearrange(env_states, "(B F N) L -> B (F N) L", B=b, F=f)
def parallel_multiview_rollout(model, init_obs_per_view, actions, num_views: int):
    """Inference sketch: shared global state, per-view FM sampling in parallel."""
    global_tokens = model.encode_global_state(init_obs_per_view)  # GSE
    preds = []
    for c in range(num_views):
        preds.append(model.sample_view(latent_view_c=init_obs_per_view[c], actions=actions, global_tokens=global_tokens))
    return preds  # executed in parallel when batched on device

Code reference: main @ 6e0a1c34 (2026-05-12) — 伪代码与映射基于该提交

论文概念源码路径(节选)关键类/符号
MACMAIE + agent 交互 + AAWdiffsynth/models/wan_video_robots_action.pySoftmaxAgentPooling, AgentWiseSelfAttention, MultiAgentActionRoPE2D
双人游戏动作编码diffsynth/models/wan_video_ittakestwo_action.pyWanActionEncoder
GSEVGGT + MLPdiffsynth/models/wan_env_encoder.pyWanEnvEncoder, WanDINOEnvEncoder(消融用)
VGGT 主干diffsynth/models/vggt/models/vggt.pyVGGT, shortcut_forward
FM / 训练编排diffsynth/diffusion/flow_match.py, diffsynth/diffusion/training_module.py, diffsynth/diffusion/runner.pyflow-matching scheduler / training module / runner
公开 ItTakesTwo 训练入口与覆盖配置ittakestwo/scripts/train.sh, ittakestwo/configs/train_ua_480P_toy.yamlaccelerate launch ittakestwo/train.py, trainer_config, action_pe_config
多域并行推理ittakestwo/parallel_inference.py, robots/parallel_inference.pyparallel inference, multi-view output stitching

Figure 3 解读:多人游戏定性对比中,Standard 容易只顾本视角、Concat-View 受固定视角拼接限制、COMBO 组合单 agent 子模型后仍可能丢失交互;红框标出的错误包括动作执行不准、角色消失和跨视角不一致。MultiWorld 的优势来自 MACM 对动作—身份绑定的显式建模,以及 GSE 给所有视角提供共享环境状态。

Figure 4 解读:静态动作输入下,许多 action-conditioned video model 会出现 action bias,即没有动作也生成不必要运动;MultiWorld 更接近静止视频,说明 AAW 与身份条件能减少「默认让角色动起来」的偏差。

Figure 5 解读:一个 agent 推、另一个 agent 拉大板时,环境变化由两个主体共同决定;该图说明 MultiWorld 不是分别预测每个角色,而是在共享环境中模拟合力导致的物体移动,这正是多 agent 世界模型相对单 agent 模型的关键难点。

Figure 6 解读:上半部分强调不同视角下阴影应保持一致,下半部分强调雪地脚印这类物理痕迹要在跨视角中持续存在;这些现象不是简单像素相似度能保证的,需要 GSE 的 3D-aware 全局状态约束视角间的物理一致性。

Figure 7 解读:多机器人失败轨迹展示碰撞、相互阻挡等难以安全采集的负例;如果世界模型能合理生成此类失败视频,就可以为策略评估或数据增广提供低风险样本。

Figure 8 解读:三机械臂堆叠彩色方块的长程生成依赖块自回归:每个块结束后刷新多视角观测和全局状态,再继续下一段;图中跨越训练上下文后的动作和几何仍基本连贯,对应正文关于约 上下文扩展的观察。

Figure 9 解读:作者指出当 agent 在远处或画面中占比很小时,形体会变得模糊/歧义;这说明 MultiWorld 的限制部分来自空间分辨率与小目标表征,而不是仅靠更多动作条件即可解决。

Figure 10 解读:成功轨迹展示多机器人协调完成操作任务,与 Figure 7 的失败轨迹互补;二者共同说明模型可以覆盖成功/失败两类 rollout,而不只是复现单一成功模板。

4. Experimental Setup(实验设置)

  • 数据:(1) ItTakesTwo 真实双人游玩采集:原始约 500 小时 @60fps,清洗后保留约 100 小时(动作清晰、相机运动稳定),>2100 万帧(over 21 million frames),原始分辨率 2560×1440;(2) RoboFactory 仿真多机操作自建数据:2–4agent、相机配置可变;附录说明每个机器人任务采集 1,000 条成功与 2,000 条失败 episode,用受控扰动构造失败样本。
  • 基线Standard(各视角独立 image-action-to-video);Concat-View(固定视角把多视角拼成单视频;标注 * 表示仅两相机训练,不可完全可比);COMBO(多阶段组合单 agent 子模型)。
  • 指标FVDFréchet Video Distance,越低越好);PSNR / SSIM / LPIPS(像素与感知质量);RPE(跨同步视角 reprojection error,越低表示几何一致越好);ActionIDM 准确率,沿用 VPT 流程,越高表示动作跟随越好)。
  • 训练配置:论文报告的 full setup 使用 Wan2.2-5B81 帧,游戏每视角 320×320、机器人数据 320×256;训练 40,000 iterations,lr=5e-5cosine 调度,全局 batch size 648× NVIDIA A800,约 4 天。released code 中可核验的公开训练入口是 ittakestwo/scripts/train.shaccelerate launch ittakestwo/train.py--trainable_models "dit"Wan-AI/Wan2.2-TI2V-5B)和 ittakestwo/configs/train_ua_480P_toy.yaml(toy 数据 height=480,width=960,num_frames=81,max_entries=1280000,learning_rate=1e-4,batch_size=4,num_epochs=20,AdamW weight_decay=0.01,CosineAnnealingLR T_max=10000,eta_min=1e-5,load_env_encoder=true)。VGGTdiffsynth/models/wan_env_encoder.py 中冻结,只训练 connector;论文 full-training 数字与公开 toy config 不完全相同,笔记在复现处以具体 config 路径为准。

5. Experimental Results(实验结果)

主表(Table 1,正文摘录)

Multi-Player Video Game

MethodFVD↓LPIPS↓SSIM↑PSNR↑Action↑RPE↓
Standard2450.360.5017.4888.40.75
Concat-View2150.360.4917.5489.10.74
Combo2070.340.5117.8289.30.72
Ours1790.350.5117.7289.80.67

Multi-Robot Manipulation

MethodFVD↓LPIPS↓SSIM↑PSNR↑Action↑RPE↓
Standard1000.070.9026.3988.21.60
Concat-View*1060.060.9027.4492.00.82
Combo990.080.9026.4988.51.54
Ours960.070.9026.6088.71.52

解读MultiWorld 在两域多数指标上最优或次优;RPEFVD 的增益尤其能说明 GSE 对跨视角一致性与视频统计质量的贡献。

消融(Table 2,架构组件)

ConfigFVD↓LPIPS↓SSIM↑PSNR↑Action↑RPE↓
Standard2450.360.5017.4888.40.75
+ MACM2280.360.5117.5689.70.76
Both1790.350.5117.7289.80.67

其它消融要点(正文表格数值)AIE 频率:FVD 234 / PSNR 17.53 / Action 89.2228 / 17.56 / 89.7AAW:去掉 AAW245 / 17.48 / 88.4,加入为 236 / 17.52 / 88.6GSE 主干:无全局 228 / 0.36 / 0.51 / 17.56 / 0.75Wan VAE 256 / 0.36 / 0.50 / 17.38 / 0.71DINOv2 232 / 0.36 / 0.50 / 17.48 / 0.72VGGT(Ours)179 / 0.35 / 0.51 / 17.72 / 0.67

局限(作者自述)

  • 当前训练规模仍受算力限制,大规模训练尚未充分探索。
  • Future work:实时多 agent 生成;面向超长交互的时空记忆机制以降低长程 rollout 的资源压力。

结论

在多人游戏与多机操作两类可变 agent/视角设置下,MultiWorld 通过 MACM + GSE视频保真、动作跟随、多视角一致三方面同时较强基线更优,并给出可扩展的并行推理与块自回归长视频路径。