冉鵬飛,劉銀華
(青島大學 自動化學院,青島266071)
從2019年12月開始,新型冠狀病毒肺炎(COVID-19)席卷了中國31 個省(自治區、直轄市)和新疆生產建設兵團以及境外的許多國家[1]。目前中國已經復工復學,但全球疫情尚未得到控制,疫情還沒有結束,人們對發熱和呼吸道癥狀還要保持警惕。尤其是在人口密集的場合下,正確佩戴口罩是防控工作的重中之重。現在是否配戴口罩通常是工作人員來檢查的,這種方法效率低下。本文研究了目標檢測的相關算法,發現許多算法都可以用于檢測是否佩戴口罩,但是復雜的光照條件會給佩戴口罩的檢測過程帶來許多問題。其檢測復雜光照條件下的圖像時會得不到理想效果。
現在基于深度學習的目標檢測算法主要分為兩種。第一種是雙階段的檢測算法,這種算法將目標檢測分成兩個步驟,第一步是利用候選區域生成網絡獲取一個候選框,第二步通過卷積神經網絡完成對候選框中候選目標位置與類別的檢測。常見的雙階段目標檢測算法主要是以Fast R-CNN[2]、Faster R-CNN[3]等為代表的算法。第二種是單階段目標檢測算法,它可以直接回歸預測框,具有更快的檢測速度。常見的單階段目標檢測算法SSD、YOLO 系列[4]等為代表。本文基于YOLOv4 算法為基礎,針對在復雜光照條件下,口罩檢測效果不好的情況,本文主要改善工作有以下幾點:
(1)在YOLOv4 的主干網絡中引入基于通道和空間注意力機制,同時在特征金字塔部分加入跨階段局部網絡,增強特征圖的表達能力。
(2)根據不同系數的Gamma 變換會對圖像進行處理,提出了一種可以選取符合復雜光照條件下的圖像的算法,從而構建出復雜光照條件下的數據集并手工標注用于口罩佩戴檢測任務的網絡訓練與測試。
針對于兩階段的目標檢測算法普遍存在的運算速度慢的缺點,YOLO 創造性地提出了單階段的方法,具備良好的識別速度和檢測精度。YOLOv4 在YOLOv3 的基礎上改進的,雖然沒有革命性的改變,但是其網絡結構更為復雜,并且使用了許多訓練技巧來提升準確率。
在主干特征提取網絡部分,YOLOv4 借鑒跨階段局部網絡(cross stage partial network,CSPNet)構造出了CSPDarknet53 結構。CSPNet 就是將原來的殘差塊的堆疊進行拆解后,主干部分繼續進行原來殘差塊的操作,另一部分則像一個殘差邊一樣,少許處理后直接連接到最后。CSPNet 結構如圖1所示。
同時將DarknetConv2D 中的激活函數由Leaky-ReLU 換成了Mish。Mish 激活函數如式(1)所示:


圖1 CSPNet 結構Fig.1 CSPNet structure
并且在CSPDarknet53 網絡中的最后一個特征層的卷積里加入了空間金字塔池化(spatial pyramid pooling,SPP),可以極大地增加感受野,分離出最顯著的上下文特征。特征金字塔部分,YOLOv4 在3 個有效特征層上可以做到對特征的反復提取,有效提升預測精度。YOLOv4 的網絡結構如圖2 所示。
在最后的預測階段,改進了損失函數。因為尋常的交并比(intersection over union,IoU)無法直接優化沒有重疊的部分,所以將IoU 改為CIoU,可以讓目標框更加有魯棒性,不會出現訓練過程中的發散等問題。CIoU 公式如下:

式中:ρ2(b,bgt)分別代表了預測框和真實框的中心點的歐式距離;c 代表的是能夠同時包含預測框和真實框的最小閉包區域的對角線距離。而α 和v 的公式如下:

相應的損失函數為

卷積塊注意力模塊(convolutional block attention module,CBAM)是一種融合了通道注意力機制和空間注意力機制的注意力模塊。通過輸入的一個中間特征圖,CBAM 可以按照順序沿著通道和空間兩個獨立維度推斷注意圖,然后將注意圖與輸入特征圖相乘以進行自適應特征細化。本文在主干特征提取網絡中引入這一注意力模塊來提高模型對復雜光照特征的表達能力,使檢測精度得到提升。并且引入CBAM 使精度提高帶來的參數開銷問題可忽略不計。

