曹小喜,程凡永,王飛州
(安徽工程大學 檢測技術與節能裝置安徽省重點實驗室,安徽 蕪湖 241000)
疫情形勢依然嚴峻,由于基因突變產生的新冠病毒的各種變異毒株表現出更強的毒性與傳染性,督促民眾在商場、車站等公共場所佩戴口罩是降低病毒傳染概率的重要舉措。目前在公共場所主要通過人工監督的方式對民眾佩戴口罩的情況進行檢測,這種方式效率低下。因此,開發一套能夠對民眾口罩佩戴情況進行實時準確監測的口罩佩戴檢測系統具有重要意義[1]。
近年來,隨著深度神經網絡的飛速發展,一大批優秀的目標檢測算法紛紛涌現,主要包括兩類,一類是以YOLO[2-5]系列和SSD[6]系列為代表的基于回歸的一階段目標檢測算法,另一類是以R-CNN[7-9]系列為代表的基于候選區域的兩階段目標檢測算法。兩階段方法首先生成一系列可能包含對象的候選區域,然后對每個候選區域進行分類,并根據每個候選區域的特征進行邊界框回歸。一階段方法跳過候選區域生成步驟,直接利用卷積神經網絡(convolutional neural network, CNN)對整幅圖像中所有目標的位置和分類進行回歸。
衡量目標檢測算法性能的主要指標是檢測精度和檢測速度,一階段和二階段目標檢測算法相比,檢測精度略低,但檢測速度很快,通過輕量化改進能夠較容易的在移動設備上實現實時檢測。為了實現網絡的輕量化,齊榕等[10]將Tiny-YOLOv3的主干特征提取網絡替換為MobileNet,減少了模型的參數量和運算量,在測試集上mAP達到了73.3%;鐘志峰等[11]將YOLOv4的主干特征提取網絡替換成了Mobilenetv3[12],然后將EfficietDet[13]的加權雙向特征金字塔Bi-FPN(weighted Bi-directional Feature Pyramid Network)進行簡化來替換YOLOv4的特征融合網絡,在VOC(Visual Object Classes)2007數據集上 mAP 達到 80.22%,模型大小為 44.75M,比 YOLOv4 減少了 82%;秦偉偉等[14]將YOLOv3的主干特征提取網絡替換為MobileNetV2,并融合通道協同注意力模塊實現了YOLOv3網絡的輕量化;朱杰等[15]通過在YOLOv4-tiny的基礎上引入空間金字塔池化和路徑聚合策略,增加了網絡的感受野,檢測準確率mAP達到了90.02%,檢測速度為76.8FPS。以上算法雖然實現了輕量化,但是檢測精度和檢測速度仍然存在比較大的提升空間,在場景更為復雜的人流中,比如在車站、商場等人員密集的公共場所進行口罩佩戴檢測需要克服小目標、遮擋目標給目標檢測任務帶來的困難,對算法的準確度和實時性有更高的要求。
本文針對上述問題,在YOLOv4-tiny[16]的基礎上進行改進,提出了一種能夠適應密集人群環境下的改進型人臉口罩佩戴實時檢測算法。主要改進如下:
(1)針對YOLOv4-tiny主干特征提取網絡特征提取不充分的問題,引入融合了通道空間雙重注意力機制的CBAM模塊(Convolutional Block Attention Module, CBAM)[17],提升網絡對通道及空間特征的表達能力,擴大網絡對目標特征區域的感知范圍。
(2)為了進一步提升模型的特征表達能力,在主干特征提取網絡之后引入空間金字塔池化(Spatial Pyramid Pooling, SPP)[18],對輸入特征層進行多尺度池化并融合,同時大幅度增強網絡的感受野。
(3)在數據增強方面使用Mosaic數據增強,豐富訓練圖片的背景信息,使得算法能夠適應更加復雜的檢測場景。
YOLOv4-tiny是YOLOv4的輕量化版本,大大減少了參數量,其網絡結構如圖1所示。與YOLOv4相比,YOLOv4- tiny的主干網絡僅由3個CBL(Conv2D_BN_Leaky-ReLU)和3個CSPBlock組成。卷積單元CBL包含卷積層、批歸一化層和用作激活函數的Leaky-ReLU。CSPBlock包含四個卷積單元、兩個殘差結構。CSPBlock整合了CSPNet[19]結構,通過跨階段的拆分合并策略使梯度路徑的數量加倍,從而有效地降低了模型的計算量。YOLOv4-tiny使用特征金字塔(Feature Pyramid Network, PAN)[20]作為特征融合網絡,輸入圖片經過主干特征提取網絡的特征提取,取13×13、26×26兩個尺度的特征圖作為特征金字塔的輸入,經過卷積加上采樣處理之后進行Concat操作來完成特征融合,然后將輸出特征送入YOLO head 進行預測,預測結果包括目標的類別、置信度以及預測框的調整參數。最后通過設置置信度閾值和利用非極大值抑制策略對預測框進行篩選,獲得最終的檢測結果。
由于YOLOv4-tiny的主干特征提取網絡比較簡單,特征提取能力有限,其輸出的兩個尺度的有效特征層經過特征金字塔進行簡單的特征融合就送入YOLO head進行預測,這使得YOLOv4-tiny取得了極高的檢測速度,每秒鐘可以檢測443張圖片(COCO:443FPS on RTX 2080Ti),輕量化的結構為YOLOv4-tiny帶來了優秀的實時檢測性能,同時也使得網絡整體感受野不強,特征提取和特征融合能力偏弱,導致其在復雜場景下對小目標和遮擋目標進行檢測時表現不佳。

