【CameraPoseRefinement】以BARF为例介绍三维重建中的位姿优化


Introduction

在计算机视觉三维重建中,求解3D场景的表示和定位给定的相机帧的相机位姿是两个非常重要的任务,这两个问题互为依赖,一方面,恢复3D场景的表示需要使用已知的相机位姿进行观察;另一方面,定位相机需要来自特征点的可靠对应。

错误的相机位姿会对重建的输出和性能产生一系列负面影响,包括:

  1. 图像合成质量下降

    • 当相机位姿不准确时,生成的视角合成图像可能会出现明显的畸变或模糊,导致最终图像的质量较差。
  2. 三维场景表示不准确

    • 错误的位姿会导致三维场景中的几何结构和深度信息的错误重建,使得模型无法正确理解场景的空间布局。
  3. 影像重叠和视差问题

    • 不准确的位姿可能会造成图像重叠区域的视差不一致,进而导致合成图像中的物体位置、大小等出现明显的不自然或错位现象。
  4. 优化过程的困难

    • 由于相机位姿的误差,优化算法(如Adam)可能会在优化过程中陷入局部最优解,无法收敛到正确的场景表示和相机位置。
  5. 训练效率降低

    • 不准确的相机位姿会使得训练过程变得更加复杂,模型需要更多的迭代才能调整出合理的场景表示,从而延长训练时间。
  6. 潜在的视觉伪影

    • 由于误差,合成图像可能出现视觉伪影(artifacts),如不连贯的阴影、错误的光照等,使得生成的图像看起来不真实。

红框是伪影,蓝框是错位。

《3D Gaussian Splatting for Real-Time Radiance Field Rendering》发布后,很多重建方法都尝试在3D表征上进行创新,它们普遍使用预输入的相机位姿进行重建,而不同时考虑相机位姿的校准,这些预输入的相机位姿通常是由colmap软件估计得到的。此次介绍的两篇文章《BARF》和《HGSLoc》在进行场景重建的同时进行相机位姿的优化,它们使用一些来自不同视角的图像和这些图像的粗略位姿作为输入,并且在相机位姿优化的方法上做出了改进。

Approach

Planar Image Alignment(2D)

首先,BARF考虑2D的平面图像对齐问题。

设 x ∈ R 2 为像素坐标系下的一个坐标, W : R 2 → R 2 是与相机参数 p 有关的几何变换, I : R 2 → R 3 是我们的图像生成过程(图像的 3 个通道,所以是 R 2 → R 3 ), \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} xR2为像素坐标系下的一个坐标,W:R2R2是与相机参数p有关的几何变换,I:R2R3是我们的图像生成过程(图像的3个通道,所以是R2R3),

我们的目标是使得生成的图片与原图片尽可能地相似,这个联合优化的目标用最小二乘来表达,就是:

min ⁡ p ∑ x ∥ I 1 ( W ( x ; p ) ) − I 2 ( x ) ∥ 2 2 \min _{\mathbf{p}} \sum_{\mathbf{x}}\left\|\mathcal{I}_{1}(\mathcal{W}(\mathbf{x} ; \mathbf{p}))-\mathcal{I}_{2}(\mathbf{x})\right\|_{2}^{2} pminxI1(W(x;p))I2(x)22

相机参数的维度可以记作

p ∈ R P \mathbf{p} \in \mathbb{R}^P pRP

这个最小二乘问题的基础迭代步骤可以记作:

Δ p = − A ( x ; p ) ∑ x J ( x ; p ) ⊤ ( I 1 ( W ( x ; p ) ) − I 2 ( x ) ) \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}_{2}(\mathbf{x}) \right) Δp=A(x;p)xJ(x;p)(I1(W(x;p))I2(x))

其中,

J 是从输出到待优化变量求导的雅克比矩阵, I 2 是给定的 g r o u n d t r u t h , I 1 是我们想要优化的。而 A ( x ; p ) 取决于我们选择的优化策略。 \begin{array}{c} \mathbf{J}是从输出到待优化变量求导的雅克比矩阵,\mathcal{I}_2是给定的ground truth,\\ \mathcal{I}_1是我们想要优化的。而\mathbf{A}(\mathbf{x} ; \mathbf{p})取决于我们选择的优化策略。 \end{array} J是从输出到待优化变量求导的雅克比矩阵,I2是给定的groundtruthI1是我们想要优化的。而A(x;p)取决于我们选择的优化策略。

J ( x ; p ) = ∂ I 1 ( W ( x ; p ) ) ∂ W ( x ; p ) ∂ W ( x ; p ) ∂ p \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}} J(x;p)=W(x;p)I1(W(x;p))pW(x;p)

