SCoPE: Sightline-Coordinate Positional Encoding for Video Diffusion Transformers

论文信息: arXiv:2606.27345v3 [cs.CV], 12 Aug 2026, Minghao Yin et al., 香港大学 / 香港科技大学 / 腾讯 ARC Lab

Link: arXiv:2606.27345 | Project Page


核心问题是什么?

目的

实现视频扩散模型 (Video DiT) 的精确相机轨迹控制,让生成的视频严格按照用户指定的相机轨迹运动。

现有方法及局限性

方法类型代表方法局限性
Adapter方法CameraCtrl, ControlNet额外模块,增加序列长度
渲染条件GS-DiT, Diffusion as Shader需要重建代理场景
拼接tokenReCamMaster, CAVIA依赖原生attention自动发现对应
潜空间操作Go-with-the-Flow正交路线,可结合
相机感知PEGTA, UCPE, ReRoPE, ViewRoPE几何信息乘性作用于content,无纯几何项

核心问题

  • 现有Video DiT使用 (u,v,t) 像素-时间网格索引,是张量地址而非世界地址
  • 两个token可能拍摄同一3D点,但位置编码只反映网格偏移,无法建立3D对应
  • 相机控制被当作附加信号而非坐标系属性

现有相机PE的问题

  1. Frame-level变换:同帧所有token几何相同,无法区分token
  2. Direction-only编码:对平移不敏感,丢失视差信息
  3. 乘性应用:几何完全通过content路由,注意力分数中没有纯射线项

本文方法

提出 SCoPE (Sightline-Coordinate Positional Encoding)

  1. 射线作为第二坐标:每个token的相机射线作为第二个位置坐标
  2. Plücker Flip PE:将Plücker射线加性注入query和key
  3. Normalize-Gate-Inject (NGI):处理不同数据集的尺度异构性

效果

指标Wan2.2 5BWan2.2 14B
RotErr↓0.085 (vs 0.113 UCPE)0.058 (vs 0.082 UCPE)
TransErr↓0.751 (vs 0.856 UCPE)0.517 (vs 0.693 UCPE)
FVD↓543 (vs 703 UCPE)280 (vs 529 UCPE)
FID↓57.8 (vs 61.5 UCPE)41.0 (vs 54.8 UCPE)

14B模型提升:旋转误差↓29%,FVD↓43%


核心贡献是什么?

核心创新:加性注入(而非乘性)使注意力分数中自然出现纯几何项(ray-ray),这是乘性方法无法产生的。

  1. 加性注入机制 ⭐ 核心创新

    • 现有方法:乘性作用于q/k/v(GTA, UCPE, ViewRoPE)
    • SCoPE:加性注入到q/k,保持RoPE不变
    • 效果:注意力分数分解为4项,产生纯几何项(ray-ray)
    • 理论:加性注入 → <q,k> 展开 → ray-ray项 = Plücker互积
  2. 理论分析:注意力分数分解

    <q, k> = (A) content-content      ← 原始注意力
           + (D) ray-ray               ← 纯几何项 (SCoPE独有)
    
    • (D) 的规范形式 = Plücker互积 = d_i·m_j + d_j·m_i

    • Q/K Flip使对称配置对应标准Plücker互积形式

    • 消融实验:移除(D)后旋转误差几乎翻倍

       + (B) content → ray         ← 混合项
       + (C) ray → content         ← 混合项
      
  3. Normalize-Gate-Inject (NGI)

    • 方向/幅度解耦:尺度不变的方向 + 显式log幅度
    • 尺度感知门控:根据moment幅度自适应调整注入强度
    • 匹配归一化:与content分支的QKNorm对齐
    • 处理不同数据集的尺度异构性(SfM归一化、度量单位等)

    NGI 详细解释:NGI 是几何信号注入到 attention q/k 时的预处理+注入模块,解决核心问题:几何数据的尺度和方向差异很大,直接注入不稳定

    • 方向/幅度解耦:Plücker 坐标同时编码射线方向(单位向量)和位置(moment 向量,有幅度信息)。方向部分做归一化使其尺度不变,幅度部分单独用 log 表示。这样模型不会因 SfM 重建的坐标系不同(有的归一化到 [-1,1],有的用真实米制单位)而学到错误的尺度偏好。
    • 尺度感知门控:用可学习的 gate 根据 moment 向量的幅度大小,自适应决定"注入多少几何信息"——幅度大则几何信号强、多注入;幅度小则几何信号弱、少注入。类似于一个 attention 级别的"音量旋钮"。
    • 匹配归一化:content 分支(原始 q/k)用了 QKNorm(RMSNorm),几何注入分支也要做对应归一化,否则两个分支数值尺度不匹配,加性注入时会产生数值问题。
    • 尺度异构性处理:不同数据集的 3D 坐标尺度差异巨大(室内 vs 室外场景,归一化方式不同),NGI 的设计让模型对这种尺度变化具有鲁棒性。
  4. 零初始化 + 轻量级

    • 零初始化:从精确预训练DiT状态开始训练
    • 保持RoPE bit-exact不变
    • 仅增加 <0.1% 参数
    • 无额外attention或adapter分支

