出自文獻:Martin-Brualla R, Radwan N, Sajjadi M S M, et al. Nerf in the wild: Neural radiance fields for unconstrained photo collections[J]. arXiv preprint arXiv:2008.02268, 2020.
摘要
- 我們提出一種學習方法,用於合成復雜場景的新視圖,並且使用的是非結構化的 in-the-wild 照片集。
- 我們的工作基於神經輻射場(Neural Radiance Fields, NeRF),它使用多層感知器的權重,來建模場景的密度(density)和顏色(color),其輸入是 3D 坐標。
- 盡管 NeRF 可以在控制(controlled)環境中的靜態物體圖像中工作,但是它並不能建模非控制(uncontrolled)圖像,即大量普遍存在的、真實世界中的情形。例如不同的光照或突然出現的障礙物。
- 我們對 NeRF 進行了一系列的推廣,來解決該問題,由此根據網絡上的非結構化圖像集,進行精確的重構。
- 我們把系統(稱為 NeRF-W)應用在著名地標的網絡圖片集中,得到時間上一致的新視圖渲染,與最新技術相比,它的真實感更強。
1 介紹
圖 1 給定網絡照片集(a),本方法可以渲染出不同光照的新視圖(b)。
- 根據一組拍攝的稀疏圖像集合,合成場景的新視圖,在 CV 中是長期存在的問題,並且是很多 AR/VR 應用的前提條件。盡管很多經典的技術,使用運動恢復結構(structure-from-motion, SFM)或基於圖像的渲染(image-based rendering)來解決該問題,但是該領域最近因為神經渲染(neural rendering)技術有了很大進展:將可學習的模塊嵌入到 3D 幾何上下文中,在用重構出的觀察圖像進行訓練。
- NeRF 用神經網絡權重建模了場景的輻射場和密度。立體渲染(Volume rendering)接着用於合成新視圖,在一系列具有挑戰性的場景中,都展現出非常高的保真度。
- 但是,NeRF 只適用於控制好的環境:這些場景都是在一小段時間內進行拍攝,光照影響都保持不變,並且所有場景的內容都保持不變。
- 我們后面會展示,當面對移動的物體或者光照變化情況下的場景,NeRF 的性能會明顯下降。
- 這種限制阻礙了 NeRF 應用於大量 in-the-wild 的場景,這些輸入圖像可能在不同小時段、或不同年度進行拍攝,而且有很多行人和車輛穿過。
- 我們這里解決 NeRF 的關鍵限制是,NeRF 假設場景是在幾何、材質和攝影角度上,都是靜態的,即場景的密度和輻射場都是靜態的。因此,NeRF 需要讓兩個在相同位置和朝向上,拍攝出的照片必須完全一致。
- 這種假設在很多真實數據集上並不成立,例如大量網絡上的地標建築的數據集。
- 我們會展示,把 NeRF 應用在這種數據集中,會出現不精確的重構:會出現鬼影、過度的平滑和其他 artifact。
- 為了處理這種場景,我們提出 NeRF-W,放寬了嚴格一致性的假設,對 NeRF 進行了推廣。
- 首先,我們在學習到的低維隱空間中,建模圖像外觀的變化,如曝光、光照、天氣和后處理。
- 按照生成隱優化(Generative Latent Optimization, GLO)的框架,我們優化出每個輸入圖像的外觀嵌入(apperance embedding),因此學習到整個照片數據集中的共享外觀表示,讓 NeRF-W 在表示攝影和環境變化時有很大的靈活性。
- 如圖 1(b)所示,學習到的隱空間,能夠控制輸出渲染的外觀。
- 第二,我們把場景建模為共享(shared)元素和圖像相關(image-dependent)元素的並集,可以把場景內容無監督地分解為靜態和瞬態組件。
- 本方法使用結合了數據相關的不確定場(data-dependent uncertainty field)的次級體積輻射場(secondary volumtric radiance field),對瞬態元素進行建模。不確定場可以捕捉到觀察噪音的變化,可以進一步減少瞬態對象對於靜態場景的影響。
- 由於優化時能夠識別和消除瞬態圖像內容,因此我們只渲染出靜態組件,進而合逼真的新視圖。
- 總結,我們的渲染效果很好。
2 相關工作
3 背景
圖 2:Phototourism 數據集中 in-the-wild 相片的示例,該數據集用於訓練 NeRF-W。由於光照的變化和后處理(頂部圖),相同物體的顏色在不同照片都有變化。照片同時還會包含瞬態的遮擋物(底部圖)。
本文的目標是構建一個系統,其輸出是照片集,然后學習出 3D 表示,它能夠生成數據集里面的照片。
該場景表示應該可以對場景的 3D 結構和外觀信息進行編碼,進而可以合成新的視圖。接下來我們描述 NeRF,即 NeRF-W 所推廣的 3D 場景重建。
NeRF 把場景表示為一個可學習的連續的體積輻射場 $F_{\theta}$,其定義域是一個有邊界的 3D 體積。$F_{\theta}$ 通過 MLP 來表示,它的輸入是 3D 位置 $\mathbf{x}=(x, y, z)$ 和單位長度的視角方向 $\mathbf{d}=\left(d_{x}, d_{y}, d_{z}\right)$,它的輸出是密度 $\sigma$ 和顏色 $\mathbf{c}=(r, g, b)$。要計算每個像素的顏色,NeRF 使用數值積分來近似立體渲染積分。令 $\mathbf{r}(t)=\mathbf{o}+t \mathbf{d}$ 是相機射線,它從相機 $\mathbf{O}$ 的投影中心出發,穿過像平面的給定像素。NeRF 對該像素的期望顏色 $\hat{\mathbf{C}}(\mathbf{r})$ 的逼近公式是:
\begin{equation}
\hat{\mathbf{C}}(\mathbf{r})=\mathcal{R}(\mathbf{r}, \mathbf{c}, \sigma)=\sum_{k=1}^{K} T\left(t_{k}\right) \alpha\left(\sigma\left(t_{k}\right) \delta_{k}\right) \mathbf{c}\left(t_{k}\right)
\end{equation}
其中:
\begin{equation}
T\left(t_{k}\right)=\exp \left(-\sum_{k^{\prime}=1}^{k-1} \sigma\left(t_{k^{\prime}}\right) \delta_{k^{\prime}}\right)
\end{equation}
其中,$\mathcal{R}(\mathbf{r}, \mathbf{c}, \sigma)$ 表示立體渲染。$\mathbf{c}(t)$ 和 $\sigma(t)$ 是位置點 $\mathbf{r}(t)$ 的顏色和密度。
$\alpha(x)=1-\exp (-x)$
$\delta_{k}=t_{k+1}-t_{k}$ 表示兩個積分點的距離。並且使用了分層抽樣來選擇 $t_{n}$ 和 $t_{f}$ 之間的積分點,即相機射線穿過的最近和最遠平面。
NeRF 使用 ReLU MLP 來表示體積密度 $\sigma(t)$ 和顏色 $\mathbf{c}(t)$。
\begin{equation}
[\sigma(t), \mathbf{z}(t)]=\mathrm{MLP}_{\theta_{1}}\left(\gamma_{\mathbf{x}}(\mathbf{r}(t))\right)
\end{equation}
\begin{equation}
\mathbf{c}(t)=\mathrm{MLP}_{\theta_{2}}\left(\mathbf{z}(t), \gamma_{\mathbf{d}}(\mathbf{d})\right)
\end{equation}
其中網絡參數是 $\theta=\left[\theta_{1}, \theta_{2}\right]$,固定編碼函數有 $\gamma_{\mathbf{x}}$ 和 $\gamma_{\mathbf{d}}$。生成 $\sigma(t)$ 和 $\mathbf{c}(t)$ 的激活函數分別是 ReLU 和 sigmoid。因為密度必須是非負數,而顏色必須介於 $[0,1]$。與 NeRF 不同,我們把神經網絡描述為兩個 MLP,其中最后一個 MLP 依賴於上一個的輸出 $\mathbf{z}(t)$,這強調了體積密度 $\sigma(t)$ 和視角方向 d 無關。
為了訓練參數 $\theta$,對於 RGB 圖像集合,NeRF 最小化了相對於 $\left\{\mathcal{I}_{i}\right\}_{i=1}^{N}, \mathcal{I}_{i} \in[0,1]^{H \times W \times 3}$ 的重構誤差的平方和。每張圖像 $\mathcal{I}_{i}$ 都有用 SFM 估計出的內外參。我們重新計算相對於圖像 $i$ 的像素 $j$ 上的相機光線 $\left\{\mathbf{r}_{i j}\right\}_{j=1}^{H \times W \times 3}$,每個相機射線都穿過 3D 位置 $\mathbf{O}_{i}$,方向是 $\mathbf{d}_{i j}$,即 $\mathbf{r}_{i j}(t)=\mathbf{o}_{i}+t \mathbf{d}_{i j}$。
為了提升采樣效率,NeRF 同時優化兩個 MLP:一個粗糙網絡,一個精細網絡,其中粗糙模型預測的密度,會用來決定精細模型的采樣積分點。兩個模型的參數都會用以下損失進行優化:
\begin{equation}
\sum_{i j}\left\|\mathbf{C}\left(\mathbf{r}_{i j}\right)-\hat{\mathbf{C}}^{c}\left(\mathbf{r}_{i j}\right)\right\|_{2}^{2}+\left\|\mathbf{C}\left(\mathbf{r}_{i j}\right)-\hat{\mathbf{C}}^{f}\left(\mathbf{r}_{i j}\right)\right\|_{2}^{2}
\end{equation}
其中 $\mathbf{C}\left(\mathbf{r}_{i j}\right)$ 是圖像 $\mathcal{I}_{i}$ 上射線 $j$ 的觀測顏色,而 $\hat{\mathbf{C}}^{c}$ 和 $\hat{\mathbf{C}}^{f}$ 分別是粗糙和精細模型。
圖 3:NeRF-W 模型架構。給出 3D 位置、視角方向、學習到的外觀和瞬態 embedding,NeRF-W 得到靜態和瞬態(帶有不確定度)的顏色和密度。需要指出,靜態占有率(static opacity)在模型看到外觀 embedding 之前就會提前生成,保證不同圖像有相同的靜態幾何。
4 NeRF in the Wild
我們現在提出 NeRF-W,該系統會從 in-the-wild 相片集中重構出 3D 場景。我們基於 NeRF,並明確引入了兩項提升方法,用於處理非控制成像帶來的挑戰。
類似於 NeRF,我們會從非結構化的相片集 $\left\{\mathcal{I}_{i}\right\}_{i=1}^{N}$ 中(內外參已知),學習體積密度表示 $F_{\theta}$。在 NeRF 中,假設輸入視角的連續性:給定相同的位置和視角方向,兩張圖像有相同的亮度(intensity)。但是這樣的假設在網絡照片中並不符合,主要有兩個現象:
(1)光度學的變化(photometric variation):在戶外攝影中,當日時間和大氣狀況都會直接影響場景中物體的照明(即發射的幅度亮度)。由於攝影成像流水線,這一問題還會繼續放大,因為還有自動曝光的設置、白平衡、色階重建等,最終導致攝影的不連續性。
(2)瞬態物體(transient objects):真實世界的地標很少獨立地拍攝,經常會有行人等障礙物遮擋。地標的游客照片更具挑戰性。
我們提出兩個模型組件來解決上述問題。在 4.1 節中,我們推廣了 NeRF,使得相片相關的外觀和光照變化,可以顯式地建模。在 4.2 節,我們進一步拓展 NeRF,瞬態物體可以進行估計,並且與 3D 世界中的靜態表示相互解耦。圖 3 展示了模型的總體架構。
圖 4:NeRF-W 渲染場景的靜態(a)和瞬態(b)部分,以及兩者的組合(c)。訓練過程最小化組合渲染和真實圖像(d)的差異,由不確定場(e)進行加權,這可以同時優化進行識別和忽視異常的圖像區域。
4.1 隱外觀的建模
為了使 NeRF 能夠適應不同光照和攝影后處理,我們采用了 GLO 技術,即每張圖像 $\mathcal{I}_{i}$ 都會賦給一個對應的實值外觀嵌入(appearance embedding)向量 $\boldsymbol{\ell}_{i}^{(a)}$,其長度為 $n^{(a)}$。我們用圖像相關的輻射亮度 $\mathbf{c}_{i}(t)$,來替換方程(1)中的圖像無關的輻射亮度 $\mathbf{c}(t)$,同時引入近似的像素顏色 $\hat{\mathbf{C}}_{i}$ 對圖像索引 $i$ 的依賴:
\begin{equation}
\hat{\mathbf{C}}_{i}(\mathbf{r})=\mathcal{R}\left(\mathbf{r}, \mathbf{c}_{i}, \sigma\right)
\end{equation}
\begin{equation}
\mathbf{c}_{i}(t)=\operatorname{MLP}_{\theta_{2}}\left(\mathbf{z}(t), \gamma_{\mathbf{d}}(\mathbf{d}), \ell_{i}^{(a)}\right)
\end{equation}
其中,嵌入 $\left\{\ell_{i}^{(a)}\right\}_{i=1}^{N}$ 和 $\theta$ 一同優化。
讓這種外觀嵌入,作為網絡其中分支的輸入,可以賦予模型改變特定圖像中場景輻射場的能力,同時依然保證 3D 幾何學是靜態的,由所有圖像共享。把 $n^{(a)}$ 設置為一個較小值,我們鼓勵優化時能夠找到一個連續空間,使得光照條件可以嵌入,進而可以保證不同條件下的光滑插值,正如圖 8 所示。
4.2 動態物體
我們使用兩種設計來解決動態現象。
首先,我們把 NeRF 中的顏色發射(color-emitting)MLP(方程 4),作為我們模型的靜態部分(static head),然后我們添加瞬態部分(transient head),發出自己的顏色和密度,其中密度允許在訓練圖像中有變化。這使得 NeRF-W 可以重構包含遮擋物的圖像,而沒有把 artifact 引入到靜態場景表示。
其次,我們並不假設所有觀測像素顏色都是同樣可靠的,我們允許我們的瞬態部分發射出不確定性( uncertatinty)場(類似於顏色和密度),可以讓模型調整重構損失,忽略不可靠的像素和 3D 位置,這些位置很可能包含遮擋物。
我們將每個像素的顏色建模為各向同性正態分布,並且進行極大似然,然后我們使用立體渲染,渲染出該分布的方差。
這兩個模型組件可以讓 NeRF-W 解耦靜態和瞬態現象,而無需顯式監督。
為了構建瞬態部分,我們基於方程(6)的立體渲染公式,用瞬態部分的 $\sigma_{i}^{(\tau)}(t)$ 和 $\mathbf{c}_{i}^{(\tau)}(t)$ 來增強靜態密度 $\sigma(t)$ 和輻射亮度 $\mathbf{c}_{i}(t)$。
\begin{equation}
\hat{\mathbf{C}}_{i}(\mathbf{r})=\sum_{k=1}^{K} T_{i}\left(t_{k}\right)\left(\alpha\left(\sigma\left(t_{k}\right) \delta_{k}\right) \mathbf{c}_{i}\left(t_{k}\right)+\alpha\left(\sigma_{i}^{(\tau)}\left(t_{k}\right) \delta_{k}\right) \mathbf{c}_{i}^{(\tau)}\left(t_{k}\right)\right)
\end{equation}
其中:
\begin{equation}
T_{i}\left(t_{k}\right)=\exp \left(-\sum_{k^{\prime}=1}^{k-1}\left(\sigma\left(t_{k^{\prime}}\right)+\sigma_{i}^{(\tau)}\left(t_{k^{\prime}}\right)\right) \delta_{k^{\prime}}\right)
\end{equation}
預計的顏色 $\mathbf{r}(t)$ 接着作為靜態和瞬態分量的 alpha 組合。
我們利用 Kendall 的貝葉斯學習框架,來建模觀測顏色的不確定性。我們假設觀測的像素強度,包含內在的噪音,即偶然的(aleatoric),進而該噪聲是依賴輸入的,即異方差的(heteroscedastic)。我用一個依賴圖像和射線的各向同性的正態分布(方差是 $\beta_{i}(\mathbf{r})^{2}$,均值是 $\hat{\mathbf{C}}_{i}(\mathbf{r})$)來建模觀測顏色 $\mathbf{C}_{i}(\mathbf{r})$。方差 $\beta_{i}(\mathbf{r})$ 類比於渲染的顏色:
\begin{equation}
\hat{\beta}_{i}(\mathbf{r})=\mathcal{R}\left(\mathbf{r}, \beta_{i}, \sigma_{i}^{(\tau)}\right)
\end{equation}
為了讓場景的瞬態分量在不同的圖像上變化,我們給每個訓練圖像 $\mathcal{I}_{i}$ 指定第二個嵌入 $\ell_{i}^{(\tau)} \in \mathbb{R}^{n^{(\tau)}}$,作為瞬態 MLP 的輸入:
\begin{equation}
\left[\sigma_{i}^{(\tau)}(t), \mathbf{c}_{i}^{(\tau)}(t), \tilde{\beta}_{i}(t)\right]=\operatorname{MLP}_{\theta_{3}}\left(\mathbf{z}(t), \boldsymbol{\ell}_{i}^{(\tau)}\right)
\end{equation}
\begin{equation}
\beta_{i}(t)=\beta_{\min }+\log \left(1+\exp \left(\tilde{\beta}_{i}(t)\right)\right)
\end{equation}
ReLU 和 sigmoid 激活函數用於 $\sigma_{i}^{(\tau)}(t)$ 和 $\mathbf{c}_{i}^{(\tau)}(t)$,而 softplus 用於激活 $\beta_{i}(t)$($\beta_{\min }>0$,一個超參數,保證每條射線的最小重要性)。圖 3 表明了完整的模型架構。
圖像 $i$ 上射線 $\mathbf{r}$ 對真值顏色 $\mathbf{C}_{i}(\mathbf{r})$ 的損失是:
\begin{equation}
L_{i}(\mathbf{r})=\frac{\left\|\mathbf{C}_{i}(\mathbf{r})-\hat{\mathbf{C}}_{i}(\mathbf{r})\right\|_{2}^{2}}{2 \beta_{i}(\mathbf{r})^{2}}+\frac{\log \beta_{i}(\mathbf{r})^{2}}{2}+\frac{\lambda_{u}}{K} \sum_{k=1}^{K} \sigma_{i}^{(\tau)}\left(t_{k}\right)
\end{equation}
前兩項是 $\mathbf{C}_{i}(\mathbf{r})$ 相對於均值 $\hat{\mathbf{C}}_{i}(\mathbf{r})$ 和方差 $\beta_{i}(\mathbf{r})^{2}$ 的正態分布的(平移后的)負對數似然。$\beta_{i}(\mathbf{r})$ 值越大,賦值給像素的重要性就越小。第一項與第二項保持平衡,第二項對應於正態分布的對數分區函數(log-partition function),並排除了 $\beta_{i}(\mathbf{r})=\infty$ 的情況。第三項是 $L_{1}$ 正則項,有一個非負的乘法系數 $\lambda_{u}$ 乘在瞬態密度 $\sigma_{i}^{(\tau)}(t)$,這會鼓勵模型使用瞬態密度來解釋靜態現象。
在測試期間,我們會扔掉瞬態和不確定場,只渲染 $\sigma(t)$ 和 $\mathbf{c}(t)$。圖 4 演示了靜態、瞬態和不確定性分量。
4.3 優化
類似於 NeRF,我們同時優化 $F_{\theta}$ 的兩個拷貝:精細模型使用上述的模型和損失;粗糙模型只使用隱外觀的建模分量。和參數 $\theta$ 一起,我們優化每張圖像的外觀嵌入 $\left\{\boldsymbol{\ell}_{i}^{(a)}\right\}_{i=1}^{N}$ 和瞬態嵌入 $\left\{\ell_{i}^{(\tau)}\right\}_{i=1}^{N}$。NeRF-W 的損失函數為:
\begin{equation}
\sum_{i j} L_{i}\left(\mathbf{r}_{i j}\right)+\frac{1}{2}\left\|\mathbf{C}\left(\mathbf{r}_{i j}\right)-\hat{\mathbf{C}}_{i}^{c}\left(\mathbf{r}_{i j}\right)\right\|_{2}^{2}
\end{equation}
$\lambda_{u}$、$\beta_{\min }$ 和嵌入維度 $n^{(a)}$ 和 $n^{(\tau)}$,都是 NeRF-W 的超參數。
優化時,只會在訓練集中生成外觀嵌入 $\left\{\ell_{i}^{(a)}\right\}$,在測試集中並沒指定嵌入。為了測試集的可視化,我們選擇最能擬合目標圖像的 $\ell^{(a)}$(圖 8),或者將其設置為任意值。
5 實驗
圖 8:訓練圖像中外觀嵌入 $\ell^{(a)}$ 的插值(最左圖和最右圖),讓中間的渲染可以插值出顏色和光照,但是幾何體保持不變。
6 結論
- 我們提出了 NeRF-W,基於 NeRF,對非結構化網絡照片集的復雜環境的 3D 場景重構。
- 我們學習每張圖像的隱嵌入,能夠捕捉到攝影外觀的變化;
- 我們還把場景分解為圖像相關的和共享的分量,使得模型可以解耦瞬態元素和靜態場景。
- 實驗證明,該方法大大提升了目前最先進的方法。