王皓潔,孫家煒
(1.四川大學計算機學院,成都610065;2.四川川大智勝軟件股份有限公司,成都610045)
在傳統方法中,人臉特征是基于手工特征選取的,2001年Viola和Jones提出V-J(Viola-Jones)[1]框架,利用Haar特征和AdaBoost進行特征選擇,通過檢測級聯決策結構提高準確率,該方法在人臉檢測領域取得了突破進展,在有限的計算資源下做到了實時檢測,極大的推動了人臉檢測應用商業化的進程。后來很多研究者在三個方面基于V-J框架進行改進,一方面設計新的特征,一方面使用其他類型的AdaBoost分類器,還有一方面是對分類器級聯結構進行改進。例如ACF[2]是一種提供足夠多的特征的方法。新的分類器級聯結構如soft cascade[3]。2008年Felzenszwalb等人[4]提出可變形組件模型(Deformable Part Model,DPM),是一種基于人臉組件的檢測的算法。DPM算法對目標的形變有很強的魯棒性,對夸張表情、多姿態、多角度等的人臉都具有非常好的檢測效果。但是其性能表現一般、穩定性較差。
傳統方法基于手工選取的人臉特征,雖然計算高效,但是在多尺度、多姿態、多角度、遮擋、模糊等情況下的檢測精度差強人意。
利用深度學習技術檢測人臉的方法大致可以分為兩類:兩階段檢測器(two-stage)和單階段檢測器(onestage)。two-stage方法首先獲得一定數量的預選區域(Region Proposal,可能存在目標的區域),然后再對每個預選區域進行分類和回歸。one-stage方法可以經過一次網絡就得到目標的位置和分類信息。Two stage從R-CNN[5]開始;之后出現的金字塔池化層[6]提供了網絡輸入圖片多尺度的辦法;Faster R-CNN[7]在Fast R-CNN[8]的基礎上提出了預選區域提取網絡(Region Proposal Network,RPN)候選框生成算法,使檢測速度有了很大提升;Lin等人[9]基于Faster R-CNN提出了top-down結構和橫向連接的金字塔特征網絡(Feature Pyramid Networks,FPN)。one-stage方 法 以YOLO[10](You Only Look Once)為代表,對于檢測效率有了極大提升。Single Shot MultiBox Detector(SSD)[11]引入不同尺度特征圖做預測,大尺度特征圖檢測小目標,小尺度特征圖檢測大目標。
現實場景中環境復雜多樣,多尺度、小人臉、姿態、遮擋、光照等因素會對人臉檢測任務造成困擾,導致人臉檢測的性能下降。然而高精度運算往往所需時間長,對算力的要求較高。因此,對于實際場景中的人臉檢測而言,實現實時的檢測速度并保持較高的精度是目前急需解決的問題?;谝陨媳尘?,本文提出一種輕量型、多尺度、基于注意力機制、實時的one stage人臉檢測方法。使用多任務學習策略同時預測人臉框、人臉置信度和五個關鍵點來提高泛化能力,借鑒MTCNN[12]加入五個人臉特征點的檢測有利于人臉框的回歸精度。
本算法網絡模型包括一個主干網絡和三個檢測模塊,主干網絡采用多個含有卷積層的塊(Block)組成,同時利用批量歸一化(Batch Normal)加快訓練速度,提高模型精度,避免出現梯度消失和梯度爆炸的問題;首先從主干網絡中提取三個不同尺度的特征層構建特征金字塔,進行特征融合,然后將三層分別送入3個檢測模塊(D1,D2,D3)中,分別檢測小、中、大人臉。檢測模塊基于SSH[13]算法,采用多任務學習策略,包含目標分類、框體回歸和人臉關鍵點回歸操作;在檢測模塊中嵌入context module通過擴大感受野引入更多的上下文信息,對該模塊使用了5×5和7×7的卷積分別進行操作;網絡中不含全連接層,對輸入分辨率沒有限制,效率更高??傮w來說,本文提出的檢測算法在達到實時檢測的情況下滿足高精度要求,可應用于實際生產生活中。網絡模型的整體結構如圖1所示。