:Plücker坐标表示射线本身不是创新(经典线几何,UCPE已使用),创新在于如何将其注入到attention中

为什么是加性注入?三种方式对比

方式公式展开结果4项完整性
加性 (SCoPE)q' = q + E·r<q,k> + <q,r> + <r,k> + <r,r>✅ 全部4项
Concatq' = [q; r]<q,k> + <r,r>❌ 缺少(B)(C)交叉项
乘性 (UCPE)q' = M(r)·qq^T·M^T·M·k❌ 无纯射线项
加性注入:
  q' = q + E·r,  k' = k + E·r
  
  <q', k'> = <q + E·r, k + E·r>
           = <q,k> + <q, E·r> + <E·r, k> + <E·r, E·r>
             ─────   ──────────   ──────────   ────────────
             (A)      (B)           (C)           (D)
           纯内容    内容→射线      射线→内容      纯射线 ← 新增!

Concat:
  q' = [q; r],  k' = [k; r]
  
  <q', k'> = <[q;r], [k;r]> = <q,k> + <r,r>
             ─────   ───────
             (A)      (D)
           纯内容   纯射线
           
  → 有纯射线项,但缺少交叉项(B)(C)

乘性:
  q' = M(r)·q,  k' = M(r)·k
  
  <q', k'> = q^T · M(r)^T · M(r) · k
  
  → 每一项都包含content,无法分离出纯射线项

消融实验验证(Table 4):

  • 移除(B)+(C)交叉项:RotErr 0.085 → 0.135 (↑59%),FVD 543 → 695 (↑28%)
  • 结论:交叉项(B)(C)很重要,Concat缺少这两项,效果不如加性

加性注入的优势

  1. 维度不变:Concat维度翻倍,计算量翻倍;加性投影到同维度
  2. 有交叉项:(B)(C)允许内容和几何直接交互
  3. 可学习:E_q, E_k可学习如何将射线映射到content空间

大致方法是什么?

