3D人臉重建--學習筆記(轉載)

       本文旨在學習總結2D到3D人臉重建相關問題,個人水平有限,本人也是剛開始調研3D人臉重建,不足之處望大神指點改進。

目錄

1 什麼是3D人臉重建?

       人臉3D重建:從一張或多張2D圖像中重建出人臉的3D模型。
       3D人臉模型:
       我們可以用這樣一個表達式來建模3D人臉模型:

M=(S,T)M=(S,T)

       用圖像表示更爲直觀:

這裏寫圖片描述

2 重建方法分類

       在過去20年中,研究者們在3D人臉重建方面貢獻甚多,2D人臉圖像到3D人臉重建方法也是多種多樣,硬要爲其做個分類,大致如下圖(當然可能不太全面):

這裏寫圖片描述

       傳統3D人臉重建方法,大多是立足於圖像信息,如基於圖像亮度、邊緣信息、線性透視、顏色、相對高度、視差等等一種或多種信息建模技術進行3D人臉重建。這方面的技術論文,無論國內外都相當多,也較雜亂,一時間個人也不好具體統計,總之其中也是有很多不錯的思想和方法的,當然這也不是本文重點內容。
       基於模型的3D人臉重建方法,是目前較爲流行的3D人臉重建方法;3D模型主要用三角網格或點雲來表示,現下流行的模型有通用人臉模型(CANDIDE-3)三維變形模型(3DMM)及其變種模型,基於它們的3D人臉重建算法既有傳統算法也有深度學習算法。
       端到端3D人臉重建方法,是近年新起的方法;它們繞開了人臉模型,設計自己的3D人臉表示方法,採用CNN結構進行直接回歸,端到端地重建3D人臉。

3 通用模型3D人臉重建

       得到人臉的通用模型,通常有三種方法:第一種方法是採用三維掃描儀獲取數據,此方法採集精度高但設備價格昂貴;第二種方法是採用計算機圖形技術創建人臉;第三種是利用一些商業的建模軟件生成人臉通用模型,目前在市場上比較著名的人頭模型生成商業軟件有FaceGen Modeller,3D Max 和Poser7.0 等等。
       在衆多通用人臉模型中,CANDIDE-3模型是目前被學術界廣泛使用的一種通用模型,其符合MPEG-4標準中對人臉的定義。
       CANDIDE-3模型總共有113個頂點168個面組成,可以通過對這些點和麪的操作調節形成特定的人臉,下圖爲CANDIDE-3的模型展示圖:

這裏寫圖片描述

       通用模型重建法的本質是對通用模型進行修改使得其特徵與所需要恢復的輸入圖像相配,一般包括整體性調整局部性調整兩個方面。整體性調整主要是針對模型的輪廓,通過一定的方法如特徵點對應使得通用模型的整體佈局(如眼耳鼻眉)和輸入圖片的五官佈局儘量一致;局部性調整指的是針對局部細節尤其是人臉五官的微調,讓局部細節更爲精確。在進行完這兩項調整之後,再輔助以基於頂點的插值運算就可以重建人臉。通用模型法的優點是計算量較小,但其顯著缺陷就是因頂點數目過少導致對人臉輪廓的模擬和面部細節刻畫不夠細膩,故只能適用於精度要求不高的場合。

4 3D變形模型3D人臉重建

       形變模型(Morphable Model)這一名詞來源於計算機圖形學中一個名叫Morphing技術的圖像生成算法。Morphing 技術主要思想:如果兩幅圖像中存在一定的對應關係,那麼就可以利用這個對應關係生成具一副有平滑過渡效果的圖像。

