渲染概觀
可微分的渲染在電腦視覺領域中是一個相對新穎且令人興奮的研究領域,透過使 2D 影像像素與場景的 3D 屬性建立關聯性,縮小 2D 與 3D 的差距。
例如,透過從神經網路預測的 3D 形狀渲染影像,可以透過參考影像計算出 2D 損失。反轉渲染步驟表示我們可以將像素的 2D 損失與形狀的 3D 屬性(例如網格頂點的位置)建立關聯性,這種方式可以學習 3D 形狀,而無需任何明確的 3D 監督。
我們廣泛研究了現有可微分渲染的程式碼庫,並發現
- 渲染管線很複雜,有超過 7 個獨立的組件需要進行互操作並且要可以微分
- 現有的熱門方法[1, 2]基於相同核心實作方式,它將許多關鍵組件放到大型 CUDA 核心,必須具備豐富的知識才能了解,而且擴充範圍有限
- 現有的方法不支援批次處理,或者假設批次中的網格具有相同數量的頂點和面
- 現有的專案只提供 CUDA 實作,因此在沒有 GPU 的情況下無法使用
為了嘗試不同的方法,我們想要一個易於使用和擴充且支援 異質批次處理 的模組式實作。受到現有研究 [1, 2] 的啟發,我們創造了一個新的、模組式的可微分渲染器,具備在 PyTorch、C++ 和 CUDA 中的平行實作,以及全面的文件和測試,目標是協助進一步研究這個領域。
我們的實作解耦了渲染的柵格化和著色步驟。核心柵格化步驟(基於 [[2]]) 會傳回數個中間變數,並且在 CUDA 中具有最佳化的實作。管線的其餘部分則是純粹在 PyTorch 中實作,並設計為可自訂和擴充的。透過此種方法,可以將 PyTorch3D 可微分渲染器匯入為函式庫。
開始使用
若要深入了解實作並開始使用渲染器,請參閱 渲染器入門,其中也包含 架構概觀 和 座標轉換慣例。
技術報告
有關渲染器設計、主要功能和指標的深度說明,請參閱 arXiv 上的 PyTorch3D 技術報告:利用 PyTorch3D 加速 3D 深度學習,有關脈衝星後端,請參閱此處:使用基於球體的表示法進行神經渲染的快速可微分射線投射。
注意事項:CUDA 記憶體使用量
技術報告中的主要比較對象是 SoftRasterizer [2]。SoftRasterizer 正向 CUDA 核心只輸出一個 (N, H, W, 4)
浮點張量,而 PyTorch3D 渲染器正向 CUDA 核心則會輸出 4 個張量
pix_to_face
,Long 張量(N, H, W, K)
zbuf
,浮點張量(N, H, W, K)
dist
,浮點張量(N, H, W, K)
bary_coords
,浮點張量(N, H, W, K, 3)
其中,N 代表批次大小,H/W 代表影像高度/寬度,K 代表每個像素的面。PyTorch3D 反向傳遞返回 zbuf
、dist
和 bary_coords
的梯度。
從光柵化返還中繼變數會產生相關的記憶體成本。我們可以計算正向和反向傳遞的記憶體使用量理論下限,如下所示
# Assume 4 bytes per float, and 8 bytes for long
memory_forward_pass = ((N * H * W * K) * 2 + (N * H * W * K * 3)) * 4 + (N * H * W * K) * 8
memory_backward_pass = ((N * H * W * K) * 2 + (N * H * W * K * 3)) * 4
total_memory = memory_forward_pass + memory_backward_pass
= (N * H * W * K) * (5 * 4 * 2 + 8)
= (N * H * W * K) * 48
我們需要每張光柵化輸出的每面的 48 位元組。為了在記憶體使用量內保持平衡,我們可以改變批次大小 (N)、影像大小 (H/W) 和每個像素的面 (K)。例如,對於固定的批次大小,如果使用較大的影像大小,請嘗試減少每個像素的面。
參考文獻
[1] Kato 等人,「神經 3D 網格渲染器」,CVPR 2018
[2] 劉等人,「Soft Rasterizer:用於影像基礎 3D 推論的可微分渲染器」,ICCV 2019
[3] Loper 等人,「OpenDR:近似的可微分渲染器」,ECCV 2014
[4] De La Gorce 等人,「從單眼影片進行基於模型的 3D 手部姿勢估計」,PAMI 2011
[5] 李等人,「透過邊緣取樣的蒙地卡羅光線追蹤」,SIGGRAPH 亞洲 2018
[6] Yifan 等人,「用於基於點的幾何處理的可微分表面點綴」,SIGGRAPH 亞洲 2019
[7] Loubet 等人,「重新參數化不連續的被積函數進行可微分渲染」,SIGGRAPH 亞洲 2019
[8] 陳等人,「透過插值基礎可微分渲染器學習預測 3D 物件」,NeurIPS 2019