世界模型与视频扩散

能够预测场景接下来几秒画面的视频模型就是一个世界模拟器。如果在该预测上以动作作为条件,你就得到了一个可学习的游戏引擎。

类型: 学习 + 构建
语言: Python
前置条件: 第四阶段第 10 课(扩散模型)、第四阶段第 12 课(视频理解)、第四阶段第 23 课(DiT + Rectified Flow)
时长: 约 75 分钟

学习目标

  • 解释纯视频生成模型(Sora 2)与动作条件化世界模型(Genie 3、DreamerV3)的区别
  • 描述视频 DiT:时空 patch、3D 位置编码、跨 (T, H, W) token 的联合注意力
  • 梳理世界模型如何接入机器人技术:VLM 规划 → 视频模型模拟 → 逆动力学输出动作
  • 根据给定用例(创意视频、交互式模拟、自动驾驶合成)在 Sora 2、Genie 3、Runway GWM-1 Worlds、Wan-Video 和 HunyuanVideo 之间做出选择

问题所在

视频生成和世界建模在 2026 年趋于融合。一个能生成连贯一分钟视频的模型,在某种意义上已经学会了世界的运动规律:物体恒常性、重力、因果关系、风格。如果你在预测上以动作为条件(向左走、开门),视频模型就变成了一个可学习的模拟器,可以替代游戏引擎、驾驶模拟器或机器人环境。

利害关系很具体。Genie 3 从单张图像生成可玩环境。Runway GWM-1 Worlds 合成无限可探索场景。Sora 2 生成带同步音频和物理建模的分钟级视频。NVIDIA Cosmos-Drive、Wayve Gaia-2 和 Tesla DrivingWorld 为自动驾驶训练数据生成逼真的驾驶视频。世界模型范式正在悄然接管机器人的 sim-to-real 流程。

本课是第四阶段的"全局视角"课程。它将图像生成、视频理解和智能体推理连接成主导研究的架构模式。

核心概念

世界建模的三个家族

World models for RL (DreamerV3)

State + action

Latent transition model

Next latent + reward

Action-conditioned world model

Past frames + action

Latent-action video DiT

Next frames

Pure video generation

Text / image prompt

Video DiT

Video frames

  • Sora 2 是以 prompt 为条件的纯视频生成。没有动作接口。你不能在生成过程中"操控"它。
  • Genie 3、GWM-1 Worlds、Mirage / Magica 是动作条件化世界模型。从观测视频中推断潜在动作,然后以动作为条件预测未来帧。可交互——你按键或移动摄像机,场景就会响应。
  • DreamerV3 和经典 RL 世界模型家族在带有显式动作条件的潜在空间中预测,并在奖励信号上训练。视觉效果较弱;但对样本高效的 RL 更有用。

视频 DiT 架构

Video latent:          (C, T, H, W)
Patchify (spatial):    grid of P_h x P_w patches per frame
Patchify (temporal):   group P_t frames into a temporal patch
Resulting tokens:      (T / P_t) * (H / P_h) * (W / P_w) tokens

位置编码是 3D 的:每个 (t, h, w) 坐标对应一个旋转位置编码或可学习嵌入。注意力可以是:

  • 全联合 —— 所有 token 相互注意。O(N^2),N 为 token 数。对长视频不可行。
  • 分离式 —— 交替进行时间注意力(相同空间位置,跨时间:(H*W) * T^2)和空间注意力(相同时间步,跨空间:T * (H*W)^2)。TimeSformer 和大多数视频 DiT 使用此方式。
  • 窗口 —— 在 (t, h, w) 中的局部窗口。Video Swin 使用此方式。

2026 年的每个视频扩散模型都使用这三种模式之一,加上 AdaLN 条件化(第 23 课)和 rectified flow。

以动作为条件:潜在动作模型

Genie 通过判别式预测连续帧之间的动作来学习每帧的潜在动作。模型的解码器然后以推断的潜在动作为条件——而非显式的键盘按键。在推理时,用户可以指定一个潜在动作(或从新的先验中采样),模型生成与该动作一致的下一帧。

