付文博,何 欣,于俊洋
(1.河南大學(xué)軟件學(xué)院,河南 開封 475000;2.河南省智能數(shù)據(jù)處理工程研究中心,河南 開封 475000)
面部多特征點定位是計算機視覺領(lǐng)域的重要問題,許多任務(wù)都依賴于面部特征點定位的結(jié)果,如面部表情分析、面部識別等。雖然面部特征點定位在近幾年來被廣泛研究,并且取得了巨大的成功,但是在處理復(fù)雜環(huán)境中的定位問題時(Semantic ambiguity)[1],由于受到各種干擾因素的影響,圖像具有復(fù)雜多樣性,因此面部特征點定位仍面臨巨大的挑戰(zhàn)。卷積神經(jīng)網(wǎng)絡(luò)CNN(Convolutional Neural Netowrk)已被證實是一種可行的解決方案,CNN通過對面部圖像進行旋轉(zhuǎn)、平移、縮放,使得模型對姿態(tài)旋轉(zhuǎn)更具魯棒性。然而,在處理遮擋、光線不足等面部輪廓難以區(qū)分的圖像時[2,3],因其無法識別面部區(qū)域,CNN表現(xiàn)卻不好。為解決上述問題,本文設(shè)計了一種單層VGG(Visual Geometry Group)神經(jīng)網(wǎng)絡(luò)[4 - 7]與Canny算法相結(jié)合的網(wǎng)絡(luò)結(jié)構(gòu),能夠在預(yù)測階段對面部區(qū)域進行重定位,在消除面部噪聲區(qū)域干擾的同時,提升特征點定位的準確性,在ibug提供的300-w[5]與300-vw[6]開源數(shù)據(jù)集上取得了較好的預(yù)測結(jié)果。
面部特征點定位大致分為2個方向:傳統(tǒng)方法與深度學(xué)習(xí)的方法。其中,典型的傳統(tǒng)方法包括基于模型的方法和基于回歸的方法。
基于傳統(tǒng)方法的面部特征點定位主要分為基于模型的方法與基于回歸的方法2類。其中,基于模型的方法主要是由Le等[8]提出的ASM(Active Appearance Model)、AAM(Active Appearance Model)模型。該模型對人臉、手、心臟等幾何形狀的物體,通過若干關(guān)鍵特征點的坐標依次串聯(lián),形成1個形狀向量進行后期預(yù)測。然而ASM和AAM也存在一些不足,如處理多樣性較強的面部表情時,單一的線性模型難以擬合現(xiàn)實場景數(shù)據(jù)中的復(fù)雜非線性變化,使得這類基于模型的方法魯棒性較差。基于回歸的方法主要是由Kazemi等[9]提出的基于ERT(Ensemble of Regression Trees)回歸方法下的面部特征點定位,目前DLIB框架使用的正是此方法。這種方法通過建立殘差回歸樹來使人臉形狀從初始隨機定位點集逐步回歸到真實形狀,并通過各關(guān)鍵點附近的隨機森林來學(xué)習(xí),最終得出LBF(Local Binary Feature)特征。雖然這種基于回歸的方法能夠有效定位特征點,但是判定結(jié)果的準確性高度依賴于前期的人工初始化定位工作。
在深度學(xué)習(xí)方式下的面部特征點定位,目前聚焦于基于2D卷積核下的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計與基于3D卷積核下的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計?;?D卷積核的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),典型的有由Liu等[1]提出的基于VGG神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)與Sun等[2]提出的Cascade級聯(lián)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。這類基于2D卷積核的網(wǎng)絡(luò)結(jié)構(gòu)可以定位多角度下的面部特征點,但是在處理有遮擋、像素不高的圖像時,定位結(jié)果較差。基于3D卷積核的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),典型的有由Sagonas等[5]提出的3DMM(3D Morphable Models)網(wǎng)絡(luò)結(jié)構(gòu),該網(wǎng)絡(luò)結(jié)構(gòu)對2D面部圖像進行3D建模,并將3D空間的坐標軸分別定義為XT、YT和ZT,通過學(xué)習(xí)圖像中的非可見面部信息,提升特征點定位的準確性。但是,這種3DMM網(wǎng)絡(luò)結(jié)構(gòu)遭到Tran等[10]的質(zhì)疑:當圖像向高維度轉(zhuǎn)換時,圖像會大概率地出現(xiàn)病態(tài)變異。雖然3D卷積的準確性已得到了業(yè)界認可,但是過高的病態(tài)圖像比例也會大幅降低網(wǎng)絡(luò)的預(yù)測效率。
由此可得,上述幾種神經(jīng)網(wǎng)絡(luò)在面部特征點定位方面都有著可改進的空間。因此,本文設(shè)計了一種基于2D卷積核的單層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),該結(jié)構(gòu)經(jīng)過大量的訓(xùn)練與調(diào)參,在面部特征點定位方面與上述一些基于深度學(xué)習(xí)的網(wǎng)絡(luò)模型[1,3,4]相比有了較大的提升。
本文設(shè)計的神經(jīng)網(wǎng)絡(luò)除輸入輸出層之外還包含7個卷積層、4個池化層和1個全連接層,在1次或2次卷積操作以后緊跟1個池化層進行特征提取。本文設(shè)計的CNN結(jié)構(gòu)參數(shù)如表1所示,結(jié)構(gòu)圖如圖1所示。
Table 1 Neural network parameter表1 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)
Figure 1 Convolutional neural network structure in this paper圖1 本文CNN結(jié)構(gòu)圖
本文神經(jīng)網(wǎng)絡(luò)輸入層的參數(shù)是(128,128,3)的彩色圖像以及與之相對應(yīng)的面部特征點坐標集合,其中每一幅圖像中包含68個面部特征點。為方便網(wǎng)絡(luò)分批次迭代訓(xùn)練,需對每一幅圖像中對應(yīng)的68個特征點坐標(x,y)進行一元展開合并處理,變?yōu)?x1,y1,…,x68,y68)這樣的格式類型。網(wǎng)絡(luò)層數(shù)的確定參考了Cascade神經(jīng)網(wǎng)絡(luò)模型[7],該模型采用雙層網(wǎng)絡(luò)結(jié)構(gòu),其目的是進行人臉相似度判斷。而本文研究的是面部特征點定位,因此在原有網(wǎng)絡(luò)模型的基礎(chǔ)上進行改進,設(shè)計出一種基于單層VGG-16的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)[4]。其卷積輸出的計算方法如式(1)所示:
N=(W-F+2P)/S+1
(1)
其中,N為輸出圖像的維度,W為每一層圖像的輸入維度,F(xiàn)為卷積核參數(shù),S為步長,P為擴充的邊緣像素數(shù)。每一次卷積計算以后結(jié)合ReLU激活單元進行輸出:
ReLU=Max(0,wTx+b)
(2)
其中,w是神經(jīng)元的權(quán)重值,x是圖像,b是偏移量。輸入的圖像信息經(jīng)過每層卷積、池化計算后,其維度會相應(yīng)減小。本文選取ReLU激活單元對每層輸出值進行極大值保留,從而使得神經(jīng)網(wǎng)絡(luò)在后續(xù)的訓(xùn)練過程中可以正常更新參數(shù),并避免梯度消失。最終,在訓(xùn)練結(jié)束后可獲得局部最優(yōu)解。
ibug網(wǎng)站所提供的300-w與300-vw數(shù)據(jù)集中,每一幀圖像都有對應(yīng)的pts文本。該文本記錄了面部特征點的坐標。利用這些面部特征點集合,可以定位圖像中的面部矩形區(qū)域。其面部區(qū)域的左上角與右下角坐標的計算方法如式(3)所示:
(x1,y1)∈(min(x),min(y))
(x2,y2)∈(max(x),max(y))
(3)
其中,xi和yi分別為面部68個特征點對應(yīng)的橫坐標和縱坐標:
(xi,yi)={(x1,y1),…,(xm,ym)}
(4)
m為圖像中特征點的樣本總數(shù),max和min分別代表求集合內(nèi)的最大值和最小值。
為了避免神經(jīng)網(wǎng)絡(luò)在訓(xùn)練過程中出現(xiàn)過擬合的現(xiàn)象(overfit),本文又在式(3)的基礎(chǔ)上進行2像素的擴充,這樣面部特征點不會出現(xiàn)在圖像的邊界上,同時神經(jīng)網(wǎng)絡(luò)在訓(xùn)練過程中也可以學(xué)習(xí)一些背景圖像的信息,增強了網(wǎng)絡(luò)結(jié)構(gòu)的健壯性。圖2a為歸一化處理前的圖像,圖2b為歸一化處理后的圖像。
Figure 2 Facial area relocation圖2 面部區(qū)域重定位
在測試集中,由于無法依靠pts文件進行面部區(qū)域重定位,因此如何定位基于3.2節(jié)的面部邊緣擴充2像素的矩形區(qū)域,是本文所設(shè)計的神經(jīng)網(wǎng)絡(luò)在預(yù)測階段的重要環(huán)節(jié)。為解決重定位問題,本文提出了一種C-Canny面部邊緣檢測算法,該算法可以顯著地提高神經(jīng)網(wǎng)絡(luò)處理非訓(xùn)練集圖像(wild photo)的準確性。C-Canny算法流程如圖3所示。
Figure 3 Flow chart of C-Canny algorithm圖3 C-Canny算法流程
3.3.1 面部區(qū)域預(yù)處理
首先,利用Haar分類器[9]進行面部區(qū)域初定位。Haar分類器又稱Viola-Jones分類器,是Viola和Jones分別在2001年提出的算法。該分類器由Haar特征提取、離散強分類器和強分類級聯(lián)器組成。其核心思想是提取人臉圖像的Haar特征并使用積分圖對特征進行運算,最終定位面部區(qū)域。雖然該算法具有一定的時效性,但是得出的面部區(qū)域與本文采用的基于面部邊緣擴充2像素的圖像相比,有著較大的差異。因此,本文借助Canny算法進行矩形邊緣縮進,取得與網(wǎng)絡(luò)模型訓(xùn)練階段相類似的圖像規(guī)格。Canny算法流程如下所示:
獲取測試集輸入圖像的灰度格式,并進行高斯模糊處理:
(5)
F(x,y)=G(x,y)*F(x,y)
(6)
其中,F(x,y)為輸入圖像,G(x,y)為高斯函數(shù),σ為正態(tài)分布的標準差。高斯函數(shù)與原圖像進行卷積運算,消除灰度圖像中的高斯白噪聲干擾。之后利用Sobel算子計算梯度,獲取到面部邊緣集合。圖4展示了邊緣集合在圖像中的具體位置(已將邊緣集合進行描白處理)。其中圖4a為沒有經(jīng)過消噪處理的圖像,圖4b為經(jīng)過高斯模糊處理的灰度圖像。經(jīng)對比可得,經(jīng)過高斯消噪處理的灰度圖像能夠較好地定位面部邊緣。
Figure 4 Comparison of Gaussian blur圖4 高斯模糊處理對比圖
3.3.2 圖像非極大值抑制
面部圖像經(jīng)3.3.1節(jié)處理后,還需進行非極大值抑制的工作。該過程是為了消除邊緣集合中的偽邊緣點,進一步細化面部邊緣區(qū)域,得到更為準確的邊界集合。
由3.3.1節(jié)Sobel算子處理后的圖像,可以獲得基于圖像像素點的梯度幅值與梯度方向2個集合:
(7)
(8)
其中,gx,gy為Sobel算子計算出的圖像內(nèi)像素點的水平方向與垂直方向的梯度值。式(7)為圖像信息的梯度幅值,式(8)為圖像的梯度方向。
經(jīng)過Sobel算子與8連通處理后的圖像會出現(xiàn)基數(shù)較大的偽邊緣點集合,因此為了去除掉這些偽邊緣點,還需進行雙閾值下的非極大值抑制。
因為每一幅圖像的灰度分布值是不固定的,所以需要結(jié)合對應(yīng)圖像像素點的灰度分布直方圖來進行高、低雙閾值選取。3.3.1節(jié)的處理過程將原始圖像轉(zhuǎn)換為了由邊界信息組成的特征點集合,其值域滿足統(tǒng)計決策理論,因此可以借助Otsu算法來獲得全局最佳的雙閾值,其計算公式如式(9)所示:
(9)
其中,σ代表類間方差,σG代表全局方差,k1與k2代表圖像像素值。Otsu算法以直方圖中的方差、均值、均方差為參數(shù),可以快速地計算出基于直方圖統(tǒng)計的全局最優(yōu)的2個閾值。如式(9)所示,Otsu算法將k1與k2的關(guān)系設(shè)置為3∶1的比例,然后將像素點集合中的灰度最小值賦給k2,計算出當前ψ的結(jié)果值并記錄。之后,依次將k2向上取值,直到k1的值大于最大的灰度值。這時,取最大ψ值下的k1與k2為全局最優(yōu)的滯后雙閾值。
最后,進行非極大值抑制處理:
GH(x,y)=GNH(x,y)-GNL(x,y)
(10)
其中,GNH代表灰度值小于k1的像素點集合,GNL為灰度值大于k2的像素點集合。該表達式得出的結(jié)果為強邊界點集合,其意義為:除去了強邊緣點集中的弱邊緣點,只保留真正的邊緣點集合。這些細化后的面部邊界信息,可為面部區(qū)域再定位打下基礎(chǔ)。
3.3.3 面部區(qū)域再定位
由3.3.2節(jié)得出的新的面部輪廓點集合如式(10)所示,可以采用本節(jié)的方法獲取基于面部邊界擴充2像素的矩形區(qū)域,進而取得與訓(xùn)練階段同規(guī)格的面部圖像,提升面部特征點定位的準確率。由式(10)得到的細化后的面部邊緣點集合如式(11)所示:
U(x,y)={x,y|x,y∈GNH(x,y)}
(11)
將集合U(x,y)經(jīng)過面部區(qū)域再定位處理,可得到最終的面部區(qū)域。面部區(qū)域再定位偽代碼如算法1所示。
算法1 面部區(qū)域再定位
輸入:U(x,y)。/*經(jīng)過C-Canny算法處理后的邊緣點集合*/
輸出:(sw,sh,w,h)。/*面部區(qū)域左上角坐標,圖像的寬度與高度*/
步驟1 取細化邊緣集合中中間行的最右節(jié)點:
w=(max(U(x,y))-min(U(x,y))).shape[0];/*shape[0]意為取(x,y)中的x*/
h=(max(U(x,y))-min(U(x,y))).shape[1];/*shape[1]意為取(x,y)中的y*/
sw=min(U(x,y).shape[0];
sh=min(U(x,y).shape[1];
midRow=sh+h/2;
步驟2 驗證midRow所在行邊緣節(jié)點的可用性:
if min(U(sh,midRow)) > 0.25 and min(U(sh,midRow)) < 0.75:/*人臉區(qū)域大小適中,滿足重定位條件,移動圖像左上角坐標點*/
sw=min(sh,U(midRow)).shape[0];
sh=min(sh,U(midRow)).shape[1];
跳轉(zhuǎn)到步驟3;
else:
C-Canny算法找不到邊界信息,圖像質(zhì)量不理想,跳過并返回步驟1,繼續(xù)處理下一幀圖像。
步驟3 平移面部區(qū)域:
/*處理面部圖像區(qū)域,使其居中顯示,并擴充2像素邊緣寬度*/
w=w-sw+1;
h=h-sh+1;
sw=sw-1;
sh=sh-1;
面部區(qū)域再定位算法的實際表現(xiàn)如圖5所示,其中圖5a為在訓(xùn)練集上基于pts文件獲得的面部圖像與定位結(jié)果,圖5b為在測試集上使用C-Canny算法處理后的面部圖像與定位結(jié)果。兩者均為基于面部邊界擴充2像素的圖像,將這些圖像輸入到本文設(shè)計的網(wǎng)絡(luò)結(jié)構(gòu)中,都能夠較好地預(yù)測出面部特征點。
Figure 5 Relocation results on train dataset and predict dateset圖5 訓(xùn)練集數(shù)據(jù)與預(yù)測集上的定位結(jié)果
本文使用的實驗數(shù)據(jù)是ibug網(wǎng)站提供的300-w[5]和300-vw[6]開源數(shù)據(jù)集。在300-w數(shù)據(jù)集中,每一幀圖像都有著與之對應(yīng)的pts文件,它記錄著對應(yīng)圖像中的面部特征點坐標。而在300-vw的數(shù)據(jù)集中,面部圖像是以avi格式的視頻流文件進行存儲的,本文通過FFmpeg工具將每一組視頻流文件按幀分割成與pts文件一一對應(yīng)的圖像,總計得到了約22萬個訓(xùn)練樣本,排除掉不能識別面部區(qū)域的圖像,最終得到了約20萬個訓(xùn)練樣本。
特征點信息如圖6所示。
Figure 6 Landmarks of face圖6 面部特征點分布圖
本文采用的損失函數(shù)是均方誤差MSE(Mean Square Error),其定義如式(12)所示:
(12)
(13)
其中,yi是真實數(shù)據(jù),Yi是預(yù)測的數(shù)據(jù),wi為大于0的權(quán)重參數(shù)。在數(shù)理統(tǒng)計中,均方誤差是指參數(shù)估計值與參數(shù)真值之差平方的期望值,是衡量“平均誤差”的一種較方便的方法,可以評價數(shù)據(jù)的變化程度。MSE的值越小,說明神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)具有越高的準確性。
本文采用基于Tensorflow自定義的estimator框架進行網(wǎng)絡(luò)訓(xùn)練,使用的編程語言是Python。因為訓(xùn)練樣本數(shù)多達20萬,為加速網(wǎng)絡(luò)結(jié)構(gòu)的訓(xùn)練速度,本文將實驗樣本數(shù)據(jù)轉(zhuǎn)換為TFRecord文件類型。該文件類型采用的是tf.data數(shù)據(jù)格式,tf.data以并行輸入的方式進行訓(xùn)練,達到加速I/O流的效果。訓(xùn)練樣本按3∶1∶1的比例分為訓(xùn)練集、驗證集和測試集,以提升網(wǎng)絡(luò)模型的魯棒性。實驗環(huán)境為:NVIDIA 1066顯卡與Intel i5 8300 CPU。訓(xùn)練總次數(shù)為20萬次,其中單次訓(xùn)練的隨機樣本數(shù)為512個,并對輸入樣本采用0.2的舍棄因子,以避免過擬合的現(xiàn)象發(fā)生。
網(wǎng)絡(luò)訓(xùn)練過程中的損失函數(shù)時序值如圖7所示。在迭代訓(xùn)練5 000次以后,損失函數(shù)已經(jīng)處于0.01~0.06。雖然在17 000次有1次較為劇烈的波動,但是其值依然很低(0.07),仍是一個可以接受的范圍。
圖8為在數(shù)據(jù)集300-w和300-vw上,本文設(shè)計的網(wǎng)絡(luò)結(jié)構(gòu)與部分已有方法的實驗結(jié)果對比。
與一些傳統(tǒng)方法(ESR,LBF等)相比,本文所設(shè)計的網(wǎng)絡(luò)結(jié)構(gòu)取得了更低的損失函數(shù)值(降低了22.3%),但與級聯(lián)型神經(jīng)網(wǎng)絡(luò)(CasCNN)相比,在total dataset上的損失函數(shù)值略高(7.49%)。原因在于本文網(wǎng)絡(luò)的訓(xùn)練過程中并未使用全集樣本進行訓(xùn)練,而是采用隨機樣本訓(xùn)練的方法。該方法能夠較好地避免模型在訓(xùn)練期間出現(xiàn)過擬合現(xiàn)象,代價則是在全局預(yù)測階段使損失函數(shù)的值略高。本文設(shè)計的網(wǎng)絡(luò)與級聯(lián)型網(wǎng)絡(luò)在common dataset上的損失函數(shù)相持平(4.85%),出現(xiàn)這種現(xiàn)象的原因是:級聯(lián)型的網(wǎng)絡(luò)層基數(shù)較大,在訓(xùn)練過程中經(jīng)過多層的卷積、池化運算,其損失函數(shù)在訓(xùn)練集上會呈現(xiàn)較低的結(jié)果值,但是該值不能作為評價神經(jīng)網(wǎng)絡(luò)優(yōu)劣性的指標,因為其無法等同于在測試集上也能取得較低的均方誤差值。從圖8本文網(wǎng)絡(luò)結(jié)構(gòu)與CasCNN在challenge dataset中的數(shù)據(jù)對比也可得出:本文網(wǎng)絡(luò)結(jié)構(gòu)在處理非訓(xùn)練集時更具準確性與魯棒性,并且因使用的是單層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),在訓(xùn)練難度上明顯優(yōu)于級聯(lián)型神經(jīng)網(wǎng)絡(luò),方便網(wǎng)絡(luò)模型后續(xù)更好地調(diào)參與優(yōu)化工作。
圖9a展示的是UVXYZ神經(jīng)網(wǎng)絡(luò)[11]的定位結(jié)果,圖9b是SAN神經(jīng)網(wǎng)絡(luò)[12]的定位結(jié)果。
Figure 9 Prediction results of UVXYZ and SAN圖9 UVXYZ神經(jīng)網(wǎng)絡(luò)和SAN神經(jīng)網(wǎng)絡(luò)的預(yù)測結(jié)果
圖10為本文方法的預(yù)測結(jié)果。與基于3D卷集核的UVXYZ神經(jīng)網(wǎng)絡(luò)[11]相比,本文設(shè)計的網(wǎng)絡(luò)結(jié)構(gòu)因使用的是2D卷集核,能夠避免圖像向高維空間轉(zhuǎn)換的時耗,提升了約15%的模型響應(yīng)速度,并且能夠準確定位數(shù)目更多的面部特征點。當處理面部有遮擋的圖像時,使用SAN神經(jīng)網(wǎng)絡(luò)[12]會出現(xiàn)邊緣輪廓點定位不準確的問題,而本文的網(wǎng)絡(luò)結(jié)構(gòu)借助Canny算法進行面部區(qū)域重定位,較好地避免了這種問題的發(fā)生,并在均方誤差值上與SAN神經(jīng)網(wǎng)絡(luò)相比降低了約20%。
Figure 10 Prediction results of method in this paper圖10 本文方法預(yù)測結(jié)果
綜上所述,由本文設(shè)計的網(wǎng)絡(luò)模型訓(xùn)練20萬次即可達到一個較為穩(wěn)定的結(jié)果,在面部特征點定位方面與現(xiàn)有的一些方法相比將均方誤差降到了0.028,并將準確率提升了約15%。
進一步的工作將繼續(xù)關(guān)注面部特征點定位研究,特別是對于3D卷積核的改進,不斷優(yōu)化本文的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),使其能夠準確定位如高曝光、低暗度、高遮擋等極端條件下的面部特征點。最終將特征點定位與面部識別結(jié)合在一起,實現(xiàn)基于視頻流的活體檢測系統(tǒng)。