熊寒穎,魯統(tǒng)偉,閔 峰,蔣沖宇
武漢工程大學(xué)計算機(jī)科學(xué)與工程學(xué)院,湖北 武漢 430205
隨著深度學(xué)習(xí)和計算機(jī)視覺技術(shù)的飛速發(fā)展,人臉檢測技術(shù)被廣泛應(yīng)用于生活的各個角落。例如拍照美顏、安防監(jiān)控、視頻會議等,其中人臉檢測技術(shù)是人臉識別[1]中最開始的一步。由于人臉尺度多樣性,使得人臉檢測模型在CPU上很難達(dá)到實時檢測速度,所以如何讓模型在不降低精度的同時保障運行速度,依舊是巨大的挑戰(zhàn)。
在深度學(xué)習(xí)爆發(fā)之前,人臉檢測主要使用淺層模型完成。人們利用算法把那些看上去抽象的信息變得易于處理,最后人工設(shè)計處理得到的半成品再交給模型去學(xué)習(xí)[2],這種方法嚴(yán)重影響了人臉檢測算法的檢測速度和精度。Viola等[3]使用Haar(Haar-based)的級聯(lián)分類器來檢測對象,使人臉檢測算法有很大的改進(jìn)。Viola等將Haar特征與Adaboost[4]算法相結(jié)合實現(xiàn)人臉檢測算法。Ahonen等[5]利用局部二值特征實現(xiàn)人臉檢測算法。這些傳統(tǒng)的人臉測算法在速度上具有一定優(yōu)勢,但是人臉圖像易受光照不均、姿態(tài)多樣性和遮擋等情況的影響,實際應(yīng)用中檢測精度不高。
隨著深度學(xué)習(xí)的發(fā)展,人們提出了使用深層模型來實現(xiàn)人臉檢測。深度學(xué)習(xí)舍棄了人工提取特征的步驟,讓模型更好地根據(jù)數(shù)據(jù)的原始狀態(tài)學(xué)習(xí),因此更容易學(xué)到數(shù)據(jù)中有價值的信息[6]。Yang等[7]提出通道特征(aggregation channel feature,ACF)算法,將傳統(tǒng)方法和神經(jīng)網(wǎng)絡(luò)相結(jié)合,利用多通道特征實現(xiàn)人臉檢測。Chen等[8]提出Jiont Cascade算法,將人臉關(guān)鍵點檢測與人臉檢測相結(jié)合,提高人臉檢測算法精度。Ghiasi等[9]提出高分辨率可變形部件模型(multires hierarchial deformable pot model,MultiresHPM),利用級聯(lián)神經(jīng)網(wǎng)絡(luò)進(jìn)行人臉檢測和關(guān)鍵點定位,實現(xiàn)多角度和遮擋情境下的人臉檢測。Zhan等[10]提出多任務(wù)級聯(lián)神經(jīng)網(wǎng)絡(luò)(multi-task cascaded convolutional network,MTCNN),利用三層級聯(lián)神經(jīng)網(wǎng)絡(luò)實現(xiàn)人臉檢測和關(guān)鍵點對齊算法。Zhang等[11]提出 Faceboxes算法,基于CPU的快速準(zhǔn)確人臉檢測。
現(xiàn)有的人臉檢測網(wǎng)絡(luò)可分為級聯(lián)神經(jīng)網(wǎng)絡(luò)和單一神經(jīng)網(wǎng)絡(luò)兩種。其中級聯(lián)神經(jīng)網(wǎng)絡(luò)適合檢測單個人臉圖像,當(dāng)圖像中存在多個人臉時會增加檢測時間,且訓(xùn)練方法復(fù)雜。單一神經(jīng)網(wǎng)絡(luò)的人臉檢測算法,可快速檢測出一張圖像中多個人臉,且結(jié)構(gòu)簡單易于訓(xùn)練。為實現(xiàn)實時的人臉檢測,本文選擇單一神經(jīng)網(wǎng)絡(luò)。在網(wǎng)絡(luò)的前2個卷積層中設(shè)置較大的步長,使輸入圖像尺寸快速減??;為防止圖像中小尺寸的人臉信息丟失,將淺層特征信息和深層特征信息相融合,增加小尺寸人臉的信息并減少重疊檢測框;由于圖像中存在多尺度[12-13]的人臉,利用 Inception[14]結(jié)構(gòu)和重疊框預(yù)測策略,增加小尺寸人臉的檢測概率;使用多級損失函數(shù),分別預(yù)測人臉框和人臉類別。
基于單一神經(jīng)網(wǎng)絡(luò)的實時人臉檢測網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。網(wǎng)絡(luò)的輸入為1024*1024像素大小的圖像,當(dāng)輸入圖像尺寸小于該尺寸時,用值為0的像素將圖像自動填充成到1024*1024像素大??;Conv1、Pool1、Conv2和Pool2層采用較大的卷積核和步長,快速縮小輸入圖像尺寸,保證人臉檢測的實時性;Conv3和Conv4層引入淺層特征信息,實現(xiàn)上下文特征融合,提高網(wǎng)絡(luò)對細(xì)節(jié)信息的感知能力;Inception1、Inception2和Inception3層實現(xiàn)人臉的多尺度檢測,利用多尺度卷積和預(yù)測框重疊策略,減少尺度變化對檢測效果的影響;利用多任務(wù)損失函數(shù),加快模型的收斂速度。
圖1 人臉檢測網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.1 Structure diagram of face detection network
當(dāng)輸入網(wǎng)絡(luò)的檢測特征圖尺寸較大時,網(wǎng)絡(luò)卷積的時間會增加,在CPU上的運行時間會加長。本文網(wǎng)絡(luò)使用輸入尺寸為1024*1024像素的彩色圖,為快速縮小輸入特征圖尺寸,在Conv1、Pool1、Conv2、Pool2這4層設(shè)置較大的卷積核步長,分別為4、2、2和2,經(jīng)過這4層卷積操作使輸入空間快速縮小32倍。Conv1層和Conv2層卷積核的大小分別為7*7和5*5,特征圖像填充為3。Pool1和Pool2層的卷積核大小都為3*3,無圖像填充。為提高檢測速度,在Conv1和Conv2層采用了C.ReLU[15]激活函數(shù)。C.ReLU激活函數(shù)應(yīng)用在ReLU之前簡單地連接否定輸出,在保證輸出維度不變的情況下減少卷積核數(shù)量,提高檢測速度。C.ReLU結(jié)構(gòu)如圖2所示。
圖2 C.ReLU結(jié)構(gòu)圖Fig.2 Structure diagram of C.ReLU
由于低層特征分辨率較高,包含更多位置和細(xì)節(jié)信息,但是其經(jīng)過的卷積少,語義性低,噪聲多;高層特征具有更強(qiáng)的語義信息,但是分辨率很低,對細(xì)節(jié)的感知能力較差[16]。因此將低層特征和高層特征融合增加不同層之間的聯(lián)系,減少重復(fù)的人臉框,另一方面引入上下文信息可以提高小尺寸人臉的檢測精度。本文提出的特征圖融合模型如圖3所示,圖3(a)將Inception1和Inception2經(jīng)過特定方式融合構(gòu)成一個特征圖Conv3;圖3(b)將Conv3和Inception3經(jīng)過特定方式融合構(gòu)成一個特征圖Conv4。Concat層可以將2個及以上的特征圖按照通道數(shù)或特征維度進(jìn)行拼接,以此融合輸入層的特征信息;Conv1*1是卷積核大小為1*1的卷積層,可使特征圖降維,減少網(wǎng)絡(luò)計算量,加快檢測速度。
圖3 特征圖融合模塊:(a)Inception1和Inception2,(b)Inception3和Conv3Fig.3 Modules of feature map fusion:(a)Inception 1 and 2,(b)Inception 3 and Conv 3
為了解決人臉的多尺度問題,采用多個卷積層預(yù)測人臉框位置。在網(wǎng)絡(luò)中的Conv4、Conv5和Conv6層進(jìn)行多尺度檢測,利用不同大小的檢測框和檢測框密集策略來實現(xiàn)多尺度檢測。Inception模塊可用于檢測多尺度的人臉,該模塊由多個卷積核大小不同的卷積組成,針對網(wǎng)絡(luò)寬度做多尺度設(shè)計,可以增加網(wǎng)絡(luò)深度和寬度,減少網(wǎng)絡(luò)參數(shù)。在圖1人臉檢測網(wǎng)絡(luò)中使用了3個Inception結(jié)構(gòu),其結(jié)構(gòu)如圖4所示。
圖4 Inception結(jié)構(gòu)圖Fig.4 Structure diagram of inception
使用不同大小的檢測框預(yù)測人臉位置,可以共享網(wǎng)絡(luò)層參數(shù),減少計算量提高人臉檢測速度。利用人臉的形狀特點將檢測框設(shè)置成正方形,檢測框內(nèi)的任意輸入都會影響輸出結(jié)果。然而測試結(jié)果顯示,中間位置的輸入對輸出結(jié)果的影響最大,整體呈現(xiàn)一種中心高斯分布形態(tài)。定義檢測框密集公式,如公式(1)所示。Adensity是預(yù)測框的密度,指的是檢測框的長寬比;m是檢測框密集次數(shù),指檢測框的重復(fù)次數(shù);Ascale是預(yù)測框的尺寸,指的是對應(yīng)檢測框的像素大??;Astride是預(yù)測框移動的位移量,指檢測框移動的像素個數(shù)。
為更好檢測多尺度人臉,利用檢測框重疊策略。將Adensity的值設(shè)為4,這樣不同尺度的人臉匹配到的檢測框密度相同。當(dāng)出現(xiàn)小尺度的預(yù)測框時,適當(dāng)增加檢測框密集次數(shù)m,使Adensity的值等于4。多尺度人臉檢測框的參數(shù)設(shè)置如表1所示。
算法預(yù)測了人臉框的坐標(biāo)和人臉的類別信息,所以采用多級損失函數(shù)。根據(jù)默認(rèn)檢測框和真實檢測框位置做Jaccard相似度計算,把相似度大于0.5的默認(rèn)框設(shè)置為正樣本,其它為負(fù)樣本。使用2級Softmax損失函數(shù)進(jìn)行分類,用Smooth1Loss進(jìn)行回歸。損失函數(shù)公式如下。
表1 多尺度人臉檢測框參數(shù)Tab.1 Parameters of face detection in multi-scale
公式(2)中,pi是目標(biāo)感受野的概率是標(biāo)簽,為0時,表示為負(fù)樣本為1時,表示為正樣本;ti={tx,ty,tw,th}是一個向量,表示預(yù)測框的4個參數(shù)坐標(biāo);ti*是正確的目標(biāo)感受野的坐標(biāo)向量;是目標(biāo)和非目標(biāo)的對數(shù)損失,是回歸損失
人臉檢測模型首先在廣泛人臉數(shù)據(jù)集(wider face dataset,WIDERFACE)上訓(xùn)練,然后在人臉檢測數(shù)據(jù)集基準(zhǔn)(face detection dataset and benchmark,F(xiàn)DDB)和野外標(biāo)注人臉數(shù)據(jù)集(annotated face in the wild,AFW)上驗證。WIDERFACE數(shù)據(jù)集包含3萬多個身份,其中人臉圖像有40多萬張,該數(shù)據(jù)庫還標(biāo)記了所有的人臉位置坐標(biāo)。若人臉圖片太小,在訓(xùn)練人臉檢測模型時會降低模型收斂速度,所以先將尺寸小于20*20像素的人臉圖像過濾掉再進(jìn)行網(wǎng)絡(luò)訓(xùn)練。
網(wǎng)絡(luò)訓(xùn)練和測試都是基于Caffe深度學(xué)習(xí)框架。使用學(xué)習(xí)率衰減策略,前8萬次網(wǎng)絡(luò)迭代使用的學(xué)習(xí)率為0.001,然后每訓(xùn)練2萬次迭代學(xué)習(xí)率會降低0.1倍,一共訓(xùn)練12萬次。為避免網(wǎng)絡(luò)陷入局部最小,網(wǎng)絡(luò)的動量設(shè)置為0.9。為避免過擬合,使用l2正則化,權(quán)重衰減為0.0005。在CPU檢測圖像可以達(dá)到21幀/s的速度,在GPU上測試可達(dá)到125幀/s的速度。
2.2.1 模型合理性驗證 為了驗證本文網(wǎng)絡(luò)模型的合理性,做了2個對比試驗。實驗一:沒有加入特征融合模塊,直接在Inception3、Conv5和Conv6層進(jìn)行多尺度檢測,人臉檢測框參數(shù)與本文算法一致。實驗二:在多個特征圖上進(jìn)行多尺度檢測,Conv4設(shè)置檢測框大小為32*32像素,檢測框密集次數(shù)為4;Conv5層設(shè)置檢測框大小為64*64像素,檢測框密集次數(shù)為2;Inception3設(shè)置檢測框大小為128*128像素,檢測框密集次數(shù)為0;Conv5和Conv6層的檢測框參數(shù)與本文算法一致。在AFW數(shù)據(jù)集上驗證模型合理性,AFW數(shù)據(jù)集包含205張人臉圖像。實驗結(jié)果表明本文模型優(yōu)于對比模型,如表2所示。
表2 不同融合方式的精確度比較Tab.2 Accuracy comparison of different fusion methods
2.2.2 模型檢測速度對比 為驗證本文方法的實時性,對比了 ACF、Jiont Cascade、MultiresHPM、MTCNN和Faceboxes 5種人臉檢測方法。從網(wǎng)絡(luò)輸入圖像尺寸、網(wǎng)絡(luò)檢測人臉尺寸和檢測速度做了對比。人臉檢測算法在CPU環(huán)境下檢測速度對比,如表3所示。由表3可知,在CPU下檢測大小為640*480像素的圖像,本文算法對比其他5種算法,網(wǎng)絡(luò)檢測到的人臉尺寸最小且速度最快。
表3 算法的檢測速度和檢測尺寸比較Tab.3 Comparison of detection speed and time with different algorithms
2.2.3 模型檢測精度對比 為驗證本文模型檢測精度,在FDDB數(shù)據(jù)集與5種人臉檢測算法進(jìn)行對比。FDDB數(shù)據(jù)集包括2845張圖像,一共標(biāo)注了5171張人臉。FDDB是具有標(biāo)準(zhǔn)評估過程的數(shù)據(jù)集,使用橢圓框標(biāo)注人臉位置。本文算法用矩形框標(biāo)注,所以先把橢圓標(biāo)注轉(zhuǎn)化為矩形標(biāo)注。我們遵循FDDB數(shù)據(jù)集的評估流程,用官方提供的工具箱測試本文人臉檢測算法的精度。FDDB數(shù)據(jù)集的測試標(biāo)準(zhǔn)可分為離散評分和連續(xù)評分2種情況。離散評分以檢測到的人臉框和真實人臉框的重合面積為評判標(biāo)準(zhǔn),當(dāng)2個框的重合面積大于0.5時認(rèn)為檢測到了人臉。連續(xù)評分是以檢測框和重疊框的重合面積的比率為評判標(biāo)準(zhǔn),重疊比越大識別率越高。FDDB數(shù)據(jù)集檢測評分如圖5所示,圖5(a)為離散評分,圖5(b)為連續(xù)評分。
由圖5可知,檢測算法在FDDB數(shù)據(jù)集上的離散和連續(xù)情況下正確率分別為92.1%和71.1%,都達(dá)到了較為領(lǐng)先的檢測效果。雖然算法檢測精度低于MTCNN,但是算法在速度上是快于MTCNN,所以本文算法可實現(xiàn)實時高效的人臉檢測。
圖5 FDDB數(shù)據(jù)集結(jié)果:(a)離散評分,(b)連續(xù)評分Fig.5 Evaluation on FDDB dataset:(a)discontinuous score,(b)continuous score
為提高人臉檢測速度,在初始卷積層中使用較大的卷積核和移動步長,快速縮小輸入圖像尺寸;加入特征圖融合模塊,增強(qiáng)不同層之間的聯(lián)系,減少人臉重復(fù)框;使用多尺度卷積層,檢測不同尺度的人臉;利用多級損失函數(shù),使模型訓(xùn)練更快收斂。該算法在FDDB和AFW數(shù)據(jù)集上達(dá)到了良好的檢測效果,在CPU上圖像的檢測速度為21幀/s。但是該算法限制了最小檢測的人臉尺寸,當(dāng)檢測的人臉圖像尺寸小于20*20的像素時檢測效果不佳。因此對小尺寸人臉圖像的檢測需要進(jìn)一步提高其檢測效果。