鄧黃瀟
(中國礦業大學計算機科學與技術學院 江蘇省徐州市 221000)
人臉識別作為計算機視覺領域的最基本和最具挑戰性的問題,近些年來取得了很大的成就,Viola 和Jones 提出了基于AdaBoost[1]的人臉檢測算法。Chen[2]等人提出了RPN 網絡和RCNN 網絡。Le[3]等人提出了多尺度檢測的Faster-RCNN 的方法。2017年,文獻[4]提出了RetinaNet 網絡,該網絡利用了Focal Loss 函數成功控制了正負樣本、難分易分樣本產生的損失值,這使得one stage 目標檢測模型在COCO 數據集上首次超過了當時最先進的two stage 目標檢測模型的結果。
由此,本文希望通過利用RetinaNet 網絡,來對復雜環境下佩戴口罩的人臉和未佩戴口罩的人臉進行識別檢測。
本文選擇ResNet101 作為遷移學習的BackBone,數據集來自WIDER Face 和MAFA 共計7959 張圖片,將人臉目標分為兩類,包括佩戴口罩人臉(face_mark)、未佩戴口罩人臉(face)。
RetinaNet 為何凱明和Girshick R 等人在2017年提出的通用目標檢測網絡,對于多尺度目標檢測問題,該算法采用特征FPN(特征金字塔網絡)來預測不同尺度的目標。對于檢測樣本圖片中正負樣本不均衡的問題,該算法采用Focal Loss 來代替交叉熵損失函數來提高檢測精度。如圖1 所示[4]。
Retinanet 由Backbone、FPN、預測結構構成,Backbone 主要作用是提取圖像特征,FPN 主要用主網絡提取的特征提高對多尺度檢測精度的提高,預測結構用于生成包含目標的邊界框。
常用目標檢測網絡的Backbone 有VGGNet[5]、GoogleNet[6]、ResNet[7]等。VGGNet 通過疊加3x3 的卷積核來達到提取圖像特征的目的,常用的是包含13 層卷積層與3 層全連接層的VGG-16。GoogleNet 基于Inception 模塊構建基礎結構,深度達到22 層,提取到的特征更為多樣。

圖1:Retinanet 結構
ResNet 基于ResNet 模塊構建,因其具有跨層連接的特性,極大的減輕了梯度消失在深度神經網絡中訓練的問題[8],常用的ResNet 為ResNet50 與ResNet101。本 文 選 擇ResNet101 作 為Backbone。
一般分類問題采用交叉熵函數作為損失函數,表達式為式(1),該損失函數在圖像分類中效果顯著,但對于需要預選框的目標檢測卻效果一般。而Focal Loss 損失函數[表達式見式(2)]中的權重系數α 針對正負樣本不均衡的情況,由于實際圖片中包含目標的預選框非常少,大多數預選框并不包含待檢測目標,而通過調整權重系數α,能有效解決正負樣本損失值的比例問題。

針對圖像底層特征語義信息少、高層語義信息多、目標位置粗糙的特點,FPN 通過自底向上、自頂向上、橫向連接三個部分將不同層的特征圖進行融合,使得小目標被易于檢測。
自底向上是CNN 的前向傳播過程。自頂向下過程采用上采樣進行。橫向連接將上采樣的結果和自底向上的結果進行相加操作。這對單張圖片能有效構建多尺度特征圖,使FPN 的每一層均可以用于不同尺寸的目標檢測。
為了滿足在復雜環境下對人臉是否佩戴口罩進行檢測,本文采用WIDER Face 和MAFA 兩個數據集7959 張圖片。其中6067 張作為訓練集,300 張作為驗證集,1592 張作為測試集。數據集含有兩類標簽,分別是佩戴口罩的人臉(face_mark)與未佩戴口罩的人臉(face),并將其制作為PASCAL VOC2007 數據集格式。

表1

表2

