段燕飛,劉胤田,王瑞祥,咬登國(guó),張航
成都信息工程大學(xué) 軟件工程學(xué)院,四川 成都 610225
近年來(lái)卷積神經(jīng)網(wǎng)絡(luò)(CNN)取得了巨大的發(fā)展,各種優(yōu)秀的目標(biāo)檢測(cè)網(wǎng)絡(luò)模型層出不窮。人臉檢測(cè)是目標(biāo)檢測(cè)的一個(gè)分支,與一般目標(biāo)檢測(cè)有很大相似之處,又有一定的差異。先前的目標(biāo)檢測(cè)大多是基于錨框(anchor-based)類(lèi)型,需要經(jīng)過(guò)滑動(dòng)窗口產(chǎn)生大量的anchor作為候選框(對(duì)于640×640輸入圖像,RetinaFace[1]中有超過(guò)10萬(wàn)個(gè)錨框),還可以細(xì)分為:one-stage檢測(cè)器,典型的有YOLO和SSD系 列(YOLOV1-V3[2?4],SSD[5]和RetinaNet[6]),這些都是全卷積網(wǎng)絡(luò)直接輸出目標(biāo)的類(lèi)別和位置坐標(biāo);two-stage檢測(cè)器,典型的是R-CNN系列(Fast R-CNN[7],F(xiàn)aster R-CNN[8]),其模型的第一階段輸出粗糙的物體候選框(proposal),第二階段進(jìn)一步回歸物體坐標(biāo)和分類(lèi)物體類(lèi)別。最近無(wú)錨框(anchor-free)型檢測(cè)器表現(xiàn)出非常優(yōu)異的性能,不需要生成大量的候選框,降低了計(jì)算開(kāi)銷(xiāo),模型更簡(jiǎn)單,在精度不降低的情況下,極大地提升了檢測(cè)速度。無(wú)錨(anchor-free)的檢測(cè)器隨著網(wǎng)絡(luò)結(jié)構(gòu)(如:特征金字塔網(wǎng)絡(luò)FPN、可形變卷積DeformConv)和損失函數(shù)(如:Focal Loss、IOU Loss)的發(fā)展逐漸煥發(fā)出新的生機(jī)。如尺度魯棒的網(wǎng)絡(luò)結(jié)構(gòu)增強(qiáng)模型的表達(dá)能力、訓(xùn)練魯棒的損失函數(shù)解決樣本的平衡和度量問(wèn)題。Anchor-free 方法以 YOLOV1-V2及 其 衍 生(FCOS[9]、ConerNet[10]、CenterNet[11]等)為代表,拋開(kāi)候選框的形狀先驗(yàn),直接分類(lèi)物體的類(lèi)別和回歸物體的坐標(biāo)。其中CenterNet模型優(yōu)于一系列最新算法,在速度和精度上都取得了優(yōu)異的成績(jī)。CenterNet是一種anchor-free型檢測(cè)器,結(jié)構(gòu)簡(jiǎn)單,直接檢測(cè)目標(biāo)的中心點(diǎn)和大小,并且沒(méi)有非極大值抑制(non maximum suppression,NMS)。
本文基于CenterNet模型思想,主要研究: 在多任務(wù)損失中,以人臉為目標(biāo),加入面部標(biāo)志點(diǎn)損失,把人臉檢測(cè)轉(zhuǎn)換為關(guān)鍵點(diǎn)估計(jì)問(wèn)題,通過(guò)全卷積網(wǎng)絡(luò)得到中心點(diǎn),同時(shí)預(yù)測(cè)人臉中心點(diǎn)位置,人臉框和5個(gè)面部關(guān)鍵點(diǎn); 針對(duì)邊緣設(shè)備和移動(dòng)設(shè)備的又快又精確的人臉檢測(cè)需求,把CenterNet的主干網(wǎng)絡(luò)ResNet18替換為輕量級(jí)的ShuffleNetV2[12]; 為了盡可能減少輕型網(wǎng)絡(luò)降低的精度,需要對(duì)ShuffleNetV2進(jìn)行改進(jìn)。增大感受野,改進(jìn)檢測(cè)頭。
先前的目標(biāo)檢測(cè)往往在圖像上將目標(biāo)用矩形框形式框出,窮舉出潛在目標(biāo)位置,然后對(duì)該位置進(jìn)行分類(lèi),這種做法浪費(fèi)時(shí)間,低效,還需要額外的后處理。CenterNet采用不同的方法,構(gòu)建模型時(shí)將目標(biāo)作為一個(gè)點(diǎn),即目標(biāo)邊界框的中心點(diǎn),采用關(guān)鍵點(diǎn)估計(jì)來(lái)找到中心點(diǎn),并回歸目標(biāo)尺寸,相比較于anchor-based檢測(cè)器,此模型是端到端的,更簡(jiǎn)單、更快、更精確。CenterNet類(lèi)似基于錨點(diǎn)的one-stage方法,中心點(diǎn)可看成形狀未知的錨點(diǎn),但又有區(qū)別,分配的錨點(diǎn)僅僅是放在位置上,沒(méi)有尺寸框,沒(méi)有手動(dòng)設(shè)置的閾值做前后景分類(lèi),像Faster RCNN會(huì)與GT IOU>0.7的作為前景,IOU<0.3的作為背景,其他不管。CenterNet每個(gè)目標(biāo)僅僅有一個(gè)正的錨點(diǎn),因此不會(huì)用非極大值抑制,只提取關(guān)鍵點(diǎn)特征圖上局部峰值點(diǎn)。如圖1所示。
圖1 提取關(guān)鍵點(diǎn)特征
多任務(wù)總損失函數(shù)為
式中:Ldec為 總損失;λsize為 目標(biāo)大小損失的權(quán)重;λoあ為 局部偏移損失的權(quán)重;Lsize為目標(biāo)大小損失;Loあ為局部偏移損失;Lk為中心點(diǎn)預(yù)測(cè)損失,類(lèi)型是Focal Loss交叉熵?fù)p失函數(shù),把目標(biāo)中心點(diǎn)當(dāng)成關(guān)鍵點(diǎn)來(lái)回歸,具體表示為
式中:N為圖像中的關(guān)鍵點(diǎn)數(shù)量,用于將所有的Positive Focal Loss標(biāo) 準(zhǔn)化為1;α和β是超 參 數(shù),實(shí)驗(yàn)中分別設(shè)置為2和4,令I(lǐng)∈RW×H×3為輸入圖像,其寬為W,高為H;∈[0,1](W/R)×(H/R)×3是生成的目標(biāo)關(guān)鍵點(diǎn)熱力圖;R是縮放比例,取4;為檢測(cè)到的關(guān)鍵點(diǎn),表示背景;對(duì)于真實(shí)(Ground Truth,GT)的關(guān)鍵點(diǎn)C,其位置為P∈R2,計(jì)算得到低分辨率(經(jīng)過(guò)下采樣)上對(duì)應(yīng)的關(guān)鍵點(diǎn),再將 GT關(guān)鍵點(diǎn)通過(guò)高斯核Yxyc=分散到熱力圖Y∈[0,1](W/R)×(H/R)×3上,其中o'p是目標(biāo)尺度自適應(yīng)的標(biāo)準(zhǔn)方差。
Loff為局部偏移損失,類(lèi)型為L(zhǎng)1損失函數(shù),作用是恢復(fù)由下采樣時(shí),GT的關(guān)鍵點(diǎn)位置數(shù)據(jù)離散后產(chǎn)生的誤差,具體表示為
Lsize是目標(biāo)大小損失,類(lèi)型為L(zhǎng)1損失函數(shù),具體表示為
為了把CenterNet用于人臉檢測(cè),讓模型能夠部署在移動(dòng)設(shè)備或者邊緣設(shè)備上,要求算法模型能實(shí)現(xiàn)精度和速度上的平衡[13]。本文在CenterNet算法上進(jìn)行了改進(jìn),修改其損失函數(shù),增加5個(gè)面部標(biāo)志點(diǎn)損失,以檢測(cè)5個(gè)面部標(biāo)志點(diǎn),實(shí)現(xiàn)人臉檢測(cè)和人臉對(duì)齊[14]。把重型主干網(wǎng)絡(luò)resenet18替換為ShuffleNetV2,ShuffleNetV2是輕量級(jí)網(wǎng)絡(luò),對(duì)計(jì)算力低且存儲(chǔ)空間小的設(shè)備更友好。最后是對(duì)ShuffleNetV2進(jìn)行改進(jìn),增大感受野,提升模型性能。圖2是本文模型的整體結(jié)構(gòu)。
圖2 模型整體結(jié)構(gòu)
本文采用ShuffleNetV2作為構(gòu)建特征金字塔的主干網(wǎng)絡(luò),提取特征。由于CenterNet是采用熱力圖來(lái)進(jìn)行回歸,模型的感受野顯得非常重要,而ShuffleNetV2相對(duì)于resenet18,模型更小,深度變淺,但是感受野也變小。為了使模型具有更好的性能,則需要增大感受野,把所有的3×3的深度卷積(depth-wise)卷積改為5×5的depth-wise 卷積,這樣就能獲得2倍的感受野,只增加了極少的計(jì)算量,如圖3所示)。
圖3 不同卷積核大小的計(jì)算量
CenterNet的檢測(cè)頭使用類(lèi)U-Net的上采樣結(jié)構(gòu),可有效地融合低層細(xì)節(jié)信息,從而提高對(duì)小物體的檢測(cè)性能。然而,CenterNet的檢測(cè)頭并未針對(duì)移動(dòng)端進(jìn)行優(yōu)化,因此需要對(duì)其進(jìn)行ShuffleNet化改造。首先,將檢測(cè)頭的所有普通3×3卷積替換為5×5的depth-wise卷積。其次,參照ShuffleNet通道壓縮的技巧,將CenterNet中多層特征的殘差融合改造為通道壓縮的連接融合。通過(guò)大感受野和輕檢測(cè)頭,優(yōu)化后的模型具有優(yōu)異的性能。
參考CenterNet的多任務(wù)損失,并進(jìn)行了相應(yīng)的改進(jìn),使之適用于人臉檢測(cè)和對(duì)齊任務(wù)。保留相關(guān)的中心點(diǎn)損失,目標(biāo)(目標(biāo)只有人臉一個(gè)類(lèi)別)大小是損失和目標(biāo)中心偏置損失,增加5個(gè)面部標(biāo)志點(diǎn)損失。總損失函數(shù)為
式中:Lk為人臉中心點(diǎn)損失;Loff為中心點(diǎn)偏置損失,皆與CenterNet保持一致;Lbox為人臉框大小損失,與CenterNet的Lsize略有不同,是學(xué)習(xí)人臉框大小的一種變換,具體公式表示為
Llm是增加的面部標(biāo)志點(diǎn)損失,與邊框(Box)回歸不同,5個(gè)面部標(biāo)志的回歸采用基于中心位置的目標(biāo)歸一化方法
實(shí)驗(yàn)中設(shè)置λoff=1、λbox=0.1和λlm=0.1,使用單個(gè)網(wǎng)絡(luò)來(lái)預(yù)測(cè)關(guān)鍵點(diǎn)、偏移量、大小和標(biāo)志點(diǎn),網(wǎng)絡(luò)預(yù)測(cè)每個(gè)位置總共有15個(gè)輸出,所有輸出共享一個(gè)通用的全卷積骨干網(wǎng)絡(luò)。
使用公開(kāi)數(shù)據(jù)集WIDER FACE[15]的訓(xùn)練子集來(lái)訓(xùn)練模型,WIDER FACE數(shù)據(jù)集由32 203張圖像和393 703個(gè)面部邊界框組成,在比例、姿勢(shì)、表情、遮擋和照明方面具有高度的可變性。通過(guò)從61個(gè)場(chǎng)景類(lèi)別中隨機(jī)采樣,將WIDER FACE數(shù)據(jù)集分為訓(xùn)練(40%)、驗(yàn)證(10%)和測(cè)試(50%)子集,驗(yàn)證集和測(cè)試集又分為3個(gè)難度等級(jí),分別是 簡(jiǎn) 單(easy)、中 等(medium)和 困 難(hard)。RetinaFace引入了5個(gè)級(jí)別的面部圖像質(zhì)量,并注釋了訓(xùn)練和驗(yàn)證子集中面部上的5個(gè)標(biāo)志點(diǎn)(即眼中心,鼻尖和嘴角)。
為了提高模型的泛化能力和魯棒性,使用原始圖像的隨機(jī)翻轉(zhuǎn)、隨機(jī)縮放、色彩抖動(dòng)和隨機(jī)剪裁正方形補(bǔ)丁來(lái)增強(qiáng)數(shù)據(jù)。把輸入分辨率重新修訂為800×800,以生成更大的訓(xùn)練臉。
實(shí)驗(yàn)環(huán)境為python3.6,深度學(xué)習(xí)框架為pytorch1.1,GPU為NVIDIA GTX1080T@11GB,RAM為32 GB,使用Adam optimiser優(yōu)化訓(xùn)練網(wǎng)絡(luò)。批量大小(batch-size)為8,學(xué)習(xí)速率(learning rate)為5×10?4,持續(xù)140個(gè)epochs,學(xué)習(xí)速率分別在90和120個(gè)時(shí)期下降了10倍,總訓(xùn)練時(shí)常為38 h。并隨機(jī)初始化網(wǎng)絡(luò)參數(shù)。
由于RetinaFace 模型太大,無(wú)法在單個(gè)CPU平臺(tái)上運(yùn)行,因此本文僅以CPU上的VGA分辨率圖像來(lái)評(píng)估Faceboxes[16],MTCNN[17],CasCNN[18]和本文方法的速度效率。選擇經(jīng)典的評(píng)估基準(zhǔn)FDDB來(lái)評(píng)估算法性能,AP表示平均精度值。如表1所示,本文的方法可以在CPU上以27 f/s的速度運(yùn)行,并且具有最高的精度。
表1 CPU上的運(yùn)行效率 %
到目前為止,WIDER FACE是人臉檢測(cè)應(yīng)用最廣泛的基準(zhǔn)。所有比較的方法都在訓(xùn)練集上進(jìn)行訓(xùn)練。為了在WIDER FACE上進(jìn)行測(cè)試,遵循官方提供的標(biāo)準(zhǔn)做法,并采用了翻轉(zhuǎn)以及多尺度策略。使用0.4的IOU閾值對(duì)預(yù)測(cè)的面部邊框的集合應(yīng)用邊框投票。在表2列出有關(guān)驗(yàn)證和測(cè)試集的3個(gè)難度等級(jí)的結(jié)果。本方法具有相當(dāng)高的平均精度(AP,average precision),在驗(yàn)證集達(dá)到94.1%(Easy)、92.3%(Medium)和88.4%(Hard)??梢?jiàn)本文提出的方法在精度和速度上都取得了優(yōu)異的成績(jī)。
表2 WIDER FACE驗(yàn)證集上的AP %
圖4是在WIDER FACE的驗(yàn)證集上畫(huà)出的準(zhǔn)確率—召回率(PR)曲線(xiàn)圖,其中準(zhǔn)確率(precession,P)的計(jì)算方法為P=TP/(TP+FP),召回率(recall,R)的計(jì)算方法為R=TP/(TP+FN)。在hard子集下的PR曲線(xiàn)中,提出的檢測(cè)模型效果遠(yuǎn)遠(yuǎn)好于其他算法。說(shuō)明本文的方法在低分辨率小人臉檢測(cè)上具有很大的優(yōu)勢(shì)。圖5是對(duì)比了MTCNN、Faceboxes和本文的方法的檢測(cè)示例,圖中人臉較為密集且人臉小,還存在嚴(yán)重遮擋的情況,本文方法的檢測(cè)效果明顯優(yōu)于其他算法。
圖4 在WIDER FACE驗(yàn)證集上的PR曲線(xiàn)
圖5 算法檢測(cè)對(duì)比示例
本文基于目標(biāo)檢測(cè)算法CenterNet,通過(guò)替換骨干網(wǎng)絡(luò),并修改損失函數(shù),提出了一種能實(shí)時(shí)運(yùn)行在移動(dòng)設(shè)備或者邊緣檢測(cè)設(shè)備上的人臉檢測(cè)算法,做到了檢測(cè)精度和速度的平衡,可以同時(shí)預(yù)測(cè)人臉框和5個(gè)面部標(biāo)志點(diǎn)。引入無(wú)錨檢測(cè)思想,把人臉檢測(cè)和對(duì)齊問(wèn)題轉(zhuǎn)換為關(guān)鍵點(diǎn)估計(jì)問(wèn)題,直接預(yù)測(cè)人臉中心點(diǎn)、大小和5個(gè)界標(biāo),沒(méi)有NMS后處理,克服了基于錨方法需要預(yù)先設(shè)計(jì)錨框的缺點(diǎn)。在具有挑戰(zhàn)性的人臉檢測(cè)基準(zhǔn)中,此方法具有優(yōu)異的性能。