論文地址:https://readpaper.com/paper/4569785684533977089
GitHub 地址:https://github.com/YuliangXiu/ICON
Colab 地址:https://colab.research.google.com/drive/1-AWeWhPvCTBX0KfMtgtMk10uPU05ihoA?usp=sharing
主頁地址:https://icon.is.tue.mpg.de/
首先,明確 ICON 的任務:給一張彩色圖片,將二維紙片人,還原成擁有豐富幾何細節的三維數字人。圍繞這一任務,之前有許多基於顯式表達的方法 (expliclit representation: mesh[2]、voxels[3]、depth map & point cloud[4], etc)。但直到三年前 PIFu (ICCV’19)[5] 第一個把隱式表達 (implicit representation) 用到這個問題,衣服的幾何細節才終於好到 —— 藝術家願意扔到 Blender 裡面玩一玩的地步。但 PIFu 有兩個嚴重的缺陷:速度慢和姿勢魯棒性差。我們在 MonoPort (ECCV’20)[6] 中一定程度上解決了「速度慢」這個問題,整個推理到渲染加一塊,用普通顯示卡可以做到 15FPS 的速度。後來我們把重建和 AR 做了一個結合,用 iPad 陀螺儀控制渲染的相機位姿,最後有幸獲得 SIGGRAPH Real-Time Live 的 Best Show Award。但是「姿態魯棒性」一直沒有得到很好的解決。PIFuHD[7] 將 PIFu 做到了 4K 圖片上,把數字人的幾何細節又提了一個檔次,但還是隻能在站立 / 時裝姿勢 (fashion pose) 下得到滿意的結果。ARCH[8] 以及 ARCH++ [9] 嘗試把問題從姿態空間(pose space)轉換到標準空間(canonical space, 把人擺成「大」字)來解決。但這種轉換,首先很依賴於姿態估計 (HPS) 的準確性,其次由於轉換依賴於 SMPL 自帶的蒙皮骨骼權重(skinning weights),這個權重是寫死的且定義在裸體上,強行用到穿衣服的人上,由動作帶動的衣服褶皺細節就不那麼自然。另外一個思路,就是加幾何先驗 (geometric prior)。通俗點說,就是我給你一個粗糙的人體幾何,然後根據影像資訊,來雕琢出來一個細緻的人體幾何。GeoPIFu (+estimated voxel)[10]、PaMIR (+voxelized SMPL)[11]、S3 (+lidar)[12] 都有做嘗試。我嘗試過直接把準確的幾何先驗 (groundtruth SMPL) 灌給 PaMIR,但 PaMIR 依舊不能在訓練集中沒見過的姿態上(比如舞蹈、運動、功夫、跑酷等)重建出滿意的結果。提高姿勢水平的重要性
提高姿勢水平是為了徹底打通基於影像的重建(image-based reconstruction)和基於掃描的建模(scan-based modeling)。隨著 NASA[13]、SCANimate[14]、SNARF[15]、MetaAvatar[16]、Neural-GIF[17] 等一系列工作爆發,如何從動態的三維人體掃描 (3D human scan sequences / 4D scans) 中學出來一個可以被驅動的、用神經網路表達的數字人 (animatable neural avatar) 漸漸成為一個研究熱點。而高質量的動態人體掃描的獲得,費錢費人工,導致普通使用者或者沒有多視角採集裝置的團隊,很難進入這個領域。圖左為 4D 掃描裝置(MPI),圖右 Light Stage(USC-ICT)。
問題來了,有沒有可能扔掉昂貴且費時費力的掃描流程,用 PIFu 從影片中做逐幀重建(Images to Meshes),然後把重建結果直接扔給 SCANimate 做建模呢(Meshes to Avatar)呢?在理論上當然是可以的,但是現實卻很骨感。癥結在於,現有的重建演算法,都沒有辦法在很多樣的姿態下保持重建的穩定性。但是,數量足夠多且姿勢各異的三維人體卻是 SCANimate 構建高質量可驅動數字人的必要前提!這個不難理解 —— 要讓一個數字人無論怎麼動彈,衣服褲子的褶皺都很真實,如果用資料驅動的思路去做,那麼網路得先「看過足夠多」類似動作下衣服的形變,才能準確摸索出衣服形變與動作姿勢之間的關聯。總而言之,真要把 Images-Meshes-Avatar 這條路走通,非提高姿勢水平不可。提高姿勢水平從哪些方面入手
ICON 在思路上借鑑了很多相關工作,比如 PIFuHD 裡面的法向圖(Normal Image),並和 PaMIR 一樣都用了 SMPL body 做幾何空間約束。這兩個資訊都是不可或缺的:SMPL body 提供了一個粗糙的人體幾何,而法向圖則包含了豐富的衣服褶皺細節,一粗一細,相得益彰。RGB Image - Normal Image (Body) - Normal Image (Clothed Human)
SMPL 輔助 normal 預測。pix2pix 地從 RGB 猜 normal,要在不同姿態上做到足夠泛化,就需要灌進去大量的訓練資料。但是,既然 SMPL body 已經提供了粗糙的人體幾何,這個幾何也可以渲染成 body normal 的形式,那麼如果我們把這個 body normal 和 RGB 合併一下,一塊扔進網路作為輸入, pix2pix 的問題就可以轉化為一個新問題:用 RGB 的細節資訊對粗糙的 body normal 進行形變(wraping)和雕琢(carving)最後獲得 clothed normal。而這個問題的解決,可以不依賴於大量訓練資料;
normal 幫助最佳化 SMPL。既然 clothed normal 可以從影像中攫取到 SMPL body 沒有的幾何細節,那麼有沒有可能用這些資訊去反過來最佳化 SMPL body ?這樣,SMPL body 和 clothed normal 就可以相互裨益迭代最佳化,body mesh 準了,normal image 就對;normal image 對了,反過來還可以進一步最佳化 body mesh。1+1>2,實現雙贏;
捨棄 global encoder。最後,SMPL body 和 clothed normal 都有了,即人大致的體型和衣服幾何細節都有了,我們真的需要像 S3、PaMIR、GeoPIFu 那樣,使用一個巨大的全域性卷積神經網路(2D/3D global CNN)來提特徵,然後用 Implicit MLP 雕琢出穿衣人的精細外形嗎?ICON 的答案是:不需要,SDF is all you need。
效果圖
有了 SMPL body(左邊,w/ Prior)的加持,clothed normal 預測更準確。讓 clothed normal 來最佳化 SMPL(第二列),同時更好的 SMPL 也提升了 clothed normal 的質量(第三列)。下面這張圖展示了 ICON 整體處理 pipeline。先從影像中預測 SMPL body,渲染出正反 body normal,與原始影像合併起來,過一個法向預測網路,出正反 clothed normal。然後對於三維空間中的點,clothed normal 取三維,body normal 上取三維(注意,這裡是從 SMPL mesh 上用最近鄰取的,而不是從 body normal image 中取的),SDF 取一維,一共七維,直接扔進 implict MLP,Marching Cube 取一下 0.5 level-set 等值面。量化指標這裡就不放了。為了確保比較的絕對公平,我除了用原作者放的模型在測試集上跑了結果,還在 ICON 的框架內重新復現了 PIFu、PaMIR。此外,我確保除了方法本身的差異,其他部分(訓練資料、最佳化策略、網路結構)都保持一致,不引入干擾變數。實驗結論顯示,ICON 是 SOTA,在離譜的姿勢下優勢明顯,訓起來省資料。SMPL 不準的時候,加上迭代最佳化那個模組,甚至要比 PaMIR 直接在精準 SMPL 上的結果還要好。現在放出來的程式碼只包括測試程式碼,但完整的訓練程式碼已經在路上。ICON 包括了 PIFu、PaMIR 以及 ICON 各種變種的測試 + 訓練程式碼,而且使用了 PyTorch-Lightning 框架做程式碼規範。這樣以後大家要用自己的資料在 ICON、PIFu 和 PaMIR 上做訓練和測試,只需要基於 ICON 調整就行。下面這張圖證明了 ICON 的一個特別突出的優勢,就是省錢。畢竟 RenderPeople 一個就幾百塊人民幣,實在離譜。僅僅給 1/8 的訓練資料(50 個 3D human scan),ICON 重建的質量就可以超過用接近 4000 個訓練資料訓出來的 PIFu,也超過了用 450 個資料訓出來的 PaMIR。作為一個捨棄了 global CNN 的極其 local 的模型,ICON 對訓練資料量確實不敏感。而恰恰就是這種鈍感,對於提高三維人重建的姿勢水平至關重要。為了充分測試 ICON 在非常難的姿勢上是什麼水平,我從 pinterest 上找了一些動作非常離譜的圖片,武術、跑酷、舞蹈以及體育等等。總之,這些動作從未出現在訓練集中,也不可能成為訓練集(動作轉瞬即逝,沒法穩定住用儀器進行掃描捕捉)。但結果是令人欣慰的,儘管不完美,但至少還是個人形。最後,我們按照之前計劃的,把 Images-Meshes-Avatar 的流程跑了一下,結果還不錯。ICON 並不完美
ICON 確實可以提高姿勢水平,但不是盡善盡美。接下來聊聊 ICON 的劣勢。其實原論文及補充材料中對「壞結果」的分析和呈現 (Fig.7 和 Fig.18),已然不怎麼遮掩了。雖然 ICON 在量化指標上實現了 SOTA,但對本領域相關研究者而言,「壞結果」往往比「好結果」更能揭示方法的原理和本質。魚和熊掌不可得兼。SMPL prior 帶來了穩定性,但也破壞了 implicit function 原有的優勢 —— 幾何表達的自由性。因此,對於那些離裸體比較遠的部分,比如兩腿之間的裙子、隨風飛揚的外套,就「掛」了。而這些部分,最原始的 PIFu 不見的做的比 ICON 差,畢竟 PIFu 是沒有引入任何幾何先驗的。總之,穩定性 vs 自由度,是一個 tradeoff;
慢。SMPL-normal 迭代最佳化的設計思路,導致單張圖要跑 20s 才能出來不錯的結果,實時性大大折扣;
效能天花板受制於 HPS。重建結果受 SMPL 準確性影響極大,SMPL-Normal 的迭代最佳化,並不能徹底解決嚴重的姿勢估計錯誤。ICON 現在支援 PyMAF[18]、PARE[19] 以及 PIXIE[20] 三種 HPS,PARE 對遮擋好一些。PIXIE 手和臉準一些,PyMAF 最穩定,但依舊對一些很難的 case 束手無策。所以,儘管 HPS 已經做得很多了,圍繞各種 corner case 每年能出數百篇論文,但我們依然不能說這個問題解決了,也不能說這個問題沒有價值了。至少,對於 ICON 而言,HPS 的準確度是一切的基礎,HPS 掛了,再怎麼迭代最佳化也沒用;
幾何比法向差。clothed normal 的質量與最終重建的人體幾何質量之間有 gap。normal 明明看起來很好,但 geometry 的質量就打了折扣。理論上,重建人體渲染出來的 normal image 和網路預測出來的 clothed normal 不應該有那麼大差距。這塊我還在 debug,希望下一個版本可以修復。
未來改進方向
基於 ICON,接下來還可以在以下幾個方向進行改進:ICON++,進一步提升 ICON 的重建質量,更快更細節更穩定更泛化更通用;
把 ICON 用到別的任務中,比如做動物姿態,比如用 ICON 做個資料集,基於資料集建個生成模型;
Wildvideo-ICON、Multiview-ICON 和 Multiperson-ICON;
扔掉 3D supervision、非監督、自監督,以及訓練正規化的改進,比如 E2E-ICON。
如果有同學對這些方向有興趣,我非常歡迎各種形式的合作(yuliang.xiu@tuebingen.mpg.de)。Google Colab 支援上傳並測試你自己的圖片,最後會生成類似下圖這樣的重建影片,你可以將影片上傳到 twitter 並打上#ICON的標籤,@yuliangxiu,無論結果是好是壞,我都會轉發,對於重建任務,cherry picks 和 failure cases 都是演算法的一部分,好的爛的都放出來,才是一次完整的作品呈現,期待大家奇形怪狀的重建結果。另外,Readpaper 這個產品非常吼,大家如果有關於ICON的問題,可以直接在Readpaper上提問:https://readpaper.com/paper/4569785684533977089。Image - Normal Estimation - Reconstructed Mesh (w/o smooth, w/ smooth)
知乎原文:https://zhuanlan.zhihu.com/p/477379718