史豐暢
(江蘇科技大學(xué)計(jì)算機(jī)學(xué)院 鎮(zhèn)江 212003)
人臉識(shí)別[1]是根據(jù)人的臉部特征信息進(jìn)行身份識(shí)別的一種技術(shù),在現(xiàn)實(shí)生活廣泛應(yīng)用于教育、金融、公安等領(lǐng)域。而人臉檢測(cè)是指輸入一副圖像,確定圖像中所有人臉的位置、尺度和位姿的過(guò)程。它是進(jìn)行人臉識(shí)別、人像對(duì)比、視頻人像追蹤等視覺(jué)任務(wù)的基本步驟和前提。
早期的人臉檢測(cè)技術(shù)基于先驗(yàn)知識(shí)來(lái)和手工設(shè)計(jì)的特征來(lái)提取人臉圖像的特征。如:姜軍[2]等人采用與人臉生理結(jié)構(gòu)特征相符合的人臉鑲嵌圖模型,針對(duì)人臉圖像的灰度和邊緣信息,建立人臉知識(shí)庫(kù)。并通過(guò)多級(jí)監(jiān)測(cè)步驟加快檢測(cè)速度。很好地解決了復(fù)雜背景下的多人臉檢測(cè)問(wèn)題。梁路宏[3]等提出了多模板匹配的人臉檢測(cè)方法,首先通過(guò)人眼模板進(jìn)行初步篩選,然后使用多個(gè)不同長(zhǎng)寬比的人臉模板進(jìn)行檢測(cè)定位,最后利用人臉的邊緣特征確認(rèn)。該方法具有較高的檢測(cè)成功率。
近年來(lái),研究人員發(fā)現(xiàn)基于卷積神經(jīng)網(wǎng)絡(luò)的算法能夠自動(dòng)學(xué)習(xí)到圖像中的特征,并且取得了超越傳統(tǒng)視覺(jué)算法的效果。越來(lái)越多的人也將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用于人臉檢測(cè)算法中,如劉偉強(qiáng)[4]設(shè)計(jì)了一種級(jí)聯(lián)架構(gòu)的卷積神經(jīng)網(wǎng)絡(luò),通過(guò)多個(gè)尺度的圖像區(qū)分人臉與背景區(qū)域。蔣紀(jì)威[5]等對(duì)目標(biāo)檢測(cè)算法YOLO[6]進(jìn)行改進(jìn),提出了一種基于YOLOv3[7]的人臉檢測(cè)算法,該算法能夠?qū)θ四樳M(jìn)行實(shí)時(shí)檢測(cè)。
但是上述人臉檢測(cè)算法大多是將受限條件下的圖片作為檢測(cè)檢測(cè)對(duì)象,在現(xiàn)實(shí)場(chǎng)景中應(yīng)用時(shí),人臉檢測(cè)算法仍然面臨人群高密度、明暗變化、小人臉以及遮擋等諸多挑戰(zhàn)[8]。
人臉關(guān)鍵點(diǎn)檢測(cè)是人臉識(shí)別中的關(guān)鍵步驟,通常用于人臉識(shí)別、三維人臉重建、表情分析等。通過(guò)對(duì)眉毛、眼睛、鼻子、嘴巴等關(guān)鍵點(diǎn)的檢測(cè),以獲得更好的人臉特征,從而提升人臉識(shí)別的準(zhǔn)確率。如Face++[9]提出的從粗到細(xì)的人臉關(guān)鍵點(diǎn)檢測(cè)算法,能夠準(zhǔn)確檢測(cè)出人臉的內(nèi)部關(guān)鍵點(diǎn)和輪廓關(guān)鍵點(diǎn)共68個(gè)。
本文在現(xiàn)有的人臉檢測(cè)算法上進(jìn)行改進(jìn),將人臉關(guān)鍵點(diǎn)檢測(cè)技術(shù)用于人臉檢測(cè)中,提出了一種一階段的人臉檢測(cè)算法。該算法利用特征金字塔網(wǎng)絡(luò)提取多尺度的人臉特征,通過(guò)多任務(wù)學(xué)習(xí)策略同時(shí)預(yù)測(cè)人臉?lè)謹(jǐn)?shù),人臉框位置和人臉關(guān)鍵點(diǎn)。實(shí)驗(yàn)表明,加入了人臉關(guān)鍵點(diǎn)檢測(cè)后,不僅提高了對(duì)正常人臉的檢測(cè)性能,也能夠準(zhǔn)確檢測(cè)出被遮擋的人臉。
本文的人臉檢測(cè)算法首先使用特征金字塔網(wǎng)絡(luò)[10]提取圖像中多尺度的人臉特征信息,并通過(guò)上下文模塊來(lái)增強(qiáng)對(duì)較小人臉的檢測(cè)性能。然后通過(guò)多任務(wù)學(xué)習(xí)的方式,進(jìn)行人臉?lè)诸?lèi),戴口罩人臉?lè)诸?lèi),以及回歸人臉框和人臉的關(guān)鍵點(diǎn),人臉檢測(cè)網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 人臉檢測(cè)網(wǎng)絡(luò)結(jié)構(gòu)
人臉尺度的變換很大,同一張圖像中存在從幾個(gè)像素到幾千個(gè)像素的人臉,因此對(duì)于檢測(cè)中的多尺度問(wèn)題,本文采用特征金字塔網(wǎng)絡(luò)提取不同尺度的人臉特征。
本文的特征金字塔網(wǎng)絡(luò)以ResNet-152[11]作為主干網(wǎng)絡(luò),其中特征圖C2、C3、C4、C5四個(gè)不同尺度的特征為ResNet中各個(gè)殘差塊輸出的特征圖,特征圖C6由C5經(jīng)過(guò)3*3卷積后得到。
為了增強(qiáng)對(duì)小人臉的檢測(cè)能力,本文在五個(gè)特征金字塔輸出的特征圖上均加入了上下文模塊來(lái)擴(kuò)張預(yù)檢測(cè)區(qū)域的上下文信息,增強(qiáng)特征的感受野。
上下文模塊將特征金字塔輸出的特征輸入感受野分別為3、5、7的分支中,然后將三個(gè)分支得到的特征合并,最后經(jīng)過(guò)relu激活函數(shù)后輸出特征。
多任務(wù)學(xué)習(xí)在人類(lèi)檢測(cè)中廣泛使用,能夠有效提高算法的性能。本文也采用了多任務(wù)學(xué)習(xí)的方式來(lái)檢測(cè)圖像中包含的人臉。多任務(wù)損失函數(shù)如下:
人臉?lè)诸?lèi)損失Lcls(pi,p*i):這是一個(gè)二分類(lèi)的softmax損失,其中pi是錨點(diǎn)i為人臉的概率值,p*i是錨點(diǎn)i的標(biāo)簽值,正錨點(diǎn)(含有人臉)值為1,負(fù)錨點(diǎn)(不含人臉)值為0。
戴口罩人臉?lè)诸?lèi)損失Lcls_mask(qi,q*i):與人臉?lè)诸?lèi)損失類(lèi)似,戴口罩人臉?lè)诸?lèi)損失也是二分類(lèi)損失,其中qi為錨點(diǎn)i人臉戴口罩的概率值,q*i為標(biāo)簽值,q*i為1表示該錨點(diǎn)的人佩戴了口罩,為0則表示沒(méi)有佩戴口罩。
人臉框回歸損失Lbox(ti,ti*):該損失函數(shù)用于回 歸 人 臉 所 在 的 位 置,其 中ti={tx,ty,tw,th}和分別為與正錨點(diǎn)有關(guān)的人臉預(yù)測(cè)框和人臉標(biāo)簽框(包括中心點(diǎn)坐標(biāo),寬度和高度)。損失函數(shù)采用如下所示的smooth L1損失:
人臉關(guān)鍵點(diǎn)損失Lpts(li,l*i):為了增強(qiáng)對(duì)部分困難人臉樣本的檢測(cè)能力,本文還對(duì)人臉關(guān)鍵點(diǎn)進(jìn)行了回歸,其中}分別為預(yù)測(cè)和標(biāo)注的五個(gè)人臉關(guān)鍵點(diǎn)。與人臉框的損失相同,關(guān)鍵點(diǎn)損失也采用了smooth L1損失:
為了加快網(wǎng)絡(luò)的收斂速度,多任務(wù)損失的中的部分損失只在滿(mǎn)足條件的情況下計(jì)算。如戴口罩人臉?lè)诸?lèi)損失Lcls_mask(qi,q*i)和人臉框回歸損失只在存在人臉的情況下(p*i=1)計(jì)算;由于目前開(kāi)源的口罩人臉檢測(cè)數(shù)據(jù)集中沒(méi)有對(duì)人臉關(guān)鍵點(diǎn)進(jìn)行標(biāo)注,因此人臉關(guān)鍵點(diǎn)損失只在存在人臉且不帶口罩的情況下計(jì)算,即p*i=1,q*i=0。
為了驗(yàn)證本文的算法在復(fù)雜環(huán)境下是否能正確檢測(cè)出人臉。本文采用了WIDER Face[12]和MAFA[13]兩個(gè)數(shù)據(jù)集,其中WIDER Face用于測(cè)試算法在復(fù)雜環(huán)境下人臉的檢測(cè)性能,MAFA數(shù)據(jù)集用于測(cè)試算法能否有效檢測(cè)戴口罩的人臉。
WIDER Face數(shù)據(jù)集是是常用的人臉檢測(cè)數(shù)據(jù)集,包含32203張圖像。本文使用了帶人臉關(guān)鍵點(diǎn)的WIDER Face數(shù)據(jù)集,然后在61個(gè)不同的場(chǎng)景類(lèi)別中隨機(jī)采樣,將該數(shù)據(jù)集分為訓(xùn)練集(70%),驗(yàn)證集(10%)和測(cè)試集(20%)。并且根據(jù)EdgeBox[14]方法的檢測(cè)率,通過(guò)逐步合并困難樣本定義了三個(gè)難度的樣本(簡(jiǎn)單、中等和困難)。
MAFA數(shù)據(jù)集是一個(gè)遮擋人臉數(shù)據(jù)集,其中大部分?jǐn)?shù)據(jù)為被口罩遮擋的人臉圖片,本文篩選后,從數(shù)據(jù)集中選出了3006張圖片作為訓(xùn)練集,1059張圖片作為測(cè)試集。
本文的實(shí)驗(yàn)平臺(tái)為Ubuntu16.04、CUDA10.1、cuDNN7.6.5、NVIDIA GTX1080Ti。人臉檢測(cè)算法使用Python語(yǔ)言和深度學(xué)習(xí)框架Tensorflow實(shí)現(xiàn)。
首先將人臉數(shù)據(jù)集進(jìn)行預(yù)處理,將標(biāo)簽轉(zhuǎn)換為CSV文件,數(shù)據(jù)集含有4類(lèi)標(biāo)簽,分別為人臉是否佩戴口罩、是否為人臉、人臉框坐標(biāo)和人臉關(guān)鍵點(diǎn)坐標(biāo)。然后使用預(yù)訓(xùn)練的模型初始化網(wǎng)絡(luò)參數(shù),初始化學(xué)習(xí)率設(shè)置為0.0001,使用帶動(dòng)量的隨機(jī)梯度下降算法進(jìn)行優(yōu)化。
本節(jié)評(píng)估了人臉關(guān)鍵點(diǎn)對(duì)測(cè)試集準(zhǔn)確率的影響,并著重考察在困難樣本上算法的性能。表1為有無(wú)人臉關(guān)鍵點(diǎn)對(duì)算法效果的影響。從表1可以看出,在不使用人臉關(guān)鍵點(diǎn)損失的情況下,模型在困難樣本上的單類(lèi)別平均正確率(Average Precision,AP)為90.6%,略低于ISRN模型[15]的90.9%,添加了關(guān)鍵點(diǎn)回歸損失后,困難樣本的AP顯著提升,達(dá)到了91.7%,全類(lèi)平均正確率(mean Average Precision,mAP)也從50.8%提升至52.3%,說(shuō)明人臉關(guān)鍵點(diǎn)損失對(duì)于準(zhǔn)確率的提升至關(guān)重要。
表1 人臉檢測(cè)關(guān)鍵點(diǎn)對(duì)算法的影響
為了評(píng)估算法在遮擋人臉數(shù)據(jù)集上的準(zhǔn)確率,本節(jié)使用MAFA數(shù)據(jù)集進(jìn)行測(cè)試。表2為算法在MAFA數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果。從表2可以看出,在不使用人臉關(guān)鍵點(diǎn)損失時(shí),算法的mAP為88.6%,略高于FAN模型[16]的88.4%,而加入人臉關(guān)鍵點(diǎn)損失后,本文的算法提升至89.5%,提升了0.9%,說(shuō)明盡管模型在訓(xùn)練戴口罩人臉樣本時(shí)沒(méi)有對(duì)人臉關(guān)鍵點(diǎn)損失進(jìn)行計(jì)算,但人臉關(guān)鍵點(diǎn)損失增強(qiáng)了網(wǎng)絡(luò)對(duì)人臉特征的提取能力和對(duì)不帶口罩人臉的檢測(cè)準(zhǔn)確率,進(jìn)而提升了對(duì)戴口罩人臉的檢測(cè)能力。
表2 MAFA數(shù)據(jù)集實(shí)驗(yàn)結(jié)果
本文提出了一種一階段的人臉檢測(cè)算法,通過(guò)多尺度特征提取和多任務(wù)學(xué)習(xí)進(jìn)行訓(xùn)練,同時(shí)加入了人臉關(guān)鍵點(diǎn)用于提升人臉檢測(cè)準(zhǔn)確率。訓(xùn)練后的算法不僅能夠檢測(cè)圖像中任意尺度的人臉,而且也能夠準(zhǔn)確檢測(cè)出戴口罩人臉。實(shí)驗(yàn)結(jié)果表明加入人臉關(guān)鍵點(diǎn)損失后不僅提高了常規(guī)人臉數(shù)據(jù)集上的準(zhǔn)確率,也提升了面部被遮擋的人臉檢測(cè)能力。