简介
《BARF: Bundle-Adjusting Neural Radiance Fields》
我们知道NeRF的依赖于准确的先验姿态,而BARF在没有非常准确的位姿情况下,仍然可以取得非常不错的结果。与这项任务相关的论文还有NeRF–,INeRF等等,但是BARF论文中对反向传播的推导是最详细的。
论文贡献
实现流程
给定下列a中的图片,要求算法恢复到图c的结果
最基本的方式是最小化两幅图像之间的光度误差
其中,x ∈ R^2 为图像坐标,L : R ^2 → R^ 3为三通道图像,W : R^2 → R^2 为通过参数p ∈ R^P 描述的一个变换函数,按照梯度下降法的步骤,我们需要求解Δ p \Delta \mathbf{p}Δp进行迭代,那么
矩阵A 有SLAM基础的同学应该知道,如果是高斯牛顿法就是A ( x ; p ) = ( ∑ x J ( x ; p ) ^⊤ J ( x ; p ) ) ^− 1 ,如果是最速梯度下降法则是− 1 ,而其中J ∈ R^(3 × P) 为雅可比矩阵
其中∂ W ( x ; p ) / ∂ p ∈ R^(2 × P) 为变换函数相对参数的导数,这个只要函数预先定义好,导数是好求的。而∂ L ( x ) / ∂ x ∈ R ^(3 × 2) 是图像像素值相对空间坐标的导数,由于图像通常是一个高频复杂信号,想求解该导数是非常困难的,于是作者借助网络来解决该问题,将光度误差公式修改如下
在求解变换函数p的同时求解网络参数Θ ,这样就将上面复杂的数值求解简化成了网络训练过程的梯度下降∂ f ( x ) / ∂ x 。我们来重新观察一下这个网络f 的作用,输入一个坐标x ,输出是该坐标的像素值,这不正是NeRF完成的工作吗?区别只是NeRF是在三维空间中完成此任务,因此我们定一个三维刚体变换W : R^3 → R^3 ,NeRF的积分公式可以写为:
其中u ‾为积分向量,z i 为采样点,g ( ⋅ )为积分公式,p 为三维变换参数,最终损失函数为:
经过上面一通复杂的操作,最后的结论其实就是将表示位姿参数p 1 , … , p M 作为变量给到网络进行更新
在NeRF的输入过程中会有一个Positional Encoding操作
对Positional Encoding操作进行求导后
第k次频的Positional Encoding操作会对原本的梯度信号放大2 k π 倍,而不同频次之间的梯度又会相互影响,这使得有效地更新Δ p 变得更加困难,为了解决这个问题,作者提出了一个类似于动态低频滤波器的操作,如下所示,对第k次频的Positional Encoding进行加权
其中权重Wk定义为
其中α ∈ [ 0 , L ] 是一个随着训练过程不断变化的参数,加入权重后的雅可比计算公式为
当w k ( α ) = 0 时第k次频的梯度就不会回传,在训练初期将高频部分权重置为0,然后再逐步增大α 直到α = L,这样就可以使得网络优先关注低频部分,然后逐步学习高频部分的信息。如下图对比所示,(a)为采用原始的Positional Encoding操作,(b)为不采用Positional Encoding操作,(c)为加入权重后的Positional Encoding操作。