iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0

在鐵人賽倒數兩天,我們稍微把視角轉向 3D 世界。

傳統的 3D 內容創作和渲染,依賴於像網格 (mesh)、體素 (voxel)、點雲 (point cloud) 這樣的離散幾何表示,製作成本高昂。而我們今天要學習的,是一種全新的場景表示方法,它拋棄了所有傳統的幾何圖元,僅僅使用一個簡單的神經網路,就能夠學習、表示並從任意新視角,渲染出一個複雜 3D 場景的照片級真實感圖像。

核心思想

神經輻射場 (Neural Radiance Fields, NeRF) 為加州大學柏克萊分校於 2020 年提出的想法,它目標任務是新視角合成:給定一個場景的多張、不同視角的二維圖片以及這些圖片對應的相機姿態 (camera pose),合成出這個場景在任意一個從未見過的視角下,應該呈現出的圖像。

NeRF 使用一個連續的、隱式的神經網路,來表示一個靜態的 3D 場景。這個神經網路通常是一個簡單的 ANN,可以把他視作函數 F,其定義為

  • 輸入:一個 5D 的向量,包含了空間中某個點的三維座標 (x, y, z) 和一個觀察方向的二維角度 (θ, φ)。

  • 輸出:一個 4D 的向量,包含了該點在該觀察方向下的顏色 (R, G, B) 和體積密度 (volume density, σ)。

https://ithelp.ithome.com.tw/upload/images/20250908/20178100l4zzAIyLf1.png
(NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis)

這系列圖簡單的解釋如下

  • 體積密度 (σ):這個值可以被理解為,當一束光線穿過 (x, y, z) 這個點時,有多大的機率會被這個點上的「微小粒子」擋住。σ 越高,代表這個點越不透明,越可能是物體的表面;σ 越低,代表這個點越接近透明的空氣。

  • 視角相關的顏色:NeRF 將顏色 (R, G, B) 設計為不僅與空間位置 (x, y, z) 相關,還與觀察方向 (θ, φ) 相關。這使得 NeRF 能夠學習到非常逼真的、視角相關的光照效果,例如高光和反射。

本質上,這個 ANN 網路就隱式、連續地記住了整個三維場景中,每一個無限小的點,應該是什麼顏色、有多麼實。

渲染過程

有了這個能夠查詢任意點屬性的 ANN 函數,我們如何從中渲染出一張完整的二維圖片呢?NeRF 在這裡借鑒了電腦圖學中一個非常經典的技術:體積渲染 (volume rendering)。

對於目標視角圖像中的每一個像素,其渲染流程如下

  1. 光線投射:從相機的視點出發,穿過這個像素,向場景中投射出一條光線。

  2. 沿光線採樣:在這條光線上,從近到遠,採樣 N 個離散的點。

  3. 查詢網路:將這 N 個採樣點的座標 (x, y, z) 和光線的方向 (θ, φ),全部餵給我們的 ANN網路,查詢出它們各自的顏色 (R, G, B) 和體積密度 σ。

  4. 顏色積分:使用經典的體積渲染積分公式,將這 N 個點的顏色和密度,從後往前地混合起來。這個公式模擬了光線穿過半透明介質的過程:

    • 一個點的顏色,對最終像素的貢獻,取決於它自身的顏色,以及它被前面所有點擋住的機率。

    • 最終像素顏色 = Σ (當前點的顏色 * 當前點的透明度 * (1 - 前面所有點的累積不透明度))

  5. 重複:對圖像中的每一個像素,都重複以上 1-4 步,最終就能合成出一張完整的新視角圖像。

訓練過程

NeRF 的訓練過程如下

  1. 從訓練集中,隨機選取一張已知視角的圖片和其對應的相機姿態。

  2. 對這張圖片中的所有(或一個批次的)像素,都執行上述的體積渲染流程,使用當前的 ANN 網路,合成出一張預測圖像。

  3. 計算這張預測圖像與真實的訓練圖像之間的重建損失。

  4. 將這個損失,透過體積渲染的整個可微分過程,反向傳播回 ANN 網路,並使用梯度下降來更新網路的權重。

透過在所有訓練視角上不斷地重複這個過程,ANN 網路的權重會被逐漸最佳化,使得它所隱式表示的三維場景,在渲染後,能夠與所有已知的真實視角圖像相匹配。一旦訓練完成,這個 ANN 就學會了整個場景的連續三維表示,我們可以從任意新視角進行渲染。

體驗 NeRF 的效果

我們可以透過以下網站來觀察 NeRF 的效果。

https://www.matthewtancik.com/nerf


上一篇
Day 28 - 多模態學習與 CLIP
系列文
從0開始:傳統圖像處理到深度學習模型29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言