Introduction
在计算机视觉三维重建中,求解3D场景的表示和定位给定的相机帧的相机位姿是两个非常重要的任务,这两个问题互为依赖,一方面,恢复3D场景的表示需要使用已知的相机位姿进行观察;另一方面,定位相机需要来自特征点的可靠对应。
错误的相机位姿会对重建的输出和性能产生一系列负面影响,包括:
-
图像合成质量下降:
- 当相机位姿不准确时,生成的视角合成图像可能会出现明显的畸变或模糊,导致最终图像的质量较差。
-
三维场景表示不准确:
- 错误的位姿会导致三维场景中的几何结构和深度信息的错误重建,使得模型无法正确理解场景的空间布局。
-
影像重叠和视差问题:
- 不准确的位姿可能会造成图像重叠区域的视差不一致,进而导致合成图像中的物体位置、大小等出现明显的不自然或错位现象。
-
优化过程的困难:
- 由于相机位姿的误差,优化算法(如Adam)可能会在优化过程中陷入局部最优解,无法收敛到正确的场景表示和相机位置。
-
训练效率降低:
- 不准确的相机位姿会使得训练过程变得更加复杂,模型需要更多的迭代才能调整出合理的场景表示,从而延长训练时间。
-
潜在的视觉伪影:
- 由于误差,合成图像可能出现视觉伪影(artifacts),如不连贯的阴影、错误的光照等,使得生成的图像看起来不真实。
红框是伪影,蓝框是错位。
在《3D Gaussian Splatting for Real-Time Radiance Field Rendering》发布后,很多重建方法都尝试在3D表征上进行创新,它们普遍使用预输入的相机位姿进行重建,而不同时考虑相机位姿的校准,这些预输入的相机位姿通常是由colmap软件估计得到的。此次介绍的两篇文章《BARF》和《HGSLoc》在进行场景重建的同时进行相机位姿的优化,它们使用一些来自不同视角的图像和这些图像的粗略位姿作为输入,并且在相机位姿优化的方法上做出了改进。
Approach
Planar Image Alignment(2D)
首先,BARF考虑2D的平面图像对齐问题。
我们的目标是使得生成的图片与原图片尽可能地相似,这个联合优化的目标用最小二乘来表达,就是:
相机参数的维度可以记作
这个最小二乘问题的基础迭代步骤可以记作:
其中,
残差:
以上是对这个最小二乘问题的概述。这种基于梯度的优化策略的核心在于输入信号是否足够平滑,否则,很容易陷入局部次优解。输入信号的平滑程度等价于:
为了避免局部最优,通常在优化的前期对图像进行模糊处理。图像梯度通过数值差分方法得出,而并非解析的。
通过操纵网络f,还可以对对齐的信号平滑度进行更原则性的控制,而不必依赖于图像的启发式模糊,从而使这些形式可推广到3D场景表示。稍后,将会介绍barf如何操作f对信号进行平滑度控制。
Neural Radiance Fields (3D)
接下来,BARF将以上过程拓展为3D,具体如下:
体渲染表达式:
T对应3dgs中的透射率。这两个式子和3dgs的体渲染公式也是极为接近的:
区别在于,3dgs中的T是通过累乘得出,体素密度则取决于椭球投影到平面的形状再乘以不透明度。而nerf中的颜色值和体素密度是通过MLP直接得出。
最后,这个联合优化问题变为:
Bundle-Adjusting Neural Radiance Fields
barf与Nerf差异最大的一点在于,barf需要在优化网络参数的同时考虑到相机参数。而barf认为直接使用nerf的位置编码方案使得相机参数优化变得困难,对此,barf做出了改进,提出了捆绑优化的动态调整策略,这也是这篇文献最大的贡献之一。
Nerf最初的位置编码方案为:
这里的L是超参数。
那么,k阶位置编码的雅克比矩阵为:
它将来自MLP的梯度信号放大,并且其方向以相同频率变化。这使得预测有效更新Δp变得困难,因为来自采样的3D点的梯度信号在方向和幅度方面是不相干的,并且很容易相互抵消。因此,对于barf的联合优化来说,不能直接应用位置编码。
barf的做法是从低频段到高频段逐步激活位置编码:
从原始3D输入x(α=0)开始,barf逐渐激活较高频段的编码,直到启用完整位置编码(α=L),相当于原始 NeRF 模型。这使得 BARF 能够通过最初平滑的信号发现正确的Δp,然后将重点转移到学习高保真场景表示。
Experiment
平面图像对齐的定性实验
给定图像块,barf的目标是恢复整个图像的对齐和神经网络重建,其中初始化为(b)中所示的中心裁剪,而相应的真实变换(ground-truth warps)如(c)所示。
实验结果:(a)为直接使用位置编码,(b)为不使用位置编码,(c)是barf的结果。
合成场景上的定量实验
<table>
<tr>
<th rowspan="3">Scene</th>
<th colspan="6">Camera pose registration</th>
<th colspan="12">View synthesis quality</th>
</tr>
<tr>
<th colspan="3">Rotation (°) ↓</th>
<th colspan="3">Translation ↓</th>
<th colspan="4">PSNR ↑</th>
<th colspan="4">SSIM ↑</th>
<th colspan="4">LPIPS ↓</th>
</tr>
<tr>
<th>full pos.enc.</th><th>w/o pos.enc.</th><th>BARF</th>
<th>full pos.enc.</th><th>w/o pos.enc.</th><th>BARF</th>
<th>full pos.enc.</th><th>w/o pos.enc.</th><th>BARF</th><th>ref. NeRF</th>
<th>full pos.enc.</th><th>w/o pos.enc.</th><th>BARF</th><th>ref. NeRF</th>
<th>full pos.enc.</th><th>w/o pos.enc.</th><th>BARF</th><th>ref. NeRF</th>
</tr>
<tr>
<td>Chair</td><td>7.186</td><td>0.110</td><td><b>0.096</b></td>
<td>16.638</td><td>0.555</td><td><b>0.428</b></td>
<td>19.02</td><td>30.22</td><td><b>31.16</b></td><td>31.91</td>
<td>0.804</td><td>0.942</td><td><b>0.954</b></td><td>0.961</td>
<td>0.223</td><td>0.065</td><td><b>0.044</b></td><td>0.036</td>
</tr>
<tr>
<td>Drums</td><td>3.208</td><td>0.057</td><td><b>0.043</b></td>
<td>7.322</td><td>0.255</td><td><b>0.225</b></td>
<td>20.83</td><td>23.56</td><td><b>23.91</b></td><td>23.96</td>
<td>0.840</td><td>0.893</td><td><b>0.900</b></td><td>0.902</td>
<td>0.166</td><td>0.116</td><td><b>0.099</b></td><td>0.095</td>
</tr>
<tr>
<td>Ficus</td><td>9.368</td><td>0.095</td><td><b>0.085</b></td>
<td>10.135</td><td>0.430</td><td>0.474</td>
<td>19.75</td><td>25.58</td><td><b>26.26</b></td><td>26.58</td>
<td>0.836</td><td>0.926</td><td><b>0.934</b></td><td>0.941</td>
<td>0.182</td><td>0.070</td><td><b>0.058</b></td><td>0.051</td>
</tr>
<tr>
<td>Hotdog</td><td>3.290</td><td><b>0.225</b></td><td>0.248</td>
<td>6.344</td><td><b>1.122</b></td><td>1.308</td>
<td>28.15</td><td>34.00</td><td><b>34.54</b></td><td>34.91</td>
<td>0.923</td><td>0.967</td><td><b>0.970</b></td><td>0.973</td>
<td>0.083</td><td>0.040</td><td><b>0.032</b></td><td>0.029</td>
</tr>
<tr>
<td>Lego</td><td>3.252</td><td>0.108</td><td><b>0.082</b></td>
<td>4.841</td><td>0.391</td><td><b>0.291</b></td>
<td>24.23</td><td>26.35</td><td><b>28.33</b></td><td>29.28</td>
<td>0.876</td><td>0.880</td><td><b>0.927</b></td><td>0.942</td>
<td>0.102</td><td>0.112</td><td><b>0.050</b></td><td>0.037</td>
</tr>
<tr>
<td>Materials</td><td>6.971</td><td>0.845</td><td><b>0.844</b></td>
<td>15.188</td><td><b>2.678</b></td><td>2.692</td>
<td>16.51</td><td>26.86</td><td><b>27.48</b></td><td>28.06</td>
<td>0.747</td><td>0.926</td><td><b>0.936</b></td><td>0.942</td>
<td>0.294</td><td>0.068</td><td><b>0.058</b></td><td>0.049</td>
</tr>
<tr>
<td>Mic</td><td>10.554</td><td>0.081</td><td><b>0.075</b></td>
<td>22.724</td><td>0.356</td><td><b>0.301</b></td>
<td>15.10</td><td>30.93</td><td><b>31.18</b></td><td>31.83</td>
<td>0.788</td><td>0.966</td><td><b>0.969</b></td><td>0.971</td>
<td>0.334</td><td>0.056</td><td><b>0.049</b></td><td>0.046</td>
</tr>
<tr>
<td>Ship</td><td>5.506</td><td>0.095</td><td><b>0.074</b></td>
<td>7.232</td><td>0.354</td><td><b>0.326</b></td>
<td>22.12</td><td>26.78</td><td><b>27.50</b></td><td>28.00</td>
<td>0.755</td><td>0.833</td><td><b>0.849</b></td><td>0.858</td>
<td>0.255</td><td>0.175</td><td><b>0.132</b></td><td>0.118</td>
</tr>
<tr>
<td>Mean</td><td>6.167<</td><td>0.202<</td><td><b>0.193</b></td>
<td>11.303</td><td>0.768</td><td><b>0.756</b></td>
<td>22.12</td><td>26.78</td><td><b>27.50</b></td><td>29.40</td>
<td>0.821</td><td>0.917</td><td><b>0.930</b></td><td>0.936</td>
<td>0.205</td><td>0.087</td><td><b>0.065</b></td><td>0.057</td>
</tr>
</table>
本文由博客一文多发平台 OpenWrite 发布!