圖2 YOLOv4 網絡結構Fig.2 YOLOv4 network structure
SENet(squeeze-and-excitation networks)的工作僅利用了平均池化特征,CBAM 的通道注意力模塊在其基礎上增加了最大池化特征,通過使用兩種池化操作來聚合特征圖的空間信息,生成兩個不同的空間上下文描述符:分別表示平均池化和最大池化特征,接著再經過多層感知器(MLP)生成通道注意圖Mc。公式如下:

式中:σ 為sigmoid 函數W0∈RC/r×C,W1∈RC×C/r;W0和W1分別代表多層感知器的權重系數,并且ReLU激活函數后面W0。
通過要素之間的空間關系可以生成空間注意圖,為了計算空間注意力,首先沿通道軸應用兩種池化操作,并將它們連接起來以生成有效的特征描述符。然后通過標準卷積層將它們連接起來并進行卷積,從而生成空間注意圖。公式如下:

式中:σ 為sigmoid 函數;f7×7代表濾波器大小為7×7的卷積運算。
本文在YOLOv4 的主干特征提取網絡的ResBlock中嵌入該注意力模塊,確切位置的結構如圖3 所示。通過先通道后空間注意力模塊相組合的形式,實現注意力集中,提高網絡在復雜光照中的學習能力,在訓練中使模型學習到更多復雜光照中人臉佩戴口罩的信息,進一步提高了檢測的準確性。

圖3 ResBlock 中嵌入雙注意力模塊位置示意圖Fig.3 Location diagram of embedded dual attention module in ResBlock
本文研究了一種可以用來增強CNN 學習能力的新型骨干網絡,在特征金字塔部分,YOLOv4 采用的普通的卷積操作同樣也引入了跨階段局部網絡(CSPNet)來加強它的學習能力。可以進一步提高網絡特征融合的能力。在特征金字塔上結構改進對比如圖4 所示。

圖4 YOLOv4 和本文在特征金字塔的結構Fig.4 YOLOv4 and the structure of the feature pyramid in this paper
YOLOv4 自帶的特征融合策略使得在普通光照下有著較高的檢測精度,但是在某些復雜光照情況下魯棒性卻不高。本文在這一基礎上進一步改進,在特征金字塔部分應用了CSP 結構,讓其在輕量化的同時保證了準確性,減少了內存成本。CSPNet 解決了網絡中進行優化時,梯度信息會經常覆蓋的問題。讓網絡可以重復利用特征,從而減少網絡參數數量。
數據集中的圖像數目很多,僅靠人工篩選費時費力。因此本文提出了一種篩選算法來對圖像進行選擇,來得到符合本文所需要的數據集。
復雜光照的圖像有許多種,采集的圖像中常見的主要有光照偏強和光照偏弱兩類,前者圖像的某些細節可能會由于光照造成圖像前景區域較亮而喪失,后者圖像的前景區域會因為光照變得模糊而丟失細節。其中可分成一維熵與二維熵兩種形式的圖像熵是基于圖像內平均信息量的統計形式,二維熵是在一維熵的基礎上加入了空間特征,來表示圖像的灰度分布的空間特性。這里圖像的總體信息通過選用二維熵來進行分析。
對于指定的一張彩色圖像,其色彩矩陣可以表示為如下形式[5]:

式中:x 和y 分別代表方向,然后令矩陣做如下變換:

式中:Qxx,Qyy與Qxy表示相應的點積操作,由此本文可以將某一像素點的顏色變化差值?定義為

觀察某一像素點的顏色前后變化的差異,可以確定像素的細節信息發生改變。基于此,本文可以對圖像細節進行檢測。這里分別求出閾值s 與閾值w,然后就可以將所有的圖像都劃分為前景與背景。并使用Gamma 矯正方法[6]進一步提高圖像對比度。Gamma 矯正公式:

式中:β 為調整后對應的像素灰度值;α 為輸入圖像像素的灰度值;αmax為α 的最大值;γ 為自定義的參數,它決定了Gamma 矯正對圖像灰度值的改變程度。本文的圖像處理通過使用不同系數的Gamma變換,γ 大于1 會對光照偏強的圖像降低亮度同時減少細節數目,γ 小于1 會對光照偏弱的圖像提高亮度使圖像細節增加。分別求出變換前后圖像的細節數目變化大小和熵值的變化總體幅度,然后對比相應的閾值,從而得出圖像的光照復雜度情況,就可以據此篩選出本文需要的圖像。
本文的數據集利用上文提出的篩選算法對AIZOO 和RMFD 這兩種數據集進行篩選。一共篩選出11208 張圖片,其中包括3908 張人臉照片和7300張人臉佩戴口罩照片,并且按照9∶1 的比例劃分訓練集和驗證集。同時利用LabelImg 可視化圖片標注工具對圖像進行人工標注,將人臉用方框進行標注,將標注的方框分為是否佩戴口罩兩類。數據集標注圖片如圖5 所示。

