董春峰,楊春金,周萬珍
(1.河北科技大學(xué)信息科學(xué)與工程學(xué)院,河北石家莊 050018;2.河北太行機(jī)械工業(yè)有限公司,河北石家莊 052160)
人臉檢測是從圖像中檢測人臉是否存在,并定位圖像中的人臉區(qū)域。經(jīng)過幾十年的發(fā)展與研究,人工智能的很多領(lǐng)域都需要應(yīng)用人臉檢測算法,如表情識(shí)別,人臉識(shí)別,智能安防等[1-4]。在現(xiàn)實(shí)環(huán)境中,人臉檢測算法主要面臨如下考驗(yàn),不僅需要應(yīng)對(duì)人臉遮擋、光照變化和人臉姿態(tài)多樣性的問題,還應(yīng)具備生產(chǎn)環(huán)境下實(shí)時(shí)處理的功能。因此,如何提升人臉檢測算法的精度以及檢測速度已成為當(dāng)下研究的熱點(diǎn)問題。
傳統(tǒng)的人臉檢測算法主要以特征提取為主,例如基于Haar-like特征的Viola-Jones級(jí)聯(lián)檢測器[5],基于方向梯度直方圖(histogram of oriented gradient,HOG)特征的DPM(deformable parts model)算法[6],以及基于范例的VPE算法[7]。近年來,隨著深度學(xué)習(xí)在圖像方面的應(yīng)用越來越廣泛,基于卷積神經(jīng)網(wǎng)絡(luò)的人臉檢測算法已經(jīng)成為主要的研究方向,例如基于級(jí)聯(lián)神經(jīng)網(wǎng)絡(luò)的CascadeCNN算法[8],基于濾波信道特征和卷積神經(jīng)網(wǎng)絡(luò)結(jié)合的CCF(convolutional channel features)算法[9],基于多任務(wù)級(jí)聯(lián)卷積神經(jīng)網(wǎng)絡(luò)的MTCNN(multi-task convolutional neural network)算法[10]。目前,雖然結(jié)合深度神經(jīng)網(wǎng)絡(luò)VGGNet以及ResNet的一些人臉檢測算法[11-13]能夠?qū)崿F(xiàn)比較高的精度,但是在檢測速度上還是比較慢的。
上述算法中,MTCNN算法因可以兼顧檢測速度以及精度而得到廣泛應(yīng)用[14-16]。但是,MTCNN算法在檢測小人臉方面的魯棒性還比較低。針對(duì)MTCNN算法存在的問題,本文提出一種基于感受野增強(qiáng)的多任務(wù)級(jí)聯(lián)人臉檢測算法,相比原始算法在FDDB數(shù)據(jù)集上有更高的檢測精度,以及更快的檢測速度。
MTCNN算法是一個(gè)多任務(wù)級(jí)聯(lián)卷積神經(jīng)網(wǎng)絡(luò),能夠完成人臉驗(yàn)證、人臉邊界框回歸、人臉關(guān)鍵點(diǎn)回歸3個(gè)任務(wù)。MTCNN算法主要包含3個(gè)神經(jīng)網(wǎng)絡(luò)P-Net,R-Net和O-Net。P-Net網(wǎng)絡(luò)是全卷積神經(jīng)網(wǎng)絡(luò),可以輸入任意大小的圖片,主要用于人臉區(qū)域粗略過濾;R-Net網(wǎng)絡(luò)用于人臉區(qū)域的精細(xì)過濾;O-Net網(wǎng)絡(luò)用于人臉關(guān)鍵點(diǎn)選定和人臉區(qū)域的最終選定。
MTCNN算法的主要流程:首先將輸入的圖片生成圖像金字塔,然后把圖像金字塔中的圖片送入P-Net網(wǎng)絡(luò),因其可以快速生成多個(gè)預(yù)測框,最后使用非極大抑制(non-maximum suppression,NMS)算法從預(yù)測框中選取候選框,將所有候選框的尺寸變?yōu)?4×24后送入R-Net網(wǎng)絡(luò);從R-Net網(wǎng)絡(luò)中得到人臉框,經(jīng)NMS算法過濾后作為候選框,將候選框的尺寸變?yōu)?8×48后送入O-Net網(wǎng)絡(luò);O-Net網(wǎng)絡(luò)能夠返回最終人臉框和人臉的關(guān)鍵點(diǎn)信息。
經(jīng)過生物學(xué)家的研究表明,人臉視覺的感受野是一個(gè)與視網(wǎng)膜折射率相關(guān)的函數(shù),RFB(receptive field block)模塊正是借鑒該思想來模擬人眼的感受野,在結(jié)構(gòu)上RFB借鑒了Inception網(wǎng)絡(luò)多分支神經(jīng)網(wǎng)絡(luò)的思想,其次引入空洞卷積層??斩淳矸e層的原理是在普通卷積核中填充0,可以實(shí)現(xiàn)在不增加計(jì)算量的情況下,擴(kuò)大感受野。RFB模塊中的多分支結(jié)構(gòu)使用大小不同的卷積核來模擬不同大小的人眼感受野;后端空洞卷積用于模擬視網(wǎng)膜的折射率和人眼的感受野之間的聯(lián)系。RFB模塊如圖1所示。感受野模塊(receptive field blocks,RFB-S)是基于人類視覺感受野所設(shè)計(jì)的,可以增強(qiáng)模型對(duì)特征的可分辨性以及對(duì)小目標(biāo)的魯棒性[17]。RFB-S模塊是在RFB模塊的基礎(chǔ)上將5×5卷積層替換為2個(gè)3×3卷積層,將3×3卷積層替換為1×3卷積層和3×1卷積層,目的是減少模型的參數(shù)量。RFB-S模塊如圖2所示。
圖1 RFB模塊Fig.1 RFB module
圖2 RFB-S模塊Fig.2 RFB-S module
傳統(tǒng)的MTCNN算法使用標(biāo)準(zhǔn)的卷積層,感受野會(huì)隨著網(wǎng)絡(luò)深度的增加而增加,有利于大尺度人臉的檢測,但是不利于小尺寸人臉檢測。為了解決這個(gè)問題,本文結(jié)合RFB-S模塊和MTCNN網(wǎng)絡(luò)模型提出一種改進(jìn)的人臉檢測算法,相比原始MTCNN算法網(wǎng)絡(luò)模型主要有以下改進(jìn)。
1)去除P-Net網(wǎng)絡(luò)和R-Net網(wǎng)絡(luò)的人臉關(guān)鍵點(diǎn)選取任務(wù)。通過理解MTCNN算法的流程,發(fā)現(xiàn)P-Net網(wǎng)絡(luò)和R-Net網(wǎng)絡(luò)的主要任務(wù)為人臉檢測框的選定與初步過濾,刪除人臉關(guān)鍵點(diǎn)回歸任務(wù),對(duì)網(wǎng)絡(luò)精度影響很小。去除P-Net網(wǎng)絡(luò)和R-Net網(wǎng)絡(luò)的人臉關(guān)鍵點(diǎn)選取任務(wù)能夠減少網(wǎng)絡(luò)的訓(xùn)練時(shí)間。
2)為R-Net網(wǎng)絡(luò)和O-Net網(wǎng)絡(luò)增加RFB-S模塊。RFB-S模塊增強(qiáng)了神經(jīng)網(wǎng)絡(luò)的深層特征,保留了特征圖的邊緣部分,擴(kuò)大了網(wǎng)絡(luò)的感受野,從而能夠獲取更準(zhǔn)確的候選框。由于初始算法中的P-Net網(wǎng)絡(luò)比較簡單,并且在實(shí)驗(yàn)過程中發(fā)現(xiàn),如果在P-Net網(wǎng)絡(luò)中增加感受野模塊,雖然會(huì)略微提升P-Net網(wǎng)絡(luò)的精度,但是運(yùn)算時(shí)間也會(huì)相應(yīng)的增加較多。所以,本文沒有選擇在P-Net網(wǎng)絡(luò)中添加RFB-S模塊。
3)為3個(gè)網(wǎng)絡(luò)中添加BN層[18]。由于在RFB-S模塊中存在BN層,為了保證一致性,在MTCNN網(wǎng)絡(luò)中的卷積層與激活函數(shù)之間加入BN層。BN層能夠使所有輸入的數(shù)據(jù)歸一化均值為0,方差為1 的正態(tài)分布的數(shù)據(jù),能夠加速網(wǎng)絡(luò)收斂,提升訓(xùn)練速度。
4)使用GAP(全局平均池化)層代替R-Net網(wǎng)絡(luò)和O-Net網(wǎng)絡(luò)的全連接層。在MTCNN的各個(gè)網(wǎng)絡(luò)中,全連接層的參數(shù)占比比較大,這就導(dǎo)致網(wǎng)絡(luò)特征提取的壓力很大一部分在全連接層,網(wǎng)絡(luò)容易過擬合。
改進(jìn)的MTCNN算法網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。在P-Net網(wǎng)絡(luò)中加入BN以及減少了關(guān)鍵點(diǎn)回歸任務(wù)。在R-Net網(wǎng)絡(luò)和O-Net網(wǎng)絡(luò)中加入了RFB-S模塊以及將全連接層替換為GAP層。
圖3 改進(jìn)MTCNN網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.3 Improved MTCNN network structure diagram
3 實(shí) 驗(yàn)
本功能實(shí)驗(yàn)系統(tǒng)為Ubuntu20.04,CPU型號(hào)為i7-7900K,GPU型號(hào)為NVIDIA GeForce GTX2070 Super。編程語言為Python,深度學(xué)習(xí)框架為Pytorch。
使用WIDER FACE[19]數(shù)據(jù)集以及LFPW[20]數(shù)據(jù)集作為訓(xùn)練集,F(xiàn)DDB數(shù)據(jù)集作為測試集。WIDER FACE數(shù)據(jù)集的訓(xùn)練集包含12 880張圖片,包含超過150 000個(gè)人臉標(biāo)注框,主要用于訓(xùn)練3個(gè)網(wǎng)絡(luò)的人臉驗(yàn)證以及人臉區(qū)域選取任務(wù)。LFPW數(shù)據(jù)集包括10 000張人臉圖片,用于訓(xùn)練O-Net網(wǎng)絡(luò)的人臉關(guān)鍵點(diǎn)回歸任務(wù)。FDDB數(shù)據(jù)集擁有2 845張圖像,包含超過5 000個(gè)人臉框,用于驗(yàn)證本文算法的有效性。
使用4種類型的人臉注釋,與真實(shí)人臉框的IoU(候選框與真實(shí)人臉框交集和并集的比值)大于0.65為正樣本;IoU在0.40~0.65為部分人臉樣本;IoU小于0.30為負(fù)樣本;包含左眼、右眼、鼻子、左嘴角和右嘴角特征的人臉關(guān)鍵點(diǎn)樣本。
P-Net網(wǎng)絡(luò)的訓(xùn)練樣本尺寸為12×12。R-Net網(wǎng)絡(luò)的訓(xùn)練樣本尺寸為24×24,需要使用訓(xùn)練好的P-Net網(wǎng)絡(luò)來獲取。O-Net網(wǎng)絡(luò)的訓(xùn)練樣本尺寸為48×48,需要使用訓(xùn)練好的P-Net網(wǎng)絡(luò)和R-Net網(wǎng)絡(luò)獲取。由于LFPW數(shù)據(jù)集以及WIDER FACE數(shù)據(jù)集中均包含非常小的低質(zhì)量的人臉圖像,所以在制作3個(gè)網(wǎng)絡(luò)的訓(xùn)練樣本時(shí),舍棄了數(shù)據(jù)集中尺寸小于20×20的人臉圖像,能夠達(dá)到去除數(shù)據(jù)集中噪聲的效果,增強(qiáng)模型的魯棒性。
本文算法在訓(xùn)練時(shí)主要有3個(gè)任務(wù),分別為人臉驗(yàn)證、人臉邊界框回歸,以及人臉關(guān)鍵點(diǎn)回歸。
在人臉驗(yàn)證中,采用交叉熵?fù)p失函數(shù)進(jìn)行計(jì)算,損失函數(shù)如式(1)所示:
(1)
人臉邊界框回歸主要返回1個(gè)四維向量(x,y,ω,h),其中x,y表示人臉邊框左上頂點(diǎn)的坐標(biāo),ω表示人臉邊界框的寬度,h表示人臉邊界框的高度。
對(duì)于每一個(gè)樣本使用歐幾里德?lián)p失作為人臉邊界框任務(wù)的損失函數(shù),如式(2)所示。
(2)
人臉關(guān)鍵點(diǎn)回歸的目標(biāo)為返回左眼、右眼、鼻子、左嘴角、右嘴角5個(gè)特征點(diǎn),其中每一個(gè)特征點(diǎn)包含2個(gè)坐標(biāo)。
對(duì)于每一個(gè)樣本使用歐幾里德?lián)p失函數(shù),如式(3)所示。
(3)
在MTCNN算法中,每一個(gè)網(wǎng)絡(luò)都包含多個(gè)訓(xùn)練任務(wù),不同網(wǎng)絡(luò)針對(duì)不同的訓(xùn)練任務(wù)的側(cè)重點(diǎn)不同。所以需要將所有任務(wù)的損失函數(shù)組合起來,總體損失函數(shù)如式(4)所示。
(4)
在本文算法中,P-Net和R-Net沒有人臉關(guān)鍵點(diǎn)檢測任務(wù),所以每一個(gè)任務(wù)的ωj設(shè)置為ωdet=1,ωbox=0.5,ωlandmark=0,O-Net網(wǎng)絡(luò)中各個(gè)任務(wù)的權(quán)重分別為ωdet=1,ωbox=0.5,ωlandmark=1。
改進(jìn)MTCNN算法相比MTCNN算法,各個(gè)網(wǎng)絡(luò)模型大小對(duì)比結(jié)果如表1所示。因?yàn)镻-Net網(wǎng)絡(luò)增加了BN層,所以模型大小略微增加。R-Net網(wǎng)絡(luò)和O-Net網(wǎng)絡(luò)的全連接層替換為GAP層,所以R-Net網(wǎng)絡(luò)的模型大小減少了10%,O-Net網(wǎng)絡(luò)的模型大小減少了20%。
表1 改進(jìn)MTCNN與MTCNN模型大小比較Tab.1 Comparison of the size of improved MTCNN and MTCNN models
為了驗(yàn)證添加各個(gè)模塊對(duì)算法性能的影響。針對(duì)改進(jìn)MTCNN算法中的BN層以及RFB-S層+GPA進(jìn)行了消融實(shí)驗(yàn),消融實(shí)驗(yàn)在FDDB數(shù)據(jù)集上進(jìn)行,實(shí)驗(yàn)結(jié)果如表2所示。從表中可以看出,BN層能夠使得網(wǎng)絡(luò)的檢測時(shí)間大幅度降低,檢測精度略微提高;RFB-S層能夠提高網(wǎng)絡(luò)檢測的精度,但是同時(shí)檢測時(shí)間也大幅度增加。本文方法通過兩者相結(jié)合,相比原始MTCNN算法平均檢測時(shí)間減少了6.97 ms,檢測精度提高了2.3%。
表2 改進(jìn)MTCNN算法在FDDB數(shù)據(jù)集上的消融實(shí)驗(yàn)Tab.2 Ablation experiment of improved MTCNN algorithm on FDDB dataset
為了評(píng)估改進(jìn)MTCNN算法的性能,將本文方法與Cascadecnn[8],MTCNN[10],DP2MFD[21],F(xiàn)D-cnn[22],LDCF+[23]等人臉檢測方法在FDDB數(shù)據(jù)集上做性能評(píng)估,選用ROC曲線作為評(píng)估指標(biāo)。在人臉檢測領(lǐng)域,ROC曲線的橫軸為假陽性,即檢測到的人臉錯(cuò)誤框的數(shù)目,縱軸為真陽性率(true positive rate,TPR),即真實(shí)人臉被預(yù)測為正的比例。在FDDB數(shù)據(jù)集上,各個(gè)算法的ROC曲線如圖4所示。當(dāng)誤檢人臉框?yàn)? 000時(shí),原始MTCNN的TPR為91.94%,本文算法的TPR為94.23%,提高了2.3%。圖中各個(gè)ROC曲線長短不一是因?yàn)槊總€(gè)算法的置信度閾值不一樣,閾值越高誤檢人臉框數(shù)目就越少。從圖4中可以看出,與其他人臉檢測算法相比,本文算法有著先進(jìn)的檢測性能。
圖4 FDDB數(shù)據(jù)集上的ROC曲線Fig.4 ROC curves on FDDB database
本文算法在進(jìn)行人臉檢測任務(wù)時(shí),設(shè)定每個(gè)網(wǎng)絡(luò)的置信度閾值:P-Net=0.7,R-Net=0.8,O-Net=0.8,最小人臉尺寸為20×20。圖5為本文算法在WIDER FACE數(shù)據(jù)集上的檢測結(jié)果,實(shí)驗(yàn)結(jié)果表明該算法在現(xiàn)實(shí)環(huán)境中也具有很好的魯棒性。
圖5 WIDER FACE數(shù)據(jù)集上檢測結(jié)果Fig.5 Detection results on the WIDER FACE dataset
為了改善MTCNN算法在小人臉檢測方面魯棒性比較低的問題,提出了一種基于感受野增強(qiáng)的MTCNN人臉檢測算法,為MTCNN的R-Net網(wǎng)絡(luò)和O-Net網(wǎng)絡(luò)增加RBF-S感受野模塊來提升對(duì)小人臉檢測的魯棒性,引入批量標(biāo)準(zhǔn)化加速網(wǎng)絡(luò)收斂,使用GAP層替換網(wǎng)絡(luò)的全連接層,減少了模型的參數(shù)量。本文算法在減少模型大小的基礎(chǔ)上,提升了檢測速度和檢測精度,在FDDB數(shù)據(jù)集上的準(zhǔn)確率優(yōu)于大多數(shù)人臉檢測方法,能夠滿足現(xiàn)實(shí)中人臉檢測算法的需求,可以應(yīng)用于嵌入式設(shè)備中,完成人臉檢測任務(wù),為表情識(shí)別、智能安防、人臉識(shí)別等提供技術(shù)支持。
本文算法雖然能很好地完成人臉檢測任務(wù),并且提升了對(duì)小人臉檢測的魯棒性,但是在人臉出現(xiàn)嚴(yán)重遮擋時(shí),其檢測效果不佳。今后將致力于提升算法對(duì)遮擋人臉的檢測效果,以便能夠完成更復(fù)雜的人臉檢測任務(wù)。