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 釋出!