本發(fā)明屬于圖像處理與模式識別技術領域,具體涉及一種基于三維人臉模型的人臉關鍵點檢測方法。
背景技術:
人臉關鍵點是人臉上一系列具有固定語義的點,如眼角、鼻尖和嘴角等,在基于人臉理解的計算機視覺中,檢測關鍵點是一個重要的預處理步驟。絕大多數(shù)人臉分析系統(tǒng)都需要首先進行關鍵點檢測,以對人臉的五官分布有一個準確的了解,從而在人臉的指定位置提取特征。然而目前大多數(shù)關鍵點檢測方法都只能處理中等姿態(tài)以下,即偏轉(zhuǎn)角(yaw)小于45°的人臉,大姿態(tài)下(偏轉(zhuǎn)角可達到90°)的人臉關鍵點檢測一直是個難點。
其中存在的挑戰(zhàn)主要有以下三個方面:首先,傳統(tǒng)的關鍵點檢測算法中,假設所有關鍵點都具有穩(wěn)定的表象特征從而可以被檢測到。然而,在大姿態(tài)下,一些關鍵點會不可避免地由于自遮擋而變得不可見,這些不可見點由于其表象信息被遮擋而不能被檢測到,造成傳統(tǒng)方法失效;其次,在大姿態(tài)下人臉的表象變化更加復雜,可以從正面變化到側(cè)面,這要求定位算法必須更加魯棒以理解不同姿態(tài)下的人臉表象;最后在訓練數(shù)據(jù)方面,標定大姿態(tài)下人臉的關鍵點是比較困難的,對于不可見的關鍵點需要猜測其位置,大部分現(xiàn)有數(shù)據(jù)庫中的人臉都是中等姿態(tài)下的,少數(shù)包含大姿態(tài)人臉的數(shù)據(jù)庫也僅標注了可見關鍵點,很難設計一個處理任何姿態(tài)的關鍵點算法。
現(xiàn)有技術中一個可能的解決方案是由圖像直接擬合出三維人臉模型。通常使用級聯(lián)的卷積神經(jīng)網(wǎng)絡對一張輸入圖像進行變換,回歸出三維人臉模型的參數(shù)。然而該技術存在以下缺陷:首先,該技術使用歐拉角表述人臉的旋轉(zhuǎn),而歐拉角在大姿態(tài)下會由于萬向節(jié)死鎖而產(chǎn)生二義性;其次,該技術僅使用圖像視角的輸入特征,即將原始圖像直接送入卷積神經(jīng)網(wǎng)絡,而在級聯(lián)中可以使用中間結(jié)果圖像進行逐步校正,從而進一步提升擬合精度;最后,該技術在訓練卷積神經(jīng)網(wǎng)絡時沒有對模型參數(shù)的優(yōu)先級進行有效建模,使卷積神經(jīng)網(wǎng)絡的擬合性能分散在一些次要參數(shù)上。
技術實現(xiàn)要素:
為了解決現(xiàn)有技術中的上述問題,本發(fā)明提出了一種基于三維人臉模型的人臉關鍵點檢測方法,以實現(xiàn)全姿態(tài)下的人臉關鍵點檢測。
該方法包括如下步驟:
步驟01,在人臉訓練樣本中提取人臉圖像和三維人臉模型的初始參數(shù);
步驟02,根據(jù)所述人臉圖像及初始參數(shù)生成姿態(tài)自適應特征和歸一化坐標編碼;
步驟03,分別對所述姿態(tài)自適應特征和歸一化坐標編碼使用卷積神經(jīng)網(wǎng)絡進行變換融合,得到真實殘差和初始參數(shù)的參數(shù)殘差;
步驟04,根據(jù)所述參數(shù)殘差更新所述初始參數(shù),轉(zhuǎn)到步驟02直至所述參數(shù)殘差達到預設閾值;
步驟05,利用達到預設閾值的參數(shù)殘差更新所述三維人臉模型,采集所述三維人臉模型上的人臉關鍵點。
優(yōu)選地,所述步驟02中在生成所述姿態(tài)自適應特征時,對所述三維人臉模型進行投影,投影時的公式包括:
其中,v(p)是構(gòu)造三維人臉模型并投影的函數(shù),可得到三維模型上各關鍵點在圖像上的二維坐標,
優(yōu)選地,所述由四元組[q0,q1,q2,q3]構(gòu)建旋轉(zhuǎn)矩陣的公式為:
優(yōu)選地,所述步驟02中生成姿態(tài)自適應特征包括:
計算所述三維人臉模型每個頂點的二維圓柱坐標,并在方位角軸和高度軸上等間隔地采樣n*n個錨點;在擬合過程中,使用當前模型的參數(shù)對這些錨點進行形變、縮放、旋轉(zhuǎn)和平移得到錨點在圖像上的位置,生成姿態(tài)自適應特征。
優(yōu)選地,所述步驟02中生成歸一化坐標編碼包括如下公式:
pncc(i,p)=i&zbuffer(v3d(p),ncc)
其中,pncc為歸一化坐標編碼,i為輸入的人臉圖像,p為當前參數(shù),&為在通道維度的堆疊運算,函數(shù)zbuffer是將三維面片使用紋理渲染后生成二維圖像的一個函數(shù),v3d(p)是縮放旋轉(zhuǎn)平移形變后的三維人臉,堆疊一起產(chǎn)生的圖為歸一化坐標編碼。
優(yōu)選地,所述步驟03具體包括:
根據(jù)兩個并行卷積神經(jīng)網(wǎng)絡,分別對所述姿態(tài)自適應特征和歸一化坐標編碼進行變換,并使用一個額外的全連接層對變換后的特征進行融合,對融合結(jié)果進行回歸得到參數(shù)殘差。
優(yōu)選地,所述步驟03中參數(shù)殘差的計算公式為:
δpk=netk(paf(pk,i),pncc(pk,i))
其中,pk為當前參數(shù),i為輸入圖像,δpk為當前參數(shù)與真實殘差的殘差,paf為姿態(tài)自適應特征,pncc為歸一化坐標編碼,netk為雙路并行卷積神經(jīng)網(wǎng)絡。
優(yōu)選地,所述步驟03還包括對所述卷積神經(jīng)網(wǎng)絡進行訓練,在訓練時對所述真實殘差進行加權(quán)處理,公式為:
其中,pc=p0+δp,0≤w≤1,w為參數(shù)權(quán)值,δp為卷積神經(jīng)網(wǎng)絡的輸出,pg為真實殘差,p0為當前迭代的輸入?yún)?shù),pc為當前參數(shù),v(p)為形變及弱透視投影函數(shù),diag為對角矩陣構(gòu)造。
優(yōu)選地,所述步驟04中根據(jù)所述參數(shù)殘差更新所述初始參數(shù)具體為將所述參數(shù)殘差與所述初始參數(shù)相加。
與現(xiàn)有技術相比,本發(fā)明至少具有以下優(yōu)點:
通過本發(fā)明中基于三維人臉模型的人臉關鍵點檢測方法,實現(xiàn)了全姿態(tài)下的人臉關鍵點檢測。
附圖說明
圖1為本發(fā)明所提供的基于三維人臉模型的人臉關鍵點檢測方法的流程示意圖;
圖2為本發(fā)明所提供的雙路并行卷積神經(jīng)網(wǎng)絡處理流程示意圖。
具體實施方式
下面參照附圖來描述本發(fā)明的優(yōu)選實施方式。本領域技術人員應當理解的是,這些實施方式僅僅用于解釋本發(fā)明的技術原理,并非旨在限制本發(fā)明的保護范圍。
本發(fā)明公開了一種基于三維人臉模型的人臉關鍵點檢測方法,如圖1所示,包括如下步驟:
步驟00,構(gòu)建三維可變?nèi)四樐P汀?/p>
通過三維掃描器得到三維人臉點云樣本,并使用主成分分析(pca)構(gòu)建三維可變模型:
其中s表示三維人臉,
構(gòu)建了三維人臉模型后,使用弱透視投影將其投影到圖像平面上:
其中,v(p)是構(gòu)造人臉模型并投影的函數(shù),可得到三維模型上各點在圖像上的二維坐標,f為縮放因子,pr為正投影矩陣,r為旋轉(zhuǎn)矩陣,t2d為平移向量;那么擬合的目標參數(shù)為[f,r,t2d,αid,αexp]。
傳統(tǒng)上人臉姿態(tài)通常用歐拉角表示,包括俯仰,偏轉(zhuǎn)和滾轉(zhuǎn)。然而,當偏轉(zhuǎn)角接近90°即姿態(tài)接近側(cè)面時,萬向節(jié)死鎖的問題會使歐拉角產(chǎn)生二義性,即兩個不同的歐拉角可能對應于相同的旋轉(zhuǎn)矩陣。因此,我們采用了四元組[q0,q1,q2,q3]來表示旋轉(zhuǎn)矩陣,并且將縮放因子f整合到此矩陣中,這樣得到的模型參數(shù)集合為:
[f,q0,q1,q2,q3,t2d,αid,αexp]。
使用三維可變?nèi)四樐P妥鳛閿M合目標。手工標定人臉關鍵點作為基礎的訓練樣本(或使用公開的人臉關鍵點數(shù)據(jù)集作為基礎訓練樣本),并在此基礎上使用人臉側(cè)面化技術將人臉進行面外旋轉(zhuǎn),生成變轉(zhuǎn)角更大且更豐富的人臉訓練樣本集合。
步驟01,提取人臉圖像和初始參數(shù)。
步驟02,生成姿態(tài)自適應特征和歸一化坐標編碼。
下面介紹基于卷積神經(jīng)網(wǎng)絡的三維人臉模型擬合算法,即如何使用卷積神經(jīng)網(wǎng)絡估計人臉的姿態(tài)、形狀和表情參數(shù)。對于卷積神經(jīng)網(wǎng)絡的輸入,我們設計了兩種輸入特征,分別是姿態(tài)自適應特征和投影的歸一化編碼。
首先,說明姿態(tài)自適應特征(poseadaptivefeature-paf)。
在卷積神經(jīng)網(wǎng)絡中,傳統(tǒng)的卷積層是沿著二維圖像軸逐像素進行卷積,而在paf中卷積是在人臉的一些固定語義位置進行。paf進行卷積運算的位置通過如下途徑獲得:考慮到人臉可以粗略地用圓柱近似,我們計算三維人臉模型每個頂點的二維圓柱坐標,并在方位角軸和高度軸上等間隔地采樣n*n個錨點。在擬合過程中,給定當前的模型參數(shù)p,我們投影三維人臉模型并獲得錨點在二維圖像上的位置,作為paf進行卷積運算的位置。注意到在錨點上的卷積運算形成了一個n*n的圖,后續(xù)即可進行傳統(tǒng)卷積運算。為了減少遮擋區(qū)域處特征的影響,我們并將遮擋區(qū)域處的響應除以2,生成姿態(tài)自適應特征。
下面說明投影的歸一化坐標編碼(projectednormalizedcooridnatecode-pncc)。這種輸入特征依賴于一種新的坐標編碼,首先將三維平均臉在三維空間中歸一化到0-1上:
歸一化后三維模型上點都唯一地分布在[0,0,0]到[1,1,1]上,因此可以看做一種三維的坐標編碼,我們稱之為歸一化坐標編碼。與通常使用的編號(如0,1,…,n)不同,歸一化坐標編碼在三維空間是連續(xù)的。在擬合過程中,給定當前的模型參數(shù)p,我們使用zbuffer算法來用歸一化坐標編碼渲染投影的三維人臉:
pncc(i,p)=i&zbuffer(v3d(p),ncc)
其中,pncc為歸一化坐標編碼,i為輸入的人臉圖像,p為當前參數(shù),&為在通道維度的堆疊運算,函數(shù)zbuffer是將三維面片使用紋理渲染后生成二維圖像的一個函數(shù),v3d(p)是縮放旋轉(zhuǎn)平移形變后的三維人臉,堆疊一起產(chǎn)生的圖為歸一化坐標編碼,將輸入到卷積神經(jīng)網(wǎng)絡。
這兩種生成的特征具有互補性,其中投影的歸一化編碼屬于圖像視角的特征,其特點是會將原始圖像直接送入卷積神經(jīng)網(wǎng)絡。而姿態(tài)自適應特征屬于模型視角的特征,其特點是會使用擬合的中間結(jié)果對原圖進行校正。投影的歸一化編碼由于將包含整張人臉圖像,因此圖像上下文信息更加豐富,適合人臉定位以及粗擬合,在最初的幾次迭代中較為重要;姿態(tài)自適應特征由于在錨點處進行卷積運算,等價于使用當前模型參數(shù)對圖像中的人臉進行定位并校正,逐步簡化擬合任務,適合細節(jié)上的擬合,在最終的幾次迭代比較重要。
步驟03,變換融合處理,得到參數(shù)殘差。
可以看到,上述這兩種特征存在互補關系,為了充分利用這兩種特征的優(yōu)勢,我們利用雙路并行卷積神經(jīng)網(wǎng)絡結(jié)構(gòu)進行k次迭代。在第k次迭代中,給定一個初始參數(shù)pk,我們用pk生成姿態(tài)自適應特征和投影的歸一化坐標編碼特征,并訓練一個如圖2所示的雙路并行卷積神經(jīng)網(wǎng)絡,其中姿態(tài)自適應特征分路包含5個卷積層、4個池化層和一個全連接層。投影的歸一化坐標編碼分路包含一個姿態(tài)自適應的卷積層,三個普通卷積層,三個池化層和一個全連接層。該網(wǎng)絡使用并行的兩路神經(jīng)網(wǎng)絡分別對兩個特征進行變換,并用一個全連接層進行融合。融合出的最終特征用來回歸出當前參數(shù)與目標參數(shù)的殘差:
δpk=netk(paf(pk,i),pncc(pk,i))
其中,pk為當前參數(shù),i為輸入圖像,δpk為當前參數(shù)與真實殘差的殘差,paf為姿態(tài)自適應特征,pncc為歸一化坐標編碼,netk為雙路并行卷積神經(jīng)網(wǎng)絡。
下面介紹如何訓練卷積神經(jīng)網(wǎng)絡,其基本思想是,使回歸出的參數(shù)殘差接近真實的參數(shù)殘差。然而由于人臉模型參數(shù)的重要性不同,少數(shù)參數(shù)(如姿態(tài))的重要性要遠大于絕大多部分參數(shù),因此需要在訓練時對各參數(shù)的損失進行加權(quán)。傳統(tǒng)的算法中權(quán)值是相互獨立的,通常由人工指定或者根據(jù)“錯誤地估計某參數(shù)所產(chǎn)生的損失”來確定。然而參數(shù)間的權(quán)值是有相互關系的,比如在姿態(tài)參數(shù)足夠準確前,估計表情參數(shù)沒有意義。本發(fā)明通過優(yōu)化一個能量函數(shù)來統(tǒng)一獲得所有參數(shù)的權(quán)值,設計了如下的最優(yōu)加權(quán)的參數(shù)距離損失(optimizedweightedparameterdistancecost-owpdc):
eowpdc=(δp-(pg-p0))tdiag(w*)(δp-(pg-p0))
其中,pc=p0+δp,0≤w≤1,w為參數(shù)權(quán)值,δp為卷積神經(jīng)網(wǎng)絡的輸出,pg為真實殘差,p0為當前迭代的輸入?yún)?shù),pc為當前參數(shù),v(p)為形變及弱透視投影函數(shù),diag為對角矩陣構(gòu)造。
如公式所示,通過將加權(quán)的真實殘差diag(w)*(pg-pc)添加到當前參數(shù)pc中,希望更新后的參數(shù)所構(gòu)建的三維人臉更加接近真實人臉v(pg)。同時,由于神經(jīng)網(wǎng)絡的擬合能力有限,因此使用λ||diag(w)*(pg-pc)||2來建模擬合當前參數(shù)對神經(jīng)網(wǎng)絡產(chǎn)生的壓力,加入到損失項中,期望神經(jīng)網(wǎng)絡能將權(quán)重分配給性價比更高的參數(shù)。
在訓練過程中,對每個樣本求取最優(yōu)的w過于復雜,因此將v(pc+diag(w)*(pg-pc))在pg處使用泰勒展開得到:
||v′(pg)*diag(w-1)*δpc||2+λ||diag(w)*δpc||2
其中,v′(pg)是v(pg)的jacobian矩陣,將上式展開并去掉常數(shù)項,得到:
wt(diag(δpc)v′(pg)tv′(pg)diag(δpc))w-2*1t(diag(δpc)v′(pg)tv′(pg)diag(δpc))w
-λ*wtdiag(δpc.*δpc)w
令h=v′(pg)diag(δpc),則原始的優(yōu)化問題可寫作:
0≤w≤1
上式為一個標準二次規(guī)劃問題,可用內(nèi)點法迅速求解。然而在該損失函數(shù)中h的計算非常耗時,在訓練每個樣本時重新計算h使訓練時間不可接受。本實驗發(fā)現(xiàn)h的唯一非常數(shù)項為v′(pg),而對每個訓練樣本v′(pg)是固定的。因此在訓練之前,可以將每個樣本的v′(pg)計算好并存儲起來,在訓練時直接讀取。求取的權(quán)值即owpdc中各個參數(shù)損失的加權(quán),可以描述各個參數(shù)的優(yōu)先級。
步驟04,根據(jù)所述參數(shù)殘差更新所述初始參數(shù)。
之后將輸入?yún)?shù)與參數(shù)殘差相加,獲得一個更好參數(shù)pk+1=pk+δpk,并進行下一次迭代,包括輸入特征構(gòu)造以及卷積神經(jīng)網(wǎng)絡的參數(shù)估計。進行k次迭代后,使得參數(shù)殘差達到預設閾值后,使用v(pk)獲得三維人臉上的每一點在圖像上的位置。
步驟05,采集三維人臉模型上的人臉關鍵點。
由于現(xiàn)有人臉關鍵點訓練樣本通常為中等姿態(tài)以內(nèi),而本發(fā)明通過對現(xiàn)有訓練樣本進行面外旋轉(zhuǎn),生成大姿態(tài)下的訓練樣本,具體如下:
給定一個訓練樣本,包括人臉圖像以及手工標定的關鍵點,使用基于關鍵點的三維人臉模型擬合可以獲得圖像中人臉的三維模型。然后在背景區(qū)域均勻地采樣一些錨點。對每一個錨點,根據(jù)距離其最近的三維人臉模型上的點來估計其深度。獲得了所有錨點的深度后,使用三角化將錨點組成一系列三角面片。這些面片與擬合出的三維人臉一起,構(gòu)成圖像的深度信息。該“虛擬深度圖像”可以在三維空間中進行面外旋轉(zhuǎn),并以任何角度進行渲染,生成圖像中人臉在不同姿態(tài)下的表象。本發(fā)明將偏轉(zhuǎn)角以5°為步長,逐漸擴大生成一系列虛擬樣本,直至90°。
本發(fā)明克服了傳統(tǒng)關鍵點檢測算法無法定位自遮擋關鍵點的缺陷,直接由圖像進行三維人臉模型擬合,并從擬合好的三維人臉上采樣出關鍵點。在人臉擬合的過程中,除了使用圖像視角的特征投影的歸一化坐標編碼,還設計了特殊的模型視角特征“姿態(tài)自適應特征”,該特征可以使用擬合中間結(jié)果對圖像進行隱式正面化,從而逐步簡化擬合任務,進一步提升擬合精度。由于圖像視角特征和模型視角特征存在互補關系,為了結(jié)合兩種特征的優(yōu)勢,利用雙路并行卷積神經(jīng)網(wǎng)絡同時對兩種輸入特征進行變換并融合,最終使用融合出的特征進行模型參數(shù)回歸。在訓練卷積神經(jīng)網(wǎng)絡的時候,本發(fā)明通過考慮人臉模型參數(shù)的優(yōu)先級而使卷積神經(jīng)網(wǎng)絡重點擬合若干重要參數(shù)進一步提高了擬合精度。最終使得本發(fā)明實現(xiàn)了全姿態(tài)的人臉關鍵點檢測。
至此,已經(jīng)結(jié)合附圖所示的優(yōu)選實施方式描述了本發(fā)明的技術方案,但是,本領域技術人員容易理解的是,本發(fā)明的保護范圍顯然不局限于這些具體實施方式。在不偏離本發(fā)明的原理的前提下,本領域技術人員可以對相關技術特征做出等同的更改或替換,這些更改或替換之后的技術方案都將落入本發(fā)明的保護范圍之內(nèi)。