秦曉飛,盛 凱,朱 玥,楊 勇,趙 剛,賈 程,李成名,魯小東,周堅風
(1.上海理工大學 光電信息與計算機工程學院,上海 200093;2.上海理工大學 機械工程學院,上海 200093;3.杭州億美實業(yè)有限公司,浙江 杭州 310000;4.杭州億美光電科技有限公司,浙江 杭州 310000)
人臉關鍵點檢測是計算機視覺領域的一個重要而且具有挑戰(zhàn)性的任務,它涉及到檢測人臉的中心、眼角、鼻尖等,其關鍵是預測出給定人臉在圖像像素空間中的坐標。人臉關鍵點檢測對視頻中的人臉設別、醫(yī)學診斷中的畸形面部體征檢測等起著重要的作用。因此,如何快速、準確地檢測人臉關鍵點,受到人們廣泛的關注。
人臉關鍵點檢測方法大致分為三種:基于ASM(active shape model)[1]和 AAM(active appearnce model)[2-3]的傳統(tǒng)方法、基于級聯(lián)形狀回歸的方法[4]和基于深度學習的方法[5-10]。目前,應用最廣、精度最高的是基于深度學習的方法。2013年,Sun等[5]首次將CNN(convolutional network)應用到人臉關鍵點檢測,提出一種級聯(lián)的CNN(擁有三個層級)即DCNN(deep convolutional network),此種方法屬于級聯(lián)回歸方法。通過精心設計擁有三個層級的級聯(lián)卷積神經網(wǎng)絡,本文不僅改善了初始不當導致陷入局部最優(yōu)的問題,而且借助于CNN強大的特征提取能力,獲得了更為精準的關鍵點檢測。
2017年,Kowalski等work[10]提出一種新的級聯(lián)深度神經網(wǎng)絡DAN(deep alignment network),以往級聯(lián)神經網(wǎng)絡輸入的是圖像的某一部分,而DAN各階段的輸入均為整張圖片。當網(wǎng)絡均采用整張圖片作為輸入時,DAN可以有效地克服頭部姿態(tài)以及初始化帶來的問題,從而得到更好的檢測效果。DAN之所以能將整張圖片作為輸入,是因為其加入了關鍵點熱圖。
通過實驗發(fā)現(xiàn),人臉檢測時對關鍵點檢測很重要。為了避免不同人臉檢測算法帶來的影響,不管從哪里來的圖片,都經過同一個人臉檢測算法后再輸入到后面的關鍵點檢測中,這樣效果就會變好。本文先是利用可變型模型(deformable part model, DPM)算法檢測出圖片中的人臉區(qū)域,即先利用Sobel梯度算子計算出圖片的梯度方向直方圖,并用支持向量機(support vector machine, SVM)算法對梯度進行分類,檢測出人臉區(qū)域,然后采用殘差網(wǎng)絡(residual network,resNet)和收縮激勵網(wǎng)絡(squeeze-and-excitation networks, SENet)相結合的注意力機制深度神經網(wǎng)絡對該區(qū)域進行人臉關鍵點定位。該算法在人臉數(shù)據(jù)集上獲得了較好的準確率,證明了算法的有效性。
DPM是一種基于組件的檢測算法,先對初始圖像計算梯度方向直方圖,然后用SVM(surpport vector machine)訓練得到物體的梯度模型,最后利用該模型來做人臉與非人臉的分類。其檢測效果如圖1所示。
圖1 DPM 人臉檢測效果圖Fig. 1 DPM face detection effect map
梯度在圖像中對應的就是其一階導數(shù)。模擬圖像f(x,y) 中任一像素點 (x,y) 的梯度是一個矢量,可表示為
式中:Gx為沿x方向上的梯度;Gy為沿y方向上的梯度。梯度的幅值及方向角可表示如下:
數(shù)字圖像中像素點的梯度是用差分來計算的,即
一維離散微分模板可將圖像的梯度信息簡單、快速且有效地計算出來,即
式中:Gx、Gy分別為像素點(x,y)在水平方向及垂直方向上的梯度;H(x,y) 為像素點的灰度值。像素點梯度的幅值及方向計算式如下:
不同的梯度運算模板在其檢測效果上也不一樣,本文采用Sobel梯度算子,其形式如圖2所示。
圖2 Sobel梯度算子Fig. 2 Sobel gradient operator
從梯度計算式中可以看出,梯度幅值絕對值的大小容易受到前景與背景對比度及局部光照的影響,要減少這種影響得到較準確的檢測結果就必須對局部細胞單元進行歸一化處理。
最后計算目標窗口的梯度直方圖。對于整個目標窗口,我們需要將其分成互不重疊、大小相同的細胞單元,然后分別計算出每個梯度的梯度信息,包括梯度大小和梯度方向。
圖3為SVM分類梯度向量圖,對于滑動窗口提取的2個窗口,分別計算出歸一化的梯度特征,然后應用SVM實現(xiàn)是人還是背景的分類判定。SVM全稱為支持向量機,是一種二分類的模型。其主要思想是找到空間中的一個能夠將所有數(shù)據(jù)樣本劃開的超平面,并且使得本集中所有數(shù)據(jù)到這個超平面的距離最短。
圖3 SVM 分類梯度向量Fig. 3 SVM classification gradient vector
注意力模型來源于人腦對事物的觀察,由于人腦在觀察事物時,人眼睛聚焦的位置只是很小的一塊,這時人腦會聚焦在這一小塊圖案上,此時,人腦對圖的設別并不是均衡的,是有權重區(qū)別的。
我們在ResNet中嵌入SE模塊,SeNet會通過學習的方式來自動獲取每個特征通道的重要程度,然后依照這個重要程度去提升有用的特征并抑制對人臉關鍵點檢測任務用處不大的特征。我們使用全局平均池化作為Squeeze操作,緊接著兩個全連接層組成一個Bottleneck結構去建模通道間的相關性,并輸出和輸入特征同樣數(shù)目的權重。首先,將特征維度降低到輸入的1/16,并經過ReLu激活后再通過一個全連接層升回到原來的維度,這樣做具有更多的非線性,可以更好地擬合通道間復雜的相關性,極大地減少了參數(shù)量和計算量;然后,通過一個Sigmoid的門獲得0~1之間歸一化的權重;最后,通過一個Scale的操作來將歸一化后的權重加權到每個通道的特征上。具體框架如圖4所示。
圖4 具有注意力機制的殘差神經網(wǎng)絡框架Fig. 4 A framework of residual neural network with attention mechanism
實驗采用的操作系統(tǒng)是Windows10 64位,GTX1080Ti顯卡GPU,32 GB內存臺式工作服務器,運行環(huán)境為Pytorch平臺。
數(shù)據(jù)集的圖像數(shù)據(jù)是從YouTube人臉數(shù)據(jù)集中提取的,其中包含YouTube視頻中的人物視頻。這些視頻通過一些處理步驟進行輸入,并轉換為包含一個人臉和相關關鍵點的圖像幀集。該人臉關鍵點數(shù)據(jù)集由5 770張彩色圖像組成。所有這些圖像都被分成訓練數(shù)據(jù)集與測試數(shù)據(jù)集。這些圖像中有3 462張是訓練圖像,用于預測關鍵點的模型,另外2 308張是測試圖像,用于測試該模型的準確性。
由于實驗任務是一個回歸問題,因此選用均方根損失函數(shù)(mean squared error, MSE)計算算法的誤差。具體公式如下:
圖5 部分實驗效果圖Fig. 5 Part of experimental results
為了和其他算法作對比,本文算法和其他算法全都放在YouTube人臉數(shù)據(jù)集中的測試集下做實驗。圖6為本文算法和楊海燕等[12]的算法的對比,實驗數(shù)據(jù)如表1所示。由表1可以看出,本文所提出的算法在同一測試集中表現(xiàn)出更好的性能,誤差更低。
圖6 本文算法和楊海燕算法的對比Fig. 6 Comparisons between the algorithm in this paper and Yang Haiyan's
表1 不同算法誤差對比Tab. 1 Error comparison of different algorithms
本文針對深度學習在人臉關鍵點檢測上的應用進行了研究,并成功將注意力機制應用到該領域上?;谧⒁饬Φ哪P涂梢蕴崛〉狡胀ㄉ疃染W(wǎng)絡不易學習到的人臉信息,可以提高人臉關鍵點檢測的準確性。通過實驗發(fā)現(xiàn),本文算法在人臉數(shù)據(jù)集上獲得了98%的準確率,同時均方根誤差只有1.229,證明了算法的有效性。下一步將針對算法的實時性對其做速度上的改進。