圖1 模型總體結構圖
本文提出的主干網絡構建了11個Block,每個Block中使用深度可分離卷積替代傳統卷積層,將傳統卷積層分為空間濾波和特征生成兩部分,先使用單通道卷積融合空間信息,再使用逐點卷積融合特征的通道信息。該種方法有效分離了圖像的區域和通道,計算量大幅減少,效率有很大提升,模型更輕量型。深度可分離卷積結構如圖2所示。

圖2 深度可分離卷積
圖2中假設輸入數據尺寸是W×W×C,W是特征圖的尺寸,C表示特征圖的通道數,首先使用C個3×3×1的卷積核進行單通道對應卷積;接著再通過N個1×1×C的點卷積操作融合各個通道的特征信息。使用該方式可大大縮減計算量,大約為傳統卷積的1/9,效率大幅提升。
Block中引入了具有線性瓶頸的逆殘差塊結構,在逆殘差結構中,首先使用膨脹系數提升通道數,然后再進行深度可分離卷積,最后壓縮通道數,在算法中有兩種瓶頸結構,一種是stride為1使用殘差的瓶頸結構,另一種是stride為2,進行了下采樣,未用殘差的瓶頸結構。這兩種結構如圖3所示。

圖3 逆殘差結構
從高維度向低維度轉換時,使用線性激活函數替代ReLU激活函數以避免數據坍塌造成的大量信息丟失。使用低維的網絡優點是提升計算速度,缺點是提取不到足夠多的特征信息,為了平衡模型的精度和效率,本文使用Expand系數擴展維度后再進行維度壓縮。
Block中也引入了注意力機制,人類在觀察一副圖像時,會高效的分配有限的注意力,將注意力更多的投入到焦點區域,以獲得重點關注的信息而摒棄無用的信息。在算法中,注意力機制依靠兩個步驟,Squeeze操作和Excitation操作,首先對特征圖進行Squeeze操作獲得全局特征,然后對全局特征進行Excitation,獲得各個channel的權重,最后將權重乘以原來的特征得到最后的特征。通過這種注意力模型,可以讓模型學習到更重要的特征而抑制不重要的特征。Squeeze操作是通過全局平均池化層獲得每個通道的一個全局特征。Excitation操作是將全局特征經過兩個全連接層,第一個全連接層起降維的作用,第二個全連接層恢復原始的維度。通過這種方式,模型學習各個通道的權重系數,從而提升模型對特征的辨別能力。
注意力機制的結構如圖4所示。

圖4 注意力機制結構
圖4中輸入特征經過GAP(Global Average Pooling),輸出大小為1×1×C,經過FC1層降維,輸出尺寸為1×1×C/4,經過FC2層升維,輸出尺寸為1×1×C,最后經過Scale操作,該操作是FC2層輸出的權重系數與Input特征圖對應通道相乘。
綜上所述,主干網絡中一個block組合了深度可分離卷積、逆殘差結構和注意力機制,圖5展示了主干網絡中一個block的結構,在注意力機制中本文使用1×1的點卷積替換全連接層以適應不同尺度的輸入圖像。

圖5 主干網絡block結構
模型采用P3到P5的特征金字塔層,如表1所示,這三層分別下采樣8、16、32倍,根據不同尺度的特征圖采用不同尺度的anchor。

