更多優質內容請關注微信公眾號“AI 前線”,(ID:ai-front)
想象一下在未來,我們在遠端通話的時候,通過全息投影可以讓你感覺到說話的人就在你面前。而現在,一種基於計算機視覺的類似應用已經產生了。
在過去的十年裡,許多計算機視覺研究方向的重要團部隊在 3D 人臉重建以及人臉對齊方面取得了很多令人興奮的進展。其中最主要的是將卷積神經網路作為一種人工神經網路應用於這方面。然而,由於用於對映的人臉 3D 模型的不完善,重建後的空間具有侷限性,這就導致大部分人臉 3D 重建放方法的效果並不理想。
上圖是 PRN 的結構,綠色的矩形表示殘差塊,藍色的矩形表示轉置卷積層
在最近的一篇論文中,Yao Feng 團隊提出一種端到端的方法——位置對映地圖網路 (PRN),該方法將稠密對齊和重建 3D 形狀聯合起來解決。在人臉 3D 對齊和重建方面,該方法在多個資料庫上都遠超之前的方法。
更詳細地說,他們設計了一種 UV 位置對映(https://en.wikipedia.org/wiki/UV_mapping ),它是一種記錄了所有面部點雲三維座標的二維影像,在每個 UV 多邊形中都保留了語義資訊。然後使用一種加權損失訓練一個簡單的編碼 – 解碼網路,這個網路從單張 2D 面部影像得到 UV 位置對映。
上圖是該方法的部分結果,奇數行是人臉對齊結果 (僅顯示 68 點),偶數行是 3d 重建結果
這篇論文的貢獻主要在這些方面:
-
首次使用端到端的方式解決了人臉對齊和三維人臉重建的問題,該方法不受低維空間的限制。
-
為了直接得到 3D 人臉結構和稠密對齊,我們開發了一種名為 UV 位置面的表示方法,它記錄了 3D 人臉的位置資訊,並提供與 UV 空間上每個點所對應的語義資訊。
-
在訓練階段,我們提出了一種權重 mask,它為位置圖上每個點分配不同的權重,並計算權重損失。實驗表明,這種設計有助於提升網路的效能。
-
最後,我們提供了一種輕量級的框架能夠達到 100fps,這個框架可以直接從單張 2D 人臉影像獲得人臉的 3D 重建結果。
-
在 AFLW2000-3D 資料庫和 Florence 資料庫上,相比於目前最好的方法,該方法在 3D 人臉重建和稠密面部對齊上都相對獲得了 25% 提升。
該方法的程式碼使用 Tensorflow 的 python 介面完成。該專案的官方網址為:https://github.com/YadiraF/PRNet 。如果你想測試一下人臉重建的效果,你需要安裝以下環境:
-
Python 2.7(包括 numpy,skimage,scipy 庫)
-
Tensorflow 版本需大於等於 1.4
-
dlib(用於人臉檢測,如果能夠提供人臉的邊界框則不需要安裝該擴充套件)
-
opencv2(用於顯示測試結果)
訓練好的模型可以在這裡下載:百度網盤(https://pan.baidu.com/s/10vuV7m00OHLcsihaC-Adsw ),谷歌網盤(https://drive.google.com/file/d/1UoE-XuW1SDLUjZmJPkIZ1MLxvQFgmTFH/view?usp=sharing ),目前這個程式碼仍在開發過程中,該團隊將會不斷完善並在未來提供更多靈活的功能。
-
用於人臉對齊:對於可見和非可見的面部關鍵點都可以進行稠密對齊 (68 點)。
-
3D 人臉重建:通過單張圖片獲得人臉 3D 模型關鍵點以及對應的顏色。結果可以儲存為以.obj 為字尾的 mesh data,在 Meshlab 或者微軟的 3D Builder 中可以直接載入。當然,不可見區域的紋理會因為自遮擋而產生變形。
-
3D 姿態估計:不同於只用 68 個關鍵點進行面部姿態檢測,使用 3D 模型中的所有關鍵點 (超過四萬個) 可以獲得更準確的姿態預測結果。
-
深度影像:
-
紋理編輯:可以進行資料增強,對於輸入的人臉影像,可以更改其特定區域的紋理,例如眼睛:
-
換臉:使用另一個人的臉部替換某個特定影像中的面部,並可以適應該影像中人臉的姿勢。
-
克隆專案
-
使用百度網盤或谷歌網盤下載訓練好的 PRN 模型,將他們存入路徑 Data/net-data
-
執行測試程式碼
-
使用自己的影像測試
執行 python demo.py –help 可以獲得更多幫助資訊。
論文原文:
https://arxiv.org/pdf/1803.07835.pdf
英文原文:
3D Face Reconstruction with Position Map Regression Networks
https://heartbeat.fritz.ai/3d-face-reconstruction-with-position-map-regression-networks-