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 核心问题

交互式视频世界模型需要同时满足三个关键需求:

  1. 实时长时序流式生成 (Real-time Long-horizon Streaming): 视频必须以实时延迟响应用户的连续控制输入 (如键盘/鼠标操作)
  2. 一致的空间记忆 (Consistent Spatial Memory): 模型不能遗忘之前观察或生成的场景内容, 当相机回到之前位置时需要恢复一致的画面
  3. 精确的用户控制 (Precise User Control): 准确响应6-DoF相机运动控制

1.2 现有方法的不足

方法类型代表工作局限性
滑窗注意力AR模型GameFactory, LongLive有限的上下文窗口, 无法进行长程记忆检索
外部记忆库Context as Memory, WorldMem手工设计的检索启发式, 难以端到端优化
显式3D表示Gen3C, Marble (World Labs)依赖重建精度, 引入强归纳偏置, 运行时成本高
循环模型更新Vid2World受限于内部状态容量, 针对特定视觉域
短上下文teacher蒸馏Self-Forcing, APT-25秒teacher窗口不足以学习长程记忆和大视角变化

核心矛盾: 长期空间记忆需要大量额外计算和GPU显存来存储、传输和推理历史token, 这与实时性需求直接冲突。


2. Idea (核心思想)

2.1 核心思路

RELIC提出一个统一框架, 通过以下三个关键创新同时解决实时性、记忆和控制三大挑战:

  1. 压缩历史latent作为长期记忆: 将自回归模型的记忆表示为高度压缩的历史latent token, 编码相对动作和绝对相机位姿, 存储在KV cache中。通过空间下采样 (, , 交替) 将token总量从约120K压缩至约30K (压缩), 实现隐式3D场景内容检索
  2. 20秒长时序双向teacher: 将原始5秒训练窗口的双向teacher模型微调至20秒, 使其能够生成跨越大视角变化的长序列, 为student提供完整长程监督
  3. 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调制层 ( 时间压缩):

  1. 相对动作 : 编码后直接加到自注意力之后的latent上
    • 引导帧间场景转换, 与用户控制保持一致
  2. 绝对相机位姿 : 编码后加到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训练

课程学习策略:

  1. 5秒视频: 5,000 iterations
  2. 10秒视频: 1,000 iterations
  3. 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 output

3.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的梯度近似:

蒸馏课程

  1. 5秒rollout: 250 iterations (5秒teacher)
  2. 10秒rollout: 150 iterations (10秒teacher)
  3. 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): 开源

评测维度:

  1. 视觉质量: VBench指标 — Subject Consistency, Background Consistency, Motion Smoothness, Dynamic Degree, Aesthetic Quality, Imaging Quality 的平均分
  2. 动作准确性: 使用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.00.74470.65510.49310.11221.48
Hunyuan-GameCraft0.78850.67370.58740.11491.23
RELIC (ours)0.80150.66650.59670.09061.00

关键数值:

  • 视觉质量综合分 0.8015, 超过两个baseline
  • 动作跟随精度: RPE-trans 0.0906 (最低), RPE-rot 1.00 (最低)
  • 虽然分辨率仅480p, Image Quality接近720p训练的Hunyuan-GameCraft

5.2 与现有世界模型综合对比 (Table 1)

特性The MatrixGenie-2GameCraftYumeYanMatrix-Game 2.0Genie-3RELIC
数据源AAA GamesUnknownAAA GamesSekai3D gameMinecraft+UE+SekaiUnknownUE
动作空间4T4R5T4R2E4T4R4T4R7T2R4T5T4R1E6T6R
分辨率720x1280720x1280720x1280544x9601080x1920352x640704x1280480x832
速度8-16 FPSUnknown24 FPS16 FPS60 FPS25 FPS24 FPS16 FPS
时长Infinite10-20s1 min20 secInfinite1 min1 min20 sec
泛化性中低中低中高中高
记忆NoneNoneNoneNoneNoneNoneNone

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 局限性

  1. 生成多样性有限: 训练数据主要为静态UE场景, 缺乏动态物体
  2. 最大时长20秒: 难以生成分钟级超长视频
  3. 资源需求高: 14B模型 + KV cache + 多步去噪, 在资源受限环境下推理延迟较大

6. 源代码与Paper映射

Paper组件描述源代码状态
ST-VAE (3D Causal VAE) 空间 + 时间压缩基于Wan-2.1开源VAE
DiT Backbone14B参数Diffusion Transformer基于Wan-2.1 14B
Action Encoder13-DoF动作 时间patchify + MLP调制暂未开源
Camera Encoder6-DoF位姿 Q,K投影偏置暂未开源
Memory Compression交替 空间下采样KV cache暂未开源
Replayed Back-prop三阶段DMD蒸馏暂未开源
Runtime Optimizationtorch.compile + FP8 + FlashAttn v3 + 并行暂未开源
Tiny VAE替代原始VAE加速解码 (来自MotionStream)参考MotionStream
YaRN RoPE位置编码外推参考Peng et al., 2023

: 截至2026年3月, RELIC源代码暂未公开发布。项目页面 https://relic-worldmodel.github.io/ 仅提供演示视频和论文链接。