RELIC: Interactive Video World Model with Long-Horizon Memory
Authors: Yicong Hong, Yiqun Mei, Chongjian Ge, Yiran Xu, Yang Zhou, Sai Bi, Yannick Hold-Geoffroy, Mike Roberts, Matthew Fisher, Eli Shechtman, Kalyan Sunkavalli, Feng Liu, Zhengqi Li, Hao Tan Affiliations: Adobe Research Venue: arXiv 2512.04040, December 2025 Code: 暂未开源
1. Motivation (研究动机)
1.1 核心问题
交互式视频世界模型需要同时满足三个关键需求:
- 实时长时序流式生成 (Real-time Long-horizon Streaming): 视频必须以实时延迟响应用户的连续控制输入 (如键盘/鼠标操作)
- 一致的空间记忆 (Consistent Spatial Memory): 模型不能遗忘之前观察或生成的场景内容, 当相机回到之前位置时需要恢复一致的画面
- 精确的用户控制 (Precise User Control): 准确响应6-DoF相机运动控制
1.2 现有方法的不足
| 方法类型 | 代表工作 | 局限性 |
|---|---|---|
| 滑窗注意力AR模型 | GameFactory, LongLive | 有限的上下文窗口, 无法进行长程记忆检索 |
| 外部记忆库 | Context as Memory, WorldMem | 手工设计的检索启发式, 难以端到端优化 |
| 显式3D表示 | Gen3C, Marble (World Labs) | 依赖重建精度, 引入强归纳偏置, 运行时成本高 |
| 循环模型更新 | Vid2World | 受限于内部状态容量, 针对特定视觉域 |
| 短上下文teacher蒸馏 | Self-Forcing, APT-2 | 5秒teacher窗口不足以学习长程记忆和大视角变化 |
核心矛盾: 长期空间记忆需要大量额外计算和GPU显存来存储、传输和推理历史token, 这与实时性需求直接冲突。
2. Idea (核心思想)
2.1 核心思路
RELIC提出一个统一框架, 通过以下三个关键创新同时解决实时性、记忆和控制三大挑战:
- 压缩历史latent作为长期记忆: 将自回归模型的记忆表示为高度压缩的历史latent token, 编码相对动作和绝对相机位姿, 存储在KV cache中。通过空间下采样 (, , 交替) 将token总量从约120K压缩至约30K (压缩), 实现隐式3D场景内容检索
- 20秒长时序双向teacher: 将原始5秒训练窗口的双向teacher模型微调至20秒, 使其能够生成跨越大视角变化的长序列, 为student提供完整长程监督
- Replayed Back-propagation自蒸馏: 提出内存高效的Self-Forcing蒸馏范式, 通过”先前向rollout (无梯度) → 缓存score差异 → 逐block重放反向传播”的策略, 将峰值GPU显存从整段rollout降低至单个block级别
2.2 与现有工作的关键区别
- 不依赖任何显式3D表示 (如Gaussian Splatting, NeRF)
- 不使用外部记忆库或手工检索规则
- 记忆完全内化在KV cache的压缩token中, 通过绝对相机位姿实现viewpoint-aware的上下文对齐
- 从长时序teacher直接蒸馏, 而非从短窗口teacher拼接
3. Method (方法)

