王皓潔,孫家煒
(1.四川大學(xué)計(jì)算機(jī)學(xué)院,成都610065;2.四川川大智勝軟件股份有限公司,成都610045)
在傳統(tǒng)方法中,人臉特征是基于手工特征選取的,2001年Viola和Jones提出V-J(Viola-Jones)[1]框架,利用Haar特征和AdaBoost進(jìn)行特征選擇,通過檢測級聯(lián)決策結(jié)構(gòu)提高準(zhǔn)確率,該方法在人臉檢測領(lǐng)域取得了突破進(jìn)展,在有限的計(jì)算資源下做到了實(shí)時(shí)檢測,極大的推動了人臉檢測應(yīng)用商業(yè)化的進(jìn)程。后來很多研究者在三個(gè)方面基于V-J框架進(jìn)行改進(jìn),一方面設(shè)計(jì)新的特征,一方面使用其他類型的AdaBoost分類器,還有一方面是對分類器級聯(lián)結(jié)構(gòu)進(jìn)行改進(jìn)。例如ACF[2]是一種提供足夠多的特征的方法。新的分類器級聯(lián)結(jié)構(gòu)如soft cascade[3]。2008年Felzenszwalb等人[4]提出可變形組件模型(Deformable Part Model,DPM),是一種基于人臉組件的檢測的算法。DPM算法對目標(biāo)的形變有很強(qiáng)的魯棒性,對夸張表情、多姿態(tài)、多角度等的人臉都具有非常好的檢測效果。但是其性能表現(xiàn)一般、穩(wěn)定性較差。
傳統(tǒng)方法基于手工選取的人臉特征,雖然計(jì)算高效,但是在多尺度、多姿態(tài)、多角度、遮擋、模糊等情況下的檢測精度差強(qiáng)人意。
利用深度學(xué)習(xí)技術(shù)檢測人臉的方法大致可以分為兩類:兩階段檢測器(two-stage)和單階段檢測器(onestage)。two-stage方法首先獲得一定數(shù)量的預(yù)選區(qū)域(Region Proposal,可能存在目標(biāo)的區(qū)域),然后再對每個(gè)預(yù)選區(qū)域進(jìn)行分類和回歸。one-stage方法可以經(jīng)過一次網(wǎng)絡(luò)就得到目標(biāo)的位置和分類信息。Two stage從R-CNN[5]開始;之后出現(xiàn)的金字塔池化層[6]提供了網(wǎng)絡(luò)輸入圖片多尺度的辦法;Faster R-CNN[7]在Fast R-CNN[8]的基礎(chǔ)上提出了預(yù)選區(qū)域提取網(wǎng)絡(luò)(Region Proposal Network,RPN)候選框生成算法,使檢測速度有了很大提升;Lin等人[9]基于Faster R-CNN提出了top-down結(jié)構(gòu)和橫向連接的金字塔特征網(wǎng)絡(luò)(Feature Pyramid Networks,F(xiàn)PN)。one-stage方 法 以YOLO[10](You Only Look Once)為代表,對于檢測效率有了極大提升。Single Shot MultiBox Detector(SSD)[11]引入不同尺度特征圖做預(yù)測,大尺度特征圖檢測小目標(biāo),小尺度特征圖檢測大目標(biāo)。
現(xiàn)實(shí)場景中環(huán)境復(fù)雜多樣,多尺度、小人臉、姿態(tài)、遮擋、光照等因素會對人臉檢測任務(wù)造成困擾,導(dǎo)致人臉檢測的性能下降。然而高精度運(yùn)算往往所需時(shí)間長,對算力的要求較高。因此,對于實(shí)際場景中的人臉檢測而言,實(shí)現(xiàn)實(shí)時(shí)的檢測速度并保持較高的精度是目前急需解決的問題?;谝陨媳尘?,本文提出一種輕量型、多尺度、基于注意力機(jī)制、實(shí)時(shí)的one stage人臉檢測方法。使用多任務(wù)學(xué)習(xí)策略同時(shí)預(yù)測人臉框、人臉置信度和五個(gè)關(guān)鍵點(diǎn)來提高泛化能力,借鑒MTCNN[12]加入五個(gè)人臉特征點(diǎn)的檢測有利于人臉框的回歸精度。
本算法網(wǎng)絡(luò)模型包括一個(gè)主干網(wǎng)絡(luò)和三個(gè)檢測模塊,主干網(wǎng)絡(luò)采用多個(gè)含有卷積層的塊(Block)組成,同時(shí)利用批量歸一化(Batch Normal)加快訓(xùn)練速度,提高模型精度,避免出現(xiàn)梯度消失和梯度爆炸的問題;首先從主干網(wǎng)絡(luò)中提取三個(gè)不同尺度的特征層構(gòu)建特征金字塔,進(jìn)行特征融合,然后將三層分別送入3個(gè)檢測模塊(D1,D2,D3)中,分別檢測小、中、大人臉。檢測模塊基于SSH[13]算法,采用多任務(wù)學(xué)習(xí)策略,包含目標(biāo)分類、框體回歸和人臉關(guān)鍵點(diǎn)回歸操作;在檢測模塊中嵌入context module通過擴(kuò)大感受野引入更多的上下文信息,對該模塊使用了5×5和7×7的卷積分別進(jìn)行操作;網(wǎng)絡(luò)中不含全連接層,對輸入分辨率沒有限制,效率更高??傮w來說,本文提出的檢測算法在達(dá)到實(shí)時(shí)檢測的情況下滿足高精度要求,可應(yīng)用于實(shí)際生產(chǎn)生活中。網(wǎng)絡(luò)模型的整體結(jié)構(gòu)如圖1所示。
圖1 模型總體結(jié)構(gòu)圖
本文提出的主干網(wǎng)絡(luò)構(gòu)建了11個(gè)Block,每個(gè)Block中使用深度可分離卷積替代傳統(tǒng)卷積層,將傳統(tǒng)卷積層分為空間濾波和特征生成兩部分,先使用單通道卷積融合空間信息,再使用逐點(diǎn)卷積融合特征的通道信息。該種方法有效分離了圖像的區(qū)域和通道,計(jì)算量大幅減少,效率有很大提升,模型更輕量型。深度可分離卷積結(jié)構(gòu)如圖2所示。
圖2 深度可分離卷積
圖2中假設(shè)輸入數(shù)據(jù)尺寸是W×W×C,W是特征圖的尺寸,C表示特征圖的通道數(shù),首先使用C個(gè)3×3×1的卷積核進(jìn)行單通道對應(yīng)卷積;接著再通過N個(gè)1×1×C的點(diǎn)卷積操作融合各個(gè)通道的特征信息。使用該方式可大大縮減計(jì)算量,大約為傳統(tǒng)卷積的1/9,效率大幅提升。
Block中引入了具有線性瓶頸的逆殘差塊結(jié)構(gòu),在逆殘差結(jié)構(gòu)中,首先使用膨脹系數(shù)提升通道數(shù),然后再進(jìn)行深度可分離卷積,最后壓縮通道數(shù),在算法中有兩種瓶頸結(jié)構(gòu),一種是stride為1使用殘差的瓶頸結(jié)構(gòu),另一種是stride為2,進(jìn)行了下采樣,未用殘差的瓶頸結(jié)構(gòu)。這兩種結(jié)構(gòu)如圖3所示。
圖3 逆殘差結(jié)構(gòu)
從高維度向低維度轉(zhuǎn)換時(shí),使用線性激活函數(shù)替代ReLU激活函數(shù)以避免數(shù)據(jù)坍塌造成的大量信息丟失。使用低維的網(wǎng)絡(luò)優(yōu)點(diǎn)是提升計(jì)算速度,缺點(diǎn)是提取不到足夠多的特征信息,為了平衡模型的精度和效率,本文使用Expand系數(shù)擴(kuò)展維度后再進(jìn)行維度壓縮。
Block中也引入了注意力機(jī)制,人類在觀察一副圖像時(shí),會高效的分配有限的注意力,將注意力更多的投入到焦點(diǎn)區(qū)域,以獲得重點(diǎn)關(guān)注的信息而摒棄無用的信息。在算法中,注意力機(jī)制依靠兩個(gè)步驟,Squeeze操作和Excitation操作,首先對特征圖進(jìn)行Squeeze操作獲得全局特征,然后對全局特征進(jìn)行Excitation,獲得各個(gè)channel的權(quán)重,最后將權(quán)重乘以原來的特征得到最后的特征。通過這種注意力模型,可以讓模型學(xué)習(xí)到更重要的特征而抑制不重要的特征。Squeeze操作是通過全局平均池化層獲得每個(gè)通道的一個(gè)全局特征。Excitation操作是將全局特征經(jīng)過兩個(gè)全連接層,第一個(gè)全連接層起降維的作用,第二個(gè)全連接層恢復(fù)原始的維度。通過這種方式,模型學(xué)習(xí)各個(gè)通道的權(quán)重系數(shù),從而提升模型對特征的辨別能力。
注意力機(jī)制的結(jié)構(gòu)如圖4所示。
圖4 注意力機(jī)制結(jié)構(gòu)
圖4中輸入特征經(jīng)過GAP(Global Average Pooling),輸出大小為1×1×C,經(jīng)過FC1層降維,輸出尺寸為1×1×C/4,經(jīng)過FC2層升維,輸出尺寸為1×1×C,最后經(jīng)過Scale操作,該操作是FC2層輸出的權(quán)重系數(shù)與Input特征圖對應(yīng)通道相乘。
綜上所述,主干網(wǎng)絡(luò)中一個(gè)block組合了深度可分離卷積、逆殘差結(jié)構(gòu)和注意力機(jī)制,圖5展示了主干網(wǎng)絡(luò)中一個(gè)block的結(jié)構(gòu),在注意力機(jī)制中本文使用1×1的點(diǎn)卷積替換全連接層以適應(yīng)不同尺度的輸入圖像。
圖5 主干網(wǎng)絡(luò)block結(jié)構(gòu)
模型采用P3到P5的特征金字塔層,如表1所示,這三層分別下采樣8、16、32倍,根據(jù)不同尺度的特征圖采用不同尺度的anchor。
表1 特征金字塔anchor
如圖1所示,具體過程為:提取主干網(wǎng)絡(luò)中的Block3、Block8、Block11的三層,這三層的通道數(shù)分別為24、48、96,首先經(jīng)過1×1的點(diǎn)卷積將通道數(shù)統(tǒng)一為64,輸出表示為B3、B8、B11層,B11即為P3層,將B11層進(jìn)行上采樣,與B8層相加,再經(jīng)過3×3卷積得到P4層,該操作是為了消除混疊效應(yīng)。同樣的,將P4層進(jìn)行上采樣與B3層相加,在經(jīng)過3×3卷積得到P5層。
檢測模塊基于SSH網(wǎng)絡(luò)模型設(shè)計(jì),主要是兩個(gè)部分,一個(gè)是尺度不變性,通過不同尺度的特征層實(shí)現(xiàn),D1、D2、D3結(jié)構(gòu)相同,輸入特征圖的尺寸不同,分別為用來檢測小目標(biāo)人臉、中目標(biāo)人臉和大目標(biāo)人臉;另一個(gè)引入豐富的上下文信息,通過Context module實(shí)現(xiàn)。每個(gè)檢測模塊都包含了人臉分類、框體回歸和特征點(diǎn)回歸三條支路。如上表1所示,每條支路都設(shè)置了兩個(gè)不同尺度的anchor,在本文中,anchor的長寬比為1。
如圖6所示,輸入的特征圖尺寸為W×W×C,分別通過一個(gè)3×3的卷積和Context Module,將兩個(gè)輸出進(jìn)行維度上的拼接,拼接后尺寸為W×W×C,最后使用三個(gè)1×1的卷積分別進(jìn)行人臉分類、框體回歸和關(guān)鍵點(diǎn)回歸,獲得W×W×(2×2)個(gè)人臉分類得分、W×W×(2×4)個(gè)框體回歸坐標(biāo)和W×W×(2×10)個(gè)關(guān)鍵點(diǎn)回歸坐標(biāo)。
圖6 檢測模塊結(jié)構(gòu)圖
如圖7所示,Context Module部分通過引入大尺度濾波器(5×5、7×7)的卷積來擴(kuò)大感受野,獲得更豐富的上下文信息,本文借鑒Inception[14]算法使用兩個(gè)級聯(lián)的3×3濾波器代替5×5濾波器,三個(gè)3×3濾波器級聯(lián)代替7×7濾波器,節(jié)約了大概28%的計(jì)算量。
圖7 Context Module結(jié)構(gòu)圖
本文提出的算法是在PyTorch深度學(xué)習(xí)框架下設(shè)計(jì)訓(xùn)練的。算法使用公開數(shù)據(jù)集WIDER FACE的訓(xùn)練集進(jìn)行訓(xùn)練,訓(xùn)練輸入圖片尺寸縮放為640×640,負(fù)例交并比閾值為0.35。采用動量梯度下降的方式訓(xùn)練網(wǎng)絡(luò)。
面對開集問題,我們需要檢測器有較好的排除背景類別的能力,因此需要選取大量的背景作為負(fù)樣本進(jìn)行訓(xùn)練,本文中IOU低于0.35的anchor會被標(biāo)注為負(fù)例,由于一張圖上的人臉數(shù)有限而anchor數(shù)量龐大,所以會出現(xiàn)正負(fù)樣本不均衡的問題,所以采用OHEM[15](Online Hard Example Mining,在線困難數(shù)據(jù)挖掘),將判定為負(fù)例的候選框損失值從高到低排序選擇負(fù)樣本,本文提出的算法訓(xùn)練時(shí)正負(fù)樣本比例為1:7。
對于訓(xùn)練的一個(gè)anchor,多任務(wù)損失函數(shù)定義如下:
本文提出的算法使用公開數(shù)據(jù)集FDDB上進(jìn)行評測,數(shù)據(jù)集包含2845張圖片、5171個(gè)人臉,測試集在姿態(tài)、遮擋、旋轉(zhuǎn)等方面有很大的多樣性。評估指標(biāo)使用真正率和假正數(shù)的關(guān)系繪制ROC曲線來客觀評價(jià)本文算法對人臉檢測的效果。圖8為該算法與但近幾年表現(xiàn)較好的RSA[16]、ICC-CNN[17]、Faster R-CNN[18]、Face-Boxes[19]、Scale-Face[20]、FD-CNN[21]、LDCF+[22]、BBFCN[23]、Fast R-CNN[24]算法進(jìn)行對比,橫縱坐標(biāo)分別表示假正數(shù)和真正率。從圖8中就可以直觀的看出,本文提出的算法在人臉檢測上的表現(xiàn)優(yōu)于其他的算法,在假正數(shù)達(dá)到1000時(shí),本文的真正率可以達(dá)到0.972。
圖8 FDDB數(shù)據(jù)集ROC曲線
本文使用FPS(每秒幀率)來評價(jià)算法的檢測效率,在NVIDIA GeForce GTX 1080顯卡上面的檢測速度可達(dá)40FPS,可以達(dá)到視頻級的檢測。實(shí)驗(yàn)證明,該算法在普通的GPU上可以達(dá)到實(shí)時(shí)的人臉檢測,并且檢測精度很高,可用于實(shí)際的生產(chǎn)生活中。
本文提出了一種輕量級、實(shí)時(shí)的人臉檢測方法,該方法通過在逆殘差結(jié)構(gòu)中加入注意力機(jī)制,增強(qiáng)了模型對特征的辨別能力,抑制無用信息,提高了對目標(biāo)的檢測能力;構(gòu)建特征金字塔結(jié)構(gòu),使得算法對多尺度目標(biāo)同樣具備非常好的檢測效果;本文的算法可以實(shí)現(xiàn)one-stage檢測,便于訓(xùn)練和測試;通過實(shí)驗(yàn)證明該算法在公開數(shù)據(jù)集的表現(xiàn)突出,并且能在GPU上達(dá)到實(shí)時(shí)的人臉檢測。在未來的研究中,考慮到實(shí)際場景中檢測設(shè)備配置有限,將會對網(wǎng)絡(luò)進(jìn)一步優(yōu)化,提升在算法CPU上的檢測效率。