Sora 完全跳过了动作接口。其解码器从过去的时空 token 预测下一个时空 token。Prompt 条件化了起始点;没有东西在生成过程中操控它。

物理合理性

Sora 2 在 2026 年的发布明确宣传了物理合理性:重量、平衡、物体恒常性、因果关系。团队通过人工评分的合理性分数来衡量;该模型在掉落物体、角色碰撞和故意失败(跳空)方面比 Sora 1 有明显改善。

物理合理性仍然是主要的失败模式。2024-2025 年人们吃意大利面或从杯子喝水的视频揭示了模型缺乏持久的物体表征。2026 年的模型(Sora 2、Runway Gen-5、HunyuanVideo)减少了这些问题但并未完全消除。

自动驾驶世界模型

驾驶世界模型生成以轨迹、边界框或导航地图为条件的逼真道路场景。应用:

  • Cosmos-Drive-Dreams(NVIDIA)—— 生成分钟级驾驶视频用于 RL 训练。
  • Gaia-2(Wayve)—— 以轨迹为条件的场景合成,用于策略评估。
  • DrivingWorld(Tesla)—— 模拟多样天气、时段和交通状况。
  • Vista(ByteDance)—— 反应式驾驶场景合成。

它们替代了昂贵的前沿案例真实数据采集——夜间行人乱穿马路、结冰路口、异常车辆类型——这些场景否则需要数百万英里的驾驶。

机器人技术栈:VLM + 视频模型 + 逆动力学

新兴的三组件机器人循环:

  1. VLM 解析目标(“拿起红色杯子”),规划高级动作序列。
  2. 视频生成模型 模拟执行每个动作后的样子——预测 N 帧后的观测。
  3. 逆动力学模型 提取能产生这些观测的具体电机指令。

这替代了奖励塑形和样本密集的 RL。世界模型负责想象;逆动力学闭环执行。Genie Envisioner 是一个实例;许多研究团队正在趋同于这种结构。

评估

  • 视觉质量 —— FVD(Fréchet Video Distance),用户研究。
  • Prompt 对齐 —— 每帧 CLIPScore,VQA 风格评估。
  • 物理合理性 —— 在基准套件上人工评分(Sora 2 内部基准,VBench)。
  • 可控性(针对交互式世界模型)—— 动作 → 观测一致性;能否回到先前状态?

2026 年模型全景

模型用途参数量输出许可证
Sora 2文本生成视频、音频—1 分钟 1080p + 音频仅 API
Runway Gen-5文本/图像生成视频—10 秒片段API
Runway GWM-1 Worlds交互式世界—无限 3D 推演API
Genie 3从图像生成交互式世界11B+可玩帧研究预览
Wan-Video 2.1开源文本生成视频14B高质量片段非商业
HunyuanVideo开源文本生成视频13B10 秒片段宽松许可
Cosmos / Cosmos-Drive自动驾驶模拟7-14B驾驶场景NVIDIA 开源
Magica / Mirage 2AI 原生游戏引擎—可修改世界产品

动手构建

第 1 步:3D 视频分块

import torch
import torch.nn as nn


class VideoPatch3D(nn.Module):
    def __init__(self, in_channels=4, dim=64, patch_t=2, patch_h=2, patch_w=2):
        super().__init__()
        self.proj = nn.Conv3d(
            in_channels, dim,
            kernel_size=(patch_t, patch_h, patch_w),
            stride=(patch_t, patch_h, patch_w),
        )
        self.patch_t = patch_t
        self.patch_h = patch_h
        self.patch_w = patch_w

    def forward(self, x):
        # x: (N, C, T, H, W)
        x = self.proj(x)
        n, c, t, h, w = x.shape
        tokens = x.reshape(n, c, t * h * w).transpose(1, 2)
        return tokens, (t, h, w)

步长等于核大小的 3D 卷积充当时空分块器。(T, H, W) -> (T/2, H/2, W/2) 的 token 网格。