Figure 1 解读: RELIC的整体能力展示。给定单张输入图片, 用户可以通过键盘控制 (WASD平移 + 方向键旋转) 实时探索虚拟场景。上方展示了室内场景的长时序探索 (最长20秒), 右侧红色虚线框展示了空间记忆回溯能力 — 当相机转回时, 之前看到的内容被一致地恢复。下方网格展示了多种风格场景的泛化能力。模型参数14B, 分辨率 , 16 FPS。
3.1 数据构建 (Data Curation)
Figure 3 解读: 数据构建pipeline。从350个高质量Unreal Engine许可3D场景出发, 人工操作相机收集轨迹。经过四阶段过滤 (相机运动、视点稳定性、曝光/光照、渲染质量), 标注相机位姿、动作标签和分段文本描述, 最后进行动作均衡采样和时间反转增强。
数据规模:
- 350个UE场景 (室内+室外), 超过1400条人工控制相机轨迹
- 过滤后约1600分钟高质量720p视频
- 平均时长约75秒, 最长9分钟
Figure 2a 解读: 视频时长分布, 均值75秒, 中位数63秒, 最大545秒。呈现长尾分布, 大部分视频在50-100秒范围。
Figure 2b 解读: 动作分布。与真实世界数据集中前进动作占绝对主导不同, RELIC数据集有意均衡采样, Forward约30.6%, 各旋转和平移动作均有10-20%的比例, 确保模型能学习多样化的运动控制。
动作标注
13维动作空间 :
- 6个平移动作: Dolly In , Dolly Out , Truck Left , Truck Right , Pedestal Up, Pedestal Down
- 6个旋转动作: Tilt Up , Tilt Down , Pan Left , Pan Right , Roll CW, Roll CCW
- 1个静止动作: Static
每个动作为非负标量值 (而非二值flag), 可编码不同速度。
动作标签提取公式:
相对平移 (相机坐标系):
其中 为世界坐标位置, 为world-to-camera旋转矩阵。归一化: , 为整段轨迹的平均位移幅度。
相对旋转:
分解为yaw, pitch, roll欧拉角后映射到离散动作标签。
伪代码: Action Label Extraction
function ReadUEActions(annotation_json):
frames, P_t, R_t = load_frames(annotation_json)
# 计算相对平移 (相机坐标系)
delta_P_c[t] = R_t @ (P[t+1] - P[t]) for all t
d_bar = mean(|delta_P_c[t]|) over non-zero frames
for t = 1 to T-1:
# 平移动作
d_f, d_s, d_z = delta_P_c[t] / d_bar
A_move = map_to_discrete(d_f, d_s, d_z) # w/s, a/d, lift_up/down
# 旋转动作
R_rel = R[t+1] @ R[t].T
delta_yaw, delta_pitch, delta_roll = euler_decompose(R_rel)
A_rot = map_to_rotation_actions(delta_yaw, delta_pitch, delta_roll)
return action_sequence # 13-dim per frame分段文本标注
- 长视频按5秒分段, 使用GPT-5生成高层场景描述
- 文本被约束为仅描述静态场景属性, 不包含相机运动描述, 避免与用户动作控制冲突
时间反转数据增强
对长度为 的训练视频段, 从后半段均匀采样翻转点 , 构建回文序列:
迫使模型学习”回头看”时的空间记忆检索。
3.2 模型架构
Figure 4 解读: Teacher模型架构。基于Wan-2.1 14B DiT, 输入图像与噪声视频latent拼接后送入DiT blocks。每个block内集成YaRN-RoPE自注意力、QK-Norm、SDPA。关键设计: 相对动作通过Action Encoder经MLP调制后加到自注意力后的latent上; 绝对相机位姿通过Camera Encoder编码后加到Q和K投影上 (不修改V), 实现viewpoint-aware的空间检索。文本通过cross-attention注入。
基础架构
- Backbone: Wan-2.1 14B text-to-video DiT
- ST-VAE: 3D因果变分自编码器, 空间压缩, 时间压缩, 支持因果流式特征缓存
- 文本编码: umT5通过cross-attention注入
- 去噪时间步: 通过共享MLP注入
动作条件化设计
两套独立编码器, 每个包含 temporal patchifying + MLP调制层 ( 时间压缩):
- 相对动作 : 编码后直接加到自注意力之后的latent上
- 引导帧间场景转换, 与用户控制保持一致
- 绝对相机位姿 : 编码后加到Q和K投影上 (V不变)
- 通过位姿对齐实现跨viewpoint的空间内容检索
绝对位姿从相对动作积分得到:
伪代码: Action Conditioning in DiT Block
function DiTBlock(x, action_A, camera_pose, text_emb, timestep):
# 1. 自注意力
x_norm = LayerNorm(x)
Q, K, V = linear_projections(x_norm)
# 注入绝对相机位姿到 Q, K (不修改V)
cam_emb = CameraEncoder(camera_pose) # temporal patchify + MLP
Q = Q + cam_emb
K = K + cam_emb
# QK-Norm + SDPA
Q, K = qk_norm(Q, K)
attn_out = scaled_dot_product_attention(Q, K, V)
x = x + MLP(attn_out)
# 2. 注入相对动作 (加到latent上)
action_emb = ActionEncoder(action_A) # temporal patchify + MLP
x = x + action_emb
# 3. Cross-attention with text
x = x + CrossAttention(x, text_emb)
x = x + FFN(x)
return x长时序Teacher训练
课程学习策略:
- 5秒视频: 5,000 iterations
- 10秒视频: 1,000 iterations
- 20秒视频 (317帧): 4,000 iterations
使用 YaRN 技术扩展RoPE位置编码, 支持超过原始5秒训练窗口的序列长度。
3.3 自回归Student模型与记忆机制
Student模型同样基于Wan-2.1 14B, 但将双向注意力替换为block-wise因果注意力, 支持自回归流式生成。
KV Cache记忆压缩
Figure 6 解读: 长视频蒸馏与记忆压缩机制。KV cache分为两部分: (1) 压缩记忆缓存 (Compressed Memory Cache): 存储从序列开头到 的历史KV token, 经空间下采样压缩; (2) 非压缩滚动缓存 (Uncompressed Rolling Cache): 存储最近 个block的完整KV token。Query只需对这两部分做注意力计算。上方展示了Replayed Back-propagation的三阶段蒸馏流程。
空间压缩配置:
对第 个latent帧, 压缩比为 , 交替使用 , , 空间下采样。
效果: 将20秒上下文 (约120K token) 压缩至与原始5秒预训练token长度匹配 (约30K token), 实现 压缩, KV cache显存和注意力FLOPs同步降低 。
伪代码: Memory-Compressed KV Cache
function MemoryCompressedAttention(query_block_i, kv_cache, window_size_w):
# 1. 压缩记忆缓存: 历史 [0, i-w) 的 KV
compressed_kv = []
S = [1, 4, 2, 4, 4, 2, 4, 4, 2, 4, 4, 4, 2, 4, 4, 2, 4]
for j in range(0, i - w):
s_j = S[j % len(S)] # 空间压缩比
kv_j = spatial_downsample(kv_cache[j], factor=s_j)
compressed_kv.append(kv_j)
# 2. 非压缩滚动缓存: 最近 w 个 block [i-w, i)
rolling_kv = kv_cache[i-w : i] # 无压缩
# 3. 拼接做注意力
full_kv = concat(compressed_kv, rolling_kv)
output = scaled_dot_product_attention(query_block_i, full_kv)
# 4. 存储 FP8 E4M3 格式节省显存
kv_cache[i] = compute_and_store_kv(query_block_i, format="fp8_e4m3")
return output3.4 蒸馏框架
ODE初始化 (Hybrid Forcing)
Figure 5 解读: ODE初始化阶段。左侧: 双向teacher生成不同噪声水平下的ODE轨迹, 作为student的初始化目标。右侧: Hybrid Forcing注意力mask — 训练序列分为两部分: 前 个block包含干净的压缩记忆latent (Teacher Forcing), 后 个block包含带噪声的非压缩latent (Diffusion Forcing)。Student在后半部分学习基于自身历史+压缩记忆进行去噪, 结合了两种forcing的优势。
Student使用teacher权重初始化, 在4个去噪步上回归预计算的ODE轨迹。Hybrid Forcing策略:
- 前 blocks: 干净压缩latent (teacher forcing风格)
- 后 blocks: 带噪声非压缩latent, 因果条件于 (i) 同chunk内历史latent + (ii) 前chunk的压缩记忆
Replayed Back-propagation
DMD损失梯度:
其中 为前向扩散过程, 和 分别为真实数据和生成数据的score函数。
传统Self-Forcing的问题: 需要对整段长视频rollout启用autograd, 计算图随视频长度线性增长, 20秒视频的完整反传不可行。
Replayed Back-propagation三阶段:
伪代码: Replayed Back-Propagation for Long-Video Distillation
function ReplayedBackpropDistillation(student_G, teacher_G, critic, noise_seq):
# Stage (a): 全序列前向rollout, 无梯度
with no_grad():
x_hat[0:L] = stop_grad(student_G(noise_seq[0:L]))
# Stage (b): 缓存score差异
delta_s[0:L] = s_data(x_hat[0:L]) - s_gen(x_hat[0:L])
# s_data: frozen real score model
# s_gen: fine-tuned fake score model
# Stage (c): 逐block重放反传
accumulated_grad = 0
for block_l in range(1, L+1):
with autograd_enabled():
# 重新运行单个block的student前向
x_l = student_G.forward_single_block(
noise_seq[l],
context=detached_history # 之前生成的context, 已detach
)
# 用缓存的score差异做反传
grad_l = -delta_s[l] * (d x_l / d theta)
accumulated_grad += grad_l
# 立即释放该block的计算图 !!!
free_computation_graph(block_l)
# 一次性更新参数
optimizer.step(accumulated_grad)核心优势: 峰值GPU显存从完整rollout级别降至单block级别, 使20秒长视频蒸馏变得可行。
Replayed BP的梯度近似:
蒸馏课程
- 5秒rollout: 250 iterations (5秒teacher)
- 10秒rollout: 150 iterations (10秒teacher)
- 20秒rollout: 150 iterations (20秒teacher)
3.5 运行时优化
| 优化手段 | 效果 |
|---|---|
torch.compile | 减少kernel launch开销 (RMSNorm, RoPE, 调制层) |
| KV cache (FP8 E4M3) | 显存减半, 降低传输时间 |
| FlashAttention v3 (FP8 kernels) | NVIDIA Hopper GPU上加速注意力 |
| 手动算子融合与reflow | 进一步减少PyTorch开销 |
| 序列/上下文并行 + 张量并行 | 跨4个H100 GPU分片计算和KV cache |
并行策略: 线性层和cross-attention按序列维度并行, 自注意力按注意力头并行 (张量并行)。通过NCCL All-to-All 操作在两种并行方案间切换。
伪代码: Runtime Parallelization
function InferenceStep(input_block, kv_cache):
# 序列并行: 线性层和cross-attention
# 每个GPU处理序列的一部分
x_local = scatter_sequence(input_block, num_gpus=4)
for layer in dit_layers:
# 线性投影 (序列并行)
Q_local, K_local, V_local = layer.qkv_proj(x_local)
# All-to-All: 序列并行 -> 张量并行
# scatter heads, gather sequence
Q_full, K_full, V_full = all_to_all(Q_local, K_local, V_local)
# 自注意力 (张量并行, 每GPU只存部分head的KV cache)
attn_out = flash_attention_v3_fp8(Q_full, K_full, V_full, kv_cache)
# All-to-All: 张量并行 -> 序列并行
x_local = all_to_all_reverse(attn_out)
# Cross-attention + FFN (序列并行)
x_local = layer.cross_attn(x_local, text_emb)
x_local = layer.ffn(x_local)
return gather_sequence(x_local)4. Experimental Setup (实验设置)
4.1 训练配置
| 配置项 | 值 |
|---|---|
| 模型参数量 | 14B |
| 基础模型 | Wan-2.1 14B |
| 训练硬件 | 32x H100 GPU (80GB) |
| 训练数据 | 350个UE场景, 约1600分钟 |
| 输出分辨率 | |
| 输出帧率 | 16 FPS |
| 最大生成时长 | 20秒 (317帧) |
| 去噪步数 | 4步 (DMD蒸馏后) |
| 推理硬件 | 4x H100 GPU |
| 并行策略 | FSDP + 序列并行 + 张量并行 |
| ST-VAE | 替换为Tiny VAE (MotionStream) |
| KV cache精度 | FP8 E4M3 |
4.2 评测设置
测试集: 220张Adobe Stock图片 (风景、城市、室内、卡通、矢量艺术、油画等), 随机分为11组
对比方法:
- Matrix-Game 2.0 (He et al., 2025): 开源, 2.7B参数
- Hunyuan-GameCraft (Li et al., 2025a): 开源
评测维度:
- 视觉质量: VBench指标 — Subject Consistency, Background Consistency, Motion Smoothness, Dynamic Degree, Aesthetic Quality, Imaging Quality 的平均分
- 动作准确性: 使用ViPE重建相机轨迹, Sim(3) Umeyama对齐后计算 RPE-trans 和 RPE-rot (Relative Pose Error)
5. Experimental Results (实验结果)
5.1 定量结果
Table 2: 20秒视频定量对比
| 模型 | Average Score | Image Quality | Aesthetic | RPE-trans | RPE-rot |
|---|---|---|---|---|---|
| Matrix-Game 2.0 | 0.7447 | 0.6551 | 0.4931 | 0.1122 | 1.48 |
| Hunyuan-GameCraft | 0.7885 | 0.6737 | 0.5874 | 0.1149 | 1.23 |
| RELIC (ours) | 0.8015 | 0.6665 | 0.5967 | 0.0906 | 1.00 |
关键数值:
- 视觉质量综合分 0.8015, 超过两个baseline
- 动作跟随精度: RPE-trans 0.0906 (最低), RPE-rot 1.00 (最低)
- 虽然分辨率仅480p, Image Quality接近720p训练的Hunyuan-GameCraft
5.2 与现有世界模型综合对比 (Table 1)
| 特性 | The Matrix | Genie-2 | GameCraft | Yume | Yan | Matrix-Game 2.0 | Genie-3 | RELIC |
|---|---|---|---|---|---|---|---|---|
| 数据源 | AAA Games | Unknown | AAA Games | Sekai | 3D game | Minecraft+UE+Sekai | Unknown | UE |
| 动作空间 | 4T4R | 5T4R2E | 4T4R | 4T4R | 7T2R | 4T | 5T4R1E | 6T6R |
| 分辨率 | 720x1280 | 720x1280 | 720x1280 | 544x960 | 1080x1920 | 352x640 | 704x1280 | 480x832 |
| 速度 | 8-16 FPS | Unknown | 24 FPS | 16 FPS | 60 FPS | 25 FPS | 24 FPS | 16 FPS |
| 时长 | Infinite | 10-20s | 1 min | 20 sec | Infinite | 1 min | 1 min | 20 sec |
| 泛化性 | 低 | 中 | 低 | 中低 | 中低 | 中 | 中高 | 中高 |
| 记忆 | None | None | None | None | None | None | None | 有 |
RELIC的独特优势: 唯一同时具备空间记忆能力和较高泛化性的模型。
5.3 定性结果
Figure 8 解读: 动作控制精度的定性对比。上排 (Tilt Up): Hunyuan-GameCraft错误地向左平移, Matrix-Game 2.0虽然大致跟随但顶部出现黑色区域, RELIC准确地上仰并生成新内容。下排 (Truck Left): Hunyuan-GameCraft表现为Pan Left (旋转), Matrix-Game 2.0几乎静止, RELIC准确执行侧向平移。
Figure 9 解读: 空间记忆定性对比。测试场景: 输入图片 → 1秒Rotate Up → 9秒Rotate Down → 12秒Rotate Left → 20秒Rotate Right。Hunyuan-GameCraft在相机回转时遗忘了右侧的长椅, Matrix-Game 2.0快速丢失输入图片的上下文。RELIC在20秒后仍能一致地恢复之前观察到的场景内容。

