黃紹欣,田秀云
(廣東海洋大學(xué)電信學(xué)院,廣東湛江 524088)
近年來,由于深度學(xué)習(xí)的興起,人臉分析技術(shù)得到了大幅度的研究。從一張圖片或者從一個視頻中提取人臉的位置坐標、姿態(tài)、年齡、情感、性別、表情等方面信息以應(yīng)用于硬件設(shè)備上[1],硬件設(shè)備根據(jù)人臉的特征做出相應(yīng)服務(wù),從而提升硬件設(shè)備的智能化。隨著深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)的興起,人臉檢測取得了顯著的突破,其優(yōu)越的性能漸漸被應(yīng)用到日常生活。
人臉檢測的研究主要有兩個方向,第一個方向是早期的基于手動提取特征的人臉檢測,Viola-Jones 提出的圖片Haar 特征提取算法[2](邊緣特征、線性特征、中心特征和對角線特征)開辟了人臉檢測新征程;第二個方向是基于卷積神經(jīng)網(wǎng)絡(luò)的通用的人臉檢測算法,該算法是繼承于一些高性能的通用目標檢測算法,這些通用的目標檢測算法第一個方法是基于區(qū)域回歸的人臉檢測,基于區(qū)域回歸實現(xiàn)的目標檢測算法有Fast R-CNN[3]、FPN[4]?;诰矸e神經(jīng)網(wǎng)絡(luò)實現(xiàn)人臉檢測的另外一個方法是基于滑動窗口,基于此滑動窗口實現(xiàn)的目標檢測算法有YOLO[5]系列等,最近被提出的人臉檢測RetinaFace[6]算法即基于滑動窗口,利用額外監(jiān)督和自監(jiān)督結(jié)合的多任務(wù)學(xué)習(xí),對不同尺寸的人臉進行像素級的定位,取得了比較好的結(jié)果。除此之后還有通過結(jié)合人臉五點關(guān)鍵點回歸的人臉檢測算法,例如MTCNN[7]通過回歸眼睛、鼻子和嘴巴五點關(guān)鍵點定位人臉,并且可以在同一個訓(xùn)練任務(wù)中同時學(xué)習(xí)“識別人臉”、“邊界框回歸”、“人臉關(guān)鍵點識別”,經(jīng)過實驗證實該多任務(wù)損失[6-7]措施可以有效提高算法的性能。
本文采取ResNet34[8]作為特征提取層,基于其有效提取低分辨率人臉特征信息的特點作為人臉檢測的主干網(wǎng)絡(luò);利用特征金字塔結(jié)構(gòu),上采樣不同特征層下不同分辨率的人臉,有效提取不同分辨率下的人臉特征信息;之后利用Inception 結(jié)構(gòu)[9]融合多尺度特征圖,進一步增加感受野區(qū)域獲取全局特征,使得檢測效果更精確。使用多任務(wù)損失函數(shù)同時對人臉分類、人臉邊界框、人臉關(guān)鍵點進行回歸。
主干網(wǎng)絡(luò)如圖1 所示,采用ResNet34 和3 個特征金字塔網(wǎng)絡(luò)作為特征提取層主干結(jié)構(gòu),特征金字塔中的P2、P3、P4 層的輸入?yún)?shù)對應(yīng)ResNet34 中的3 個被定義為C2、C3、C4 的殘差結(jié)構(gòu)的輸出參數(shù)。P2、P3、P4 對殘差結(jié)構(gòu)C2、C3、C4 分別采用上采用線性插值(nearest)和橫向鏈接C2、C3、C4層,使用1×1的卷積核合并P2~P4 和C2~C4 的數(shù)據(jù)使得模型能夠融合不同尺度特征圖的數(shù)據(jù)。C2、C3、C4分別是預(yù)訓(xùn)練ResNet34的3個分類輸出層。為了使模型能夠?qū)W習(xí)尺度變化的人臉,與錨相關(guān)的卷積層輸出應(yīng)該要對應(yīng)于不同的感受野(receptive filed),因此采用學(xué)習(xí)不同感受野的Inception 模型增加全局特征。采用的Inception 包含4 個卷積層分支作為接收不同尺度,Inception 模型是連接在FPN 的輸出層中的,每個FPN 輸出的特征圖都對應(yīng)連接一個Inception網(wǎng)絡(luò)。
圖1 主干網(wǎng)絡(luò)
對于負錨,只有二分類損失函數(shù)被應(yīng)用;對于正錨,將會采用多任務(wù)損失函數(shù)計算。用于實現(xiàn)多任務(wù)損失函數(shù)的回歸層輸入特征圖的尺寸大小為Hn×Wn×256{n=1, 2, 3}。輸入網(wǎng)絡(luò)的圖片尺寸為840×840,經(jīng)過FPN 層之后輸出的特征圖的尺度和輸入到Inception 的尺度分別為Xi×Xi×256{Xi=27, 53, 105}。經(jīng)過Inception 之后的特征圖尺寸沒有改變,之后傳入到多任務(wù)損失層。多任務(wù)損失層將Inception 層輸入的特征圖進行合并,使得模型輸出的特征圖即人臉邊界框、分類、五點關(guān)鍵點輸出特征分別為[BatchSize,None,4],[BatchSize,None,2],[BatchSize,None,10]。
該訓(xùn)練模型含有12 880 張圖片額外標注的WIDER FACE 訓(xùn)練數(shù)據(jù)集[10],該數(shù)據(jù)集包含32 203 張圖片以及393 703 個人臉標注框。其中158 989 個標注人臉用于訓(xùn)練,39 496 個標注人臉用于驗證。每一個子數(shù)據(jù)集都包含3 個級別的檢測難度:Easy、Medium、Hard。該數(shù)據(jù)集的制作者來自于香港大學(xué),其中按照40%、10%、50%劃分數(shù)據(jù)集作為訓(xùn)練、驗證、測試數(shù)據(jù)集。這些人臉在尺度、分辨率、姿態(tài)、光照、表情、遮擋方面都有很大的變化范圍。有研究人員將WIDER FACE 中的訓(xùn)練數(shù)據(jù)集進行額外的人臉五點關(guān)鍵點標注。在本論文中,訓(xùn)練的檢測器也是采用進行額外標注的訓(xùn)練數(shù)據(jù)集,測試和驗證數(shù)據(jù)集保持不變。
2.2.1 數(shù)據(jù)增強
本論文中數(shù)據(jù)增強的方式有隨機裁剪、尺度轉(zhuǎn)換、鏡像翻轉(zhuǎn)、顏色增強[11]。
(1)隨機裁剪:隨機選擇5 種不同的比例因子對原始圖片進行裁剪,根據(jù)不同的比例因子(0.3, 0.45, 0.6,0.8,1.0)分別對圖片寬高中的短邊進行裁剪,并且裁剪后的圖片要全覆蓋原人臉邊界框。
(2)尺度轉(zhuǎn)換:通過隨機裁剪之后,將圖片的大小調(diào)整為840×840。
(3)鏡像翻轉(zhuǎn):對原始圖片按照50%的概率進行鏡像翻轉(zhuǎn)。
(4)顏色增強:按照50%的概率對圖片的亮度、對比度、飽和度、色調(diào)進行失真增強。
2.2.2 多任務(wù)損失
通常人臉檢測訓(xùn)練過程會包含人臉和非人臉分類以及人臉邊界框回歸,甚至還會在訓(xùn)練過程增加其他的訓(xùn)練任務(wù)。Zhu[12]訓(xùn)練人臉檢測任務(wù)時還進行姿態(tài)檢測以及關(guān)鍵點定位的任務(wù);有研究人員在訓(xùn)練人臉檢測器時,對人臉和非人臉、邊界框回歸、人臉五點關(guān)鍵點同時回歸。這種多任務(wù)損失有助于提高人臉檢測的性能,因此也將這種訓(xùn)練策略應(yīng)用到本文中。
訓(xùn)練人臉檢測器時結(jié)合人臉和非人臉、人臉邊界框回歸、人臉五點關(guān)鍵進行多任務(wù)損失:
人臉分類損失為Lcls(pi,pi*),人臉檢測中的分類損失是兩分類(人臉/非人臉)問題。分類損失函數(shù)Lcls使用交叉熵(softmax)分類損失具體如下:
式中:pi為第i個錨的人臉的概率,pi*=1 對于錨為正,pi*=0時則為負。
人臉邊框架損失為Lbox(ti,ti*),邊界框損失函數(shù)Lbox使用的是smooth-L1[4]函數(shù)如下:
人臉五點關(guān)鍵點損失為Lpts(li,li*),人臉五點關(guān)鍵點指的是左眼、右眼、鼻子、左邊嘴角、右邊嘴角具體如下:
(4)參數(shù)設(shè)置:為了平衡損失函數(shù)L,設(shè)置參數(shù)(r1,r2,r3)分別為(1,2,1),這樣有助于從低分辨率的特征圖中更好的回歸定位人臉。
2.2.3 難負例挖掘
難負例挖掘(Hard Negative Mining):經(jīng)過錨匹配策略步驟之后,更多的錨容易來自于負樣本,即圖片中沒有目標卻在訓(xùn)練的過程中分類器將其看成是正樣本,這會導(dǎo)致檢測準確率降低。為了提升錨的匹配準確率和加快優(yōu)化速度,的損失值和選擇頂部的假陽性和陽性之間的比例低于3∶1,即負樣本數(shù):正樣本數(shù)大約為3∶1用于訓(xùn)練,以使訓(xùn)練過程中有效降低假陽性的檢測。故稱這種選擇策略為難負例挖掘[11]。
2.2.4 匹配策略
在訓(xùn)練的過程中,想要錨能夠真實的人臉邊界框能夠?qū)?yīng)上,因此為了能夠使得錨更好的匹配人臉,因此需要每個錨的候選框與真實的人臉邊界框交并比(Jaccard overlap)大于0.35。
式中:A為真實的人臉邊界框;B為訓(xùn)練中特征圖的候選框。
2.2.5 其他策略
使用Pytorch 深度學(xué)習(xí)框架訓(xùn)練模型,使用SGD optimiser 優(yōu)化器(momentum = 0.9,weigh decay = 0.000 5,batchsize=12,gamma=0.1)于單顯卡Tesla K80(12GB)GPU 優(yōu)化模型,初始化學(xué)習(xí)率設(shè)置為0.001,訓(xùn)練85 個epoch之后學(xué)習(xí)率降為0.000 1,訓(xùn)練95個epoch之后學(xué)習(xí)率降為0.000 01,一共訓(xùn)練100個epoch。
通過多任務(wù)損失進行訓(xùn)練的,訓(xùn)練100 次的邊界框損失、分類損失和人臉五點關(guān)鍵點損失及總損失loss 分別如圖2~5所示。通過訓(xùn)練的損失來看,模型的參數(shù)還可以通過增加訓(xùn)練周期進行降低損失函數(shù)。邊界框損失的權(quán)重是其他損失權(quán)重的2 倍,因此在優(yōu)化的過程中,收斂相對比其他的損失函數(shù)要好一些。從損失函數(shù)圖像上分析,分類損失的值較大,這說明在搭建模型的過程中正負樣本并沒有處理好,即難例挖掘處理不好,在分類過程中可能含有人臉的樣本被判定為無人臉,于是檢測器無法檢測有人臉的困難樣本,導(dǎo)致在Hard 數(shù)據(jù)集上的平均準確率低。
圖2 人臉邊界框回歸訓(xùn)練損失
圖3 人臉分類訓(xùn)練損失
圖4 人臉五點關(guān)鍵點訓(xùn)練損失
圖5 多任務(wù)訓(xùn)練訓(xùn)練損失
通過WIDER FACE 數(shù)據(jù)集劃分的3 種不同檢測難度的數(shù)據(jù)集驗證模型的性能,分別是Easy、Medium和Hard數(shù)據(jù)集。采用NMS[11]去篩選置信度比較高的邊界框,在設(shè)置IOU 閾值為0.5 時,在Easy、Medium 和Hard 的驗證AP(準確率)分別為93.79%、91.92%、55.75%,如表1所示。在人臉密集、遮擋嚴重、背景復(fù)雜的場景下檢測的效果并不是很理想,而在人臉稀疏的情況下取得較好的結(jié)果。
表1 測試結(jié)果
本文研究了人臉檢測的不同實現(xiàn)方法,提出改進的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。實驗證明以ResNet34 網(wǎng)絡(luò)作為特征提取層,通過FPN 融合上下文分辨率信息以及Inception網(wǎng)絡(luò)融合多尺度。為了驗證模型的實際應(yīng)用效果,分別使用不同尺度、不同分辨率、不同背景下的圖片進行測試。從檢測效果來看,該模型不僅可以準確檢測在戶外場景下稀疏的人臉,還可以檢測遮擋、分辨率低的人臉。該模型在顯卡型號NVIDIA GeForce 920MX,CPU 型號Intel(R) Core(TM) i5-7200U CPU@ 2.50GHz (4 CPUs)~2.7 GHz測試執(zhí)行效率,測試結(jié)果顯示在筆記本電腦攝像頭拍攝VGA圖片上(640×480)的每秒傳輸幀數(shù)為2.80。