表3
本文的試驗平臺的配置為Ubuntu18.04、CUDA10.0、cuDNN7.6.5、NVIDIA RTX2080Ti(11GB)。在此基礎上使用keras 深度學習框架,并用Python 語言編程實現網絡的訓練和測試。
對VOC2007 數據集進行訓練之前,需要先將所有標簽轉化為CSV 文件,然后使用預訓練好的模型初始化網絡參數。初始化學習率設置為0.00001,訓練300 輪。訓練后在在驗證集上的mAP 值為86.45%,平均檢測一張圖像的速度為233ms。
為了驗證訓練模型對于佩戴口罩的有效性,試驗將與基于DackNet 的YOLOv3 的檢測效果進行對比,比較兩種種算法在復雜情況下的檢測表現,并得出試驗結論。
由于需要直觀的對識別結果做出評價,因此評價指標要同時考慮到準確率和召回率,設定 J 作為口罩佩戴識別結果的評價指標,J 為召回率與準確率的函數,定義如下式(3)。

式中:P——準確率;
R——召回率。
在實際的檢測中,由于一對一的檢測將會耗費大量的時間,因此多數情況下將會有多人臉在一幀圖像中同時進行檢測,此時就會出現一些人臉輪廓不完整、人臉較小以及人臉之間存在遮擋的情況。由此設計了在不同人臉數目下檢測結果的對比。未佩戴口罩人臉測試集下的檢測效果圖與原圖如圖3 所示[9],佩戴口罩的人臉測試集檢測效果圖與原圖如圖4 所示[9]。
從圖3 可以看到,當檢測單張人臉時兩種算法的效果都很好,檢測密集的多張人臉時雖然檢測出的數量相差無幾,但在檢測精度上RetinaNet 明顯領先YOLOv3,且數量也更為準確。從測試集中選取兩種數目不同的含有人臉圖像各20 張,分別用上述兩種算法計算評價指標J 的值,并重復三次,求取J 值的平均值,可以發現RetinaNet 在檢測密集的多張人臉上效果顯著,J 值明顯高于YOLOv3。結果如表1 所示。

圖2:ResNet 模塊

圖3
從圖4 可以看到,如同圖3 的情況,在檢測單一佩戴口罩的人臉時兩種算法精度均很高,但在密集多人臉的情況下YOLOv3 表現明顯不如RetinaNet。從測試集中選取兩種數目不同的含有佩戴口罩的人臉圖像各20 張,分別用上述兩種算法計算評價指標J 的值,并重復三次,求取J 值的平均值,可以發現RetinaNet 在檢測密集多張佩戴口罩的人臉同樣更加出色,但在檢測佩戴口罩的人臉的任務上兩種網絡都比檢測未佩戴的口罩更加出色。結果如表2。
在實際情況中戴口罩與不帶口罩的人會同時出現在圖像幀中,因此有必要測試當兩類待檢測目標同時出現時兩種網絡的檢測效果,效果圖與原圖如圖5 所示[9]。

圖4

圖5
可以看到,YOLOv3 不僅在精度上低于RetinaNet,同時對于像素值很小的人臉也不能將其識別出來,且在像素值很小時,還會錯將佩戴口罩的人臉誤識別成未佩戴口罩的人臉。從測試集中選取同時含有佩戴口罩和未佩戴口罩的人臉圖像20 張,分別用上述兩種算法計算評價指標J 的值,并重復三次,求取J 值的平均值,也能證明RetinaNet 比YOLOv3 出色,計算結果如表3。
本文提出一種基于RetinaNet 的人臉口罩佩戴檢測的方法,通過實驗表明在復雜環境下該模型具有較高的精度與魯棒性。通過遷移學習利用預訓練的ResNet 模型來幫助新模型訓練,經過GPU 加速訓練后在驗證集上的AP 值為86.45%,檢測一張圖片的時間為233ms。通過與目前流行的YOLOv3 模型進行對比,RetinaNet 也展示出了更好的檢測效果。受限于數據集大小,以后將對現有數據集進行擴充,進行更深入的研究并與硬件設備相結合,為社會治安發揮應有的貢獻。