┌─────────────────────────────────────────────────────────────────────┐
│                    SCoPE 方法流程                                     │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  输入: 视频帧 + 相机轨迹 (extrinsics T_t, intrinsics K_t)           │
│                                                                     │
│  Step 1: 计算每token的相机射线                                       │
│  ┌──────────────────────────────────────────────────────────┐      │
│  │  像素坐标 (p_u, p_v) → 相机坐标系射线方向 d_cam           │      │
│  │  d_cam = K^(-1) [p_u, p_v, 1]^T / ||...||               │      │
│  │  世界坐标系: d = R · d_cam, 原点 o = camera position     │      │
│  │  Plücker坐标: r = (d, m), m = o × d (moment)            │      │
│  └──────────────────────────────────────────────────────────┘      │
│                                                                     │
│  Step 2: Normalize-Gate-Inject                                      │
│  ┌──────────────────────────────────────────────────────────┐      │
│  │  方向/幅度解耦: m̂ = m/||m||, s = log||m||               │      │
│  │  7D特征: f = (d, m̂, s)  [尺度不变的前6维 + log幅度]      │      │
│  │  门控: g = σ(G_s(s)) ∈ (0,1)^d                          │      │
│  │  投影+归一化+门控: pe = g ⊙ N(E·f)                       │      │
│  └──────────────────────────────────────────────────────────┘      │
│                                                                     │
│  Step 3: Plücker Flip注入                                           │
│  ┌──────────────────────────────────────────────────────────┐      │
│  │  Query: q = QKNorm(RoPE(W_Q·x)) + α · pe_q              │      │
│  │         pe_q接收 (d, m̂, s)                               │      │
│  │  Key:   k = QKNorm(RoPE(W_K·x)) + α · pe_k              │      │
│  │         pe_k接收 (m̂, d, s)  ← Q/K Flip!                  │      │
│  └──────────────────────────────────────────────────────────┘      │
│                                                                     │
│  Step 4: 注意力分数分解                                              │
│  ┌──────────────────────────────────────────────────────────┐      │
│  │  <q, k> = (A) content-content      ← 原始注意力          │      │
│  │         + (B) content → ray         ← 混合项             │      │
│  │         + (C) ray → content         ← 混合项             │      │
│  │         + (D) ray-ray               ← 纯几何项!          │      │
│  │                                                          │      │
│  │  (D) 的形式 = Plücker互积 = d_i·m_j + d_j·m_i           │      │
│  │      当两射线共面(相交/平行)时为0,否则>0                  │      │
│  └──────────────────────────────────────────────────────────┘      │
│                                                                     │
│  输出: 按指定相机轨迹生成的视频                                       │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

关键数学

Plücker坐标

射线 r = (d, m) ∈ R^6
- d: 方向向量 (单位向量)
- m = o × d: moment (携带平移信息)

约束: d·m = 0, ||d|| > 0

Plücker互积 (Reciprocal Product)

<r_i, r_j>_Pl = d_i·m_j + d_j·m_i = r_i^T · J · r_j

性质:
- 双线性: 关于r_i, r_j分别线性
- 共面判据: = 0 当且仅当两射线共面(相交/平行)
- SE(3)不变: 只依赖相对几何

Q/K Flip的作用

Query接收 (d, m), Key接收 (m, d)

当 E_q = E_k = I 时:
(D) = d_i·m_j + m_i·d_j = <r_i, r_j>_Pl

Flip使得对称配置对应标准Plücker互积

训练

数据集

数据集类型用途
RE10K室内场景主训练+测试
DL3DV大规模场景混合训练
PanShot相机轨迹数据混合训练
OmniWorld多域多模态混合训练

Loss

标准扩散/流匹配损失:

L = E[||predicted_noise - target_noise||²]
或
L = E[||predicted_velocity - target_velocity||²]

训练策略

架构配置: | 参数 | 值 | |------|-----| | 基础模型 | Wan2.2 (5B / 14B) | | 分辨率 | 480×832 | | 帧数 | T=81 (T_z=21 latent) | | 新增参数 | < 0.1% | | 初始化 | 零初始化 (从精确预训练DiT开始) |

关键超参数

  • α: 几何/content平衡系数,初始化为0
  • 门控MLP: 2层,偏置初始化为g≈0.5 at s=0
  • Log-scale增强: δ ~ Uniform(-1.2, 1.6), prob=0.3

实验与结论

主要结果

方法CLIP↑RotErr↓TransErr↓FVD↓
CameraCtrl25.040.1521.292824
ReCamMaster24.970.1311.226874
UCPE25.390.1130.856703
ReRoPE25.200.1371.109685
SCoPE26.050.0850.751543

