李帥杰,陳虎,蘭時(shí)勇
(四川大學(xué)視覺合成圖形圖像技術(shù)國(guó)防重點(diǎn)學(xué)科實(shí)驗(yàn)室,成都 610064)
人臉檢測(cè)屬于目標(biāo)檢測(cè)的范疇,目標(biāo)檢測(cè)是計(jì)算機(jī)視覺中最重要的研究方向之一。人臉檢測(cè)作為特定的目標(biāo)檢測(cè)在許多的常見應(yīng)用中都能見到,例如拍照美顏、安防監(jiān)控、視頻會(huì)議等;同時(shí)人臉檢測(cè)技術(shù)也是許多基于人臉應(yīng)用的技術(shù)前提,在人臉對(duì)齊、人臉識(shí)別、人臉跟蹤、面部表情分析等技術(shù)中進(jìn)行人臉檢測(cè)都是必要條件。
由于人臉檢測(cè)在諸多技術(shù)中的地位和重要性,人臉檢測(cè)已經(jīng)逐漸發(fā)展成為一個(gè)相對(duì)獨(dú)立的研究方向,其研究方向和方法也呈現(xiàn)出多樣性。從人臉檢測(cè)算法的發(fā)展歷史來(lái)看,人臉檢測(cè)算法經(jīng)歷了由傳統(tǒng)方法即非深度學(xué)習(xí)階段到深度學(xué)習(xí)階段的發(fā)展過(guò)程。
在非深度學(xué)習(xí)階段中,一般通過(guò)人工設(shè)計(jì)的手工特征作為人臉特征,通過(guò)得到的人臉特征對(duì)圖像中某些位置判斷是否包含人臉。Viola和Jones提出了Haar-Like特征的快速計(jì)算方法和級(jí)聯(lián)AdaBoost分類器實(shí)現(xiàn)接近實(shí)時(shí)的人臉檢測(cè)方法[1];之后人們又設(shè)計(jì)出了一系列更加復(fù)雜的人工特征和不同的級(jí)聯(lián)結(jié)構(gòu)檢測(cè)器[2-7];還有基于組件的檢測(cè)算法可變的組件模型人臉檢測(cè)器等。這些傳統(tǒng)的人臉檢測(cè)算法在速度上具有一定優(yōu)勢(shì),但是檢測(cè)效果在一定程度上制約了其使用范圍。
近年來(lái),隨著深度學(xué)習(xí)的發(fā)展,人們提出了越來(lái)越多的基于深度學(xué)習(xí)的人臉檢測(cè)算法。OverFeat[8]檢測(cè)算法基于AlexNet[9]網(wǎng)絡(luò)結(jié)構(gòu),利用全卷積神經(jīng)網(wǎng)絡(luò)[10]和偏移池化同時(shí)對(duì)目標(biāo)進(jìn)行分類定位和檢測(cè);DDFD[11]也是基于AlexNet[9]網(wǎng)絡(luò),可以實(shí)現(xiàn)多角度和遮擋情境下的人臉檢測(cè);FacenessNet[12]對(duì)人臉不同的人臉器官(頭發(fā)、眼睛、鼻子、嘴巴、胡子等)分別用不同的神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練最終得到檢測(cè)結(jié)果,算法對(duì)人臉遮擋具有很強(qiáng)的魯棒性;CMS-RCNN[13]在VGG-16[14]模型的基礎(chǔ)上增加了高層網(wǎng)絡(luò)采用區(qū)域建議網(wǎng)絡(luò)[15]網(wǎng)絡(luò)并且結(jié)合人體信息,在遮擋、低分辨率和強(qiáng)光照下的人臉檢測(cè)效果較好;S3FD[16]與SSD[17]著重處理不同尺度下的人臉檢測(cè)?;谏疃葘W(xué)習(xí)的人臉檢測(cè)算法將人臉檢測(cè)的精度推向新的高度,不過(guò)隨著網(wǎng)絡(luò)的加深計(jì)算量越來(lái)越大檢測(cè)速度受到一定限制。
我們知道利用卷積神經(jīng)網(wǎng)絡(luò)強(qiáng)大的特征提取功能可以對(duì)圖像內(nèi)容進(jìn)行分類和預(yù)測(cè),把每個(gè)卷積神經(jīng)網(wǎng)絡(luò)看作一個(gè)分類器,然后把多個(gè)神經(jīng)網(wǎng)絡(luò)級(jí)聯(lián)起來(lái)組成具有強(qiáng)大的分類能力的分類器作為人臉檢測(cè)的分類器,但是考慮到利用復(fù)雜的卷積神經(jīng)網(wǎng)絡(luò)在進(jìn)行多尺度掃描整幅圖像計(jì)算耗費(fèi)時(shí)間過(guò)長(zhǎng),本文訓(xùn)練了12×12,18×18,24×24三個(gè)不同小尺度輸入的簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)對(duì)圖像進(jìn)行分類和預(yù)測(cè),并將三級(jí)簡(jiǎn)單的神經(jīng)級(jí)聯(lián)起來(lái)組成最終的檢測(cè)網(wǎng)絡(luò)。級(jí)聯(lián)網(wǎng)絡(luò)中每一級(jí)網(wǎng)絡(luò)中的檢測(cè)范圍和檢測(cè)精度逐級(jí)提高,下一級(jí)網(wǎng)絡(luò)對(duì)上一級(jí)網(wǎng)絡(luò)的輸出進(jìn)行進(jìn)一步的檢測(cè)篩選,三級(jí)神經(jīng)網(wǎng)絡(luò)分別進(jìn)行由粗精度到細(xì)精度的人臉檢測(cè),最后實(shí)現(xiàn)精確檢測(cè)人臉及其位置判斷。
近年來(lái),基于深度學(xué)習(xí)的卷積神經(jīng)網(wǎng)絡(luò)因?yàn)槠湓谟?jì)算機(jī)視覺、自然語(yǔ)言處理等領(lǐng)域的突出表現(xiàn)受到越來(lái)越多的研究人員的追捧,但是隨著深度神經(jīng)網(wǎng)絡(luò)在不同研究領(lǐng)域的表現(xiàn)越來(lái)越好,其層數(shù)也越來(lái)越深,速度也隨著計(jì)算量的增加而變慢。在實(shí)際應(yīng)用中人臉檢測(cè)的速度的會(huì)嚴(yán)重影響用戶體驗(yàn),在火車站進(jìn)口閘機(jī)、安檢通道等人流量大的場(chǎng)合中實(shí)時(shí)性顯得尤其重要。大部分實(shí)時(shí)的人臉檢測(cè)算法都基于級(jí)聯(lián)結(jié)構(gòu)和簡(jiǎn)單的特征框架[22],為了平衡檢測(cè)精度與檢測(cè)速度,我們放棄了層數(shù)較深的網(wǎng)絡(luò),而是使用淺層的網(wǎng)絡(luò)提取輸入圖像的特征并檢測(cè)其是否含有人臉,然后將三級(jí)淺層的網(wǎng)絡(luò)級(jí)聯(lián)起來(lái)以獲取更高的精度。與Cascade CNN[18]級(jí)聯(lián)網(wǎng)絡(luò)的每一級(jí)都包含一個(gè)分類網(wǎng)絡(luò)和一個(gè)校準(zhǔn)網(wǎng)絡(luò)兩個(gè)網(wǎng)絡(luò)不同,本文提出的級(jí)聯(lián)網(wǎng)絡(luò)每一級(jí)網(wǎng)絡(luò)同時(shí)檢測(cè)圖像是否存在人臉并對(duì)人臉位置進(jìn)行預(yù)測(cè)。我們的級(jí)聯(lián)網(wǎng)絡(luò)與MTCNN[24]相比網(wǎng)絡(luò)結(jié)構(gòu)更加簡(jiǎn)單,計(jì)算量更少,能夠加快檢測(cè)速度。
級(jí)聯(lián)網(wǎng)絡(luò)的每一級(jí)檢測(cè)過(guò)程中都會(huì)過(guò)濾掉一部分錯(cuò)誤樣本,尤其是要對(duì)整個(gè)輸入圖像檢測(cè)的第一級(jí)網(wǎng)絡(luò),它的檢測(cè)能力直接決定了整個(gè)級(jí)聯(lián)網(wǎng)絡(luò)的檢測(cè)速度[18]。如果在第一級(jí)網(wǎng)絡(luò)檢測(cè)時(shí)能夠篩除大部分非人臉,就能夠降低后面網(wǎng)絡(luò)檢測(cè)耗時(shí)。我們級(jí)聯(lián)網(wǎng)絡(luò)結(jié)構(gòu)的復(fù)雜度逐級(jí)遞增,在上一級(jí)網(wǎng)絡(luò)過(guò)濾掉一部分非人臉圖像后,把難以分辨的部分交由下一層網(wǎng)絡(luò)檢測(cè)以獲得更精準(zhǔn)的結(jié)果。
本文基于級(jí)聯(lián)神經(jīng)網(wǎng)絡(luò)的算法流程如圖1所示,綠色矩形框代表每一級(jí)網(wǎng)絡(luò)檢測(cè)結(jié)果。輸入圖像首先經(jīng)過(guò)縮放得到多尺度的輸入,將其送入級(jí)聯(lián)網(wǎng)絡(luò)分別經(jīng)過(guò)三級(jí)網(wǎng)絡(luò),第一級(jí)網(wǎng)絡(luò)排除大部分非人臉,接下來(lái)的兩級(jí)網(wǎng)絡(luò)對(duì)上一級(jí)網(wǎng)絡(luò)的結(jié)果進(jìn)一步檢測(cè),經(jīng)過(guò)三級(jí)網(wǎng)絡(luò)最后得到人臉位置。
圖1 算法檢測(cè)流程
第一級(jí)網(wǎng)絡(luò)為一個(gè)淺層的全卷積網(wǎng)絡(luò)如圖2所示,它能夠接受任意尺寸的圖像并對(duì)其進(jìn)行檢測(cè),待檢測(cè)圖像在送入第一級(jí)網(wǎng)絡(luò)之前需要由不同的縮放因子對(duì)圖像進(jìn)行縮放得到多尺度圖像金字塔,實(shí)現(xiàn)不同尺度的人臉檢測(cè)。對(duì)于一個(gè)寬和高分別為W、H的輸入圖像,檢測(cè)步長(zhǎng)為n個(gè)像素,則第一級(jí)網(wǎng)絡(luò)的輸出包括大小為的人臉與非人臉的分類檢測(cè)結(jié)果和大小為×4預(yù)測(cè)的人臉位置。分類檢測(cè)結(jié)果圖上的每一點(diǎn)代表輸入圖像中12×12大小的檢測(cè)窗分類結(jié)果,根據(jù)閾值再篩選出置信度較高的檢測(cè)結(jié)果對(duì)應(yīng)的人臉框進(jìn)行非極大值抑制(Non Maximum Suppression,NMS)操作,合并相近的人臉框。最后對(duì)不同尺度下的人臉框做NMS得到人臉框作為第一級(jí)網(wǎng)絡(luò)的輸出。
第二級(jí)網(wǎng)絡(luò)為了保證檢測(cè)速度同樣使用了一個(gè)淺層網(wǎng)絡(luò),實(shí)現(xiàn)對(duì)輸入圖像是否包含人臉的分類并對(duì)人臉位置預(yù)測(cè),但是不同于第一級(jí)網(wǎng)絡(luò)的全卷積網(wǎng)絡(luò),使用了兩層全連接網(wǎng)絡(luò)對(duì)人臉檢測(cè)結(jié)果分類和人臉位置預(yù)測(cè),其結(jié)構(gòu)如圖3所示。第二級(jí)網(wǎng)絡(luò)的輸入為第一級(jí)網(wǎng)絡(luò)的檢測(cè)結(jié)果,對(duì)第一級(jí)網(wǎng)絡(luò)結(jié)果進(jìn)一步檢測(cè)篩選減少檢測(cè)窗口數(shù)量,過(guò)濾更多的非人臉。第一級(jí)網(wǎng)絡(luò)檢測(cè)到的人臉圖像縮放到大小為18×18,輸入到第二級(jí)網(wǎng)絡(luò)中,對(duì)輸入圖像分類是否包含人臉,并調(diào)整人臉框的位置。與第一級(jí)網(wǎng)絡(luò)類似在檢測(cè)之后對(duì)檢測(cè)結(jié)果進(jìn)行NMS操作,合并重合人臉框使人臉定位更加準(zhǔn)確。
圖3 第二級(jí)網(wǎng)絡(luò)結(jié)構(gòu)
第三級(jí)網(wǎng)絡(luò)是級(jí)聯(lián)網(wǎng)絡(luò)中最復(fù)雜的一個(gè)網(wǎng)絡(luò),網(wǎng)絡(luò)結(jié)構(gòu)與第二級(jí)網(wǎng)絡(luò)相似,但是層數(shù)加深保證檢測(cè)結(jié)果的精度。第三級(jí)網(wǎng)絡(luò)對(duì)第二級(jí)網(wǎng)絡(luò)的輸入結(jié)果進(jìn)行最終篩選并調(diào)整人臉位置,在輸出最后整個(gè)級(jí)聯(lián)網(wǎng)絡(luò)結(jié)果之前同樣需要對(duì)檢測(cè)結(jié)果合并重合的人臉框。第三級(jí)網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。
圖4 第三級(jí)網(wǎng)絡(luò)結(jié)構(gòu)
對(duì)級(jí)聯(lián)網(wǎng)絡(luò)中的三級(jí)子網(wǎng)絡(luò)分別進(jìn)行訓(xùn)練,針對(duì)每個(gè)網(wǎng)絡(luò)輸入不同分別生成12×12,18×18和24×24大小的灰度圖樣本。在訓(xùn)練和測(cè)試過(guò)程中我們使用Wider Face[20]和FDDB[21]數(shù)據(jù)集。Wider Face數(shù)據(jù)集是一個(gè)人臉檢測(cè)基準(zhǔn)數(shù)據(jù)集,其中的圖像是從公開的Wider數(shù)據(jù)集中選擇的,Wider Face數(shù)據(jù)集中共包含32203張圖像和393703張人臉標(biāo)簽,其中50%用于測(cè)試,40%用于訓(xùn)練,10%用于驗(yàn)證。FDDB數(shù)據(jù)集包含2845張圖像共5171張標(biāo)注人臉,用于對(duì)比其他算法與本文算法檢測(cè)結(jié)果。
我們使用Wider Face中訓(xùn)練部分?jǐn)?shù)據(jù)生成訓(xùn)練級(jí)聯(lián)網(wǎng)絡(luò)的訓(xùn)練樣本,參與訓(xùn)練的樣本分為正樣本、負(fù)樣本、部分人臉樣本共三類。各類樣本的類別是通過(guò)生成的圖像塊與真實(shí)人臉的重疊度(Intersection Over Union,IOU)確定的。如果圖像塊與真實(shí)人臉的IOU比例大于0.65,則該圖像塊為正樣本;如果圖像塊與真實(shí)人臉的IOU小于0.3,則為負(fù)樣本;部分樣本圖像塊與真實(shí)人臉的IOU在0.4-0.65之間。
從訓(xùn)練數(shù)據(jù)庫(kù)中按照正樣本:部分樣本:負(fù)樣本=1∶1∶3的比例生成訓(xùn)練需要的各類樣本。如果第一級(jí)網(wǎng)絡(luò)能夠過(guò)盡量多的非人臉,那么后面兩級(jí)網(wǎng)絡(luò)的運(yùn)算量就會(huì)降低,整個(gè)網(wǎng)絡(luò)的檢測(cè)速度就會(huì)加快。因此訓(xùn)練好第一級(jí)網(wǎng)絡(luò)是整個(gè)級(jí)聯(lián)網(wǎng)絡(luò)提速的關(guān)鍵。我們?yōu)榈谝患?jí)網(wǎng)絡(luò)訓(xùn)練生成了約20萬(wàn)張大小為12×12的灰度圖像作為正樣本。第二級(jí)網(wǎng)絡(luò)和第三級(jí)網(wǎng)絡(luò)所需要的訓(xùn)練圖像是通過(guò)前面已經(jīng)訓(xùn)練的網(wǎng)絡(luò)檢測(cè)得到,如圖5所示。第二級(jí)和第三級(jí)網(wǎng)絡(luò)訓(xùn)練生成的正樣本數(shù)據(jù)大約為14萬(wàn)張,同時(shí)生成對(duì)應(yīng)的部分樣本和負(fù)樣本,訓(xùn)練樣本過(guò)程按照比例將數(shù)據(jù)送入別進(jìn)行訓(xùn)練。
圖5 生成每級(jí)網(wǎng)絡(luò)的訓(xùn)練數(shù)據(jù)
在級(jí)聯(lián)神經(jīng)網(wǎng)絡(luò)中預(yù)測(cè)圖像中是否含有人臉是一個(gè)二分類任務(wù),對(duì)于分類任務(wù)我們使用交叉熵?fù)p失函數(shù)(Cross-Entropy Loss Function)。對(duì)于一張輸入圖像xi,{i=0,1,2…,N},經(jīng)過(guò)網(wǎng)絡(luò)輸出計(jì)算分類損失函數(shù)表示為:,其中 pi代表圖像xi經(jīng)過(guò)網(wǎng)絡(luò)預(yù)測(cè)圖像中包含人臉的概率,,{i=0,1,2…,N}為圖像xi的類別標(biāo)簽,∈{0,1},=0代表圖中不包含人臉,=1代表圖中包含人臉。對(duì)于網(wǎng)絡(luò)預(yù)測(cè)的人臉位置,我們計(jì)算其與距離最近的真實(shí)人臉位置的偏移距離,這可以看作是回歸問(wèn)題。對(duì)每一幅輸入圖像xi其歐氏距離損失函數(shù)為:為人臉的標(biāo)注位置,為網(wǎng)絡(luò)預(yù)測(cè)的人臉位置。
級(jí)聯(lián)神經(jīng)網(wǎng)絡(luò)的損失函數(shù)包括人臉分類和人臉位置預(yù)測(cè)兩種損失函數(shù),但是在不同層級(jí)的網(wǎng)絡(luò)中網(wǎng)絡(luò)任務(wù)的側(cè)重不完全相同,在第一級(jí)網(wǎng)絡(luò)主要負(fù)責(zé)快速預(yù)測(cè)圖像中是否包含人臉,而對(duì)人臉位置的預(yù)測(cè)是次要任務(wù),所以在訓(xùn)練中分類損失函數(shù)的權(quán)重要大于人臉位置預(yù)測(cè)損失函數(shù)的權(quán)重,而在第三級(jí)網(wǎng)絡(luò)中人臉位置預(yù)測(cè)損失函數(shù)的權(quán)重將會(huì)增加。訓(xùn)練中每一級(jí)網(wǎng)絡(luò)總的損失函數(shù)表示為:,其中α和β分別表示兩種損失函數(shù)的權(quán)重。
不同于傳統(tǒng)的困難樣本挖掘,我們?cè)谟?xùn)練過(guò)程中進(jìn)行在線的困難樣本挖掘。在訓(xùn)練時(shí)對(duì)每一批訓(xùn)練樣本前向傳播后的損失進(jìn)行排序,只選擇其中分類和回歸損失中最大的70%樣本進(jìn)行反向傳播,忽略那些簡(jiǎn)單樣本,減少了訓(xùn)練所需時(shí)間,并且能夠提高整個(gè)網(wǎng)絡(luò)效果。
我們提出的級(jí)聯(lián)網(wǎng)絡(luò)訓(xùn)練和測(cè)試都基于Tensor-Flow深度學(xué)習(xí)框架。我們?cè)O(shè)置最小檢測(cè)人臉尺寸為24,檢測(cè)步長(zhǎng)為4個(gè)像素,三級(jí)網(wǎng)絡(luò)在檢測(cè)過(guò)濾非人臉窗口的閾值分別設(shè)置為0.5,0.5和0.3,在Intel i3-7100平臺(tái)下對(duì)VGA圖像檢測(cè)平均時(shí)長(zhǎng)為48ms,在第一級(jí)網(wǎng)絡(luò)中我們使用的縮放因子為0.79,網(wǎng)絡(luò)檢測(cè)平均耗時(shí)為35ms,對(duì)每一次縮放后檢測(cè)結(jié)果進(jìn)行NMS操作的IOU閾值為0.7,而對(duì)第一網(wǎng)絡(luò)整體檢測(cè)結(jié)果合并整理設(shè)置IOU閾值為0.5;的第二級(jí)網(wǎng)絡(luò)平均耗時(shí)6ms,第三級(jí)網(wǎng)絡(luò)平均耗時(shí)7ms,這兩級(jí)進(jìn)行NMS操作閾值都設(shè)置為 0.6。該算法與 V-J[1]、Joint Cascade[22]、SURF-multiview[23]、MTCNN[24]、ICC-CNN[25]等快速人臉檢測(cè)算法檢測(cè)速度對(duì)比如表1所示:
表1 幾種人臉檢測(cè)算法檢測(cè)速度對(duì)比
由表1可以本文算法檢測(cè)速度快于V-J[1]、Cascade CNN[18]、MTCNN[24]、ICC-CNN[25],但是比 Joint Cascade[22]和 SURF-multiview[23]檢測(cè)速度慢。
上面我們比較了幾種算法的檢測(cè)速度,現(xiàn)在我們?cè)贔DDB數(shù)據(jù)集對(duì)算法檢測(cè)精度進(jìn)行比較。FDDB是具有標(biāo)準(zhǔn)化評(píng)估過(guò)程的大型數(shù)據(jù)集,數(shù)據(jù)集中的2845張圖像中共有5171張標(biāo)注人臉。FDDB中的使用橢圓標(biāo)注人臉,我們首先將這些橢圓形標(biāo)注轉(zhuǎn)化為與檢測(cè)算法相同標(biāo)注的矩形標(biāo)注。我們遵循所需的評(píng)估標(biāo)準(zhǔn)流程,使用作者提供的工具箱報(bào)告我們的檢測(cè)性能。FDDB中提供了兩種評(píng)估類型:離散評(píng)分和連續(xù)評(píng)分。在離散評(píng)分中它計(jì)算檢測(cè)到標(biāo)注人臉數(shù)與誤檢人臉數(shù),只有檢測(cè)人臉與真實(shí)標(biāo)注人臉位置的重合度大于0.5時(shí)才認(rèn)為檢測(cè)到了標(biāo)注人臉。在連續(xù)評(píng)分評(píng)估中,通過(guò)將重疊度比率視為檢測(cè)邊界框的匹配度量來(lái)評(píng)估人臉的位置。圖6和圖7分別代表每種算法的離散評(píng)分和連續(xù)評(píng)分。
圖6 離散評(píng)分結(jié)果對(duì)比
圖7 連續(xù)評(píng)分結(jié)果對(duì)比
從圖6和圖7的離散評(píng)分和連續(xù)評(píng)分并結(jié)合表1的檢測(cè)速度對(duì)比來(lái)看,本文算法與Cascade CNN[18]、MTCNN[24]級(jí)聯(lián)神經(jīng)網(wǎng)絡(luò)算法相比,在保證檢測(cè)精度的情況下提高了檢測(cè)速度。
為了提高人臉檢測(cè)的速度,本文將三級(jí)淺層的神經(jīng)網(wǎng)絡(luò)級(jí)聯(lián)起來(lái),實(shí)現(xiàn)快速的人臉檢測(cè)。測(cè)試圖像輸入級(jí)聯(lián)網(wǎng)絡(luò),第一級(jí)網(wǎng)絡(luò)對(duì)不同尺度下的圖像進(jìn)行檢測(cè),排除了大量非人臉位置,并把難以分辨的結(jié)果交由下級(jí)網(wǎng)絡(luò)進(jìn)行檢測(cè),經(jīng)過(guò)三級(jí)網(wǎng)絡(luò)檢測(cè)最終得到人臉位置。算法在FDDB數(shù)據(jù)集上算法達(dá)到了良好的檢測(cè)效果,提高了檢測(cè)速度,在CPU上對(duì)VGA圖像的檢測(cè)速度達(dá)到21fps。但是該算法檢測(cè)人臉?biāo)钑r(shí)間與圖像大小,以及圖像中人臉數(shù)量有關(guān),第一級(jí)網(wǎng)絡(luò)要對(duì)整幅輸入圖像進(jìn)行掃描檢測(cè),因此圖像越大,人臉越多檢測(cè)時(shí)間越長(zhǎng),在針對(duì)多人臉圖像的檢測(cè)中需要進(jìn)一步提高其檢測(cè)速度。