表1 特征金字塔anchor
如圖1所示,具體過程為:提取主干網絡中的Block3、Block8、Block11的三層,這三層的通道數分別為24、48、96,首先經過1×1的點卷積將通道數統一為64,輸出表示為B3、B8、B11層,B11即為P3層,將B11層進行上采樣,與B8層相加,再經過3×3卷積得到P4層,該操作是為了消除混疊效應。同樣的,將P4層進行上采樣與B3層相加,在經過3×3卷積得到P5層。
檢測模塊基于SSH網絡模型設計,主要是兩個部分,一個是尺度不變性,通過不同尺度的特征層實現,D1、D2、D3結構相同,輸入特征圖的尺寸不同,分別為用來檢測小目標人臉、中目標人臉和大目標人臉;另一個引入豐富的上下文信息,通過Context module實現。每個檢測模塊都包含了人臉分類、框體回歸和特征點回歸三條支路。如上表1所示,每條支路都設置了兩個不同尺度的anchor,在本文中,anchor的長寬比為1。
如圖6所示,輸入的特征圖尺寸為W×W×C,分別通過一個3×3的卷積和Context Module,將兩個輸出進行維度上的拼接,拼接后尺寸為W×W×C,最后使用三個1×1的卷積分別進行人臉分類、框體回歸和關鍵點回歸,獲得W×W×(2×2)個人臉分類得分、W×W×(2×4)個框體回歸坐標和W×W×(2×10)個關鍵點回歸坐標。

圖6 檢測模塊結構圖
如圖7所示,Context Module部分通過引入大尺度濾波器(5×5、7×7)的卷積來擴大感受野,獲得更豐富的上下文信息,本文借鑒Inception[14]算法使用兩個級聯的3×3濾波器代替5×5濾波器,三個3×3濾波器級聯代替7×7濾波器,節約了大概28%的計算量。

圖7 Context Module結構圖
本文提出的算法是在PyTorch深度學習框架下設計訓練的。算法使用公開數據集WIDER FACE的訓練集進行訓練,訓練輸入圖片尺寸縮放為640×640,負例交并比閾值為0.35。采用動量梯度下降的方式訓練網絡。
面對開集問題,我們需要檢測器有較好的排除背景類別的能力,因此需要選取大量的背景作為負樣本進行訓練,本文中IOU低于0.35的anchor會被標注為負例,由于一張圖上的人臉數有限而anchor數量龐大,所以會出現正負樣本不均衡的問題,所以采用OHEM[15](Online Hard Example Mining,在線困難數據挖掘),將判定為負例的候選框損失值從高到低排序選擇負樣本,本文提出的算法訓練時正負樣本比例為1:7。
對于訓練的一個anchor,多任務損失函數定義如下:

本文提出的算法使用公開數據集FDDB上進行評測,數據集包含2845張圖片、5171個人臉,測試集在姿態、遮擋、旋轉等方面有很大的多樣性。評估指標使用真正率和假正數的關系繪制ROC曲線來客觀評價本文算法對人臉檢測的效果。圖8為該算法與但近幾年表現較好的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]算法進行對比,橫縱坐標分別表示假正數和真正率。從圖8中就可以直觀的看出,本文提出的算法在人臉檢測上的表現優于其他的算法,在假正數達到1000時,本文的真正率可以達到0.972。

圖8 FDDB數據集ROC曲線
本文使用FPS(每秒幀率)來評價算法的檢測效率,在NVIDIA GeForce GTX 1080顯卡上面的檢測速度可達40FPS,可以達到視頻級的檢測。實驗證明,該算法在普通的GPU上可以達到實時的人臉檢測,并且檢測精度很高,可用于實際的生產生活中。
本文提出了一種輕量級、實時的人臉檢測方法,該方法通過在逆殘差結構中加入注意力機制,增強了模型對特征的辨別能力,抑制無用信息,提高了對目標的檢測能力;構建特征金字塔結構,使得算法對多尺度目標同樣具備非常好的檢測效果;本文的算法可以實現one-stage檢測,便于訓練和測試;通過實驗證明該算法在公開數據集的表現突出,并且能在GPU上達到實時的人臉檢測。在未來的研究中,考慮到實際場景中檢測設備配置有限,將會對網絡進一步優化,提升在算法CPU上的檢測效率。