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