第 2 步:3D 旋转位置编码

旋转位置嵌入(RoPE)分别沿 t、h、w 轴应用:

def rope_3d(tokens, t_dim, h_dim, w_dim, grid):
    """
    tokens: (N, T*H*W, D)
    grid: (T, H, W) sizes
    t_dim + h_dim + w_dim == D
    """
    T, H, W = grid
    n, seq, d = tokens.shape
    if t_dim + h_dim + w_dim != d:
        raise ValueError(f"t_dim+h_dim+w_dim ({t_dim}+{h_dim}+{w_dim}) must equal D={d}")
    assert seq == T * H * W
    t_idx = torch.arange(T, device=tokens.device).repeat_interleave(H * W)
    h_idx = torch.arange(H, device=tokens.device).repeat_interleave(W).repeat(T)
    w_idx = torch.arange(W, device=tokens.device).repeat(T * H)
    # Simplified: just scale channels by frequencies. Real RoPE rotates pairs.
    freqs_t = torch.exp(-torch.log(torch.tensor(10000.0)) * torch.arange(t_dim // 2, device=tokens.device) / (t_dim // 2))
    freqs_h = torch.exp(-torch.log(torch.tensor(10000.0)) * torch.arange(h_dim // 2, device=tokens.device) / (h_dim // 2))
    freqs_w = torch.exp(-torch.log(torch.tensor(10000.0)) * torch.arange(w_dim // 2, device=tokens.device) / (w_dim // 2))
    emb_t = torch.cat([torch.sin(t_idx[:, None] * freqs_t), torch.cos(t_idx[:, None] * freqs_t)], dim=-1)
    emb_h = torch.cat([torch.sin(h_idx[:, None] * freqs_h), torch.cos(h_idx[:, None] * freqs_h)], dim=-1)
    emb_w = torch.cat([torch.sin(w_idx[:, None] * freqs_w), torch.cos(w_idx[:, None] * freqs_w)], dim=-1)
    return tokens + torch.cat([emb_t, emb_h, emb_w], dim=-1)

简化的加法形式。真正的 RoPE 旋转成对通道;位置信息是相同的。

第 3 步:分离式注意力块

class DividedAttentionBlock(nn.Module):
    def __init__(self, dim=64, heads=2):
        super().__init__()
        self.time_attn = nn.MultiheadAttention(dim, heads, batch_first=True)
        self.space_attn = nn.MultiheadAttention(dim, heads, batch_first=True)
        self.ln1 = nn.LayerNorm(dim)
        self.ln2 = nn.LayerNorm(dim)
        self.ln3 = nn.LayerNorm(dim)
        self.mlp = nn.Sequential(nn.Linear(dim, 4 * dim), nn.GELU(), nn.Linear(4 * dim, dim))

    def forward(self, x, grid):
        T, H, W = grid
        n, seq, d = x.shape
        # time attention: same (h, w), across t
        xt = x.view(n, T, H * W, d).permute(0, 2, 1, 3).reshape(n * H * W, T, d)
        a, _ = self.time_attn(self.ln1(xt), self.ln1(xt), self.ln1(xt), need_weights=False)
        xt = (xt + a).reshape(n, H * W, T, d).permute(0, 2, 1, 3).reshape(n, seq, d)
        # space attention: same t, across (h, w)
        xs = xt.view(n, T, H * W, d).reshape(n * T, H * W, d)
        a, _ = self.space_attn(self.ln2(xs), self.ln2(xs), self.ln2(xs), need_weights=False)
        xs = (xs + a).reshape(n, T, H * W, d).reshape(n, seq, d)
        xs = xs + self.mlp(self.ln3(xs))
        return xs

时间注意力在每个空间位置上跨时间关注;空间注意力在每帧内跨位置关注。两次 O(T^2 + (HW)^2) 操作,替代一次 O((THW)^2)。这是 TimeSformer 和每个现代视频 DiT 的核心。

第 4 步:组装微型视频 DiT

class TinyVideoDiT(nn.Module):
    def __init__(self, in_channels=4, dim=64, depth=2, heads=2):
        super().__init__()
        self.patch = VideoPatch3D(in_channels=in_channels, dim=dim, patch_t=2, patch_h=2, patch_w=2)
        self.blocks = nn.ModuleList([DividedAttentionBlock(dim, heads) for _ in range(depth)])
        self.out = nn.Linear(dim, in_channels * 2 * 2 * 2)

    def forward(self, x):
        tokens, grid = self.patch(x)
        for blk in self.blocks:
            tokens = blk(tokens, grid)
        return self.out(tokens), grid

这不是一个可用的视频生成器;而是一个结构演示,验证每个组件的形状正确。

第 5 步:检查形状

vid = torch.randn(1, 4, 8, 16, 16)  # (N, C, T, H, W)
model = TinyVideoDiT()
out, grid = model(vid)
print(f"input  {tuple(vid.shape)}")
print(f"tokens grid {grid}")
print(f"output {tuple(out.shape)}")

预期分块后 grid = (4, 8, 8),out = (1, 256, 32);输出头将每个 token 投影为时空 patch,准备反分块回视频。

实际使用

2026 年的生产访问模式:

  • Sora 2 API(OpenAI)—— 文本生成视频,同步音频。高级定价。
  • Runway Gen-5 / GWM-1(Runway)—— 图像生成视频,交互式世界。
  • Wan-Video 2.1 / HunyuanVideo —— 开源自部署。
  • Cosmos / Cosmos-Drive(NVIDIA)—— 驾驶模拟开源权重。
  • Genie 3 —— 研究预览,需申请访问。

构建交互式世界模型演示:从 Wan-Video 开始获取质量,再叠加潜在动作适配器实现交互性。自动驾驶模拟:Cosmos-Drive 是 2026 年的开源参考。

机器人领域的实际技术栈:

  1. 语言目标 -> VLM(Qwen3-VL)-> 高级规划。
  2. 规划 -> 潜在动作视频模型 -> 想象推演。
  3. 推演 -> 逆动力学模型 -> 低级动作。
  4. 动作执行 -> 观测反馈到第 1 步。

交付成果

本课产出:

  • outputs/prompt-video-model-picker.md —— 根据任务、许可证和延迟在 Sora 2 / Runway / Wan / HunyuanVideo / Cosmos 之间做出选择。
  • outputs/skill-physical-plausibility-checks.md —— 定义自动化检查(物体恒常性、重力、连续性)的技能,在任何生成视频发布前运行。

练习

  1. (简单) 计算 5 秒 360p 视频在 patch-t=2、patch-h=8、patch-w=8 时的 token 数量。分析此规模下注意力的内存需求。
  2. (中等) 将上面的分离式注意力块替换为全联合注意力块,测量形状和参数量。解释为什么真实视频模型需要分离式注意力。
  3. (困难) 构建一个最小的潜在动作视频模型:取 (frame_t, action_t, frame_{t+1}) 三元组数据集(任意简单 2D 游戏),训练一个以动作嵌入为条件的小型视频 DiT,展示不同动作产生不同的下一帧。

关键术语

术语常见说法实际含义
世界模型“可学习的模拟器”给定状态和动作预测未来观测的模型
视频 DiT“时空 Transformer”具有 3D 分块和分离式注意力的扩散 Transformer
潜在动作“推断的控制”从帧对推断的离散或连续动作潜变量;用于条件化下一帧生成
分离式注意力“先时间后空间”每个块两次注意力操作——先跨时间再跨空间——以控制 O(N^2) 复杂度
物体恒常性“物体保持真实”视频模型必须学习的场景属性;食物、玻璃器皿是经典失败模式
FVD“Fréchet Video Distance”视频版的 FID;主要视觉质量指标
逆动力学模型“从观测到动作”给定(状态,下一状态),输出连接它们的动作;闭环机器人执行
Cosmos-Drive“NVIDIA 驾驶模拟”用于 RL 和评估的开源自动驾驶世界模型
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