4.1 初版3DMM

       文獻:《A Morphable Model For The Synthesis Of 3D Faces》
       在這個思想的引導下,在1999 年,瑞士巴塞爾大學的科學家Blanz 和Vetter 提出了一種十分具有創新性的方法:三維形變模型(3DMM) 。三維形變模型建立在三維人臉數據庫的基礎上,以人臉形狀和人臉紋理統計爲約束,同時考慮到了人臉的姿態和光照因素的影響,因而生成的三維人臉模型精度高。
       3DMM模型數據庫人臉數據對象的線性組合,在上面3D人臉表示基礎上,假設我們建立3D變形的人臉模型由m個人臉模型組成,其中每一個人臉模型都包含相應的SiSi表示對應係數;文理模型同理。
       像這樣,一張新的人臉模型就可以由已有的臉部模型線性組合。也就是說,我們可以通過改變係數,在已有人臉基礎上生成不同人臉。

這裏寫圖片描述

4.2 表情3DMM

       初版3DMM雖然解決了人臉變形模型的表達,但其在人臉表情表達上面明顯不足,在2014年時,FacewareHouse這篇論文提出並公開了一個人臉表情數據庫,使得3DMM有了更強的表現力。從而人臉模型的線性表示可以擴充爲:

SnewModel=S¯¯¯+i=1m1αisi+i=1n1βieiSnewModel=S¯+∑i=1m−1αisi+∑i=1n−1βiei

這裏寫圖片描述

4.3 人臉重建

       參考文獻:https://blog.csdn.net/likewind1993/article/details/81455882
       從上面可以看出,人臉重建問題就轉向了求αα問題,爲了簡便,這裏就只討論Shape重建,文理重建同理。

       在有了形變模型之後,對於一張給定的人臉照片,我們需要將模型與人臉照片進行配準,然後對模型的參數進行調整,使其與照片中的人臉差異值達到最小。簡單而言,不斷依據模型與輸入的人臉照片進行比對,不斷進行迭代,使兩者之間的比對誤差達到最小,這個時候,我們可以近似認爲該模型即爲對應輸入的人臉照片的三維模型。

       如我們有單張人臉圖像,以及68個人臉特徵點座標XX表示對應的主成分偏差。

4.4 LSFM-3DMM

       參考文獻:http://36kr.com/p/5073179.html
       計算機處理人臉時,有時會依賴一種所謂的“3D 變形模型”(3DMM)。這一模型代表了一個平均人臉,但同時也包含了與這一平均值常見的偏差模式信息。例如,如長了一個長鼻子的臉也可能有一個很長的下巴。鑑於這種相關性,計算機可以在不將有關你臉部全部表徵信息都存儲下來的情況下,只列出幾百個數字描述你的臉與平均人臉的偏差,就能夠生成專屬於你的面部圖像了。不僅如此,這些偏差還包括大致的年齡、性別和臉部長度等參數。

       但是,這樣也有一個問題。因爲世界上的人臉千變萬化,要將所有人臉與平均人臉的偏差都存儲下來,3DMM 需要集成許多面部的信息。目前爲止所採用的方法是掃描大量人臉,然後人工仔細標記所有的特徵。也因此,目前最好的模型也只是基於幾百張人臉——大部分還都是白人,而且模型在模仿不同年齡和種族人臉方面的能力十分有限。

       1 LSFM
       論文:《Large Scale 3D Morphable Models》
       我們提出了一個大規模的人臉模型(LSFM),這是一個3維形變模型(3DMM),從9663個獨特的臉部標誌中自動地搭建。研究者介紹,據他們瞭解,LSFM 是迄今爲止被構建出來的最大規模的形變模型,包含了從一個巨大的人口變量中提取的統計信息。爲了搭建出這樣一個模型,研究者創造了一個全新而且全自動且穩定的形變模型搭建管道,通過對目前最好的密集(dense)通信技術進行評估來獲得信息。
       訓練 LSFM 的數據集包括關於每個主題的豐富的人口統計信息,不僅可以構建全球3DMM模型,還可以構建針對特定年齡,性別或族裔羣體的模型。研究者利用所提出的模型,從3D形狀單獨執行年齡分類,並重建低維模型空間中的噪聲樣本外數據。此外,他們還對構建的3DMM模型進行系統分析,展示其質量和描述能力。
       研究提出的深度定性和定量評估表明,他們所提出的3DMM取得了最先進的結果,大大優於現有模型。最後,爲了造福研究社區,他們公開了所提出的自動3DMM建造管道的源代碼,以及構建的全球3DMM和根據年齡,性別和種族量身定製的各種定製模型。

