人脸重建速览,从3DMM到表情驱动动画
歡迎關注收藏或分享,轉載請注明出處。
個人專欄
人臉重建是計算機視覺比較熱門的一個方向,3d人臉相關應用也是近年來短視頻領域的新玩法。不管是Facebook收購的MSQRD,還是Apple研發的Animoji,底層技術都與三維人臉重建有關。
同時,實現人臉重建及相關應用需要深入了解優化算法等,工程量也不小,是學習cv的一個很好切入點。
▲ Apple推出Animoji[0] ▲ Facebook收購MSQRD[1]這里的人臉重建指,通過二維人臉圖像重建出該人臉的三維模型。 大概有以下幾種方法: 通過多視圖幾何來重建,這個需要采集不同角度的人臉,對設備的要求也比較高; 通過RGBD或RGB相機,用3D Morphable Model(3DMM)方法來重建。這種方法也有局限性,由于模型特點所致,無法生成模型細節(皺紋等); 還有近年來出現的使用深度學習方法來重建(有的是結合傳統3DMM方法,訓練其人臉模型參數)。
本文主要講講單目RGB相機的3DMM方法。這種方法對設備要求低,算法簡單,易于移動端實現實時重建。這里的前提是我們已經有了圖像人臉檢測的關鍵點。輸入圖像及檢測到的人臉關鍵點,輸出人臉三維網格。
概述
3DMM方法由Blanz[2]99年首次提出,往后的改進通常是基于他們的工作。這種方法有一個關于人臉模型的”先驗知識“,即可形變模型。因此不管人臉處于什么角度,都能得到較完整的人臉。
現在比較常見的人臉模型有Basel Face Model(BFM)、Surrey Face Model(SFM)、FaceWarehouse、Large Scale Facial Model (LSFM)等。其中,LSFM可能是如今最精準的模型。BFM比較容易獲取,很多人用它進行實驗。SFM的開源框架也為社區做出了巨大貢獻。同時,浙大團隊的FaceWarehouse以及一系列相關的文章都值得一讀。
▲1999年提出的3DMM方法[2]首先需要了解參數化人臉模型和blendshape模型兩個概念。
參數化人臉模型
在Blanz的方法中,他們掃描200張成年人的人頭模型,每個模型包含大約70000個頂點。經過PCA處理,制作成參數化人臉模型,每張人臉模型的拓撲結構相同,只是頂點位置或顏色有所差異。你可以把各個特征向量看作是人臉不同的特征,比如臉的長短,胖瘦等。
這里人臉模型分成兩個向量:
因此任意新的一個人臉都可由這些特征向量線性組合生成:
▲參數化人臉模型[2]blendshape表情模型
blendshape是3d軟件里用來做模型形變的一種技術,通過調整權重,設計師可以將目標模型變化成一系列預定義的模型,或者這些模型的任意線形組合。
▲blendshape模型,調整權重形成新的表情在數字制作行業,通常用blendshape來制作表情,即用一組臉部基本表情合成新表情。同樣,這些模型的拓撲結構一致,改變的只是頂點位置。為了不出現崩壞扭曲的表情,對權重做限制。
在人臉重建時,通常會使用delta blendshape,即各個表情與正常表情的差值。
將blendshape和參數人臉模型結合起來就有:
S表示一張有著某人臉特征和某表情的臉部模型。
? ▲包含形狀特征和表情的人臉模型[3]重建
根據給定圖像來“估計”人臉模型,有點像渲染的逆過程。因此,除了人臉模型,還得考慮相機參數。
這里采用弱透視投影。
弱透視投影使用與正交投影相同的原則,但乘以一個縮放參數來實現近大遠小的效果。
可看作透視投影和正交投影的混合體。[4]
? ▲三維模型的弱透視投影重建算法的關鍵在于找出合適的參數 ,使三維人臉模型在平面的投影盡可能接近原圖像。如果不考慮紋理,可簡化為**“使人臉模型關鍵點在平面上的投影與2d人臉關鍵點的位置盡可能接近”**。
▲人臉圖像與模型關鍵點一一對應有一點需要注意,常見的人臉關鍵點檢測結果一般是二維點。也就是說,臉的朝向不同,檢測到的臉部邊緣點也會不一樣,2d人臉邊緣點并不在真正的臉頰邊緣線上。
詳情可看下圖。上排圖像的藍點是二維人臉檢測點(2d)。下排圖像藍點是模型關鍵點(3d),紅點是對應的2d點。可以清楚看出,圖像檢測出的2d邊緣點與模型本身3d邊緣點不同。因此,在迭代過程中,需要不斷更新模型的3d邊緣點索引,使二者一一對應。
▲三維模型邊緣點與人臉檢測邊緣點不同[5]有很多方法可以找出三維模型在當前視角下的邊緣點。
可以用凸包算法求出邊緣線,也可以根據法線與視線夾角,求出臉部切線。或者參考[5]中描述,在一組預先保存的臉部線條上求出最外側的點。
通過以上描述,我們已經將重建問題轉為最優化問題。
其中,S是人臉模型,s是縮放尺度,R是旋轉矩陣,t是位移向量,Y是人臉檢測點,n為人臉關鍵點個數。和分別是人臉圖像關鍵點及人臉三維模型點的索引。
由于投影變化存在,這是個非線性最小二乘問題。可以用Gauss-Newton ,Levenberg-Marquardt等算法求解,這里不展開講。
還有另外一種比較簡單的方法。
先利用2d與3d點集估計出模型的相機參數,帶入上式轉為線性問題。然后分階段求出人臉參數和表情參數。整個迭代過程都是固定一部分參數,更新其他參數。
人臉形狀特征參數和表情參數都需要控制在一定范圍內(視模型而定),不然可能會出現不合理的模型形狀。在視頻場景中,還需要考慮幀間穩定性以及前后人臉特征一致等問題。
▲重建出人臉模型應用
完成重建后,我們可獲得人臉三維網格、模型在圖像中的位置,以及當前人臉的blendshape表情參數。 基于以上信息,可以實現各種有意思的效果,下面根據這幾組參數分別舉一些例子。
三維網格和空間位置
有了三維模型和位置信息,我們可以在渲染時把人臉模型遮擋掉,做出三維貼紙的效果,諸如戴頭飾、眼鏡之類。
▲在三維建模工具中建好模型,調整與人臉的相對位置 ▲實時效果模型和紋理
繪制模型uv貼圖,再把人臉模型渲染出來。可以利用這種方法給人臉加上胡子、彩繪、面具等。
▲模型的uv貼圖 ? ▲渲染出帶有貼圖的人臉模型人臉模型參數與表情參數
可以將計算出的表情權重遷移到相同設置的blendshape模型上,用人臉去驅動模型動畫,實現類似animoji的效果。也可以改變人臉原有的表情參數,讓照片動起來。
▲模型的blendshape需要與人臉的blendshape一致(表情相同)[6] ▲人臉驅動模型動畫 ▲讓照片“活”起來大概寫到這,其他方法或細節以后有機會再補充。
參考
[0] Apple just unveiled 'Animoji' — emojis that talk and sync to your face
[1] Facebook buys popular face swapping app for silly selfies
[2] A Morphable Model For The Synthesis Of 3D Faces
[3] Face Transfer with Multilinear Models
[4] 3D projection
[5] High-Fidelity Pose and Expression Normalization for Face Recognition in the Wild
[6] iPhone X Facial Capture – Apple blendshapes
總結
以上是生活随笔為你收集整理的人脸重建速览,从3DMM到表情驱动动画的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Silverlight带关闭动画的内容控
- 下一篇: SharePoint 2013的100个