Journal

CamP: Camera Preconditioning for Neural Radiance Fields

Keunhong Park, Philipp Henzler, Ben Mildenhall, Jonathan T. Barron, Ricardo Martin-Brualla

Google Research

一句话总结

CamP 通过一个”投影代理问题”为每台相机计算 ZCA 白化式预条件矩阵,在联合优化相机参数与 NeRF 时对相机参数做去相关与幅度归一化,显著改善了相机-场景联合重建的病态优化问题。

研究背景

  • 领域现状:NeRF 能重建高保真三维场景,但强依赖准确的相机内外参,通常靠 COLMAP 等 SfM 预处理得到。SfM 在稀疏视角、宽基线时脆弱,且很少给出完美估计,参数不准会导致渲染模糊。已有工作提出把相机参数与 NeRF 联合优化,并用 coarse-to-fine(如 BARF 对位置编码高频加窗、NGP 对高分辨率层降权)缓解局部极小。
  • 核心痛点:联合优化是病态问题、易陷局部极小。一个被长期忽视的关键因素是相机参数化的选择:不同参数(如焦距用像素单位、平移用世界单位)对图像投影的敏感度差异巨大,且参数之间高度相关。这导致梯度下降时学习率难以取舍,即便 Adam 也只是把各参数更新幅度拉到相近,反而抹掉了”焦距该更新得更多、平移该更新得更少”这类应有的差异。
  • 本文 idea:不去直接分析复杂的 NeRF 优化动力学,而是用”相机参数如何影响场景点投影”这个简化的代理问题,度量各参数对投影的敏感度与相关性,据此构造一个预条件矩阵,把相机参数变换到一个各方向影响归一化、彼此去相关的空间中再做优化。

方法

整体框架:对每台相机,在其视锥内随机采样一批三维点,计算这些点的二维投影关于相机参数的雅可比,得到一个刻画”参数敏感度与相关性”的协方差矩阵;对它取逆矩阵平方根(ZCA 白化)作为预条件矩阵 \(\boldsymbol{P}^{-1}\)。优化时不直接优化原始相机参数,而是优化隐式的预条件参数,每次算损失前用 \(\boldsymbol{P}^{-1}\) 映射回真实相机参数喂给 NeRF。

flowchart LR
  A["视锥内采样场景点"] --> B["投影代理 Π 关于参数求雅可比"]
  B --> C["协方差 ΣΠ = JᵀJ"]
  C --> D["预条件 P⁻¹ = ΣΠ^(-1/2) 白化"]
  D --> E["优化隐参 φ̃, 损失前乘 P⁻¹ 得 φ"]
  E --> F["Zip-NeRF 联合优化场景与相机"]

关键设计:

  • 投影代理问题。把投影函数在 \(m\) 个采样点上拼接成 \(\Pi_m(\boldsymbol{\phi})\),在初始参数处求雅可比 \(\boldsymbol{J}_\Pi \in \mathbb{R}^{2m\times k}\),构造 \(\Sigma_\Pi = \boldsymbol{J}_\Pi^\top \boldsymbol{J}_\Pi\)。对角元表示”扰动第 \(r\) 个参数引起的平均运动幅度”,非对角元表示两参数引起的运动是否高度相关。这样避开了对 NeRF 训练动力学建模的困难,只需分析可解析的投影几何。
  • ZCA 白化作预条件。目标是找到 \(\boldsymbol{P}\) 使得代换 \(\boldsymbol{P}^{-1}\tilde{\boldsymbol{\phi}} = \boldsymbol{\phi}\) 后新的协方差 \(\Sigma_{\tilde\Pi}\) 变成单位阵,即各参数对投影影响幅度相同且互不相关。满足条件的解有无穷多个,作者取 \(\boldsymbol{P}^{-1} = \Sigma_\Pi^{-1/2}\),即零相位成分分析(ZCA)白化变换。它既归一化了幅度(把不敏感的焦距放大、把过度敏感的平移压小),又通过整块矩阵消除了参数间相关性——这是逐参数标量缩放(对角预条件)做不到的。
  • 数值稳定与共享内参。对协方差对角加阻尼项 \(\boldsymbol{P}^{-1} = (\Sigma_\Pi + \lambda\,\mathrm{diag}(\Sigma_\Pi) + \mu \boldsymbol{I})^{-1/2}\),在含镜头畸变参数(微小改动即剧烈影响投影)时尤为关键。当所有图像共享同一相机内参时,加一项 \(\mathcal{L}_{\text{shared}}\) 最小化共享内参的方差。预条件仅在初始参数处计算一次即足够好——动态重算会破坏 Adam 的动量running average。
  • 参数化通用性。方法作为残差实现,可套在多种参数化上:SE3(如 BARF 的 \(\mathfrak{se}(3)\) 螺旋轴)、SCNeRF(6D 旋转+平移+焦距+主点+畸变)、以及来自物体位姿估计的 FocalPose。作者基于 SOTA 的 Zip-NeRF 实现,沿用其多分辨率哈希网格与 coarse-to-fine(按 Heo 等做法调网格学习率)。

