arXiv'26 | Mirage:把世界模型的 3D 记忆搬进 Latent Space,快 10 倍还省 55 倍显存

插播:之前写的《动手学 AutoML》终于出版了,从 NAS 到超参优化都有覆盖,适合想系统入门 AutoML 的同学。好了广告结束,现在进入正题。

动手学AutoML书籍封面

Mirage:把世界模型的 3D 记忆搬进 Latent Space,快 10 倍还省 55 倍显存

原文:Latent Spatial Memory for Video World Models


1. 什么是世界模型?从 LLM 到”脑中模拟器”

你有没有想过,人类为什么能在脑子里”预演”未来?

比如你在一个陌生的房间里走了半圈,转身回来——你会”预期”看到刚才路过的沙发、桌子还在原位。你甚至可以闭着眼睛想象:如果我从这个角度看过去,那个柜子应该被墙挡住了。

这种能力,本质上就是你大脑里维护了一个世界的内部模型:它记住了场景的空间结构,能根据你的”动作”(移动、转头)预测下一步会看到什么。

世界模型(World Model)就是 AI 试图复刻这种能力的尝试。

1.1 世界模型的正式定义

简单来说,世界模型是一个系统,它能够:

  1. 观察当前环境状态(一帧图像、一段视频)
  2. 记忆已经看过的场景信息
  3. 预测/生成在给定动作(如相机轨迹)下的未来观察

用数学来说,给定初始帧 $I_0$ 和一条相机轨迹 ${(\mathbf{E}t, K_t)}$(位姿+内参),世界模型需要生成一系列多视角一致的帧 ${I_t}{t=1}^T$。

这跟纯粹的”视频生成”有什么区别?核心区别在于 3D 一致性。普通的视频生成模型(如 Sora、Wan)可以生成漂亮的视频,但如果你让相机绕回起点,生成的画面大概率跟开头完全对不上——因为它没有维护一个持久的 3D 空间表示。

1.2 世界模型的应用场景

世界模型为什么重要?因为它是很多下游应用的底座:

  • 自动驾驶模拟:给定车辆轨迹,生成逼真的驾驶场景视频用于训练和测试
  • 游戏/交互环境生成:玩家在虚拟世界里自由探索,系统实时生成一致的新场景
  • 机器人导航规划:机器人在脑中”预演”路线,预判会遇到什么
  • 3D 内容创作:从单张图片出发,探索式地生成完整的 3D 场景

1.3 视频世界模型的演进路线

近年来,随着 video diffusion model 的突破(Sora、CogVideoX、Wan2.1 等),研究者开始把这些强大的视频生成器当作”世界模拟器”来用。大致经历了三个阶段:

阶段一:纯视频生成器

直接用 video diffusion model 生成视频,可以条件在相机轨迹上。问题是:没有持久记忆。每次生成只看有限的时间窗口,超出窗口的信息就丢了。相机走远了再回来,场景大概率”漂”了。

阶段二:带 RGB 点云记忆的世界模型

为了解决 3D 一致性问题,一系列工作(WonderJourney、WonderWorld、Voyager、Spatia 等)给视频生成器加了一个持久的 RGB 点云作为空间记忆:

  • 把每一帧用深度估计 lift 成 3D 点云
  • 点云存储每个点的 3D 坐标 + RGB 颜色
  • 生成新视角时,先把点云渲染成目标视角的 RGB 图像,再 encode 成 latent 送给 diffusion backbone

这确实有效——有了 3D 锚点,相机回访时能”记住”之前看到了什么。

但问题来了。

1.4 RGB 点云记忆的核心瓶颈

这也是整个领域在 Mirage 之前面临的核心矛盾

video diffusion model 在 latent space 工作,但空间记忆在 pixel space 工作。每生成一帧,都要做一次”latent → pixel → latent”的来回折腾。

具体来说:

  1. 计算代价爆炸:每一步 conditioning 都要先把百万级的点云渲染成全分辨率 RGB 图像,再用 VAE encoder 编码回 latent。渲染和编码的分辨率是 pixel 级的(如 704×1280),而 diffusion backbone 只需要 latent 级的(如 44×80)。相当于每步都做了一大堆无用功。
  2. 信息损失:latent → pixel → latent 的 round trip 并不是无损的。VAE 重建有误差,光栅化有 artifacts,可见性有空洞。原本 latent 里丰富的语义/纹理特征,经过 RGB 这一趟就”打了折”。
  3. 内存随 rollout 线性增长:点云越来越大,渲染越来越慢,到最后 GPU 直接 OOM。

一句话总结:你的生成器在 latent 世界里干活,但你非要让它的记忆在 pixel 世界里存取,来回倒腾既慢又损。

这就是 Mirage 要解决的核心问题。


2. Mirage:Latent Spatial Memory

今天想聊的这篇工作,核心 idea 出奇地自然:

既然 diffusion backbone 消费的是 latent,那空间记忆为什么不直接存 latent?

