江 航,董蘭芳
(中國科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,合肥 230027)
人臉檢測是計(jì)算機(jī)視覺領(lǐng)域的基礎(chǔ)問題之一,它也是許多人臉相關(guān)工作的起始步驟,例如人臉對齊、人臉識別、表情識別等.同時(shí)近年來卷積神經(jīng)網(wǎng)絡(luò)也在圖像處理領(lǐng)域取得了巨大的突破,人臉檢測這一經(jīng)典的圖像處理問題也成功地應(yīng)用在人們的日常生活中.
最早的人臉檢測方法主要是通過設(shè)計(jì)魯棒的特征然后利用這些特征來訓(xùn)練分類器以達(dá)到人臉檢測的目的.例如經(jīng)典的Viola-Jones人臉檢測器[1],就是通過設(shè)計(jì)haar特征,然后利用adaboost方法來訓(xùn)練分類器的.欒方軍等人[16]在Viola-Jones人臉檢測器基礎(chǔ)上提出一種多種特征融合的adaboost快速訓(xùn)練人臉分類器.DPM[2]來進(jìn)行人臉檢測在當(dāng)時(shí)也取得了很好的效果,該方法是先計(jì)算梯度直方圖,然后使用SVM來訓(xùn)練得到物體的梯度模型.這些方法非常依賴設(shè)計(jì)的特征而且該方法僅僅考慮圖像局部的情況,使得整個(gè)檢測器的結(jié)果并不是最優(yōu)的.任克強(qiáng)等人[14]為彌補(bǔ)上述算法易陷入局部最優(yōu)的不足,結(jié)合人工魚群算法和粒子群優(yōu)化算法來尋找最優(yōu)特性.盡管這類方法在人臉檢測上并不能獲得很好的效果但是卻可以在CPU上實(shí)時(shí)的運(yùn)行.
另一種方法是基于卷積神經(jīng)網(wǎng)絡(luò)的人臉檢測.最開始Vaillant[3]等訓(xùn)練一個(gè)基于滑動窗口的方法的卷積神經(jīng)網(wǎng)絡(luò)人臉檢測器.CascadeCNN[4]將卷積神經(jīng)網(wǎng)絡(luò)級聯(lián)起來的結(jié)構(gòu)檢測人臉,前面的簡單網(wǎng)絡(luò)拒絕絕大部分非人臉區(qū)域,將難以分辨的交由下一級更復(fù)雜的網(wǎng)絡(luò).MTCNN[5]提出一個(gè)多任務(wù)級聯(lián)網(wǎng)絡(luò)框架同時(shí)進(jìn)行人臉檢測和人臉特征點(diǎn)定位.這些基于卷積神經(jīng)網(wǎng)絡(luò)的方法雖然比早期手工設(shè)計(jì)特征方法效果更好,但是它們的速度會隨著圖像中人臉數(shù)目增加而急劇下降.目前目標(biāo)檢測主要可以分為以Faster-RCNN[6]為代表的二階段框架和以YOLO[8]、SSD[7]為代表的一階段框架.一些人臉檢測器把人臉檢測當(dāng)成目標(biāo)檢測的一種,把目標(biāo)檢測的方法應(yīng)用到人臉檢測上面來.雖然這些基于目標(biāo)檢測的方法在公開數(shù)據(jù)集上取得了當(dāng)前最好的效果,但是這些框架太消耗計(jì)算資源,無法在CPU上面實(shí)時(shí)運(yùn)行.
本文借鑒了Faster-RCNN的區(qū)域建議網(wǎng)絡(luò)和SSD的多尺度檢測機(jī)制,提出了可以在CPU上實(shí)時(shí)運(yùn)行并且有著很高精度的人臉檢測器.首先本文提出了一個(gè)只含有卷積層的輕量型卷積網(wǎng)絡(luò),并且可以進(jìn)行端到端的訓(xùn)練和識別.這個(gè)十分有效且輕量的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示.除此之外本文為了解決淺層特征圖上anchor密度小的問題,對低密度層特征圖上的anchor進(jìn)行稠密化處理;對相鄰兩個(gè)特征圖進(jìn)行融合從而加強(qiáng)當(dāng)前特征圖的檢測效果;修改人臉分類損失函數(shù),使其更關(guān)注比較難分類的樣本,否則梯度可能在大量簡單樣本的影響下無法達(dá)到全局最優(yōu)的結(jié)果.實(shí)驗(yàn)表明,本文提出的方法可以在CPU上實(shí)時(shí)運(yùn)行,并且保持很高的準(zhǔn)確率.
圖1 整體框架結(jié)構(gòu)圖Fig.1 General framework structure
本文采用的是基于CNN的端到端的人臉檢測框架,具體結(jié)構(gòu)如圖1所示,整個(gè)檢測算法如算法1所示.
算法1.人臉檢測算法
輸入:待檢測人臉圖片
輸出:返回一個(gè)個(gè)人臉框(中心坐標(biāo)與寬高)
1)圖片預(yù)處理,將圖片調(diào)整到640*640并且將圖片像素調(diào)整到0-1之間;
2)將預(yù)處理圖片輸入基礎(chǔ)網(wǎng)絡(luò)(2.1詳細(xì)介紹);
3)將步驟2得到的特征圖按照連接層(2.2詳細(xì)介紹)依次融合到一起;
4)將步驟3得到的特征圖經(jīng)過檢測層(2.3詳細(xì)介紹)給出預(yù)測;
5)根據(jù)步驟4輸出,得到人臉的置信度以及該位置人臉相對于anchor的偏移;
6)將步驟5中的置信度返回,并且根據(jù)該位置anchor得到人臉中心坐標(biāo)與寬高.
7)對步驟6中返回人臉做nms(非極大值抑制),消除重疊人臉框.
基礎(chǔ)網(wǎng)絡(luò)的詳細(xì)結(jié)構(gòu)如表1所示.首先通過一個(gè)7*7的卷積核來獲得較大感受野,同時(shí)設(shè)置步長為2來縮小卷積后特征圖的大小從而加快運(yùn)行時(shí)的速度.Wenling Shang[9]等人指出網(wǎng)絡(luò)的前面部分,網(wǎng)絡(luò)傾向于同時(shí)捕獲正負(fù)相位的信息,但Relu激活函數(shù)會抹掉負(fù)響應(yīng),造成卷積核存在冗余.根據(jù)這個(gè)結(jié)論設(shè)置第一個(gè)卷積層激活函數(shù)為CRelu,就是將原始特征圖與取反后的特征圖分別通過Relu,最后連接到一起.
在隨后的特征圖上為了減少網(wǎng)絡(luò)的參數(shù)提高網(wǎng)絡(luò)傳播速度,設(shè)計(jì)了一種瓶頸的網(wǎng)絡(luò)結(jié)構(gòu).先通過1*1的卷積核來降低傳入特征圖通道數(shù)(本文設(shè)置大小減為原來1/2倍),接著通過一個(gè)3*3的卷積核來增大感受野同時(shí)減小特征圖的寬高(本文設(shè)置大小減半),最后再通過1*1卷積核來提升特征圖通道數(shù)(本文設(shè)置大小增大原來4倍).通過文中這個(gè)結(jié)構(gòu)可以達(dá)到VGG[10]特征圖寬高減半、通道數(shù)加倍的效果.
可以簡單說明一下網(wǎng)絡(luò)參數(shù)的縮小效果,假設(shè)一個(gè)W*H*C的特征圖如果通過傳統(tǒng)的3*3卷積核來增加通道數(shù)需要2C組3*3*C的卷積核,也即需要18*C*C個(gè)參數(shù).如果通過本文的瓶頸式結(jié)構(gòu)先通過1*1降維需要C/2組1*1*C,再通過3*3擴(kuò)大感受野需要C/2組3*3*C/2,最后通過1*1升維需要2C組1*1*C/2,共需要15/4*C*C.綜上所述改進(jìn)后結(jié)構(gòu)參數(shù)量是原始量的5/24倍.所以本文極大減少了基礎(chǔ)網(wǎng)絡(luò)的參數(shù)量.(表1中Conv2_1-Conv7每個(gè)卷積操作后面都跟有一個(gè)Batch Normalization層和一個(gè)激活層,表1中 未畫出,這兩個(gè)層不會帶來額外的參數(shù).)
表1 基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)
Table 1 Structure of base network
各層名稱每層的操作Conv1Convolutionmaps:16,k:7*7,s:2,p:3BatchNormalizationCReluConv2_1Convolutionmaps:16,k:1*1,s:1,p:0Convolutionmaps:16,k:3*3,s:2,p:1Convolutionmaps:64,k:1*1,s:1,p:0Conv2_2Convolutionmaps:16,k:1*1,s:1,p:0Convolutionmaps:16,k:3*3,s:1,p:1Convolutionmaps:64,k:1*1,s:1,p:0Conv3_1Convolutionmaps:32,k:1*1,s:1,p:0Convolutionmaps:32,k:3*3,s:2,p:1Convolutionmaps:128,k:1*1,s:1,p:0Conv3_2Convolutionmaps:32,k:1*1,s:1,p:0Convolutionmaps:32,k:3*3,s:1,p:1Convolutionmaps:128,k:1*1,s:1,p:0Conv4_1Convolutionmaps:64,k:1*1,s:1,p:0Convolutionmaps:64,k:3*3,s:2,p:1Convolutionmaps:256,k:1*1,s:1,p:0Conv4_2Convolutionmaps:64,k:1*1,s:1,p:0Convolutionmaps:64,k:3*3,s:1,p:1Convolutionmaps:256,k:1*1,s:1,p:0Conv5Convolutionmaps:128,k:1*1,s:1,p:0Convolutionmaps:256,k:3*3,s:2,p:1Conv6Convolutionmaps:128,k:1*1,s:1,p:0Convolutionmaps:256,k:3*3,s:2,p:1Conv7Convolutionmaps:128,k:1*1,s:1,p:0Convolutionmaps:256,k:3*3,s:2,p:1
本節(jié)將對本文提出的基礎(chǔ)網(wǎng)絡(luò)與近年提出的輕量型模型SqueezeNet[17]、MobileNet[18]、ShuffleNet[19]、Xception[20]的網(wǎng)絡(luò)架構(gòu)進(jìn)行對比分析.
SqueezeNet[17]核心架構(gòu)在于Fire模塊,Fire模塊有兩層組成,一層是壓縮層,壓縮層是通過1*1卷積核降低輸入卷積特征圖的維度;另一層是擴(kuò)展層,擴(kuò)展層有兩個(gè)分支,分別通過1*1和3*3的卷積核的卷積層,然后將得到的特征圖拼接起來.Fire模塊詳細(xì)結(jié)構(gòu)如圖2所示,N>A.
圖2 Fire模塊示意圖Fig.2 Fire module schematic
Fire模塊核心思想是通過1*1降低輸入特征圖通道數(shù)來減少網(wǎng)絡(luò)模型的參數(shù)量.然后通過擴(kuò)展層3*3分支卷積核來提取特征,另一個(gè)1*1分支卷積核是為了對原有特征圖進(jìn)行信息整合,最后,將兩個(gè)分支拼接起來組成輸出特征圖.
圖3 深度卷積示意圖Fig.3 Depthwise convolutional schematic
MobileNet[18]主要使用深度卷積來代替標(biāo)準(zhǔn)卷積來降低模型參數(shù)量.所謂深度卷積,也就每個(gè)卷積核只對輸入特征的一個(gè)通道卷積,這樣就會大大減少參數(shù)量.因?yàn)槿绻皇褂蒙疃染矸e就會造成特征圖之間信息不流暢,所以MobileNet在深度卷積后面還接上一層逐點(diǎn)卷積用于特征層之間交換信息.圖3、圖4展示了分組卷積和逐點(diǎn)卷積詳細(xì)結(jié)構(gòu).
圖4 逐點(diǎn)卷積示意圖Fig.4 Pointwise convolutional schematic
ShuffleNet[19]也是利用深度卷積的方式來減少網(wǎng)絡(luò)模型的參數(shù)量,只是該模型并沒有使用逐點(diǎn)卷積來改善組間信息不流暢的問題,而是使用打亂通道的方式.打亂通道詳細(xì)結(jié)構(gòu)如圖5所示.
Xception[20]也是使用深度卷積來降低網(wǎng)絡(luò)中的參數(shù)量,與MobileNet不同的是,Xception將逐點(diǎn)卷積放在深度卷積前面來達(dá)到改善組間信息不流暢的問題.
本文的模型是采用1*1卷積核降低輸入特征圖通道數(shù),然后采用3*3卷積核提取卷積特征圖特征,最后在使用1*1卷積核提升通道數(shù).
表2對比了相關(guān)網(wǎng)絡(luò)輕量化的技巧,本文選用1*1卷積核降低輸入特征圖維度的技巧來減少網(wǎng)絡(luò)模型的參數(shù)量.而并沒有在中間3*3卷積核處使用分組卷積,是因?yàn)橄噍^于標(biāo)準(zhǔn)卷級,分組卷積會造成一定的信息損失.
圖5 打亂通道示意圖Fig.5 Channel shuffle schematic
由于低層卷積特征圖的語義信息比較少,但是目標(biāo)位置準(zhǔn)確;高層的卷積特征圖語義信息比較豐富,但是目標(biāo)位置比較粗略.所以本文設(shè)計(jì)了連接層這一結(jié)構(gòu),將相鄰兩個(gè)卷積特征圖進(jìn)行融合,在融合后的卷積特征圖上檢測人臉.
表2 網(wǎng)絡(luò)輕量化技巧對比
Table 2 Comparison of network lightweight skills
網(wǎng)絡(luò)名稱輕量化技巧SqueezeNet1*1卷積核MobileNet深度卷積ShuffleNet深度卷積Xception深度卷積Ours1*1卷積核
與FPN[11]使用一個(gè)自底向上的線路,接著一個(gè)自頂向下的線路,然后橫向連接的結(jié)構(gòu)不同,本文采用將相鄰兩層的卷積特征圖進(jìn)行融合(如圖1所示).這是由于高層的特征圖已經(jīng)丟失了太多細(xì)節(jié)融合意義不大,同時(shí)只使用相鄰兩層也會減少計(jì)算量.
圖6 連接層示意圖Fig.6 Connection layer schematic
連接層的具體操作如圖6所示,將高層特征圖2倍上采樣然后與底層特征圖相加,再通過一個(gè)3*3的卷積操作.通過3*3的卷積層主要是為了消除上采樣后的混疊效應(yīng).然后在融合后的特征圖上檢測人臉.
為了使生成的特征圖包含特征更豐富,借鑒了GoogleNet[12]的優(yōu)良局部拓?fù)浣Y(jié)構(gòu)網(wǎng)絡(luò),就是對輸入特征圖并行的執(zhí)行多個(gè)卷積運(yùn)算或者池化操作,并將所有輸出結(jié)果連接到一起形成一個(gè)新的特征圖.因?yàn)椴煌木矸e運(yùn)算與池化操作可以獲得輸入特征圖的不同信息,并行處理這些運(yùn)算并結(jié)合所有結(jié)果將獲得更好的圖像表征.詳細(xì)結(jié)構(gòu)如圖7所示,檢測層共有三個(gè)分支,一個(gè)分支通過1*1的卷積核,降低輸入特征圖維度,一個(gè)分支通過一個(gè)3*3的卷積核,一個(gè)分支通過兩個(gè)3*3的卷積核,然后將三個(gè)分支連接到一起,形成最后用于檢測的特征圖.這樣形成的特征圖上由于每個(gè)分支的感受野不同,相當(dāng)于經(jīng)過了不同的卷積運(yùn)算,生成特征圖包含了更多的信息.
圖7 檢測層示意圖Fig.7 Detection layer schematic
如圖1所示,從Conv4_2、Conv5、Conv6、Conv7經(jīng)過連接層和檢測層共生成大小為40*40*256、20*20*256、10*10*256、5*5*256的4種特征圖.淺層特征圖感受野較小適合檢測小的人臉尺寸,較深的特征圖感受野較大更適合檢測比較大的人臉尺寸.對每層特征圖設(shè)置了1:1的默認(rèn)anchor,這是因?yàn)槿四槺壤咏叫?每層檢測的人臉尺寸如表3所示.
表3 每層檢測人臉框尺寸
Table 3 Each layer detects face size
檢測層名稱設(shè)置anchor大小Conv4_216*16Conv532*3264*64Conv6128*128256*256Conv7512*512
每一層的anchor密度為該層anchor的長或?qū)挸栽搶涌偛介L,例如Conv4_2層的總步長為16,其anchor長為16,故該層anchor密度為1.同理Conv7層的anchor密度為4,Conv5由于檢測兩種尺寸的anchor需要分別計(jì)算,anchor尺寸為32*32密度為1,anchor尺寸為64*64密度為2,Conv6由于檢測兩種尺寸的anchor需要分別計(jì)算,anchor尺寸為128*128密度為2,anchor尺寸為256*256密度為4.
顯然每層的anchor密度并不相同,為了保證每層的anchor密度相同,需要對anchor進(jìn)行稠密化.只有當(dāng)每層anchor密度相同時(shí),單位像素人臉才會對應(yīng)相同的anchor數(shù)目,當(dāng)提高低密度層的anchor數(shù)目也會提高該層人臉召回率.
根據(jù)上面的計(jì)算,需要將每層anchor密度保持為4,因?yàn)樽畲蟮腶nchor密度就是4,向最大密度對齊.同時(shí)為了使一層的anchor密度提高n倍,需要將n*n(長和寬方向都需要擴(kuò)大n倍)個(gè)anchor均勻分布在原始的anchor中心.圖8展示了anchor密度增大2倍的過程,黑點(diǎn)代表原始特征圖上一個(gè)特征點(diǎn),正方形框代表以特征點(diǎn)為中心的anchor.
圖8 anchor稠密化舉例Fig.8 Examples of anchor densification
因此conv4_2特征圖上對于16*16的anchor需要擴(kuò)大4倍,conv5特征圖上對于32*32的anchor需要擴(kuò)大4倍,對于64*64的anchor需要擴(kuò)大2倍,conv6特征圖上對于128*128的anchor需要擴(kuò)大2倍,對于256*256的anchor需要擴(kuò)大1倍,conv7特征圖上對于512*512的anchor需要擴(kuò)大1倍.在每層特征圖上設(shè)置anchor后,每個(gè)anchor需要預(yù)測6個(gè)變量,其中2個(gè)是該anchor的類別即是否為人臉,另外4個(gè)是該anchor位置偏移(只有anchor類別是人臉時(shí),這4個(gè)變量才有意義.)如表4所示.
表4 每層預(yù)測變量維度
Table 4 Predictor dimension per layer
檢測層名稱 卷積操作 預(yù)測變量維度Conv4_23*3*(2+4)*1640*40*(2+4)*16Conv53*3*(2+4)*2020*20*(2+4)*20Conv63*3*(2+4)*510*10*(2+4)*5Conv73*3*(2+4)*15*5*(2+4)*1
在損失層需要分別計(jì)算人臉分類損失和人臉位置損失.首先來介紹分類損失,檢測層設(shè)置的anchor與人臉標(biāo)簽框計(jì)算iou(anchor的面積與人臉標(biāo)簽的面積的交集除以anchor的面積與人臉標(biāo)簽框的面積的并集).如果iou大于0.35,就記為正樣本,即該anchor負(fù)責(zé)回歸人臉標(biāo)簽框;如果iou小于0.35,就記為負(fù)樣本;如果一個(gè)人臉標(biāo)簽框與所有anchor的iou都小于0.35,就找出與該人臉標(biāo)簽框最大iou對應(yīng)的anchor記為正樣本負(fù)責(zé)回歸該人臉標(biāo)簽框.
常用的用來計(jì)算分類損失為二分類損失如公式(1)所示,其中yi為標(biāo)簽即上文所述的正負(fù)樣本,hθ(x)為網(wǎng)絡(luò)最后一層激活函數(shù)的輸出,在0-1之間.對于正樣本而言,輸出概率越大損失越小.對于負(fù)樣本而言,輸出概率越小則損失越小.此時(shí)的損失函數(shù)在大量易分類樣本的迭代過程中下降比較緩慢并且可能無法優(yōu)化至全局最優(yōu).改進(jìn)后的新分類損失如公式(2)所示,首先在原有的基礎(chǔ)上加了一個(gè)平方因子,減少容易分類樣本的損失,使得更關(guān)注于困難的、易錯(cuò)分的樣本.例如對于正類樣本而言,預(yù)測結(jié)果為0.99應(yīng)屬于簡單易分類正樣本,需要降低此類樣本的損失值,而預(yù)測結(jié)果為0.6屬于較難區(qū)分的正樣本,需要相對增大此類樣本的損失值,添加一個(gè)平方因子剛好達(dá)到了這樣的效果.對于負(fù)類樣本而言也因如此,預(yù)測0.1的結(jié)果應(yīng)當(dāng)相比于預(yù)測0.4的樣本損失值要小很多.對于預(yù)測概率為0.5時(shí),損失只減少為原來的0.25倍.綜上所述,改進(jìn)后的新分類損失函數(shù)減少了簡單易分類樣本的影響,更關(guān)注困難樣本.
-yilog(hθ(x))-(1-yi)log(1-hθ(x))
(1)
(2)
對于人臉位置損失,只有標(biāo)為正樣本的anchor才需要計(jì)算位置損失,對于負(fù)樣本計(jì)算位置損失沒有任何意義.公式(3)-公式(6)是將人臉標(biāo)簽框歸一化,其中x,y, w,h是人臉標(biāo)簽框的中心坐標(biāo)與寬高,xa,ya,wa,ha是對應(yīng)的anchor的中心坐標(biāo)與寬高。再根據(jù)公式(7)smoothL1計(jì)算標(biāo)簽與預(yù)測值之間的損失,采用smoothL1原因是該函數(shù)對離群點(diǎn)更加魯棒。位置損失函數(shù)如公式(8)所示,其中px,py,pw,ph是網(wǎng)絡(luò)預(yù)測的位置偏.
tx=(x-xa)/wa
(3)
ty=(y-ya)/ha
(4)
tw=log(w/wa)
(5)
th=log(h/ha)
(6)
(7)
(8)
結(jié)合分類損失函數(shù)與位置損失函數(shù),整體損失函如公式(9)所示.
(9)
訓(xùn)練數(shù)據(jù)集:采用公開數(shù)據(jù)集WIDER FACE[13]的12880人臉標(biāo)注圖像作為訓(xùn)練集.
數(shù)據(jù)增強(qiáng):對訓(xùn)練圖像主要進(jìn)行隨機(jī)裁剪、隨機(jī)翻轉(zhuǎn)、隨機(jī)改變圖像亮度、對比度、飽和度等數(shù)據(jù)增強(qiáng)策略.這樣即可以擴(kuò)大數(shù)據(jù)集,同時(shí)使訓(xùn)練出來的模型更加魯棒.
困難負(fù)樣本挖掘:經(jīng)過anchor匹配策略后,絕大多數(shù)anchor是負(fù)樣本,正樣本會被淹沒在負(fù)樣本中.為了解決這個(gè)問題,對負(fù)樣本的loss值進(jìn)行排序,取最大loss值對應(yīng)的負(fù)樣本,并且將負(fù)樣本數(shù)目最大值控制在正樣本數(shù)目的3倍.
其他訓(xùn)練細(xì)節(jié):實(shí)驗(yàn)基于Pytorch框架,此次實(shí)驗(yàn)基于GTX 1080.模型中所有參數(shù)隨機(jī)使用” Xavier ”方法初始化.采用”Adam”方法優(yōu)化參數(shù),weight_decay=0.0004,學(xué)習(xí)率初始化為0.001,總共訓(xùn)練了300個(gè)epoch,在epoch為200,250學(xué)習(xí)率變?yōu)樵瓉淼?.1倍.
在檢測階段,模型會輸出很多的預(yù)測框,設(shè)置置信度為0.1來過濾掉置信度小于0.1的預(yù)測結(jié)果,接著再對剩余的預(yù)測框執(zhí)行nms(非極大值抑制)操作來去除重疊框,設(shè)置重疊閾值為0.35,然后將剩余的結(jié)果作為最終預(yù)測結(jié)果.
在公開數(shù)據(jù)集FDDB[15]上使用上段所述的方法進(jìn)行檢測并將檢測結(jié)果與其他公開方法進(jìn)行比較.比較結(jié)果如表4所示.
從表4中可以看出本文的方法有著很高的精度,不僅相較Faster-RCNN這種大模型(整體模型大小約333M)只有一點(diǎn)差距,而且相比于傳統(tǒng)的VJ[1]檢測器以及以滑窗方法為基礎(chǔ)的檢測器CasCNN[4]、MTCNN[5]也有較大提升.除此之外,本文的方法在CPU(i7-2600@3.4GHz)檢測一張圖片只需要0.15秒,訓(xùn)練好的模型大小只有17.6M(本文使用的測試圖片中,正臉數(shù)超過10).Faster-RCNN無法在CPU環(huán)境下實(shí)時(shí)檢測,故沒有列出檢測時(shí)間,但是Faster-RCNN在GPU(Tesla K40c)檢測一張圖片也需要0.38秒.
為了分析本文提出方法的有效性,在FDDB[15]上做了對比試驗(yàn).在對比實(shí)驗(yàn)中,只是修改了某個(gè)特定的設(shè)置,實(shí)驗(yàn)中其他參數(shù)保持不變.對比實(shí)驗(yàn)結(jié)果如表5所示.
表5 不同方法的對比實(shí)驗(yàn)
Table 5 Comparison experiment of different methods
檢測方法檢測精度檢測時(shí)間(s)VJ[1]68.5%0.10CasCNN[4]85.6%0.17MTCNN[5]95.1%0.12Faster-RCNN[6]96.1%-Ours95.9%0.15
表6 技巧對比實(shí)驗(yàn)
Table 6 Tips comparison experiment
技巧使用與否新分類損失使用否否否Anchor稠密化使用使用否否連接層使用使用使用否精度95.9%95.3%94.4%93.4%
從表6看,新分類損失函數(shù)、Anchor稠密化、連接層這些創(chuàng)新點(diǎn)都是行之有效,都給實(shí)驗(yàn)結(jié)果的精度帶來了不同程度的提升.新分類損失函數(shù)主要是模型在訓(xùn)練過程中更加關(guān)注樣本中比較難以區(qū)分的部分,Anchor稠密化主要增加anchor數(shù)目來提高了人臉召回率,連接層則使當(dāng)前層特征更加魯棒.
本文提出一個(gè)端到端的、快速的、精確的人臉檢測方法.首先為了提高運(yùn)行速度對提取特征的基礎(chǔ)網(wǎng)絡(luò)進(jìn)行輕量化,然后為了加強(qiáng)每層的特征表達(dá)對相鄰特征層進(jìn)行融合,最后為了提高人臉召回率對anchor做了稠密化處理和對分類損失函數(shù)進(jìn)行修改.實(shí)驗(yàn)結(jié)果表明本文在減小基礎(chǔ)網(wǎng)絡(luò)參數(shù)的情況下仍然有著很高的準(zhǔn)確率.本文對于小尺寸人臉不是很魯棒,下一步工作將關(guān)注小尺寸人臉的檢測工作.