GimbalDiffusion: Gravity-Aware Camera Control for Video Generation¶
会议: ECCV2026
论文: ECCV 原文
项目: https://lvsn.github.io/GimbalDiffusion/
领域: 视频生成
关键词: 重力对齐、绝对相机控制、全景视频、极端旋转、null-pitch conditioning
一句话总结¶
GimbalDiffusion 用重力对齐的全景视频构造极端视角训练样本,再用水平视角生成文本描述以减轻文本与角度的纠缠,使 WAN 2.2 5B 在 SpatialVID-extreme 上的 PitchErr 从无 null-pitch 时的 14.39° 降至 8.36°,但并非所有视觉质量指标都随之改善。
研究背景与动机¶
文本到视频模型已经能合成细节丰富的场景,但“画得像”不等于“镜头听指挥”。 电影镜头不仅需要向前移动,还可能仰望天空、俯视地面、绕光轴翻滚,甚至完成整圈旋转。 AC3D 等方法虽然接收相机轨迹,通常却把第一帧设为相对坐标原点。 这样能表达后续如何转动,却不能唯一说明第一帧相对于真实地面的朝向。 如果第一帧本来就向上看,仅有相对变换并不能把这种状态告诉模型。 与此同时,人类拍摄视频大多接近水平视角,训练数据本身缺少大幅俯仰和横滚。
引入重力参照和更多旋转样本仍然不够,因为文本也在暗中规定视角。 如果直接给俯视草地的视频写描述,描述往往只包含草地;模型容易把“草地”学成“向下看”的捷径。 当用户给出包含草地、树木和天空的场景描述,却要求镜头朝上时,文本与相机条件便可能争夺构图。 正确结果应只显示该视角真正能看到的内容,而不是强行把描述中的每个物体都塞进画面。 这也是为什么普通文本相似度分数不能独立衡量这种任务的成功。
本文利用同一段 360° 视频提供不同方向的真实动态内容,分别构造用于监督的旋转裁剪和用于描述的水平裁剪。 前者覆盖极端视角,后者减少文本携带的俯仰与横滚暗示,两者通过同一全景场景保持联系。 这里“绝对”特指重力对齐后的俯仰和横滚;重力无法确定罗盘式的绝对航向。 核心 idea:将场景描述与实际取景角度分开监督,让文本说明场景是什么,让重力对齐的相机条件决定镜头能看见什么。
方法详解¶
整体框架¶
训练输入是 360° 全景视频,系统先估计原始相机运动与重力方向,再随机采样旋转和视场角,投影出普通透视视频。 实际旋转裁剪作为生成监督,去掉俯仰和横滚的裁剪用于生成文本,相机参数则通过 UCPE 或 Plücker 编码注入视频模型。 推理时只需场景文本、逐帧相机内参与重力对齐的外参,不需要用户提供全景视频或先生成一张参考图。 因此,全景视频是训练数据来源,而不是推理时先生成全景再裁剪的中间产物。 四个关键设计依次是重力标定、轨迹采样、null-pitch 描述和相机条件注入。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["训练:全景视频"] --> B["重力标定"]
B --> C["轨迹采样"]
C --> D["null-pitch 描述"]
D -->|训练文本| E["相机条件注入"]
C -->|目标视频监督与相机条件| E
P["推理:文本与绝对相机"] -->|推理条件| E
E --> F["生成透视视频"]
关键设计¶
1. 重力标定:给跨视频共享的“上下”建立参照
每段全景视频先被展开成前、后、左、右、上、下六个透视方向,交给 ViPE 估计相机运动。 这些估计仍处在任意参考系中,因此首先取相对于首帧的运动,而不是把估计坐标直接当成物理世界坐标。 按原文式 (3),相对位姿由下式得到:
其中 \(f\) 是帧索引,\(\mathbf{E}_{\mathrm{SfM},f}\) 是估计的相机位姿;首帧参考消除了每个序列任意的起始变换。 为了确定物理意义上的上方向,再从首帧全景沿航向均匀取八个 90° 视场角透视图。 Perspective Fields 分别预测其上方向,系统把这些向量转回同一零航向参考后求平均。 多个方向的观测使重力估计不必完全依赖某一个裁剪是否含有清晰地平线或竖直结构。 随后把相对运动、估计的重力与采样的旋转组合,得到重力对齐的逐帧相机外参,并令序列初始航向为零。
这一设定允许后续航向发生变化,不应理解为整段视频都不能左右转头。 它也不提供地理位置或全球统一的北向,只让不同视频里的俯仰和横滚具有一致含义。 平移随坐标对齐一并处理,但新增的平移运动仍来自原始视频,而不是球面裁剪凭空生成。 缓存中的式 (4) 排版损坏,完整旋转组合顺序无法可靠复原;这里仅解释正文确认的操作,不猜写精确矩阵公式。
2. 轨迹采样:从同一动态全景得到大量极端镜头
系统先随机确定初始方向,再在整个片段上组合若干绕随机三维轴的平滑旋转。 算法 1 中初始 pitch 和 roll 均取自 \([-90^\circ,90^\circ]\),yaw 取自 \([0^\circ,360^\circ]\)。 附加旋转轴数量写为 \(N\in\{0,1,2,3\}\),因此也包含没有额外旋转的样本。 正文则称采样 1 到 3 个附加旋转,与算法存在小差异;此处保留算法的取值,不把两种说法强行合并。 每个附加旋转都有随机的起止时间、旋转轴和幅度,再通过三次样条平滑地分配到各帧。 最大转角按 \(\operatorname{Beta}(1.0,5.0)\cdot720^\circ\cdot d_t\) 采样,\(d_t\) 为归一化持续时间。 这既覆盖较常见的小运动,也保留大角度旋转的训练机会,并不是要求所有样本旋转 720°。
视场角独立采用 1、2 或 3 个关键帧,在 35° 到 100° 间采样,再用带随机端点导数的三次样条插值。 因此,同一原始片段可以变成仰拍、俯拍、翻滚或伴随视场角变化的透视视频。 由于全景帧本身包含动态对象,这些样本不是仅依靠静态单图点云推演出的新视角。 不过,“全方向覆盖”不等于球面面积上的均匀分布:作者说明其采样略偏向两极,并认为这有助于极端视角稳定性。 原始相机的平移轨迹继续保留,所以旋转增强丰富不代表任意平移增强也已经解决。
3. null-pitch 描述:改变描述对象,而不是改变生成目标
对同一采样轨迹,系统额外生成一组 pitch 和 roll 都为 0°、yaw 不变且视场角为 90° 的水平裁剪。 InternVL-3-2B 读取这组裁剪的六个均匀时间采样帧,产生训练文本。 真正参与扩散或流训练损失的仍是原始旋转裁剪,不能把水平裁剪误当成生成目标。 这让模型经常看到“描述提供周围场景,但目标画面只覆盖一个特殊方向”的训练配对。 于是模型必须利用明确的相机条件决定可见内容,而不能仅凭描述中出现了天空还是地面来猜角度。 水平裁剪也不是完整的全景语义清单;它提供的是较少携带俯仰和横滚偏置的场景描述。
全景拍摄还带来特殊污染:正下方可能包含三脚架或握自拍杆的手,而这些物体不会出现在水平描述中。 如果不处理,模型可能把它们学成俯视时应自动出现的普通内容。 作者为此再生成 pitch 为 -90° 的向下裁剪,并用视觉语言模型给出对应描述。 训练时以 50% 概率把该描述追加到 null-pitch 文本;推理时用向下描述作为 classifier-free guidance 的负向提示。 作用是把不希望出现的拍摄设备显式纳入可抑制的文本条件,而不是给视频增加一个后处理修复网络。 作者指出,这一处理对容易拟合训练伪影的全量微调模型尤其有用,但正文没有给出它独立的数值消融。
4. 相机条件注入:沿用已有编码,改变其监督坐标与数据分布
GimbalDiffusion 不是一种全新的相机编码,而是可适配不同骨干和条件机制的数据与训练框架。 UCPE 分支通过额外可训练自注意力层注入相机射线变换,并结合时空 RoPE;纬度和上方向经线性层加入注意力输入。 作者默认采用 UCPE,因为实验上它更能保持平移精度。 另一分支使用每像素六维 Plücker 射线,其中前三维为射线矩,后三维为单位方向:
这里 \(\mathbf{t}_f\) 是世界坐标中的相机中心,\(\mathbf{d}'_{f,u,v}\) 是由内参反投影并旋转到世界坐标后归一化的像素射线。 相同的六维形式既能存相对坐标,也能存重力对齐坐标,关键差别在送入它的位姿定义以及模型是否按该定义训练。 因此,把原本只见过相对相机的 AC3D 在测试时改喂绝对 Plücker 射线,并不能等价替代本文训练。 CogVideoX-2B 分支采用相机编码器和 ControlNet 式并行层,WAN 分支则分别采用全量微调或 UCPE 模块训练。 不同配置既改变骨干也改变可训练参数范围,结果比较必须按原表分组解读。 缓存中 UCPE 的式 (1)、(2) 同样提取损坏,因此不把缺失算子补写成可直接实现的注意力公式。
一个完整示例¶
以“森林里有一条土路,周围是树木和蓝天”为例,要求生成镜头固定向上的视频;这是对机制的示意,不是新增实验。 训练时,相似全景场景的水平裁剪可能描述道路和树林,而原始随机裁剪可以在 +90° 朝上,画面主要是树冠与天空。 模型同时接收到场景文本、重力对齐的向上相机和对应目标视频,因而学习到道路并非必须出现在每个视角。 推理时用户仍给普通森林描述,但提供 +90° 相机条件,模型应把镜头方向置于逐项呈现所有文本物体之前。 若改成 -90°,预期内容变为地面;若再加入 roll,画面应随相机绕光轴旋转,而不是让场景自行“扶正”。 向下负向提示则用于抑制自拍杆等拍摄伪影,与森林场景内容的正向描述承担不同作用。
损失函数 / 训练策略¶
训练数据取自 PanoVid 的 YouTube 子集,过滤最短边不足 900 像素的视频,并去除位姿估计失败或平均加速度异常的片段。 原文 §4.1 报告由 7797 段筛为 4798 段,约剔除 38%。 每轮在线生成 49 帧、720 × 480 或兼容骨干的相近分辨率样本,重新采样轨迹并生成描述。 文本长度还在短、中、长之间随机选择,避免条件训练只依赖固定描述风格。 方法沿用所选骨干的 diffusion 或 flow loss;新意是训练配对和条件定义,不是新增一个重力误差损失。 正文没有给出统一适用于全部骨干的学习率、训练步数或完整损失展开,不能据此补造实现参数。 AC3D 的 ControlNet 路径描述为复制 8 层、仅作用于前 40% 去噪步骤;WAN 2.2 5B 版本使用较小的相机编码器以减少参数。 这些是不同实现配置的说明,不应合并成所有版本都共享的单一架构。
实验关键数据¶
主实验¶
来源:原文表 1,第 12 页;下表摘取 SpatialVID-extreme 的匹配骨干比较,全部条目均支持动态场景。 该基准从 SpatialVID-HQ 的 371K 片段中挑选 138 段,按 10° 俯仰区间覆盖 -85° 到 +85°,再通过图像变换加入 -40° 到 40° 的随机横滚轨迹。 测试条件保留 ViPE 平移并归一化最大平移幅度为单位长度,却重新采样旋转,所以不是要求逐像素复现原视频。 PitchErr 为俯仰角误差;GravityErr 为相机坐标中目标上方向与生成帧估计上方向的夹角;两者由 Perspective Fields 估计。 RotErr 通过 VGGT 估计相对旋转误差,三种角度误差均以度计;TransErr 比较归一化后的平移轨迹,不是米制距离。 CLIP 越高越好,角度误差、TransErr、FID 和 FVD 越低越好。
| 骨干与条件 | 方法 | PitchErr ↓ | GravityErr ↓ | RotErr ↓ | TransErr ↓ | CLIP ↑ | FID ↓ | FVD ↓ |
|---|---|---|---|---|---|---|---|---|
| CogVideoX-2B / Plücker | AC3D + cam. text. | 39.09 | 44.13 | 29.27 | 0.62 | 23.1 | 113.0 | 984.1 |
| CogVideoX-2B / Plücker | 本文 | 21.19 | 24.84 | 18.48 | 0.68 | 21.1 | 110.9 | 915.7 |
| WAN 2.1 1.3B / Plücker | PreciseCam + WAN-I2V-CC | 29.16 | 33.48 | 24.54 | 0.62 | 22.3 | 109.2 | 776.3 |
| WAN 2.1 1.3B / Plücker | 本文 | 10.50 | 13.05 | 25.84 | 0.68 | 20.5 | 114.7 | 1041.6 |
| WAN 2.1 1.3B / UCPE | UCPE | 16.25 | 18.88 | 18.38 | 0.44 | 22.5 | 110.7 | 957.9 |
| WAN 2.1 1.3B / UCPE | 本文 | 13.98 | 17.16 | 12.12 | 0.46 | 21.2 | 112.5 | 978.1 |
同为 WAN 2.1 1.3B / UCPE,本文 RotErr 为 12.12°,原 UCPE 为 18.38°,但 TransErr 从 0.44 变为 0.46。 WAN 2.1 的 Plücker 分支大幅改善绝对朝向,却比 PreciseCam + WAN 的 FVD 更差,不能概括为画质全面提升。 表 1 另列 PreciseCam + GEN3C,但它只支持静态场景的新视角合成,不应与动态场景能力等同。
消融实验¶
来源仍为原文表 1,第 12 页;两组消融使用不同骨干和训练方式,比较必须限制在各自组内。 “去除 null-pitch”指改用实际旋转目标视频生成描述;“去除绝对旋转”指把相机重新变成首帧相对位姿。
| 骨干与条件 | 配置 | PitchErr ↓ | GravityErr ↓ | RotErr ↓ | TransErr ↓ | CLIP ↑ | FID ↓ | FVD ↓ |
|---|---|---|---|---|---|---|---|---|
| WAN 2.2 5B / Plücker | 去除 null-pitch | 14.39 | 16.36 | 17.26 | 0.74 | 22.0 | 110.6 | 895.2 |
| WAN 2.2 5B / Plücker | 完整模型 | 8.36 | 10.54 | 15.05 | 0.74 | 20.6 | 116.0 | 1014.4 |
| WAN 2.1 1.3B / UCPE | 去除 null-pitch | 18.92 | 21.96 | 11.21 | 0.47 | 22.6 | 110.6 | 979.2 |
| WAN 2.1 1.3B / UCPE | 去除绝对旋转 | 50.62 | 56.18 | 14.35 | 0.53 | 21.7 | 108.9 | 862.4 |
| WAN 2.1 1.3B / UCPE | 完整模型 | 13.98 | 17.16 | 12.12 | 0.46 | 21.2 | 112.5 | 978.1 |
关键发现¶
- 绝对参照不是可有可无的附加信号:去除它后,UCPE 分支的 PitchErr 从 13.98° 升至 50.62°,原文 §4.5 报告约为 3.62 倍。
- null-pitch 改善绝对角度,不保证每个旋转指标都提高:UCPE 分支的 RotErr 在去除它时为 11.21°,完整模型为 12.12°。
- 第二基准见 §4.6、第 14 页和图 6、第 15 页:20 个 PolyHaven 全景各测试从 -90° 到 +90°、步长 10° 的静态俯仰,共 380 个文本与角度配对。
- 图 6 的改进版 CLIP 用每个目标角度真实裁剪的描述作参照,而非始终使用输入的水平描述;曲线支持极端俯仰下解纠缠的效果,但缓存没有可精确转录的逐角度数值。
亮点与洞察¶
- 真正可复用的是“控制变量与描述来源解耦”的训练配对方式。换一个参考裁剪来写描述,就能改变模型利用语义猜相机的捷径,无需发明新损失。
- 重力提供的归纳偏置很具体:明确什么是上、什么是下。它解决的是坐标歧义,不是让视频模型自动具备完整物理模拟能力。
- 在线全景裁剪把相同场景变成大量镜头条件,增加的是视角分布而非独立场景数量。这一区别有助于理解数据增强的收益与泛化边界。
局限与展望¶
- 作者明确指出,当前增强只自由改变旋转,平移仍沿用源视频;可探索用 3D Gaussian Splatting 等新视角合成方法扩展平移,但本文未完成该方案。
- 作者也承认生成视频仍有形变伪影,图 5 的 Tokyo Skytree 是其给出的例子;更准的相机朝向不意味着更准的场景几何。
- 从评测设计看,绝对朝向依赖 Perspective Fields,运动依赖 VGGT,训练标注又依赖 ViPE 和重力估计,因此表中误差不是传感器真值上的纯生成误差。
- 138 段极端视频和 20 个全景提供针对性诊断,但不足以证明所有场景、长视频或任意平移都可靠;这是对证据范围的判断,而非作者额外报告的失败实验。
- 复现边界包括损坏的式 (1)、(2)、(4) 和算法 1 的数量描述差异;笔记没有把未提供的补充材料细节或图中曲线读数当成已核验事实。
相关工作与启发¶
- 对比 AC3D:AC3D 的相机控制主要基于首帧相对坐标,本文让 Plücker 条件具有重力对齐语义,并用相应数据重新训练;改变输入坐标而不训练不足以获得同样能力。
- 对比 UCPE:UCPE 本身已经编码纬度和上方向,本文不能被理解为首次给 UCPE 加重力;增量在于更丰富的轨迹生成与 null-pitch 训练配对。
- 对比 PreciseCam + WAN / GEN3C:先控制首帧再延展视频可改善部分视觉指标,但本文直接对整段文本到视频过程施加绝对相机条件;GEN3C 还受静态场景约束。
- 研究启发:可以进一步测试仅改变 caption 来源、保持场景与轨迹完全一致时,其他控制任务是否也能减少语义捷径;这是读者提出的实验方向,不是本文已验证的结论。
评分¶
- 新颖性: 4/5。重力对齐、全景增强与描述解纠缠的组合明确,贡献主要位于数据和条件设计。
- 实验充分度: 4/5。覆盖多骨干、两类编码与两个针对性基准,但评测规模和估计器依赖仍有限制。
- 写作质量: 4/5。核心矛盾和消融清晰,不过算法与正文数量表述不完全一致,缓存公式另有提取损坏。
- 价值: 4/5。适合研究精细镜头控制和控制条件冲突,但实际部署仍需同时评估视觉质量与平移能力。