圖5 數據集示例圖片Fig.5 Sample data set image
本文采用查準率(Precision)、召回率(Recall)、平均準確率(AP)和平均準確率均值(mAP)作為實驗的評價指標[7]:

式中:TP 表示檢測模型檢測正確的樣本數量;FP 表示檢測模型檢測錯誤的樣本數量;FN 表示沒有被檢測出來的樣本數量。平均準確率(AP)和平均準確率均值(mAP):

式中:N 表示未佩戴口罩和佩戴口罩兩類;i 代表某個類別。
實驗采用筆記本電腦在Pycharm 中通過Python語言編程實現,選擇Tensorflow 1.13.2 作為后端的Keras 2.1.5 深度學習框架來搭建網絡模型。另外使用GPU 加速工具CUDA10.0,GPU 為NVIDIA GeForce RTX 2070 用來加速訓練。為了驗證實際訓練效果如何,選用RetinaFace 檢測算法對本文數據集和隨機挑選的WiderFace 數據集分別進行訓練,在檢測模型檢測錯誤的樣本數量為600 時,佩戴口罩檢測的兩種數據集的檢出率分別為0.842 和0.785,根據TP 和FP 的關系繪制出操作特性曲線如圖6所示。

圖6 不同數據集訓練后在測試集的操作特性曲線Fig.6 Operation characteristic curves of different data sets after training in the test set
從圖6 可以看出,在遇到復雜光照的情況下,普通數據集的檢測精度會大幅降低,而在經過本文算法所得到的數據集進行訓練后,整個模型對復雜光照條件的泛化能力提升,因此也會提高檢測精度。
本文訓練方式采用Adam 優化器對網絡進行優化,共分為兩個階段:第一階段載入預訓練權重,初始學習率設為0.001,并對其進行動態調整,批量數據樣本數設為8;遍歷50 次數據集;第二階段遍歷數據集次數到100 結束,將批量數據樣本數設為4,連續遍歷6 次數據集數值不下降則終止訓練。最終訓練完成后,本文算法的檢測結果的查準率-召回率曲線如圖7 所示。并且和YOLOv4 算法對于人臉是否佩戴口罩進行比較,得到查準率-召回率曲線如圖8 所示。

圖7 本文算法檢測各類目標的查準率-召回率曲線Fig.7 Precision-recall rate curves of various targets detected by the algorithm in this paper

圖8 本文算法與YOLOv4 算法對比的查準率-召回率曲線Fig.8 Precision-recall rate curve of comparison between the algorithm in this paper and YOLOv4 algorithm
之后在相同的實驗環境下,使用相同的訓練方式[8],訓練了多個網絡模型,通過比較以證明本文方法的可行性。實驗結果如表1 所示。

表1 本文算法與其他算法比較Tab.1 Comparison between the proposed algorithm and other algorithms
從圖8 中可以看出,本文算法和YOLOv4 算法相比未佩戴口罩即人臉檢測和口罩檢測分別得到了提升。而且通過表1 可知,在與別的算法相比較也可以看出有顯著的檢測效果。包括檢測精度和速度方面都得到了提升。接下來對光照偏強和光照偏弱兩種光照復雜的情況進行具體檢測效果分析。其檢測示例效果如圖9 和圖10 所示。

圖9 光照偏強下檢測結果Fig.9 Detection results under light intensity bias

圖10 光照偏弱下檢測結果Fig.10 Detection results under low light intensity
由圖9 可以看出來,本文算法相比改進之前的檢測到的目標個數得到提升,最右邊的目標雖然經過太陽照射但依然可以檢測到目標。對于圖10 在光線偏弱的情況下,檢測到的目標數從6 個提升到8 個。雖然沒有將目標全部檢測出來,但是相比于改進之前,檢測的結果有了明顯的改善。綜上所述,本文算法在復雜光照條件下檢測人臉佩戴口罩相比之前的算法,其效果更好。
本文以YOLOv4 算法為基礎,提出了一種改進的方法用來解決復雜光照下人臉佩戴口罩的檢測任務。同時提出了一種圖像篩選算法,制作出符合復雜光照條件下的數據集并進行標注。最后通過實驗證明,其平均精度均值達到92.1%,各方面效果均得到了提升。未來工作將繼續對數據集進行擴充,并對網絡結構進行進一步優化,來提高檢測的準確性和實時性。