只需要一張照片和幾分鐘,就能重建你自己的3D模型

電腦視覺方面的頂級學術會議 CVPR 2020 不久前剛結束,不過會上仍有不少論文值得一讀。今天我們介紹的這篇 PIFuHD,在大會上入選口頭報告 (oral presentation)就非常有趣,它提出了一種全新的基於神經網路方法:只用一張人物全身正面照片,幾分鐘的計算時間,就可以自動重建高解析度細節豐富的3D模型。

不僅如此,和已經存在的類似技術相比,它還可以「猜」出照片裡並不存在的身體部位,比如背部:

更好玩的是,由於它可以自動產生一個標準格式的3D模型文件 (.obj),你還可以用它來進一步進行動作繪製,製作各種奇奇怪怪的影片……

我挑了一張自己不太標緻的半側身照片,試著跑了下程式碼(後附教程),效果雖不完美,重建的3D模型有明顯噪音,腳部處理的不太好,而且跟本人長得也不算太像……不過模型的還是很令人驚喜,而且用 Google Colab 產生模型只用了三分鐘:

為了避免到這裡就讀不下去了,我們還是放點比本文作者更養顏的效果圖來看看吧……

那麼,這個神經網路是如何工作的呢?

基本原理

在電腦視覺技術的範疇裡,對人體進行3D模型重建有好幾種方向。

最經典的方法是採用多台相機,從多個角度拍攝對象的照片,以及採用手持的結構光掃瞄設備,進行全方位的掃瞄,再在專業的軟體中進行拼貼重建。2014年史密森學會製作前美國總統歐巴馬的3D肖像,就是用的這種方法:

如果用機器學習的思路,用參數模型回歸能夠比較準確地提取人體模型,但是往往只能提取出來「裸體」的模型,人體自有的外觀,包括面部特徵、服裝、髮型等等,都被捨棄掉了。

另一種方向是無模型學習,可以還原人體的表面細節,但是模型本身的還原度很低,而且對計算資源的依賴太大。

這篇 PIFuHD 論文的目標,是對單張照片上穿著衣服的人進行高細節的3D重建,解析度足以辨識手指、面部特徵、衣服褶皺等詳細的訊息。

基於該團隊之前開發的 PIFu(像素對齊隱式函式)演算法,分成兩個原理相同,但功能不同的模組:

第一個模組對輸入圖像進行下採樣,進行粗糙推理,輸出一個低解析度的三維模型;第二個模組從輸入圖像讀取更精確的表面細節,並且引入第一個模組的結果,(這也是這篇論文標題中 Multi-Level PIFu 的來源)。

結合兩個 PIFu 模組的結果,PIFuHD 實現了其目標,從一張照片中得到了高清晰度、細節豐富的3D重建模型,並且對於記憶體等計算資源的依賴更少,還其它已知3D重建演算法直接對高清輸入圖像重建出1024*1024解析度的3D模型。以及,其它方法經常出現的「假象」,在這一新方法中也有效避免。

還有一個問題:PIFuHD 是如何重建人物後背的3D模型的呢?

考慮到整個研究的限制,輸入圖像是單一的、正面的照片,背部的細節根本不存在,也就無法真的「重建」,只能靠猜。而猜的工作,是由兩個模組都具備的多層感知器 (Multilayer Perceptron, MLP) 進行的。

由於 MLP 的工作原理,以及研究限制,如果不進行優化的話,產生的模型背面,其肌理非常平滑,幾乎沒有任何細節的存在,這又顯得太不真實。

所以研究者在流程當中增加了一個環節,把背部模型推理工作的一部分移到特徵提取的步驟裡,就能夠產生具有更多細節,更容易讓觀看者信服的背部肌理。

除了圖像之外,PIFuHD 還可以對影片進行逐幀重建:

這篇論文的設計巧妙,也提出和引用了很多電腦視覺領域和3D重建方向最新的概念。論文由Facebook 的人工智慧實驗室、Facebook現實實驗室(原 Oculus Research)和南加州大學共同進行,第一作者為 Shunsuke Saito。


網友神‧二次創作

研究者非常體貼地在 Google Colab 上提供了執行所需的程式碼,只要經過簡單的配置就可以執行。我找了一些難度較低的淘寶和街拍照片進行測試:

第一張,除了鞋的重建說不過去,整體完美:

第二張,似乎因為背景太複雜,導致提取細節時出現了誤判,其它還原的比較精確,包括手和包,以及頭左側頭髮的質感:
 

又找了一些不是很標緻,並非完全正臉的照片,效果也還算不錯:

產生的模型也可以下載下來,放到諸如 Blender 等動畫軟體裡,進行「二次創作」……這不,網友們已經大開腦洞了。

在下面這條影片裡,這位網友似乎是用一張模特照片重建了3D模型,還增加了細節貼圖,然後放到 ARKit 裡,這樣就可以在手機上打開了:

更厲害的還在後面。

靜態的3D模型已經不能滿足網友了,下面這位把自己的模型和舞蹈動作追蹤組合起來,變成了街舞達人:

最後這個最神奇,網友把七國集團領導人全部複製成了3D模型,然後強迫他們跳日本神曲《新寶島》:

這些網友的二次創作,玩的複雜多了,但其實技術門檻並不算高:只要用 PIFuHD 產生的模型文件,在 Blender 等3D渲染軟體裡打開,把輸入圖片作為貼圖加上去,再用動畫軟體給新的模型加上動作什麼的……

簡直是沒有做不到,只有想不到。

 

使用 Facebook 留言

發表回應

謹慎發言,尊重彼此。按此展開留言規則