残差:

r ( x ) = I 2 ( x ) − I 1 ( W ( x ; p ) ) 有的资料中把 J 看作是残差对待优化变量的导数,即, ∂ r ∂ p ,因此, Δ p 也可以写成: \begin{array}{c} \mathbf{r}(\mathbf{x})=\mathcal{I}_{2}(\mathbf{x}) - \mathcal{I}_{1}(\mathcal{W}(\mathbf{x} ; \mathbf{p}))\\ 有的资料中把\mathbf{J}看作是残差对待优化变量的导数,即,\frac{\partial\mathbf{r}}{\partial\mathbf{p}},因此,\Delta \mathbf{p}也可以写成: \end{array} r(x)=I2(x)I1(W(x;p))有的资料中把J看作是残差对待优化变量的导数,即,pr,因此,Δp也可以写成:

Δ p = − A ( x ; p ) ∑ x J ( x ; p ) ⊤ r ( x ) \Delta \mathbf{p}=-\mathbf{A}(\mathbf{x} ; \mathbf{p}) \sum_{\mathbf{x}} \mathbf{J}(\mathbf{x} ; \mathbf{p})^{\top} \mathbf{r}(\mathbf{x}) Δp=A(x;p)xJ(x;p)r(x)

如果选择一阶优化方法, A 就是一个标量,也就是学习率; 如果选择二阶优化方法,有时 A ( x ; p ) = ( ∑ x J ( x ; p ) ⊤ J ( x ; p ) ) − 1 ,这取决于具体的优化策略。 \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}))^{-1},这取决于具体的优化策略。 \end{array} 如果选择一阶优化方法,A就是一个标量,也就是学习率;如果选择二阶优化方法,有时A(x;p)=(xJ(x;p)J(x;p))1,这取决于具体的优化策略。

以上是对这个最小二乘问题的概述。这种基于梯度的优化策略的核心在于输入信号是否足够平滑,否则,很容易陷入局部次优解。输入信号的平滑程度等价于:

∂ I ( x ) ∂ x ,亦即图像梯度 \frac{\partial\mathcal{I}(\mathbf{x})}{\partial\mathbf{x}},亦即图像梯度 xI(x),亦即图像梯度

为了避免局部最优,通常在优化的前期对图像进行模糊处理。图像梯度通过数值差分方法得出,而并非解析的。

B A R F 并没有采用模糊操作,它用神经网络作为 I ,优化目标就可以写成: min ⁡ p i , Θ ∑ i = 1 M ∑ x ∥ f ( W ( x ; p i ) ; Θ ) − I i ( x ) ∥ 2 2 其中, f : R 2 → R 3 , Θ 是网络的参数, M 是图像个数。 然后,图像梯度就变为可解析的 ∂ f ( x ) ∂ x ,而不是数值差分的估计。 \begin{array}{c} BARF并没有采用模糊操作,它用神经网络作为\mathcal{I},优化目标就可以写成:\\ \min_{\mathbf{p}_i,\boldsymbol{\Theta}}\sum_{i=1}^M\sum_\mathbf{x}\left\|f(\mathcal{W}(\mathbf{x};\mathbf{p}_i);\boldsymbol{\Theta})-\mathcal{I}_i(\mathbf{x})\right\|_2^2\\ 其中,f:\mathbb{R}^2 \rightarrow \mathbb{R}^3,\boldsymbol{\Theta}是网络的参数,M是图像个数。\\ 然后,图像梯度就变为可解析的\frac{\partial{f}(\mathbf{x})}{\partial\mathbf{x}},而不是数值差分的估计。 \end{array} BARF并没有采用模糊操作,它用神经网络作为I,优化目标就可以写成:minpi,Θi=1Mxf(W(x;pi);Θ)Ii(x)22其中,f:R2R3Θ是网络的参数,M是图像个数。然后,图像梯度就变为可解析的xf(x),而不是数值差分的估计。

通过操纵网络f,还可以对对齐的信号平滑度进行更原则性的控制,而不必依赖于图像的启发式模糊,从而使这些形式可推广到3D场景表示。稍后,将会介绍barf如何操作f对信号进行平滑度控制。

Neural Radiance Fields (3D)

接下来,BARF将以上过程拓展为3D,具体如下:

多层感知机: f : R 3 → R 4 M L P 参数: Θ 3 D 点坐标: x ∈ R 3 3 D 点坐标对应的颜色: c ∈ R 3 体素密度: σ ∈ R 相机位姿变换: W ,其有 6 个自由度 x , y , z , ϕ , θ , ψ , 故 p ∈ R 6 且, [ c ; σ ] ⊤ = f ( x ; Θ ) 像素齐次坐标: u ˉ = [ u ; 1 ] ⊤ ∈ R 3 , 深度: z i , x i = z i u ˉ \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} 多层感知机:f:R3R4MLP参数:Θ3D点坐标:xR33D点坐标对应的颜色:cR3体素密度:σR相机位姿变换:W,其有6个自由度x,y,z,ϕ,θ,ψ,pR6且,[c;σ]=f(x;Θ)像素齐次坐标:uˉ=[u;1]R3,深度:zi,xi=ziuˉ

体渲染表达式:

I ^ ( u ) = ∫ z n e a r z f a r T ( u , z ) σ ( z u ˉ ) c ( z u ˉ ) d z , 其中, z n e a r 和 z f a r 是感兴趣的深度上下限, I 仍然是 R 2 → R 3 , 表示这个像素坐标对应的 R G B 数值。 T ( u , z ) = exp ⁡ ( − ∫ z m a x z σ ( z ′ u ˉ ) d z ′ ) \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^{\prime}\bar{\mathbf{u}})\mathrm{d}z^{\prime}\bigr) \end{array} I^(u)=znearzfarT(u,z)σ(zuˉ)c(zuˉ)dz,其中,znearzfar是感兴趣的深度上下限,I仍然是R2R3表示这个像素坐标对应的RGB数值。T(u,z)=exp(zmaxzσ(zuˉ)dz)

T对应3dgs中的透射率。这两个式子和3dgs的体渲染公式也是极为接近的:

C i = ∑ n ≤ N c n ⋅ α n ⋅ T n ,  where  T n = ∏ m < n ( 1 − α m ) , α n = o n ⋅ exp ⁡ ( − σ n ) , σ n = 1 2 Δ n ⊤ Σ ′ − 1 Δ n . 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. Ci=nNcnαnTn, where Tn=m<n(1αm),αn=onexp(σn),σn=21ΔnΣ1Δn.

区别在于,3dgs中的T是通过累乘得出,体素密度则取决于椭球投影到平面的形状再乘以不透明度。而nerf中的颜色值和体素密度是通过MLP直接得出。

令 y = [ c ; σ ] ⊤ = f ( x ; Θ ) 继续改写: I ^ ( u ) = g ( y 1 , … , y N ) , g : R 4 N → R 3 I ^ ( u ; p ) = g ( f ( W ( z 1 u ˉ ; p ) ; Θ ) , … , f ( W ( z N u ˉ ; p ) ; Θ ) ) , W : R 3 → R 3 \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} y=[c;σ]=f(x;Θ)继续改写:I^(u)=g(y1,,yN),g:R4NR3I^(u;p)=g(f(W(z1uˉ;p);Θ),,f(W(zNuˉ;p);Θ)),W:R3R3

最后,这个联合优化问题变为:
min ⁡ p 1 , . . . , p M , Θ ∑ i = 1 M ∑ u ∥ I ^ ( u ; p i , Θ ) − I i ( u ) ∥ 2 2 \min_{\mathbf{p}_1,...,\mathbf{p}_M,\boldsymbol{\Theta}}\sum_{i=1}^M\sum_\mathbf{u}\left\|\hat{\mathcal{I}}(\mathbf{u};\mathbf{p}_i,\boldsymbol{\Theta})-\mathcal{I}_i(\mathbf{u})\right\|_2^2 p1,...,pM,Θmini=1Mu I^(u;pi,Θ)Ii(u) 22

Bundle-Adjusting Neural Radiance Fields

barf与Nerf差异最大的一点在于,barf需要在优化网络参数的同时考虑到相机参数。而barf认为直接使用nerf的位置编码方案使得相机参数优化变得困难,对此,barf做出了改进,提出了捆绑优化的动态调整策略,这也是这篇文献最大的贡献之一。

Nerf最初的位置编码方案为:

γ ( x ) = [ x , γ 0 ( x ) , γ 1 ( x ) , … , γ L − 1 ( x ) ] ∈ R 3 + 6 L \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} γ(x)=[x,γ0(x),γ1(x),,γL1(x)]R3+6L

这里的L是超参数。

γ k ( x ) = [ cos ⁡ ( 2 k π x ) , sin ⁡ ( 2 k π x ) ] ∈ R 6 \gamma_k(\mathbf{x})=\begin{bmatrix}\cos(2^k\pi\mathbf{x}),\sin(2^k\pi\mathbf{x})\end{bmatrix}\in\mathbb{R}^6 γk(x)=[cos(2kπx),sin(2kπx)]R6