圖1 YOLOv4-tiny網絡結構
針對YOLOv4-tiny的不足之處,本文對其網絡結構進行了一些改進和優化,改進后的網絡結構如圖2所示。從圖2中的(a)部分結構可以發現,在主干特征提取網絡CSPDarknet53-tiny的基礎結構單元CSPBlock中引入融合有空間通道雙重注意力機制的CBAM模塊來構建本文的CBAM_CSPBlock,本文算法以CBAM_CSPBlock為基礎結構單元構建了融合注意力機制的主干特征提取網絡CBAM_CSPDarknet53-tiny,提升了模型對關鍵特征的表達能力;然后,在主干特征提取網絡之后引入經過優化的空間金字塔池化模塊SPP,具體結構如圖2的(b)部分所示,這使得模型能夠在不同大小的感受野上獲取多尺度空間特征并進行上下文語義信息的融合以獲得更加豐富的特征表示,進一步提升了網絡的檢測精度。接下來將分別介紹本文所引入的各個改進策略的原理及實現思想。

圖2 改進后的YOLOv4-tiny模型
通道注意機制CAM(Channel Attention Module)主要根據不同通道與關鍵信息之間的相關性建模,對原有特征層進行加權,突出具有關鍵信息的通道,抑制其余通道,主要關注對最終預測起決定性作用的通道特征,具體結構如圖3所示。首先,對輸入特征(Input Feature)先在每一個通道的特征圖進行全局平均池化(AvgPool)和全局最大池化(MaxPool),得到兩個通道特征;然后,將這兩個通道特征送入一個多層感知機(MLP)中,這個多層感知機由兩個共享權重的全連接層組成,通過這個全連接層得到通道注意力特征(Channel Attention Feature)。

圖3 CAM模塊結構
空間注意模塊SAM(Spatial Attention Module)通過提取空間中每個像素點的關系和相對位置,形成一個具有像素相關度的掩模層。通過相關度計算像素點的權重,保留攜帶重要信息的像素點,實現特征選擇和融合的功能,具體結構如圖4所示。首先,對輸入特征進行最大池化和平均池化,獲得兩個空間特征;之后將這兩個特征在通道維度拼接,最后再經過一個卷積層得到空間注意力特征(Spatial Attention Feature)。

圖4 SAM模塊結構
由于空間注意模塊SAM忽略了通道域中的信息,通道注意模塊CAM則忽略了每個通道上空間信息。而卷積注意力模塊CBAM(Convolutional Block Attention Module)將通道注意模塊和空間注意模塊串聯起來,構建了一個融合通道空間雙重注意力機制的注意力模型,解決了單一注意力模塊的局限性,具體結構如圖5所示。對輸入特征先后施加CAM和SAM,最后得到同時蘊含通道注意力和空間注意力的輸出特征,強化模型對關鍵特征的表達能力。

