趙大鵬,顧益軍,袁麗欣
(中國人民公安大學(xué) 信息網(wǎng)絡(luò)安全學(xué)院,北京 102623)
隨著人工智能、計算機視覺的不斷發(fā)展,生物特征識別技術(shù)也逐漸被應(yīng)用于日常生活。其中,人臉識別技術(shù)由于方便、隱蔽、成本低等優(yōu)點得到了廣泛應(yīng)用。
現(xiàn)行人臉識別技術(shù)已有完整解決方案,實現(xiàn)流程已經(jīng)基本固定,一般有以下4個環(huán)節(jié):①對圖片進(jìn)行預(yù)處理;②對圖片中的人臉進(jìn)行檢測,初步判斷人臉的數(shù)量和大致位置;③對人臉關(guān)鍵點進(jìn)行檢測和定位;④提取人臉特征并進(jìn)行檢索匹配。對每個環(huán)節(jié)的技術(shù)革新都能直接或間接影響人臉識別精度。
人臉關(guān)鍵點檢測在人臉識別中有重要的承上啟下作用。人臉關(guān)鍵點檢測可以為后續(xù)人臉識別操作提供數(shù)據(jù)基礎(chǔ),人臉關(guān)鍵點檢測精度也直接影響人臉識別精度。
近年來,人臉關(guān)鍵點檢測技術(shù)取得了長足發(fā)展。許多研究人員將分類器、分類算法應(yīng)用于人臉關(guān)鍵點檢測,取得了很好效果。目前人臉關(guān)鍵點檢測算法主要分為兩大類:①針對每個關(guān)鍵點使用不同的分類器;②使用一個分類器預(yù)測全部關(guān)鍵點。第一種算法有Ababoost[1]、SVM[2]、隨機森林、卷積神經(jīng)網(wǎng)絡(luò)等。這些方法主要通過以圖像局部特征的分析對人臉關(guān)鍵點進(jìn)行檢測。Dantonede[3]使用隨機森林算法,對特征密集區(qū)進(jìn)行綜合分析和預(yù)測。Valastar[4]使用SVM算法,利用馬爾科夫隨機場模擬關(guān)鍵點內(nèi)在約束。由于人臉關(guān)鍵點之間存在相互約束關(guān)系,例如依據(jù)眼睛和嘴角的位置可以大致確定鼻尖的位置,使用第一類算法時通常先檢測出多個候選區(qū)域,然后使用約束以確定最優(yōu)關(guān)鍵點。該方法有檢測候選區(qū)域不穩(wěn)定和工作效率低的問題。第二類算法只使用一個分類器對所有關(guān)鍵點進(jìn)行預(yù)測,關(guān)鍵點之間的內(nèi)在約束已經(jīng)隱含于分類器中。同時使用一個分類器提高了檢測效率,但檢測準(zhǔn)確性不足。級聯(lián)卷積神經(jīng)網(wǎng)絡(luò)框架結(jié)合兩類算法的優(yōu)點,先對人臉關(guān)鍵點進(jìn)行粗檢測,然后使用不同分類器分別對各關(guān)鍵點進(jìn)行精確檢測。為了進(jìn)一步提升檢測效果,本文使用殘差神經(jīng)網(wǎng)絡(luò)對級聯(lián)框架進(jìn)行優(yōu)化,獲得了很好的實驗效果。
目前卷積神經(jīng)網(wǎng)絡(luò)和其它深層網(wǎng)絡(luò)模型已成功應(yīng)用于視覺分析任務(wù)。從圖1中ImageNet歷年大賽情況來看,層次更深、更加復(fù)雜的網(wǎng)絡(luò)模型能更有效地提升圖片分類的精確度。當(dāng)數(shù)據(jù)量巨大,隨著數(shù)據(jù)量的提高,基于回歸方法的分類精度增長不大,而基于神經(jīng)網(wǎng)絡(luò)的分類正確率仍然有顯著提高。伴隨卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展,各研究領(lǐng)域也取得了長足進(jìn)步?,F(xiàn)今,神經(jīng)網(wǎng)絡(luò)已經(jīng)成功應(yīng)用于生活的各方面。
圖1 ILSVRC歷年優(yōu)秀模型層數(shù)和識別錯誤率
隨著卷積神經(jīng)網(wǎng)絡(luò)層數(shù)的加深,梯度反傳對上層神經(jīng)網(wǎng)絡(luò)的影響會逐漸降低,出現(xiàn)梯度消失,阻礙損失函數(shù)的收斂。同時,隨著網(wǎng)絡(luò)層數(shù)的加深,還會出現(xiàn)精度衰退問題。精度隨著網(wǎng)絡(luò)層數(shù)加深先達(dá)到飽和,再增加網(wǎng)絡(luò)層數(shù)會導(dǎo)致精度衰退。精度衰退同時發(fā)生在訓(xùn)練集和測試集中,可以排除過擬合問題。殘差神經(jīng)網(wǎng)絡(luò)[5]加入了殘差基本模塊(見圖2),很好地解決了精度衰退問題。假定神經(jīng)網(wǎng)絡(luò)的輸入為x,期望輸出為H(x),如果把輸入傳到輸出作為結(jié)果,那么期望輸出H(x)=F(x)+x,需要學(xué)習(xí)優(yōu)化的目標(biāo)則變?yōu)镕(x),即期望輸出和輸入的殘差。由于殘差神經(jīng)網(wǎng)絡(luò)增加了一個旁路,保護了輸入信息的完整性,一定程度上避免了梯度消失問題,而且訓(xùn)練輸入和期望輸出的殘差更加容易。因此,本文利用殘差神經(jīng)網(wǎng)絡(luò)良好的分類效果對級聯(lián)框架進(jìn)行優(yōu)化。同時,本文吸收了第二代殘差神經(jīng)網(wǎng)絡(luò)的優(yōu)化思想,對第一代殘差神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化和修改。在第二代殘差神經(jīng)網(wǎng)絡(luò)[6]中,每層都使用Batch Normalization。相比第一代殘差神經(jīng)網(wǎng)絡(luò),第二代殘差神經(jīng)網(wǎng)絡(luò)對輸入提供預(yù)激活以代替卷積后的激活函數(shù)。經(jīng)過修改后的第二代殘差神經(jīng)網(wǎng)絡(luò)可以達(dá)到更高的1 001層,因此第二代殘差神經(jīng)網(wǎng)絡(luò)比第一代有更好的預(yù)測效果。
圖2 殘差神經(jīng)網(wǎng)絡(luò)基本模型
面對遮擋、姿態(tài)、亮度等問題對人臉關(guān)鍵點檢測的挑戰(zhàn)中,現(xiàn)行的解決方案分為兩種:分別預(yù)測[1-2,7-9]和直接預(yù)測[3-4,10-13]。分別預(yù)測指分別對單個關(guān)鍵點進(jìn)行預(yù)測,直接預(yù)測指一次性對所有關(guān)鍵點進(jìn)行預(yù)測。分別預(yù)測需要對圖片進(jìn)行劃分,在劃分單個預(yù)測區(qū)域時可能破壞局部特征。同時,由于人臉關(guān)鍵點的位置具有內(nèi)在聯(lián)系,使用分別預(yù)測需要有一個關(guān)鍵點位置約束方法維系關(guān)鍵點之間的內(nèi)在聯(lián)系;直接預(yù)測不對圖片進(jìn)行劃分,同時關(guān)鍵點文字約束也隱含在分類器內(nèi)部,但是直接預(yù)測對分類器要求較高,識別精度有限。
結(jié)合上述兩種方法的優(yōu)點,本文采用三級級聯(lián)卷積神經(jīng)網(wǎng)絡(luò)框架,先使用直接預(yù)測方法對整張圖片的關(guān)鍵點進(jìn)行識別,得到粗略的關(guān)鍵點位置,再用分別預(yù)測的方法對每個關(guān)鍵點進(jìn)行識別,以增加關(guān)鍵點識別精度。同時分級結(jié)構(gòu)也可以降低每一級網(wǎng)絡(luò)的工作難度,下一級在上一級的基礎(chǔ)上進(jìn)行精確預(yù)測,能夠進(jìn)一步提高關(guān)鍵點識別精確率。
級聯(lián)卷積神經(jīng)網(wǎng)絡(luò)的主要思想是將關(guān)鍵點檢測從粗到精地對精確度進(jìn)行提升。整體結(jié)構(gòu)分為三層,在檢測前經(jīng)過人臉檢測層處理,目的是裁剪人臉圖像,并縮小或放大為固定尺寸圖片。第一層對輸入的人臉圖像進(jìn)行粗略檢測,第二層和第三層均是在上層輸入數(shù)據(jù)的基礎(chǔ)上對單個關(guān)鍵點進(jìn)行微調(diào)。
圖3 級聯(lián)卷積神經(jīng)網(wǎng)絡(luò)整體框架
文獻(xiàn)[14]中的三層網(wǎng)絡(luò)結(jié)構(gòu)均使用多個卷積神經(jīng)網(wǎng)絡(luò),對預(yù)測結(jié)果求平均值以提高檢測精度。但經(jīng)過驗證,該方法精度提升有限。本文使用殘差神經(jīng)網(wǎng)絡(luò),網(wǎng)絡(luò)結(jié)構(gòu)更加復(fù)雜、參數(shù)量更大,出于訓(xùn)練和預(yù)測速度的考慮,本文放棄使用求平均的方法,針對每個模塊只用一個卷積神經(jīng)網(wǎng)絡(luò),不再使用多個。
第一層的工作效果很大程度上決定整體實現(xiàn)效果,所以第一層使用152層殘差神經(jīng)網(wǎng)絡(luò),以期獲得盡可能準(zhǔn)確的輸出。第一層輸入為大小為224*224的人臉檢測輸出結(jié)果,輸出為5個關(guān)鍵點的位置信息。第二層的結(jié)構(gòu)和第三層類似,均是以上層預(yù)測的關(guān)鍵點為中心選取5個矩形區(qū)域,分別使用不同殘差神經(jīng)網(wǎng)絡(luò)進(jìn)行檢測。區(qū)別在于選取圖片大小和使用殘差神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)。
第一層的輸入為整個人臉信息。由于不相關(guān)區(qū)域影響檢測效果,所以大區(qū)域也不夠精確。第二層和第三層依據(jù)第一層的信息,只檢測部分區(qū)域,對關(guān)鍵點位置進(jìn)行微調(diào),以進(jìn)一步提高精確度。由于這兩次的輸入為局部區(qū)域信息,其預(yù)測結(jié)果也不夠可靠,所以只允許第二層、第三層在很小的范圍內(nèi)調(diào)整第一層的預(yù)測。最終預(yù)測結(jié)果為:
X=X1+ΔX2+ΔX3
(1)
其中X為最終預(yù)測結(jié)果,X1為第一層輸出結(jié)果,ΔX2和ΔX3分別為第二層和第三層的調(diào)整。
整體網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。第一層使用的152層殘差神經(jīng)網(wǎng)絡(luò)為F1。第二層使用的分別是對左眼、右眼、鼻尖、左嘴角、右嘴角進(jìn)行檢測的44層殘差神經(jīng)網(wǎng)絡(luò),分別為LE2、RE2、N2、LM2、RM2。第三層使用的20層殘差神經(jīng)網(wǎng)絡(luò)分別為LE3、RE3、N3、LM3、RM3。
本文對殘差神經(jīng)網(wǎng)絡(luò)進(jìn)行改進(jìn),每層分別使用不同結(jié)構(gòu)的殘差神經(jīng)網(wǎng)絡(luò),具體網(wǎng)絡(luò)模型結(jié)構(gòu)見表1。3種殘差神經(jīng)網(wǎng)絡(luò)都先進(jìn)行7*7卷積,第一層卷積步數(shù)為2,第二、三層為1。然后進(jìn)行最大池化,步數(shù)為2;后經(jīng)過不同的、基于圖1模型的resnet module得到深度為x、大小為7*7的張量。Resnet module主要使用1*1的卷積核控制輸出的張量深度;最后池化得到深度為x,大小為1*1的張量,即去除了全連接層,減小了參數(shù)量,經(jīng)過線性層分別輸出10維、2維、2維的關(guān)鍵點位置信息。
表1 各層殘差神經(jīng)網(wǎng)絡(luò)模型
本文訓(xùn)練硬件環(huán)境為一臺服務(wù)器,測試硬件環(huán)境為一臺筆記本電腦和一條多顯卡服務(wù)器。軟件環(huán)境為ubuntu16.10 + caffe + CUDA + Cudnn + opencv3.2 + anaconda。
本文所有代碼都是在Caffe的基礎(chǔ)上實現(xiàn)的。Caffe是伯克利大學(xué)賈楊清博士使用C++代碼編寫的一個進(jìn)行卷積神經(jīng)網(wǎng)路運算的框架。在研究中,首先修改殘差神經(jīng)網(wǎng)絡(luò)網(wǎng)路結(jié)構(gòu)的輸出層,使其輸出為十維數(shù)據(jù),再將修改后的殘差神經(jīng)網(wǎng)絡(luò)模型納入到級聯(lián)卷積神經(jīng)網(wǎng)絡(luò)中,最后利用收集的數(shù)據(jù)進(jìn)行訓(xùn)練和測試。
訓(xùn)練集為Celeba數(shù)據(jù)集,包括10 177個人的202 599張圖片[15]。為了加大樣本數(shù)量,本文對訓(xùn)練集數(shù)據(jù)使用順時針和逆時針旋轉(zhuǎn)5°和10°進(jìn)行擴充,然后再翻轉(zhuǎn)進(jìn)行擴充。訓(xùn)練過程中,首先對F1進(jìn)行訓(xùn)練,訓(xùn)練完成后,使用F1對訓(xùn)練數(shù)據(jù)集進(jìn)行預(yù)測,以F1輸出關(guān)鍵點為中心提取5個大小為56*56的矩形區(qū)域,使用該區(qū)域?qū)Φ诙舆M(jìn)行訓(xùn)練;然后以第二層輸出關(guān)鍵點為中心,分別提取大小為28*28的矩形區(qū)域,用于第三層訓(xùn)練。
本文使用測試集為BioID、Lfpw。
Bioid數(shù)據(jù)集包括1 521張灰度大小為384*286的圖片,包含23個測試者的各種拍攝角度和光照條件。
Lfpw數(shù)據(jù)集(Labeled Face Parts in the Wild)[16]為Kriegmand等提供,包括1 432張從互聯(lián)網(wǎng)上得到的人臉圖片(1132張訓(xùn)練圖片和300張測試圖片),并人工標(biāo)注35個關(guān)鍵點。LFPW提供了關(guān)鍵點是否可見的字段,共有4個值:0代表關(guān)鍵點可見、1代表關(guān)鍵點被遮擋、2代表關(guān)鍵點由于角度原因而不可見、3代表由于裁剪原因而關(guān)鍵點不可見。每張圖片手工標(biāo)注了20個關(guān)鍵點。
使用評價標(biāo)準(zhǔn)為均方根誤差率。第i張圖片的均方根誤差率為:
(2)
其中,ErrorRatei表示第i張圖片的均方根誤差率,M代表關(guān)鍵點的個數(shù),Xij表示第i張圖片的第j個關(guān)鍵點的橫坐標(biāo),xij表示第i張圖片的第j個關(guān)鍵點的實際橫坐標(biāo),Yij表示第i張圖片的第j個關(guān)鍵點的縱坐標(biāo),yij表示第i張圖片的第j個關(guān)鍵點的實際縱坐標(biāo)。ri表示圖片的邊框長度。
整體平均均方根誤差率為:
(3)
N表示數(shù)據(jù)集中圖片的個數(shù)。
本文主要對左眼瞳孔、右眼瞳孔、鼻尖、左嘴角、右嘴角5個人臉關(guān)鍵點檢測進(jìn)行對比分析,對比分析的算法主要包括CONVET[14]、CDBS[17]、BoRMaN[18]、Luxand、CCNN[19]等6個算法。
表2 BioID和LFPW實驗結(jié)果均方根誤差率對比表
圖4 在BioID、LFPW數(shù)據(jù)集均方根誤差率
圖5 在BioID、LFPW數(shù)據(jù)集識別結(jié)果
BioID數(shù)據(jù)集主要測試亮度和姿態(tài)角度對識別效率的影響。實驗表明,CResNN對不同光照強度和姿態(tài)角度有很好的魯棒性。LFPW與BioID數(shù)據(jù)集不同,其來源于互聯(lián)網(wǎng),圖片多種多樣。從遮擋物來看,CResNN能夠在有遮擋物的情況下相對準(zhǔn)確地預(yù)測出關(guān)鍵點位置。
關(guān)鍵點檢測受不同光照、姿態(tài)、遮擋物的影響,檢測效果不穩(wěn)定。目前人臉關(guān)鍵點檢測方法主要有分別檢測和直接檢測。級聯(lián)卷積神經(jīng)網(wǎng)絡(luò)結(jié)合兩者優(yōu)點,同時也存在不足之處。本文在級聯(lián)神經(jīng)網(wǎng)絡(luò)基礎(chǔ)上,修改級聯(lián)框架,剔除多個冗余的神經(jīng)網(wǎng)絡(luò),然后使用殘差神經(jīng)網(wǎng)絡(luò)對核心檢測模塊進(jìn)行優(yōu)化,同時利用BN、預(yù)激活等思想對殘差神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化??紤]到訓(xùn)練和測試的速度和參數(shù)量,本文針對不同級聯(lián)層使用不同層數(shù)的殘差神經(jīng)網(wǎng)絡(luò)。經(jīng)測試,本系統(tǒng)大幅提升人臉關(guān)鍵點的檢測精度,但在側(cè)臉檢測方面存在不足,下一步將引入對抗生成網(wǎng)絡(luò)以完善側(cè)臉檢測精度。