這裏寫圖片描述

       (1)基於綜合呈現視圖進行自動標記。這些視圖註冊了像素級的形狀信息,因此可將 2D 標記(landmark)可信地投影回 3D 表面;
       (2)在自動標記的引導下,3D 模型不斷迭代變形,以精確匹配數據集的每個 3D 面部網格;
       (3)構建初步的全局 PCA;
       (4)自動刪去錯誤的對應;
       (5)由剩餘的乾淨數據構建 LSFM 模型。

       2 LSFM應用
       論文:《Face Normals “in-the-wild” using Fully Convolutional Networks》
       本研究中,提出了一種數據驅動型的方法,解決如何從一張單獨的濃縮照片中預測整個一般平面,特別聚焦於人臉。論文創造了一種新的方法,探索將可用的人臉數據集用於數據庫建設的可行性。研究者特意設計了一個深度卷積神經網絡來評估人臉“in-the-wild”狀態下的正常表面。還訓練了一個全卷積的網絡,能夠精確地從多樣化的表情的圖片中還原正常表情。我們比較最先進的 Shape-from-Shading 和 3D 重建技術,結果表明我們提出的網絡可以大幅度恢復更正確和逼真的人臉。而且,相比其他現有的面部特異性表面恢復方法, 由於我們網絡的完全卷積性質,我們不需要解決明確的對齊問題。

這裏寫圖片描述

       這些都是從由 300W 人臉數據集 “in-the-wild” 生成的。上圖展示了作者提出的網絡能廣泛適用於多種不同人臉和表情。最左邊是 300W 數據集的原始圖像。中間一列是 3D形狀重建,右邊一列是將圖像中採樣到的紋理轉換爲形狀。

4.5 Nonlinear-3DMM

       論文:《Nonlinear 3D Face Morphable Model》
       論文:《On Learning 3D Face Morphable Model from In-the-wild Images
       傳統的3DMM是從2D人臉圖像的3D人臉掃描中學習的,並由兩組PCA基函數表示。由於訓練數據的類型和數量,以及線性基礎,3DMM的表示能力是有限的。所以提出了Nonlinear-3DMM,更好地表達人臉信息。

這裏寫圖片描述

       本文提出的Nonlinear-3DMM是通過DNNs來學習Shape和Texture,不需要3D掃描,能夠更好地重建人臉。

這裏寫圖片描述

5 端到端3D人臉重建

       端到端3D人臉重建方法,是近年新起的方法;它們繞開像3DMM的人臉模型,設計自己的3D人臉表示方法,採用CNN結構進行直接回歸,端到端地重建3D人臉,現下主要代表有VRNet和PRNet。

5.1 VRNet

       《Large Pose 3D Face Reconstruction from a Single Image via Direct Volumetric》
       1 主要思想:
       該論文提出了自己的3D人臉表示方法,即用一個192*192*200的Volumetric來表示,是什麼意思呢?
       我的理解是,將人臉看成是從耳後平面到鼻尖平面的200個橫切片,每張切片就是等高點,如下圖:

這裏寫圖片描述

       2 CNN結構:
       這樣一來,我們CNN就可以直接回歸出這個Volumetric,而不是是直接預測頂點座標,其結構如下:

這裏寫圖片描述

       如上圖,基礎CNN結構採用沙漏網絡,論文提出了三種方案,(a)表示直接從圖片重建,(b)表示加入了人臉特徵點作爲引導,(c)表示多任務(重建+人臉特徵點預測)結構;實驗證明效果最好的是第二種方法。

       3 重建效果:

這裏寫圖片描述

       該方法優點是,設計了自己的3D人臉表示方法,結構簡單粗暴,收到不俗的效果,論文代碼鏈接中有官方在線demo,讀者可以體驗。

       4 總結:
       該方法缺點是,由CNN預測出來的3D人臉的頂點是不固定的,也就是我們還需要進行一步對齊,將一個固定頂點的模板對齊到CNN預測出來的3D人臉;重建分辨率不易擴展,整體計算量較大。

5.2 PRNet

       《Joint 3D Face Reconstruction and Dense Alignment with Position Map Regression Network》
        本文提出了一種能夠同時完成3D人臉重建和稠密人臉對齊的端對端的方法–位置映射回歸網絡(PRN)

       1 主要思想:
       設計UV位置映射圖,它是一種記錄所有面部點雲3D座標的2D圖像,在每個UV多邊形中都保留了語義信息;然後設計一種加權損失訓練一個簡單的CNN(編碼-解碼)網絡,從單張2D人臉圖像中回到UV位置映射。
        我們任務目的是從單2D人臉圖像迴歸出人臉3D幾何結構信息以及它們之間的稠密關係。所有我們需要適合的表示方法,並用一個網絡來直接預測;一個簡單且普遍的是用一個1D向量來表示,即將3D點信息用一個向量來表示,然後用網絡預測;然而,這種方法丟失了空間信息
        相關研究中也提到了類似於3DMM等模型表示,但這些方法太過依賴3DMM模型,並且流程複雜;最近的VRN用Volumetric來表示,成功擺脫了上述問題,但是其網絡需要輸出192x192x200的一個Volume,計算量相當大,重建分辨率將會受到限制。
        針對這些問題,本文設計了UV position map來表示,如下圖:

這裏寫圖片描述

        左圖是輸入圖像的3D圖和3D點雲ground-truth;右邊第1行,分別是2D圖像,UV文理映射圖,相應的UV位置映射圖;右邊第2行,分別是UV位置映射圖的x,y,z通道。
        然而開源數據集,如300W-LP,的ground-truth是沒有用UV表示的,而3DMM,所有我們是基於3DMM創建的UV標籤。3DMM又是依據BFM(Basel Face Model)【20】,所有我們UV還得與BFM建立聯繫,文獻【35】中提到解決辦法(具體細節,待考證)。最終我們選擇256最爲UV尺寸,約50K個點來表示Face mesh。

       2 CNN結構:
        有了UV表示方法,我們就可以直接用CNN網絡迴歸UV參數,如下圖:

這裏寫圖片描述

        採用encoder-decoder結構,256x256x3的輸入人臉圖像,輸出256x256x3的位置映射圖;編碼結構採用10個殘差塊級聯構成,解碼結構有17層反捲積層構成,激活層採用ReLU,最後輸出層採用Sigmoid激活函數。

       3 Loss Function:
        爲了強調重點,優化性能,本文還設計了weight mask形式的Loss function:

這裏寫圖片描述

        其意義在於,不同位置或區域,計算error時權重不一樣,看重或者特殊區域權重給高點,網絡就會更關注這塊。總共分爲4中不同等級,如下圖:

這裏寫圖片描述

        4等級:特徵點(68點),眼睛、鼻子、嘴巴,其他臉部,臉以外的部分;他們的權重分別比:16:4:3:0

       4 重建效果:

這裏寫圖片描述

       5 總結:
       該方法結構簡單,便於實現,也便於進一步優化,並取得不俗效果;但也存在問題,生成的mesh存在明顯條紋:

這裏寫圖片描述

       尤其是鼻子部分,個人認爲這是由於UV圖像映射到3D時必然存在的,但或許可以通過平滑或插值來解決這個問題,如平滑後:

這裏寫圖片描述

6 網格優化

Laplacian Mesh Optimization:https://blog.csdn.net/linmingan/article/details/79742027
拉普拉斯網格優化:https://blog.csdn.net/hjimce/article/details/46505863

7 人臉數據庫

官網:http://www.face-rec.org/databases/
博客:https://blog.csdn.net/holybin/article/details/25735093

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章