圖5 CBAM模塊結構
通常情況下,為滿足卷積神經網絡分類器的固定尺寸輸入限制,可以對輸入圖片進行裁剪、縮放等操作,但這樣做往往會使圖片失真。空間金字塔池化(Spatial Pyramid Pooling, SPP)可以對任意尺寸或比例的輸入圖像進行處理而生成固定尺度的特征表示,對于輸入圖像的大小以及形狀的變化具有很好的魯棒性,其原始結構如圖6(a)所示。
受SPP空間金字塔池化思想的啟發,本文對傳統的SPP模塊進行改進,改進后的結構如圖6(b)所示。首先利用三個步長為1,卷積核大小分別為5×5、9×9、13×13的池化層對輸入特征進行最大池化處理,得到三個不同尺度的局部特征;然后,將所得多尺度局部特征與輸入的全局特征進行堆疊以實現特征增強,獲得更加豐富的特征表示,進一步提升網絡的檢測精度。

(a)原始空間金字塔池化

(b)改進后的空間金字塔池化
本文的數據集是從開源數據集WIDER Face、MAFA(Masked face)、RMFD(Real-Word Masked Face Dataset)和利用網絡爬蟲從互聯網下載一些圖片中篩選的佩戴口罩的人臉圖片和未佩戴口罩的人臉圖片,共計8 700張。然后使用標注工具Labelimg將數據集中的圖片標注成VOC的數據格式,其中未佩戴口罩的人臉標注為face,佩戴口罩的人臉標注為face_mask。
在數據準備階段,從標注好的數據集中隨機選取10%的數據作為測試集;其余數據按照9:1的比例劃分為訓練集和測試集。訓練過程中運用Mosaic數據增強策略,如圖7所示,隨機選取四張圖片進行等長寬比縮放拼接后送入網絡進行訓練,可以增加訓練樣本的多樣性,豐富訓練圖片的背景信息,提升模型的魯棒性,增強泛化能力。

圖7 Mosaic數據增強
本文采用平均準確率(Average Precision, AP)和平均準確率均值(mean Average Precision, mAP)作為算法模型檢測準確率的評價指標,使用每秒傳輸幀數(Frames Per Second, FPS)作為算法模型檢測速度的評價指標。
AP和mAP這兩個評價指標可以同時評估查準率(Precision, P)和召回率(Recall, R),計算公式分別如式(1)、式(2)所示。
(1)
(2)
在本文中要檢測戴口罩的目標face_mask, TP(True Positive)就代表口罩佩戴檢測算法將戴口罩的人臉正確識別為face_mask的數量,FP(False Positive)就代表口罩佩戴檢測算法將未帶口罩的人臉face識別錯誤識別為戴口罩的人臉face_mask的數量,FN(False Negative)就代表口罩佩戴檢測算法將佩戴口罩的人臉face_mask識別為未帶口罩的人臉face的數量。以查準率P為縱坐標,以召回率R為橫坐標繪制一條P-R曲線,則曲線與坐標軸所為區域的面積就是平均準確率AP,所有類別的平均準確率相加求和再求平均就是平均準確率均值mAP,計算公式如下。

(3)
(4)
本文算法是在Windows 10系統中,使用Python3.6、基于Pytorch1.6深度學習框架構建,在桌面工作站(Inter?CoreTMi9-7900X CPU @ 3.3GHz,NVIDIA GeForce RTX3090)上進行訓練,并在個人筆記本電腦(Inter?CoreTMi7-9750H CPU @ 2.6GHz,NVIDIA GeForce RTX2060)上進行測試。模型訓練時,網絡輸入尺寸設為416×416,采用Adam優化器,學習率為1e-3, Batch Size設置為32,使用Mosaic數據增強技術,學習率調整策略為學習率余弦退火衰減,余弦周期為5個epoch,學習率最小值設置為1e-5,總共訓練120個epoch。
使用本文算法與YOLOv4-tiny對測試集進行檢測,檢測結果的P-R曲線如圖8所示。檢測結果示例如圖9所示。
在圖8中召回率Recall為橫坐標,查準率Precision為縱坐標。檢測結果的AP值可通過計算P-R曲線與坐標軸所為區域的面積得到。本文算法檢測人臉目標face和佩戴口罩的人臉目標face_mask的平均準確率AP分別為85.28%、96.73%,原YOLOv4-tiny檢測face與face_mask這兩種類別的目標所達到的AP值分別是73.45%和95.03%,相比之下本文算法檢測準確率更勝一籌。