闭环重访实验

方法Return Trans.↓Return Rot.↓LPIPS Recovery↑
UCPE0.4333.42°0.102
SCoPE0.0901.89°0.587

Return Translation Ratio降低79%,LPIPS Recovery提升475%

消融实验

变体RotErr↓FVD↓说明
Full SCoPE0.085543-
w/o (D) ray-ray0.159733移除纯几何项,性能大降
w/o (B)+(C) mixed0.135695移除混合项,性能下降
w/o NGI0.086560移除归一化门控
w/o Q/K flip0.091580边际影响

关键发现:(D) ray-ray项是最重要的几何组件,移除后旋转误差几乎翻倍


与 HumanVid/CamAnimate (42) 的相机控制对比

维度HumanVid / CamAnimate (42)SCoPE (239)
相机控制思路相机运动轨迹作为外部条件输入模型相机射线作为位置编码的一部分,融入 token 坐标系
相机信息表示相机轨迹参数(SLAM 估计或规则生成),作为条件 token 拼接Plücker 坐标(射线方向 + moment),加性注入 q/k
注入方式类似 ControlNet 思路,相机运动作为条件信号与人体姿态一起送入加性注入 attention 的 query/key,产生纯几何项(ray-ray = Plücker 互积)
位置编码常规 (u,v,t) 像素-时间索引,相机信息是额外条件(u,v,t) 升级为"像素坐标 + 相机射线"双坐标系
模型改动需要额外的条件编码模块仅增加 <0.1% 参数(NGI 模块),保持 RoPE 不变
适用场景人体图像动画(人物为中心)通用视频生成(任意场景)
数据质量要求来源既来自业务场景(人体真实感/恐怖谷效应),也来自算法设计(数据驱动)通过几何先验绕过了算法层面的数据质量依赖

核心区别:HumanVid 把相机轨迹当"遥控器"(外部条件),SCoPE 把相机射线当"坐标系"(位置编码本身)。前者告诉模型"相机怎么动",后者让每个 token 天然知道自己"从哪个方向看世界"。


局限性

Loss

  • 未显式建模深度,射线只确定视线方向,不确定深度
  • 依赖预训练DiT的content理解能力

其他局限

  • 需要已知的相机轨迹作为输入
  • 对于极端大尺度变化可能需要额外的尺度适应

有效

  1. 射线作为坐标系属性:相机控制不再依赖额外模块,而是坐标系的内在属性

  2. 加性注入 vs 乘性变换:保持RoPE不变,零初始化,从精确预训练状态开始

  3. Plücker互积的代数匹配:注意力分数的双线性形式与Plücker互积天然契合

  4. NGI处理尺度异构:方向/幅度解耦 + 门控,适应不同数据集的尺度惯例


局限性

  1. 依赖相机轨迹输入:需要用户提供准确的相机参数

  2. 不建模深度:射线只确定视线,深度由content推断

  3. 乘性方法对比:某些乘性相机PE设计未充分探索


启发

  1. 位置编码的新维度:除了网格索引,可以将几何量(如射线)作为位置坐标

  2. 代数结构匹配:利用Plücker互积与注意力点积的双线性形式匹配

  3. 加性 vs 乘性:加性注入保持预训练平衡,乘性变换可能破坏预训练先验

  4. 尺度不变性设计:对于异构数据,显式解耦尺度相关/无关部分

  5. 零初始化原则:ControlNet思想的延伸,从精确预训练状态开始微调


遗留问题

  1. 如何结合深度估计:射线+深度 = 完整3D坐标,能否直接建模?

  2. 动态场景处理:当前假设静态场景,动态物体如何处理?

  3. 无相机轨迹的相机控制:能否从文本描述推断相机轨迹?

  4. 多相机协同:能否扩展到多相机同时控制?

  5. 与3D生成结合:能否将SCoPE用于3D场景生成(如FlashWorld)?


参考材料