实验结果

在扰动版 mip-NeRF 360 数据集上(以 COLMAP 参数为参考真值),预条件对所有相机参数化都带来 4.3~6.8 dB 的 PSNR 提升,并显著降低相机误差:

相机参数化 CamP PSNR↑ SSIM↑ LPIPS↓ 焦距误差 f(px)↓
不优化相机   18.50 0.403 0.545 55.7
SCNeRF   25.13 0.658 0.319 76.1
SCNeRF 26.57 0.742 0.226 24.0
SE3+Focal+Intrinsics   27.59 0.796 0.218 36.9
SE3+Focal+Intrinsics 28.22 0.822 0.202 21.1
FocalPose+Intrinsics   27.60 0.797 0.219 38.8
FocalPose+Intrinsics 28.14 0.823 0.201 21.9

其余实验用文字补充:在未扰动 360 数据集上,相较不优化相机的基线 RMSE 降低约 67%、相较不加预条件的 SCNeRF 联合优化降低约 29%,但此设定较容易时提升较小。在扰动更强的合成数据集上(有真值相机),预条件对所有参数化的所有指标均有改善,且 FocalPose 参数化明显优于其他选择。消融显示整块矩阵预条件持续优于仅对角缩放版本,说明建模参数间相关性确有帮助。在 9 个 iPhone/ARKit 随手拍摄序列上,CamP 也提升了重建质量。

亮点与局限

  • 亮点:
    • 思路简洁通用——把难以分析的联合优化替换成可解析的投影代理问题,一次性在初始化时算出预条件矩阵,几乎不增加运行时间,也不改动 NeRF 主体。
    • 即插即用,可套多种相机参数化和 NeRF-like 模型;实证发现源自物体位姿估计的 FocalPose 参数化在相机优化中表现最佳,是有价值的经验观察。
    • 整块矩阵去相关优于逐参数缩放,从数值优化角度给相机-NeRF 联合优化提供了原则性解释。
  • 局限:
    • 并不能彻底避免局部极小(合成场景中仍出现遮挡式白色 floater)。
    • 预条件基于初始参数处的采样点分布,优化推进后会变得次优;点分布是均匀假设而非利用真实场景几何。
    • 未深入理解预条件与 Adam 等自适应优化器的相互作用。

延伸思考

  • 预条件矩阵可结合 SfM 特征点分布或训练中的场景几何动态重算与重采样,或许能进一步提升;但需解决与 Adam 动量统计的兼容问题,这也指向”为相机优化专门设计优化器”的方向。
  • ZCA 白化本质是用代理雅可比近似 Hessian、逼近牛顿法。这类”用可解析代理量构造预条件”的思路,可能迁移到高斯泼溅位姿优化、可微渲染标定等其他联合优化场景。
  • 方法对无 SfM 的随手拍摄(VIO/ARKit 位姿)尤其有用,为移动端轻量采集直接训练高质量 NeRF 提供了实用路径。