(a)本文算法檢測face的P-R曲線(b)本文算法檢測face_mask的P-R曲線(c)YOLOv4-tiny檢測face的P-R曲線(d)YOLOv4-tiny檢測face的P-R曲線圖8 本文算法和YOLOv4-tiny算法各類目標P-R曲線對比
通過圖9中的檢測結果圖可以更加直觀的對比算法的性能。圖9中的第一列是兩種算法的第一張檢測圖片結果圖,圖9(a)中,YOLOv4-tiny漏檢了后面那位穿白襯衫的戴口罩男士,相比之下,圖9(d)中本文算法成功將其正確檢測出來。圖9中的第二列是兩種算法的第二張檢測圖片結果圖,圖9(b)中,YOLOv4-tiny漏檢了穿藍色西裝的那位側臉男士,與之相比,如圖9(e)所示,本文算法成功將其正確檢測出來。第三張測試圖片針對的是密集人流環境中的口罩佩戴檢測任務,兩中算法的檢測結果如圖9中第三列所示,在圖9(c)中,YOLOv4-tiny的檢測結果中存在大量誤檢,比如前排那個手拿白色提包佩戴口罩的女性屬于face_mask類別,卻被錯誤的識別為face類別,而在圖9(f)中,本文算法的檢測結果均正確,且二者都識別出來的目標,本文算法也擁有更高的置信度。

(a)YOLOv4-tiny算法1(b)YOLOv4-tiny算法2(c)YOLOv4-tiny算法3(d)本文算法1(e)本文算法2(f)本文算法3圖9 YOLOv4-tiny算法和本文算法的檢測結果對比
表1中所示為本文算法和YOLOv4-tiny以及其他主流目標檢測算法的mAP和FPS指標對比情況。對于人臉目標和佩戴口罩的人臉目標,本文算法的AP值分別達到了85.28%和96.73%,相較于YOLOv4-tiny分別提升了11.83%和1.70%,取得了更高的檢測精度。在檢測速度方面,由于本文算法在主干特征提取網絡中引入了卷積快注意力機制CBAM,以及在主干網絡之后引入了SPP作為加強特征提取網絡,網絡規模增大,因此檢測速度略低于YOLOv4-tiny,但是仍然能夠達到97.75FPS。對于其他非輕量級的目標檢測算法,YOLOv4的檢測精度與本文算法相差無幾,SSD的檢測精度低于本文算法,兩者的檢測速度僅在20FPS左右,難以滿足實時性檢測需求。而Faster R-CNN的檢測速度更低僅為8.53FPS,且檢測精度也比本文算法低2%。本文改進的算法檢測性能優于其他主流算法。

表1 不同檢測算法性能對比
為了驗證分析所提改進策略對模型性能提升的具體貢獻,設計4組消融實驗,如表2所示。1號實驗是沒有加入任何改進策略的原版YOLOv4-tiny,mAP僅為84.24%;2號實驗在YOLOv4-tiny中加入了CBAM,該模塊融合了通道、空間兩種注意力機制,能夠大幅提升網絡對細節特征的提取能力,mAP比1號實驗提升了3.29%;3號實驗在1號實驗的基礎上加入了SPP,拓寬了網絡的感受野,提取并融合多尺度特征,mAP相對于1號實驗提高了2.21%;4號實驗是將CBAM和SPP同時施加到YOLOv4-tiny基礎網絡,mAP比1號實驗提高了6.77%。綜上,本文在YOLOv4-tiny基礎上所引進的改進策略是有效的,算法性能有了明顯改善。

表2 消融實驗結果對比
本文針對疫情防控形勢下的口罩佩戴檢測任務,提出了一種高精度、高實時性的輕量級口罩佩戴檢測算法。該算法采用YOLOv4-tiny作為基礎模型,在其骨干網絡中引入了集成通道、空間雙重注意力機制的CBAM模塊,并引入SPP模塊結合Mosaic數據增強和學習率余弦退火策略對模型進行訓練。有效提升了算法的檢測性能,mAP達到了91.10%,相對于原始YOLOv4-tiny提升了6.77%,檢測速度達到了97.75FPS,能夠在口罩佩戴檢測任務中實現高精度實時檢測。為了能使檢測精度能夠百尺竿頭更進一步,接下來準備研究對損失函數進行改進的方法,與此同時將嘗試結合路徑聚合策略對特征融合網絡進行優化升級。