Figure 7 解读: (a) 风格泛化: RELIC能从油画、漫画插画、矢量艺术、低多边形渲染等多种风格的单张图片出发进行探索, 展现出强3D理解能力 (远处物体运动慢, 近处快)。(b) 可调速度: 通过位移系数 控制探索速度, 展示了 vel=1.0/2.0/3.0 三个档位, 均保持高质量输出。(c) 多键控制: 支持平移+旋转的复合输入。
Figure 10 解读: 与商业产品Marble (World Labs) 的对比。Marble基于Gaussian Splatting渲染, 不可避免地产生Gaussian floaters等伪影。RELIC基于视频生成, 输出干净无伪影。
5.4 局限性
- 生成多样性有限: 训练数据主要为静态UE场景, 缺乏动态物体
- 最大时长20秒: 难以生成分钟级超长视频
- 资源需求高: 14B模型 + KV cache + 多步去噪, 在资源受限环境下推理延迟较大
6. 源代码与Paper映射
| Paper组件 | 描述 | 源代码状态 |
|---|---|---|
| ST-VAE (3D Causal VAE) | 空间 + 时间压缩 | 基于Wan-2.1开源VAE |
| DiT Backbone | 14B参数Diffusion Transformer | 基于Wan-2.1 14B |
| Action Encoder | 13-DoF动作 → 时间patchify + MLP调制 | 暂未开源 |
| Camera Encoder | 6-DoF位姿 → Q,K投影偏置 | 暂未开源 |
| Memory Compression | 交替 空间下采样KV cache | 暂未开源 |
| Replayed Back-prop | 三阶段DMD蒸馏 | 暂未开源 |
| Runtime Optimization | torch.compile + FP8 + FlashAttn v3 + 并行 | 暂未开源 |
| Tiny VAE | 替代原始VAE加速解码 (来自MotionStream) | 参考MotionStream |
| YaRN RoPE | 位置编码外推 | 参考Peng et al., 2023 |
注: 截至2026年3月, RELIC源代码暂未公开发布。项目页面 https://relic-worldmodel.github.io/ 仅提供演示视频和论文链接。