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