GauHuman開源:基于Gaussian Splatting,高質量3D人體快速重建和實時渲染框架
- 論文名稱:GauHuman: Articulated Gaussian Splatting from Monocular Human Videos
- 論文下載地址:https://arxiv.org/abs/2312.02973
- 項目主頁:https://skhu101.github.io/GauHuman
- 代碼開源:https://github.com/skhu101/GauHuman
背景
3D 數字人重建對于一系列應用場景,比如虛擬現實和輔助現實,有著非常大潛在性的影響。基于人體神經輻射場,現有方法可以從 sparse-view 的視頻甚至單張圖片中恢復出 3D 數字人。然而這些方法往往需要昂貴的計算時間(高達 10 小時)和資源去完成訓練和渲染,極大限制了他們在現實場景中的應用。為了加速建模過程,可泛化三維人體建模方法采用預訓練加微調(pretrain-finetune)的范式。這類方法通常需要幾個小時的預訓練去獲取可泛化的 3D 人體表征,再對每一個 3D 數字人額外微調一個小時完成建模。由于這類方法依賴的輸入圖片只能提供有限的信息,3D 人體重建的質量還有待提升。另一類研究針對人體建模引入更加高效的 3D 人體表征,比如多精度的哈希表征(multi-resolution hash encoding)或者 neural volumetric primitives。多精度的哈希表征提升了訓練收斂速度,但渲染速度限制了他們的實際應用;neural volumetric primitives 提升了渲染速度,但訓練速度和最終渲染質量還有提升的空間。得益于 Gaussian Splatting 在靜態和動態場景中的實時渲染特性,本方法針對單目人體視頻提出基于 Gaussian Splatting 的快速訓練(1~2 分鐘)和實時渲染(高達 189 幀每秒)的 3D 人體建模框架。
圖2 基于一段單目人體視頻,GauHuman可以快速訓練(1~2分鐘)和實時渲染(高達189幀每秒)高質量的3D人體。
基本原理
利用 Gaussian Splatting 對單目人體視頻中的 articulated 3D 人體進行建模,我們需要解決兩個難點問題:1)如何將單目人體視頻中的 articulated 3D 人體信息引入 Gaussian Splatting 的框架;2)如何實現高效優化 articulated Gaussian Splatting。針對以上的問題,一個比較容易想到的方案是利用 Gaussian Splatting 對標準空間(canonical space)下的 3D 人體進行建模,并利用線性蒙皮算法(Linear Blend Skinning, LBS)將 3D 高斯球從標準空間轉換到目標空間,從而渲染得到目標空間下的圖像并構建損失函數。以上方案存在的一個問題是線性蒙皮算法定義的是3D人體頂點(vertex)的旋轉和偏移,如何從人體先驗比如SMPL中不準確的LBS系數和姿態(pose)信息中去學習標準空間中3D高斯球的旋轉和偏移仍是一個難點問題。此外,現有的 Gaussian Splatting 方法利用 Structure-from-Motion(SFM)或隨機初始化產生的點云去初始化 3D 高斯球的中心坐標。這一初始化方式主要是針對靜態場景設計,忽略了人體的結構信息,不適用于快速人體建模。針對建模過程中出現的 over-reconstruction 和 under-reconstruction 現象,Gaussian Splatting 論文提出分裂(split)和克隆(clone)的操作來動態控制 3D 高斯球的數目。盡管以上操作可以顯著提升重建的質量,它也產生了大量數目的 3D 高斯球,限制了優化的效率并占用了大量的硬盤空間(比如對一個靜態場景需要 734MB 的存儲空間)。另一個值得關注的點是,現有的Gaussian Splatting框架包含了大量冗余的3D高斯球,留給了我們進一步提升優化效率的空間。
針對以上提到的一些難點問題,我們從建模框架和快速優化算法兩個方面去考慮解決。【將單目人體視頻中的 articulated 3D 人體信息引入 Gaussian Splatting 的框架】受到之前人體神經輻射場(Human NeRF)的啟發,我們利用 Gaussian Splatting 對標準空間(canonical space)下的 3D 人體進行建模,并將 3D 高斯球從標準空間轉換到目標空間。基于高斯函數的變換性質,我們可以通過 LBS 算法將 3D 高斯球從標準空間旋轉和偏移變換到目標空間。以上變換涉及到如何估 LBS 系數的問題,直接用神經網絡來估計 LBS 系數往往需要很長時間的優化,最后渲染得到的效果也是差強人意。為了快速得到較為準確的 LBS 系數,我們 1)基于 SMPL 的 LBS 系數,并利用神經網絡來提供一個偏置值;2)對人體的姿態(pose)信息基于訓練數據進行糾正。當渲染一張 1024p 的圖片時,以上建模框只需要對有限數目(比如 13k)的 3D 高斯球進行滾雪球處理,然而之前的人體神經輻射場需要對整個 3D 空間內百萬級的采樣點就行體渲染操作。這極大降低了在訓練和渲染中的計算資源耗費。【高效優化 articulated Gaussian Splatting】1)3D 高斯球初始化。我們利用 3D 人體先驗比如 SMPL 對 3D 高斯球進行初始化,極大提升了優化的效率。2)分裂/克隆/合并。通過實驗分析,我們發現分裂和克隆操作忽略了將3D高絲球之間距離作為度量指標。基于以上分析,我們引入3D高絲球的Kullback-Leibler (KL)散度去約束分裂和克隆操作。對于大量冗余的3D高斯球,我們提出了一個合并操作去有效減小這部分3D高斯球。3)剪枝。考慮到 3D 人體有著特定的結構,我們將遠離 3D 人體的 3D 高斯球進行剪枝操作。基于以上的快速優化算法,我們可以用大約 13k 的 3D 高斯球(大約占用 3.5MB 的硬盤空間)在一到兩分鐘內完成對 3D 人體的建模。
圖3 GauHuman框架原理圖。GauHuman首先基于人體先驗SMPL去初始化3D高斯球位置,緊接著基于LBS系數偏差和人體姿態糾正模塊去學習3D高斯球從標準空間轉換到目標空間的轉換矩陣。在后續優化過程中,GauHuman基于tile的可微分渲染器去快速渲染圖片,并利用人體先驗和KL散度去約束分裂,克隆,合并和剪枝操作,以達到有效控制3D高斯球數目的目的。
結果比較
本文在ZJU_MoCap和MonoCap兩個單目人體數據集上進行了實驗。該研究對比了對比了多個先進的3D人體重建方法:NB,AN, AS, HumanNeRF, DVA, InstantNVR, InstantAvatar, PixelNeRF和NHP,并在peak signal-to-noise ratio (PSNR),structural similarity index (SSIM),以及Learned Perceptual Image Patch Similarity (LPIPS)指標上進行了比較。如下圖所示,GauHuman可以快速重建(1~2分鐘)和實時渲染(高達189幀每秒) 3D人體,并在性能指標上超越了之前的方案。
應用前景
在游戲電影制作,虛擬現實增強現實或者其他需要數字人建模的場景,用戶可通過輸入一段單目人體視頻,以及該角度下相機的參數和相應的人體動作體形參數(SMPL),就可以達到重建該 3D 數字人的目的。
結語
本文提出一種基于 Gaussian Splatting 的高質量 3D 人體快速重建 (1~2 分鐘) 和實時渲染 (高達 189 幀每秒) 框架 GauHuman。可以承認的是,本文依然存在一定的缺陷。首先,如何從 3D 高斯中提取人體 mesh 還有待進一步研究。其次,從單目人體視頻中恢復 3D 人體細節,比如說衣服皺褶,依舊是一個很難的問題。一個可行的方案是在 3D 人體重建中引入衣物物理仿真模型。最后,我們的代碼已經全部開源,歡迎大家下載玩耍!