【CameraPoseRefinement】以BARF为例介绍三维重建中的位姿优化
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的平面图画对齐问题。
$$
\begin{array}{c}
设\mathbf{x} \in \mathbb{R}^2为像素坐标系下的一个坐标,
\mathcal{W}: \mathbb{R}^2 \rightarrow \mathbb{R}^2 是与相机参数\mathbf{p}有关的几许改换,\
\mathcal{I}: \mathbb{R}^2 \rightarrow \mathbb{R}3是咱们的图画生成进程(图画的3个通道,所以是\mathbb{R}2 \rightarrow \mathbb{R}^3),
\end{array}
$$
咱们的方针是使得生成的图片与原图片尽或许地类似,这个联合优化的方针用最小二乘来表达,便是:
$$
\min {\mathbf{p}} \sum{\mathbf{x}}\left|\mathcal{I}{1}(\mathcal{W}(\mathbf{x} ; \mathbf{p}))-\mathcal{I}(\mathbf{x})\right|_{2}^{2}
$$
相机参数的维度可以记作
$$
\mathbf{p} \in \mathbb{R}^P
$$
这个最小二乘问题的根底迭代进程可以记作:
$$
\Delta \mathbf{p}=-\mathbf{A}(\mathbf{x} ; \mathbf{p}) \sum_{\mathbf{x}} \mathbf{J}(\mathbf{x} ; \mathbf{p})^{\top}\left( \mathcal{I}{1}(\mathcal{W}(\mathbf{x} ; \mathbf{p})) - \mathcal{I}(\mathbf{x}) \right)
$$
其间,
$$
\begin{array}{c}
\mathbf{J}是从输出到待优化变量求导的雅克比矩阵,\mathcal{I}_2是给定的ground truth,\
\mathcal{I}_1是咱们想要优化的。而\mathbf{A}(\mathbf{x} ; \mathbf{p})取决于咱们挑选的优化战略。
\end{array}
$$
$$
\mathbf{J}(\mathbf{x};\mathbf{p})=\frac{\partial\mathcal{I}_1(\mathcal{W}(\mathbf{x};\mathbf{p}))}{\partial\mathcal{W}(\mathbf{x};\mathbf{p})}\frac{\partial\mathcal{W}(\mathbf{x};\mathbf{p})}{\partial\mathbf{p}}
$$
残差:
$$
\begin{array}{c}
\mathbf{r}(\mathbf{x})=\mathcal{I}{2}(\mathbf{x}) - \mathcal{I}(\mathcal{W}(\mathbf{x} ; \mathbf{p}))\
有的资猜中把\mathbf{J}看作是残差对待优化变量的导数,即,\frac{\partial\mathbf{r}}{\partial\mathbf{p}},因而,\Delta \mathbf{p}也可以写成:
\end{array}
$$
$$
\Delta \mathbf{p}=-\mathbf{A}(\mathbf{x} ; \mathbf{p}) \sum_{\mathbf{x}} \mathbf{J}(\mathbf{x} ; \mathbf{p})^{\top} \mathbf{r}(\mathbf{x})
$$
$$
\begin{array}{c}
假如挑选一阶优化办法,\mathbf{A}便是一个标量,也便是学习率;\
假如挑选二阶优化办法,有时\mathbf{A}(\mathbf{x};\mathbf{p})=(\sum_\mathbf{x}\mathbf{J}(\mathbf{x};\mathbf{p})\top\mathbf{J}(\mathbf{x};\mathbf{p})),这取决于详细的优化战略。
\end{array}
$$
以上是对这个最小二乘问题的概述。这种根据梯度的优化战略的中心在于输入信号是否满足滑润,不然,很简单堕入部分次优解。输入信号的滑润程度等价于:
$$
\frac{\partial\mathcal{I}(\mathbf{x})}{\partial\mathbf{x}},亦即图画梯度
$$
为了防止部分最优,通常在优化的前期对图画进行含糊处理。图画梯度经过数值差分办法得出,而并非解析的。
$$
\begin{array}{c}
BARF并没有选用含糊操作,它用神经网络作为\mathcal{I},优化方针就可以写成:\
\min_{\mathbf{p}i,\boldsymbol{\Theta}}\sumM\sum_\mathbf{x}\left|f(\mathcal{W}(\mathbf{x};\mathbf{p}_i);\boldsymbol{\Theta})-\mathcal{I}_i(\mathbf{x})\right|_22\
其间,f:\mathbb{R}^2 \rightarrow \mathbb{R}^3,\boldsymbol{\Theta}是网络的参数,M是图画个数。\
然后,图画梯度就变为可解析的\frac{\partial{f}(\mathbf{x})}{\partial\mathbf{x}},而不是数值差分的估量。
\end{array}
$$
经过操作网络f,还可以对对齐的信号滑润度进行更原则性的操控,而不用依靠于图画的启发式含糊,然后使这些方式可推行到3D场景表明。稍后,将会介绍barf怎么操作f对信号进行滑润度操控。
Neural Radiance Fields (3D)
接下来,BARF将以上进程拓宽为3D,详细如下:
$$
\begin{array}{c}
多层感知机:f:\mathbb{R}^3 \rightarrow \mathbb{R}^4\
MLP参数:\boldsymbol{\Theta}\
3D点坐标:\mathbf{x} \in \mathbb{R}^3\
3D点坐标对应的色彩:\mathbf{c} \in \mathbb{R}^3\
体素密度:\sigma \in \mathbb{R}\
相机位姿改换:\mathcal{W},其有6个自由度{x,y,z,\phi,\theta,\psi},故\mathbf{p}\in \mathbb{R}^6\
且,[\mathbf{c};\sigma]^{\top}=f(\mathbf{x};\boldsymbol{\Theta})\
像素齐次坐标:\bar{\mathbf{u}}=[\mathbf{u};1]^{\top} \in \mathbb{R}^3,深度:z_i,\
\mathbf{x}_i=z_i\bar{\mathbf{u}}
\end{array}
$$
体烘托表达式:
$$
\begin{array}{c}
\hat{\mathcal{I}}(\mathbf{u})=\int_{z_{\mathrm{near}}}^{z_{\mathrm{far}}}T(\mathbf{u},z)\sigma(z\bar{\mathbf{u}})\mathbf{c}(z\bar{\mathbf{u}})\mathrm{d}z ,\
其间,z_{\mathrm{near}}和z_{\mathrm{far}}是感兴趣的深度上下限,\mathcal{I}仍然是\mathbb{R}^2 \rightarrow \mathbb{R}^3,\
表明这个像素坐标对应的RGB数值。\
T(\mathbf{u},z)=\exp\bigl(-\int_{z_{\mathrm{max}}}{z}\sigma(z\bar{\mathbf{u}})\mathrm{d}z^{\prime}\bigr)
\end{array}
$$
T对应3dgs中的透射率。这两个式子和3dgs的体烘托公式也是极为挨近的:
$$
C_i=\sum_{n\leq N}c_n\cdot\alpha_n\cdot T_n,\text{ where }T_n=\prod_{m<n}(1-\alpha_m),\
\alpha_n=o_n\cdot\exp(-\sigma_n),\quad\sigma_n=\frac12\Delta_n\top\Sigma{\prime{-1}}\Delta_n.
$$
差异在于,3dgs中的T是经过累乘得出,体素密度则取决于椭球投影到平面的形状再乘以不透明度。而nerf中的色彩值和体素密度是经过MLP直接得出。
$$
\begin{array}{c}
令\mathbf{y}=[\mathbf{c};\sigma]^{\top}=f(\mathbf{x};\boldsymbol{\Theta})\
持续改写:\hat{\mathcal{I}}(\mathbf{u})=g\left(\mathbf{y}_1,\ldots,\mathbf{y}_N\right),g:\mathbb{R}^{4N} \rightarrow \mathbb{R}^3\
\hat{\mathcal{I}}(\mathbf{u};\mathbf{p})=g\Big(f(\mathcal{W}(z_1\bar{\mathbf{u}};\mathbf{p});\boldsymbol{\Theta}),\ldots,f(\mathcal{W}(z_N\bar{\mathbf{u}};\mathbf{p});\boldsymbol{\Theta})\Big),\mathcal{W}:\mathbb{R}^{3} \rightarrow \mathbb{R}^3
\end{array}
$$
最终,这个联合优化问题变为:
$$
\min_{\mathbf{p}_1,...,\mathbf{p}M,\boldsymbol{\Theta}}\sumM\sum_\mathbf{u}\left|\hat{\mathcal{I}}(\mathbf{u};\mathbf{p}_i,\boldsymbol{\Theta})-\mathcal{I}_i(\mathbf{u})\right|_22
$$
Bundle-Adjusting Neural Radiance Fields
barf与Nerf差异最大的一点在于,barf需求在优化网络参数的一起考虑到相机参数。而barf以为直接运用nerf的方位编码方案使得相机参数优化变得困难,对此,barf做出了改善,提出了绑缚优化的动态调整战略,这也是这篇文献最大的奉献之一。
Nerf开端的方位编码方案为:
$$
\gamma(\mathbf{x})=\begin{bmatrix}\mathbf{x},\gamma_0(\mathbf{x}),\gamma_1(\mathbf{x}),\ldots,\gamma_{L-1}(\mathbf{x})\end{bmatrix}\in\mathbb{R}^{3+6L}
$$
这儿的L是超参数。
$$
\gamma_k(\mathbf{x})=\begin{bmatrix}\cos(2k\pi\mathbf{x}),\sin(2k\pi\mathbf{x})\end{bmatrix}\in\mathbb{R}^6
$$
那么,k阶方位编码的雅克比矩阵为:
$$
\frac{\partial\gamma_k(\mathbf{x})}{\partial\mathbf{x}}=2k\pi\cdot\left[-\sin(2k\pi\mathbf{x}),\cos(2^k\pi\mathbf{x})\right]
$$
它将来自MLP的梯度信号扩大,而且其方向以相同频率改变。这使得猜测有用更新Δp变得困难,由于来自采样的3D点的梯度信号在方向和起伏方面是不相干的,而且很简单彼此抵消。因而,关于barf的联合优化来说,不能直接运用方位编码。
barf的做法是从低频段到高频段逐步激活方位编码:
$$
\begin{array}{c}
\gamma_k(\mathbf{x};\alpha)=w_k(\alpha)\cdot\left[\cos(2k\pi\mathbf{x}),\sin(2k\pi\mathbf{x})\right], \
w_k(\alpha)=\begin{cases}0
&
\text{if }\alpha<k \
\frac{1-\cos((\alpha-k)\pi)}{2}&
\text{if }0\leq\alpha-k<1 \
1&\text{if }\alpha-k\geq1&\end{cases}\
\frac{\partial\gamma_k(\mathbf{x};\alpha)}{\partial\mathbf{x}}=w_k(\alpha)\cdot2k\pi\cdot\left[-\sin(2k\pi\mathbf{x}),\cos(2^k\pi\mathbf{x})\right].
\end{array}\
\alpha \in [o,L] 是与优化进展成正比的可控的一个超参数。
$$
从原始3D输入x(α=0)开端,barf逐步激活较高频段的编码,直到启用完好方位编码(α=L),相当于原始 NeRF 模型。这使得 BARF 可以经过开端滑润的信号发现正确的Δp,然后将要点转移到学习高保真场景表明。
Experiment
平面图画对齐的定性试验
给定图画块,barf的方针是康复整个图画的对齐和神经网络重建,其间初始化为(b)中所示的中心裁剪,而相应的实在改换(ground-truth warps)如(c)所示。
试验成果:(a)为直接运用方位编码,(b)为不运用方位编码,(c)是barf的成果。
组成场景上的定量试验
Scene | Camera pose registration | View synthesis quality | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Rotation (°) ↓ | Translation ↓ | PSNR ↑ | SSIM ↑ | LPIPS ↓ | ||||||||||||||
full pos.enc. | w/o pos.enc. | BARF | full pos.enc. | w/o pos.enc. | BARF | full pos.enc. | w/o pos.enc. | BARF | ref. NeRF | full pos.enc. | w/o pos.enc. | BARF | ref. NeRF | full pos.enc. | w/o pos.enc. | BARF | ref. NeRF | |
Chair | 7.186 | 0.110 | 0.096 | 16.638 | 0.555 | 0.428 | 19.02 | 30.22 | 31.16 | 31.91 | 0.804 | 0.942 | 0.954 | 0.961 | 0.223 | 0.065 | 0.044 | 0.036 |
Drums | 3.208 | 0.057 | 0.043 | 7.322 | 0.255 | 0.225 | 20.83 | 23.56 | 23.91 | 23.96 | 0.840 | 0.893 | 0.900 | 0.902 | 0.166 | 0.116 | 0.099 | 0.095 |
Ficus | 9.368 | 0.095 | 0.085 | 10.135 | 0.430 | 0.474 | 19.75 | 25.58 | 26.26 | 26.58 | 0.836 | 0.926 | 0.934 | 0.941 | 0.182 | 0.070 | 0.058 | 0.051 |
Hotdog | 3.290 | 0.225 | 0.248 | 6.344 | 1.122 | 1.308 | 28.15 | 34.00 | 34.54 | 34.91 | 0.923 | 0.967 | 0.970 | 0.973 | 0.083 | 0.040 | 0.032 | 0.029 |
Lego | 3.252 | 0.108 | 0.082 | 4.841 | 0.391 | 0.291 | 24.23 | 26.35 | 28.33 | 29.28 | 0.876 | 0.880 | 0.927 | 0.942 | 0.102 | 0.112 | 0.050 | 0.037 |
Materials | 6.971 | 0.845 | 0.844 | 15.188 | 2.678 | 2.692 | 16.51 | 26.86 | 27.48 | 28.06 | 0.747 | 0.926 | 0.936 | 0.942 | 0.294 | 0.068 | 0.058 | 0.049 |
Mic | 10.554 | 0.081 | 0.075 | 22.724 | 0.356 | 0.301 | 15.10 | 30.93 | 31.18 | 31.83 | 0.788 | 0.966 | 0.969 | 0.971 | 0.334 | 0.056 | 0.049 | 0.046 |
Ship | 5.506 | 0.095 | 0.074 | 7.232 | 0.354 | 0.326 | 22.12 | 26.78 | 27.50 | 28.00 | 0.755 | 0.833 | 0.849 | 0.858 | 0.255 | 0.175 | 0.132 | 0.118 |
Mean | 6.167< | 0.202< | 0.193 | 11.303 | 0.768 | 0.756 | 22.12 | 26.78 | 27.50 | 29.40 | 0.821 | 0.917 | 0.930 | 0.936 | 0.205 | 0.087 | 0.065 | 0.057 |
本文由博客一文多发渠道 OpenWrite 发布!