如下图,上半部分是之前的 RGB 点云方案:存颜色 → 渲染成图 → 再 encode 回 latent;下半部分是 Mirage 的 latent spatial memory:存 latent 特征 → 直接投影到目标视角的 latent grid 上。省掉了 pixel space 的来回。

Latent Spatial Memory 与 RGB 点云方案对比

2.1 Latent Spatial Memory 的定义

Mirage 的记忆不再是 $\mathcal{M}_{\text{rgb}} = {(\mathbf{p}_i, \mathbf{c}_i)}$(坐标 + 颜色),而是:

\[\mathcal{M} = \{(\mathbf{p}_i, \mathbf{f}_i)\}, \quad \mathbf{p}_i \in \mathbb{R}^3, \quad \mathbf{f}_i \in \mathbb{R}^C\]

每个点存的是一个 $C=48$ 维的 latent feature vector(对应 Wan2.2 的 VAE latent channel 数),而不是 3 维的 RGB。

这意味着什么?记忆里存的是 diffusion model 的”母语”——跟 backbone 直接对接,不需要翻译。

2.2 记忆的构建:Depth-Guided Back-Projection

构建过程和 RGB 方案类似,只是存的内容不同:

  1. 输入帧 $I$ 通过 VAE encoder 得到 latent tensor $\mathbf{z} \in \mathbb{R}^{C \times h \times w}$
  2. 估计深度图 $D$,下采样到 latent 分辨率
  3. 每个 latent cell $(u,v)$ 通过 pinhole 反投影到世界坐标系:
\[\mathbf{p}_{uv} = \pi^{-1}(u, v, D(u,v); K, \mathbf{E})\]
  1. 对应的 latent token $\mathbf{F}_{uv} = \mathbf{z}[:,v,u]$ 存入记忆

关键点:整个 lifting 在 latent 分辨率进行(44×80),不是 pixel 分辨率(704×1280)。空间点数直接少了 $s^2 = 16^2 = 256$ 倍。

2.3 记忆的读取:Latent-Space Projection

读取时同样高效——目标视角下的 conditioning signal 通过一次 latent 分辨率的投影就得到了:

  1. 把记忆中所有点投影到目标相机的 latent grid 上
  2. 每个 cell 保留深度最近的点(z-buffering)
  3. 取出对应的 latent token 组成 target-view latent tensor $\hat{\mathbf{z}}_t$
  4. 同时生成 visibility mask $\mathbf{m}_t$ 标记哪些位置有信息
\[i_t(u,v) = \arg\min_{i \in \Omega_t(u,v)} [\mathbf{E}_t \mathbf{p}_i]_z, \quad \hat{\mathbf{z}}_t(u,v) = \mathbf{F}_{i_t(u,v)}\]

整个 readout 不涉及任何 pixel 空间操作。没有渲染,没有 VAE encode。就是一次 latent 分辨率的投影。


3. Mirage 的完整流程

如下图,Mirage 以 chunk-by-chunk 的方式自回归生成长视频,每个 chunk 经历三步循环:

Mirage 整体架构与流程

3.1 Initialize → Readout → Update 循环

Step 1:初始化记忆

  • 对初始帧 $I_0$ encode 得到 latent,估计深度,back-project 到 3D → 得到初始 cache $\mathcal{M}$

Step 2:Readout + Denoising(逐 chunk)

  • 把 $\mathcal{M}$ 投影到当前 chunk 每个目标视角 → 得到 latent conditioning tensors
  • 通过 ControlNet-style 的 side branch 注入 diffusion backbone
  • Backbone 在 latent space 做 denoising → 生成当前 chunk

Step 3:Cache Update

  • 对生成的帧估计深度、re-encode 为 latent
  • 用分割模型检测动态物体和天空,排除这些区域
  • 将静态区域的 latent tokens back-project 进记忆

然后回到 Step 2,处理下一个 chunk。

3.2 关键设计细节

ControlNet-style 注入:readout 的 latent tensor 通过一个跟 backbone 结构对齐的 side branch 注入。因为 readout 已经在 backbone 的 latent space 里了,所以不需要额外的 bridging encoder——这是 RGB 方案做不到的。

动态物体过滤:用 Qwen3-VL 做开放词汇实体检测 + SAM3 做分割,把移动物体和天空从记忆更新中排除。因为这些东西的 geometry 不靠谱,放进 persistent cache 会污染记忆。

两阶段训练

  • 第一阶段冻结 backbone 和 VAE,只训练 side branch
  • 第二阶段加 rank-64 LoRA 在 self-attention 上,跟 side branch 联合优化

这种策略避免了 backbone 在早期适配一个还不成熟的 conditioning signal。


4. 实验结果

4.1 WorldScore Benchmark

WorldScore 是一个专门评估 world generation 的 benchmark,涵盖可控性、一致性、质量、运动四大维度。Mirage 在 Average Score 上达到 70.36,超过所有对比方法:

方法 Average Static Dynamic 3D Cons Photo Cons
WonderJourney 54.19 63.75 44.63 80.60 79.03
Voyager 66.08 77.62 54.53 81.56 85.99
Spatia 69.73 72.63 66.82 86.40 89.10
Mirage 70.36 73.60 67.11 92.21 93.95

特别注意 3D Consistency 和 Photometric Consistency——Mirage 分别达到 92.21 和 93.95,大幅领先 RGB cache 方案。这直接验证了 latent spatial memory 比 RGB 点云能更好地保持几何一致性。

4.2 RealEstate10K

在 RealEstate10K 上,Mirage 在 Novel View Synthesis 和 Closed-Loop(相机走一圈回来的一致性测试)上均达到最优或接近最优:

方法 PSNR↑ SSIM↑ LPIPS↓ PSNR_C↑ SSIM_C↑
ViewCrafter 15.78 0.580 0.396 14.79 0.481
Voyager 17.79 0.636 0.297 17.66 0.540
Spatia 18.58 0.646 0.254 19.38 0.579
Mirage 18.38 0.779 0.250 20.05 0.825

Closed-Loop 指标尤其有说服力——相机绕了一圈回来,Mirage 的 SSIM_C 达到 0.825,远超 Spatia 的 0.579。这说明 latent 记忆真的在长距离 rollout 下保持了场景一致性。

4.3 效率:这才是 Latent Spatial Memory 的杀手锏

如下图,随着 rollout 长度增加,Mirage 的每帧 cache 读取时间和内存占用几乎不增长,而 RGB 方案则爆炸式上升:

效率对比:cache 读取时间与内存占用

具体数字:

  • 端到端生成速度:比 RGB cache 快 10.57×
  • 3D cache 显存占用:比 RGB 方案少 55×

为什么差这么多?因为:

  • RGB 方案每步要在 $H \times W$(如 704×1280)分辨率做光栅化 + VAE encode
  • Mirage 只需要在 $h \times w$(如 44×80)分辨率做一次投影
  • cache 本身的 footprint 也小了 $s^2 = 256$ 倍(latent stride 16)

而且这个差距随着 rollout 变长会越来越大——RGB 方案最终会 OOM,Mirage 可以轻松完成。

4.4 消融实验

变体 Avg 3D Cons Photo Cons
Mirage (full) 70.36 92.21 93.95
换成 RGB 点云 67.71 90.75 91.10
Feature Upsample 60.85 84.90 79.81
去掉动态物体过滤 61.20 80.88 76.10
单阶段训练 63.18 87.11 84.47

几个关键结论:

  • Latent vs RGB:同样的 backbone + 训练策略,仅把 cache 从 latent 换成 RGB,Average Score 从 70.36 降到 67.71。说明 RGB round trip 确实损失了信息。
  • 动态物体过滤很重要:去掉后 3D Consistency 从 92.21 暴降到 80.88。移动物体的 stale 几何如果留在 cache 里,后面生成时会被错误地 splat 回来。
  • 两阶段训练有效:让 side branch 先稳定了再解锁 LoRA,比一起从头训收敛更好。

5. 局限性与思考

动态物体没有被记忆:当前方案直接把动态物体从 cache 中排除了。这意味着如果场景里有个人走过,相机回来时那个人不会”被记住”。这是一个简化假设——persistent memory 目前只服务于静态几何。

对深度估计的依赖:整个 lifting/update 依赖 metric depth。虽然消融实验显示换不同 depth estimator 影响不大(因为 ControlNet 把 readout 当作 soft hint),但在极端场景下深度估计失准还是会影响 cache 质量。

我的 take

这篇工作的核心贡献其实是一个很自然的 insight——空间记忆应该和生成器在同一个表示空间。之前的 RGB 点云方案之所以又慢又损,本质上是因为”存储空间”和”工作空间”不匹配。Mirage 把记忆搬进 latent space,从根源上消除了 pixel-latent 的来回折腾。

10× 加速和 55× 内存节省不是靠什么 trick 堆出来的,是 表示层面的结构性改进 带来的自然结果。这种”对问题本质的重新思考”往往比在现有框架上做 engineering optimization 更有效。


6. 总结

维度 RGB 点云方案 Mirage(Latent Spatial Memory)
记忆内容 3D 坐标 + RGB 颜色 3D 坐标 + Latent Feature
Readout 方式 渲染 → VAE Encode 直接 latent 投影
每步操作分辨率 Pixel ($H \times W$) Latent ($h \times w$)
端到端速度 10.57×
Cache 显存 1/55
信息保真 有 VAE 重建损失 无损(native latent)
3D Consistency 86-91 92.21

一句话:世界模型的 3D 记忆,应该说”latent 的语言”,而不是 pixel 的语言。

Mirage 用一个干净的 idea 把 video world model 的效率和质量同时拉上来了。对于做 LLM/视频生成/3D 相关的同学,这个”把记忆搬进 native representation space”的思路很有借鉴意义。


Project Page: aka.ms/latent-spatial-memory