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