世界模型与视频扩散 本节摘要:一个能预测场景接下来几秒的视频模型,就是一个世界模拟器;把预测条件在动作上,你就得到了一个学出来的游戏引擎。本节区分纯视频生成模型(Sora 2)与动作条件世界模型(Genie 3、DreamerV3),描述视频 DiT(时空 patch、3D 位置编码、跨 (T,H,W) token 的分离注意力),追踪世界模型如何接入机器人(VLM 规划→视频模型仿真→逆动力学发动作),并在 Sora 2、Genie 3、Runway GWM-1、Wan-Video、HunyuanVideo、Cosmos-Drive 间按用例(创意视频、交互仿真、自动驾驶合成)选择。这是第 5 章的收尾大图课,把图像生成、视频理解、智能体推理连成研究前沿的主导架构。
本节摘要:一个能预测场景接下来几秒的视频模型,就是一个世界模拟器;把预测条件在动作上,你就得到了一个学出来的游戏引擎。本节区分纯视频生成模型(Sora 2)与动作条件世界模型(Genie 3、DreamerV3),描述视频 DiT(时空 patch、3D 位置编码、跨 (T,H,W) token 的分离注意力),追踪世界模型如何接入机器人(VLM 规划→视频模型仿真→逆动力学发动作),并在 Sora 2、Genie 3、Runway GWM-1、Wan-Video、HunyuanVideo、Cosmos-Drive 间按用例(创意视频、交互仿真、自动驾驶合成)选择。这是第 5 章的收尾大图课,把图像生成、视频理解、智能体推理连成研究前沿的主导架构。
对应原课程:Phase 4 · Lesson 28 ·
world-models-video-diffusion(原英文phases/04-computer-vision/28-world-models-video-diffusion/docs/en.md)。本章最后一节。
阅读完本节,你应当能够:
2026 年,视频生成与世界建模合流了。一个能生成连贯一分钟视频的模型,在某种意义上学会了世界如何运动:物体恒常、重力、因果、风格。把预测条件在动作上(向左走、开门),视频模型就变成了可学习的模拟器,能替代游戏引擎、驾驶模拟器或机器人环境。
利害很具体。Genie 3 从单张图生成可玩环境;Runway GWM-1 Worlds 合成无限可探索场景;Sora 2 产带同步音频、建模了物理的一分钟视频;NVIDIA Cosmos-Drive、Wayve Gaia-2、Tesla DrivingWorld 为自动驾驶训练数据生成逼真驾驶视频。世界模型范式正悄悄接管机器人的 sim-to-real。
本节是第 5 章的「大图」课,把图像生成、视频理解、智能体推理连成研究前沿正走向的主导架构模式。
视频隐变量: (C, T, H, W) 空间 patch 化: 每帧 P_h × P_w 的 patch 网格 时间 patch 化: 每 P_t 帧合成一个时间 patch 得到的 token: (T / P_t) * (H / P_h) * (W / P_w) 个 token
位置编码是 3D 的:每个 (t, h, w) 坐标一个旋转或可学嵌入。注意力可为:
(H·W) · T²)和空间注意力(同时间步跨空间:T · (H·W)²),TimeSformer 和多数视频 DiT 用。2026 年每个视频扩散模型都用这三种模式之一,加 AdaLN 条件(第 23 节)和整流流。
Genie 通过判别式地预测连续两帧间的动作,为每帧学一个隐动作。解码器然后条件在推断出的隐动作上——而非显式键盘按键。推理时,用户指定一个隐动作(或从新先验采一个),模型生成与该动作一致的下一帧。
Sora 完全跳过动作接口,解码器从过去时空 token 预测下一时空 token,提示条件化起点,生成中途无转向。
Sora 2 的 2026 发布明确宣传了物理合理性:重量、平衡、物体恒常、因果。团队用人工评分的合理性分数衡量;相比 Sora 1,模型在掉落物体、角色碰撞、故意失败(跳空)上明显改进。
合理性仍是主要失败模式。2024~2025 吃意大利面或从玻璃杯喝水的视频暴露了模型缺乏持久物体表示。2026 模型(Sora 2、Runway Gen-5、HunyuanVideo)减少但未消除这些问题。
驾驶世界模型条件在轨迹、边界框或导航地图上,生成逼真道路场景。用途:
它们替代昂贵真实数据采集,覆盖长尾——夜间行人乱穿、结冰路口、异常车型——否则要数百万英里驾驶。
新兴的三件式机器人循环:
这替代了奖励塑形和样本密集的 RL。世界模型负责想象,逆动力学闭环执行。Genie Envisioner 是一个实例;许多研究组正收敛到这个结构。
| 模型 | 用途 | 参数 | 输出 | 授权 |
|---|---|---|---|---|
| Sora 2 | 文生视频、音频 | — | 1 分钟 1080p + 音频 | 仅 API |
| Runway Gen-5 | 文/图生视频 | — | 10 秒片段 | API |
| Runway GWM-1 Worlds | 交互式世界 | — | 无限 3D rollout | API |
| Genie 3 | 图生交互世界 | 110 亿+ | 可玩帧 | 研究预览 |
| Wan-Video 2.1 | 开源文生视频 | 140 亿 | 高质量片段 | 非商用 |
| HunyuanVideo | 开源文生视频 | 130 亿 | 10 秒片段 | 宽松 |
| Cosmos / Cosmos-Drive | 自动驾驶仿真 | 70~140 亿 | 驾驶场景 | NVIDIA 开放 |
| Magica / Mirage 2 | AI 原生游戏引擎 | — | 可修改世界 | 产品 |
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 卷积充当时空 patch 化器,(T, H, W) → (T/2, H/2, W/2) 的 token 网格。
旋转位置嵌入(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) 尺寸 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}) 必须等于 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) # 简化:仅按频率缩放通道。真实 RoPE 旋转成对通道。 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 按频率旋转成对通道,位置信息相同。
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 # 时间注意力:同 (h, w),跨 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) # 空间注意力:同 t,跨 (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
时间注意力在每个空间位置跨时间 attend,空间注意力在每帧内跨位置 attend。两个 O(T² + (HW)²) 操作替代一个 O((THW)²)——这是 TimeSformer 和每个现代视频 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
不是能用的视频生成器,而是证明每块形状正确的结构性演示。
vid = torch.randn(1, 4, 8, 16, 16) # (N, C, T, H, W) model = TinyVideoDiT() out, grid = model(vid) print(f"输入 {tuple(vid.shape)}") print(f"token 网格 {grid}") print(f"输出 {tuple(out.shape)}")
patch 后应得 grid = (4, 8, 8)、out = (1, 256, 32);头部再投影到每 token 时空 patch,准备反 patch 化回视频。
2026 生产访问模式:
搭交互世界模型 demo:从 Wan-Video 起步要质量,叠加隐动作适配器要交互;自动驾驶仿真:Cosmos-Drive 是 2026 开放参考。
机器人实战栈:
本节产出两个可复用文件(位于原课程 outputs/):
prompt-video-model-picker.md:按任务、授权、延迟,在 Sora 2 / Runway / Wan / HunyuanVideo / Cosmos 间挑。skill-physical-plausibility-checks.md:一个技能——定义自动化检查(物体恒常、重力、连续性),在任何生成视频上线前跑。至此,第 5 章「计算机视觉」28 节全部走完。从第 1 节的像素与色彩空间起步,我们一路手工实现了卷积、CNN、检测、分割、生成;在中段把扩散、视频、3D/NeRF、ViT、边缘部署、毕业流水线串成生产骨架;在后段 11 节里,又把 Stable Diffusion、自监督、CLIP、OCR、检索、姿态、3D 高斯泼溅、扩散 Transformer、SAM3、视觉语言模型、单目深度、多目标跟踪、世界模型这些 2026 前沿逐一吃透。两条主线贯穿全章:从零实现理解原理,再用框架对比验证工程;从静态图像到时空,从感知到生成,从单一模型到端到端系统。掌握了这套工具箱,你就具备了搭建 2026 年生产级视觉系统的全部基础——无论是 AR 试穿、自动驾驶、机器人操作,还是创意生成、文档智能、世界模拟,本章的某一节都是它的根。
下一章(第 6 章)将进入新的主题领域。视觉作为 AI 最成熟的感知通道,会持续作为后续章节的输入与基石——多模态、具身智能、智能体编排,都建立在「让机器看懂世界」这一章之上。