那么,k阶位置编码的雅克比矩阵为:
∂ γ k ( x ) ∂ x = 2 k π ⋅ [ − sin ⁡ ( 2 k π x ) , cos ⁡ ( 2 k π x ) ] \frac{\partial\gamma_k(\mathbf{x})}{\partial\mathbf{x}}=2^k\pi\cdot\left[-\sin(2^k\pi\mathbf{x}),\cos(2^k\pi\mathbf{x})\right] xγk(x)=2kπ[sin(2kπx),cos(2kπx)]

它将来自MLP的梯度信号放大,并且其方向以相同频率变化。这使得预测有效更新Δp变得困难,因为来自采样的3D点的梯度信号在方向和幅度方面是不相干的,并且很容易相互抵消。因此,对于barf的联合优化来说,不能直接应用位置编码。


barf的做法是从低频段到高频段逐步激活位置编码:
γ k ( x ; α ) = w k ( α ) ⋅ [ cos ⁡ ( 2 k π x ) , sin ⁡ ( 2 k π x ) ] , w k ( α ) = { 0 if  α < k 1 − cos ⁡ ( ( α − k ) π ) 2 if  0 ≤ α − k < 1 1 if  α − k ≥ 1 ∂ γ k ( x ; α ) ∂ x = w k ( α ) ⋅ 2 k π ⋅ [ − sin ⁡ ( 2 k π x ) , cos ⁡ ( 2 k π x ) ] . α ∈ [ o , L ] 是与优化进度成正比的可控的一个超参数。 \begin{array}{c} \gamma_k(\mathbf{x};\alpha)=w_k(\alpha)\cdot\left[\cos(2^k\pi\mathbf{x}),\sin(2^k\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)\cdot2^k\pi\cdot\left[-\sin(2^k\pi\mathbf{x}),\cos(2^k\pi\mathbf{x})\right]. \end{array}\\ \alpha \in [o,L] 是与优化进度成正比的可控的一个超参数。 γk(x;α)=wk(α)[cos(2kπx),sin(2kπx)],wk(α)= 021cos((αk)π)1if α<kif 0αk<1if αk1xγk(x;α)=wk(α)2kπ[sin(2kπx),cos(2kπx)].α[o,L]是与优化进度成正比的可控的一个超参数。

从原始3D输入x(α=0)开始,barf逐渐激活较高频段的编码,直到启用完整位置编码(α=L),相当于原始 NeRF 模型。这使得 BARF 能够通过最初平滑的信号发现正确的Δp,然后将重点转移到学习高保真场景表示。

Experiment

平面图像对齐的定性实验

给定图像块,barf的目标是恢复整个图像的对齐和神经网络重建,其中初始化为(b)中所示的中心裁剪,而相应的真实变换(ground-truth warps)如(c)所示。

实验结果:(a)为直接使用位置编码,(b)为不使用位置编码,©是barf的结果。

合成场景上的定量实验

SceneCamera pose registrationView synthesis quality
Rotation (°) ↓Translation ↓PSNR ↑SSIM ↑LPIPS ↓
full pos.enc.w/o pos.enc.BARFfull pos.enc.w/o pos.enc.BARFfull pos.enc.w/o pos.enc.BARFref. NeRFfull pos.enc.w/o pos.enc.BARFref. NeRFfull pos.enc.w/o pos.enc.BARFref. NeRF
Chair7.1860.1100.09616.6380.5550.42819.0230.2231.1631.910.8040.9420.9540.9610.2230.0650.0440.036
Drums3.2080.0570.0437.3220.2550.22520.8323.5623.9123.960.8400.8930.9000.9020.1660.1160.0990.095
Ficus9.3680.0950.08510.1350.4300.47419.7525.5826.2626.580.8360.9260.9340.9410.1820.0700.0580.051
Hotdog3.2900.2250.2486.3441.1221.30828.1534.0034.5434.910.9230.9670.9700.9730.0830.0400.0320.029
Lego3.2520.1080.0824.8410.3910.29124.2326.3528.3329.280.8760.8800.9270.9420.1020.1120.0500.037
Materials6.9710.8450.84415.1882.6782.69216.5126.8627.4828.060.7470.9260.9360.9420.2940.0680.0580.049
Mic10.5540.0810.07522.7240.3560.30115.1030.9331.1831.830.7880.9660.9690.9710.3340.0560.0490.046
Ship5.5060.0950.0747.2320.3540.32622.1226.7827.5028.000.7550.8330.8490.8580.2550.1750.1320.118
Mean6.167<0.202<0.19311.3030.7680.75622.1226.7827.5029.400.8210.9170.9300.9360.2050.0870.0650.057

本文由博客一文多发平台 OpenWrite 发布!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UnderTurrets

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值