【CameraPoseRefinement】以BARF為例介紹三維重建中的位姿最佳化

UnderTurrets發表於2024-11-30

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的平面影像對齊問題。

$$
\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.BARFref. NeRF full pos.enc.w/o pos.enc.BARFref. NeRF full pos.enc.w/o pos.enc.BARFref. NeRF
Chair7.1860.1100.096 16.6380.5550.428 19.0230.2231.1631.91 0.8040.9420.9540.961 0.2230.0650.0440.036
Drums3.2080.0570.043 7.3220.2550.225 20.8323.5623.9123.96 0.8400.8930.9000.902 0.1660.1160.0990.095
Ficus9.3680.0950.085 10.1350.4300.474 19.7525.5826.2626.58 0.8360.9260.9340.941 0.1820.0700.0580.051
Hotdog3.2900.2250.248 6.3441.1221.308 28.1534.0034.5434.91 0.9230.9670.9700.973 0.0830.0400.0320.029
Lego3.2520.1080.082 4.8410.3910.291 24.2326.3528.3329.28 0.8760.8800.9270.942 0.1020.1120.0500.037
Materials6.9710.8450.844 15.1882.6782.692 16.5126.8627.4828.06 0.7470.9260.9360.942 0.2940.0680.0580.049
Mic10.5540.0810.075 22.7240.3560.301 15.1030.9331.1831.83 0.7880.9660.9690.971 0.3340.0560.0490.046
Ship5.5060.0950.074 7.2320.3540.326 22.1226.7827.5028.00 0.7550.8330.8490.858 0.2550.1750.1320.118
Mean6.167<0.202<0.193 11.3030.7680.756 22.1226.7827.5029.40 0.8210.9170.9300.936 0.2050.0870.0650.057

本文由部落格一文多發平臺 OpenWrite 釋出!

相關文章