曹小喜,程凡永*,王飛州,張明艷
(1.安徽工程大學 電氣工程學院,安徽蕪湖 241000;2. 安徽工程大學 高端裝備先進感知與智能控制教育部重點實驗室,安徽蕪湖 241000)
自2019年12月至今,新冠肺炎疫情給人類社會的生產生活帶來重大影響[1]。從世界范圍來看,截至目前,新冠肺炎確診病例仍在高速增長,因此我國的疫情防控工作仍然面臨巨大挑戰。新冠病毒主要通過飛沫傳播,正確佩戴口罩能夠有效降低感染新冠肺炎的風險[2],但在一些低風險地區,公眾主動佩戴口罩的意識有所降低,這就需要采取有效的口罩佩戴檢測措施來提醒人們疫情并沒有結束,在公共場所仍需堅持佩戴口罩。在公共場所進行口罩佩戴檢測需要克服小目標、遮擋目標給目標檢測任務帶來的困難,因此用于進行口罩佩戴檢測的目標檢測算法需要具備更強的提取和利用細節特征的能力。快速有效地進行口罩佩戴檢測對于疫情防控具有重要意義。
目前比較流行的基于深度學習的目標檢測算法分為兩類,一類是以R-CNN[3]、Fast R-CNN[4]、Faster R-CNN[5]為代表的基于區域選擇的Two-stage目標檢測算法,這種方法首先通過區域推薦網絡(Resign Proposal Network,RPN)生成大量可能包含目標的候選框,然后再通過卷積神經網絡進行分類和預測,該方法雖然取得了不錯的檢測精度,但是由于其存在大量的冗余計算導致檢測速度較慢,難以滿足實時性的要求。另一類是以YOLO(You Only Look Once)[6]、SSD(Single Shot MultiBox Detector)[7]、YOLOv2[8]、YOLOv3[9]、YOLOv4[10]為代表的基于邏輯回歸的one-stage目標檢測算法,此類方法實現了端到端檢測,用一個全卷積神經網絡直接計算目標物體的分類結果和位置坐標,極大地提高了檢測速度,但是YOLO算法對小目標、遮擋目標容易產生漏檢和誤檢測。YOLO算法經過數次版本迭代,算法性能大大提高,其中YOLOv4在檢測速度和檢測精度方面都達到了極高的水平,因此本文選擇YOLOv4目標檢測模型并對其進行改進和優化以使其更好地適應口罩佩戴檢測任務。
目前專門用于口罩佩戴檢測的算法還比較少。牛作東等[11]在RetinaFace人臉檢測算法的基礎上引入注意力機制等對原算法進行改進實現了口罩佩戴檢測。曹誠碩等[12]在YOLOv3中通過引入注意力機制并改進特征金字塔結構實現了口罩佩戴。王藝皓等[13]通過在原始YOLOv3的基礎上改進主干特征提取網絡,同時優化損失函數提升了網絡性能,提高了口罩佩戴檢測的檢測精度。但是上述算法仍然不夠完美,在檢測速度和檢測精度方面仍然存在進一步提升的空間。
YOLOv4是YOLOv3的改進版,相較于YOLOv3而言,YOLOv4目標檢測算法在MSCOCO數據集上的平均準確率均值(mean Average Precision,mAP)提高了10%,檢測速度提升了約12%。但是在復雜的自然場景下,比如密集人群場景中進行口罩佩戴檢測,待檢測目標普遍偏小且經常存在相互遮擋以及陽光照射而產生的高曝光現象,容易出現漏檢、錯誤檢測以及置信度偏低等問題。本文通過在YOLOv4算法的基礎上進行改進和優化,高質量完成密集人群場景下的口罩佩戴檢測任務。
YOLOv4是在YOLOv3的基礎上融合了跨階段局部網絡(Cross Stage Partial Network,CSPNet)[14]、空間金字塔池化(Spatial Pyramid Pooling,SPP)[15]、路徑聚合網絡(Path Aggregation Network,PANet)[16]的目標檢測算法,其網絡結構如圖1所示。YOLOv4采用CSPDarknet-53作為主干特征提取網絡,CSPDarknet-53是由5個分別包含1、2、8、8、4個殘差單元的殘差結構構成,輸入圖片的尺寸選取為416×416,經過CSPDarknet-53的特征提取,得到F1、F2、F3 3個有效特征層;F3再經過加強特征提取網絡SPP結構的處理,然后同F1、F2一起送入PANet進行特征融合,輸出13×13、26×26、52×52 3個不同尺度的特征圖,分別負責對大、中、小目標檢測;最后經過YOLO Head的處理得到預測結果。預測結果包括欲檢測目標的類別、置信度以及預測框的調整參數,然后利用置信度閾值和Soft-NMS對預測框進行篩選,得到最終的檢測結果。
YOLOv4的損失函數是在YOLOv3的損失函數的基礎上改進得到的。YOLOv3采用均方誤差作為目標物體邊界框的回歸損失,直接對目標物體邊界框的中心坐標、寬度以及高度進行回歸,這種方法沒有考慮對象的完整性,對位置的預測不夠準確。為了解決這一問題,YOLOv4引入CIoU Loss[17]作為目標物體邊界框回歸的損失函數,CIoU同時關注預測框和真實框的重合率以及兩者中心點之間的距離和寬高比。在目標邊界框的回歸方面,CIoU具有更好的收斂速度和精度。CIoU損失函數的定義如下:
(1)
式中,IoU表示預測框與真實框的交并比;預測框和真實框的中心點分別用b和bgt表示;ρ2(b,bgt)是指預測框和真實框中心點之間的歐氏距離;c是指可以把預測框與真實框都包括進去的最小閉包區域的對角線距離;α為權重函數;v用來度量長寬比的相似性。IoU以及α和v的計算公式如下:
(2)
(3)
(4)
式中,B表示預測邊界框;Bgt表示真實邊界框。對于目標所屬類別的損失函數Lcla以及目標置信度的損失函數Lconf方面的YOLOv4基本沿用了YOLOv3的方法。Lconf和Lcla的表達式如下:
(5)
(6)

YOLOv4的損失函數為以上3部分損失函數之和,其表達式如下:
L=Lconf+Lcla+Lloc,
(7)
雖然YOLOv4在YOLOv3的基礎上融合了很多改進策略,算法的整體性能取得了較大提升,但直接將其應用到密集人群場景下的口罩佩戴檢測任務中表現不佳,會出現遺漏檢測、錯誤檢測現象。針對上述存在的問題,對YOLOv4算法進行改進。YOLOv4網絡結構如圖1所示。

圖1 YOLOv4網絡結構
卷積操作往往希望提高感受野以融合更多空間特征,但是對于各通道維度的特征融合,通常都是默認對輸入特征圖的所有通道進行特征融合,這就不能夠很好地學習到不同通道特征的重要程度。文獻[18]中提出一種通道注意力機制SE(Squeeze-and-Excitation)模塊,SE模塊首先對卷積得到的特征圖進行壓縮操作,通過全局平均池化壓縮特征圖,將一個通道上的整個空間特征編碼為一個全局特征,從而得到通道級的全局特征;然后對所得全局特征執行激勵操作,通過一個全連接層FC(Fully Connected Layer)加ReLU層來學習各個通道間的相互關系,進而得到不同通道的權重;接下來再通過一個全連接層和Sigmoid激勵函數將獲得的權重歸一化;最后將歸一化后的權重與對應通道特征圖上的每個元素相乘獲得最終加權后的權重,這一步稱為Scale操作。整個SE模塊所做的工作筆者稱之為特征重標定。數學解析描述為
Fout=σ(Fr(Pavg(Fin)))?Fin,
(8)
式中,Fin∈iC×H×W為SE模塊的輸入特征圖;Pavg表示全局平均池化;Fr表示FC+ReLU層;σ表示Sigmoid;?表示Scale操作。
為了提升模型對關鍵特征的提取能力,將SE模塊嵌入到CSPDarknet-53中構建融合了通道注意力機制的骨干網絡SECSPDarknet-53,相關結構如圖2所示,通過在CSPDarknet-53骨干網絡的主支路的殘差單元中引入SE模塊使得模型能夠通過學習不同通道權重的重要程度來對特征進行加權,從而充分學習對當前檢測任務有益的特征,抑制無用特征對模型的干擾,從而達到改善網絡性能的目的。圖2中SE-Residual unit為嵌入SE模塊的殘差塊,H、W、C分別代表特征圖的高度、寬度以及通道數。實驗證明降維系數r取16時,在殘差網絡中嵌入SE模塊可以在只增加較小計算量的情況下使模型取得不錯的效果。加入SE模塊的殘差單元能夠在輸出維度沒有發生變化的條件下,使殘差網絡獲得學習各通道間關系的能力,同時使網絡具備更多的非線性特性,增強神經網絡模型的泛化能力。

圖2 SECSPDarknet-53基本組成單元
原始YOLOv4將在主干特征提取網絡最后一層輸出特征層輸入到SPP模塊進行特征增強。該模塊的網絡結構如圖3所示,其核心思想是對任意大小的輸入特征圖進行不同尺度的最大池化操作,然后再通過拼接操作得到一個固定長度的特征向量,即首先將輸入特征圖進行3次卷積(Conv2D_BN_LeakyReLU)操作;然后,利用3個步長為1,卷積核大小分別為5×5、9×9、13×13的池化層進行最大池化處理,得到3個不同尺度的局部特征;最后,將所得多尺度局部特征與輸入的全局特征進行堆疊以實現特征增強,接著再利用3次卷積對融合特征圖的通道數進行調整。空間金字塔池化的優點在于可以對任意尺寸或比例的輸入圖像進行處理而生成固定尺度的特征表示,對于輸入圖像的大小以及形狀的變化具有很好的魯棒性。本文在原始YOLOv4的基礎上再引入兩個空間金字塔池化模塊來對主干特征提取網絡倒數第二層、倒數第三層的輸出特征圖進行特征增強,在不同大小的感受野上獲取多尺度空間特征,并進行上下文語義信息的融合以獲得更加豐富的特征表示,從而進一步提升模型性能,改善網絡的檢測精度。

圖3 空間金字塔池化模塊
通過改進主干特征提取網絡和加強特征提取網絡來對YOLOv4進行改進,改進后的YOLOv4整體網絡結構如圖4所示。輸入圖像經過SECSPDarknet-53特征提取網絡的多次特征提取后輸出3個不同尺度的特征圖;然后分別輸入加強特征提取網絡SPPNet進行更深層次的加強特征提取,得到3個不同尺度的有效特征層L1、L2、L3;再將3個特征圖輸入到基于自下而上和自上而下路徑聚合策略構建的特征融合網絡PANet進行特征融合:首先將L3經過1次卷積加上采樣與L2執行Concat操作,再經過5次卷積處理后的輸出特征圖記為Q2;Q2經過卷積加上采樣與L1執行Concat操作,再經過5次卷積運算輸出尺度為13×13的檢測層,記為Q1;Q1經過下采樣與Q2執行Concat操作,再經過5次卷積處理得到尺度為26×26的檢測層,記為Q3;Q3與L3執行Concat操作,再經過5次卷積運算輸出尺度為52×52的檢測層;YOLO Head從這3個檢測層進行預測。

圖4 改進后的YOLOv4模型
實驗是在基于Windows 10操作系統搭建的Pytorch深度學習環境中進行的。實驗平臺的具體配置參數如表1所示。

表1 實驗平臺參數配置

配置參數參數CUDA版本11.1cuDNN版本8.0.5Pytorch版本1.8.0Python版本3.8.7
數據集是從開源數據集WIDER Face、MAFA(Masked face)、RMFD(Real-Word Masked Face Dataset)和利用網絡爬蟲從互聯網下載一些圖片中篩選的佩戴口罩的人臉圖片和未佩戴口罩的人臉圖片,共計8 700張。然后使用標注工具Labelimg將數據集中的圖片標注成VOC的數據格式,其中未佩戴口罩的人臉標注為face,佩戴口罩的人臉標注為face_mask。
由于原始YOLOv4的9個先驗框是在COCO數據集上利用K-means算法聚類得到的,直接應用到本文算法不是很適用,因此,需要利用K-means聚類算法對本文數據集進行聚類來獲得合適的Anchor Box。聚類所得先驗框的尺寸信息與分配結果如表2所示,其中大尺度的特征圖用來預測小目標,分配3個小尺度的先驗框,小尺度的特征圖用來預測大目標,分配3個大尺度的先驗框。

表2 先驗框尺寸分配
運用Mosaic數據增強技術,將圖片進行縮放拼接如圖5所示。這樣可以豐富訓練圖片的背景信息,有利于提高模型的泛化能力和魯棒性。

圖5 Mosaic數據增強
在公共場所佩戴口罩對于防止疫情反彈具有重要作用,因此檢測精度對于口罩佩戴檢測模型來說尤為重要,另一方面檢測速度也很重要。所以本文采用平均準確率(Average Precision,AP)和平均準確率均值(mAP)以及檢測速度(Frames Per Second,FPS)作為目標檢測模型的評價指標,AP和mAP這兩個評價指標可以同時評估查準率(Precision,P)和召回率(Recall,R):
(9)
(10)
比如在本文中要檢測戴口罩的目標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,計算公式如下:

(11)
(12)
從本文的口罩佩戴檢測數據集中隨機抽取700張圖片作為測試集,剩下的8 000張圖片作為訓練和驗證集,其中90%用于訓練,10%用于驗證。訓練過程中采用Adam優化器對網絡模型進行優化,每一次放入的圖片數量設置為4,使用Mosaic數據增強技術,初始學習率設為0.001,每經過1個Epoch的訓練將學習率調整為原來的0.9倍,學習率下限設置為0.000 01,總共訓練100個Epoch。使用原始YOLOv4和改進過的YOLOv4對測試集進行測試,檢測結果示例如圖6所示,根據結果繪制P-R曲線如圖7所示。
由圖6可見,所選測試圖片比較有代表性,同時包含密集人群檢測、高曝光目標檢測、小目標檢測、遮擋目標檢測和遠距離側臉檢測。由圖6a可見,第一張測試圖片的左下角有一個高曝光的佩戴口罩的人臉目標,頂部左側有一個距離較遠的佩戴口罩的側臉目標;由圖6b可見,YOLOv4將這兩個目標誤檢測為未佩戴口罩的人臉;由圖6c可見,本文算法對這兩個目標均做出了正確的預測且擁有較高的置信度,分別為82%和98%。對于第二張測試圖片,由圖6e可見,YOLOv4漏檢了其左側第三排第一個被遮擋的佩戴口罩的人臉目標以及右側被第二排第一個男士所遮擋的那個距離較遠較小且模糊的佩戴口罩的人臉目標;由圖6f可見,本文算法將二者均正確地檢測出來,置信度分別為85%和69%。對于兩張測試圖片中的其他目標,在YOLOv4和本文算法都能正確檢測的情況下,本文算法能取得較YOLOv4更高的置信度。相比于原始YOLOv4算法,本文算法有效降低了誤檢、漏檢,改善了小目標、高曝光目標、側臉目標、被遮擋目標的檢測效果。

圖6 改進前后YOLOv4算法檢測結果對比
由圖7可見,召回率Recall為橫坐標,查準率Precision為縱坐標。檢測結果的AP值可通過計算P-R曲線與坐標軸所圍區域的面積得到。本文算法檢測face和face_mask的平均準確率AP分別為91.10%、98.51%,原YOLOv4檢測face與face_mask這兩種類別的目標所達到的AP值分別是83.90%和94.20%。
為了進一步驗證本文算法的有效性,將本文算法與其他主流目標檢測算法進行對比,不同算法檢測效果對比如圖8所示,具體性能指標對比如表3所示。
本文算法與其他先進目標檢測算法檢測結果對比如圖8所示。由圖8b可見,從各類算法的檢測結果來看,SSD算法的檢測效果并不理想,存在大量漏檢現象;由圖8c可見,Faster R-CNN的檢測效果明顯優于SSD,但是存在比較多的漏檢現象,比如第一排左側第一個戴口罩的女士以及第二排左側第一個和第二個女士均未被檢出;由圖8d可見,YOLOv3的檢出率高于Faster R-CNN,但是存在較多誤檢,左側第一排第一個、第二排第一個以及第三排第一個均被誤檢;由圖8e可見,YOLOv4的檢測效果優于上述3種算法,對密集小目標、側臉目標、被遮擋目標的檢測效果有了一定提升,但仍然存誤檢現象,圖中第一排左側第一個戴口罩的女士和頂部中間左側戴口罩的側臉男士均被誤檢。由圖8f可見,改進后的YOLOv4算法的檢測性能明顯優于其他算法,誤檢、漏檢現象大大減少且具有高置信度,成功正確檢測出了第一排左側第一個戴口罩的女士以及頂部中間左側戴口罩的側臉男士,置信度分別為82%和98%。通過表3可以看出,本文算法與YOLOv3、YOLOv4、Faster R-CNN、SSD算法相比,取得了更高的檢測精度。本文算法在檢測人臉目標和佩戴口罩的人臉目標時所取得的平均準確率AP較原始YOLOv4分別提高7.20和4.31個百分點,mAP達到了94.81%,比原YOLOv4提高了5.76個百分點。本文算法的FPS為39,與原YOLOv4相比幀率降低了4 FPS,但仍高于30幀/s,能夠滿足實時性的要求。綜上所述,本文所提算法能夠成功檢測出密集小目標、高曝光目標、側臉目標、被遮擋目標且具有高置信度。實驗證明了本文算法的有效性。

圖7 改進前后YOLOv4算法各類目標P-R曲線對比

圖8 本文算法與其他先進目標檢測算法檢測結果對比

表3 改進后的YOLOv4與其他先進目標檢測算法對比
本文主要提出了一種改進的YOLOv4算法來對密集人群場景下人們佩戴口罩的情況進行檢測。首先,將SENet與YOLOv4的主干特征提取網絡CSPDarknet-53相結合,SENet是一種通道注意力機制,使得模型能夠自動學習不同通道特征的重要程度,關注對當前檢測任務有益的特征,抑制對當前檢測任務無用的特征。然后,將SPP模塊復用到YOLOv4主干特征提取網絡的倒數第二層和倒數第三層,進一步提高模型在不同感受野提取并融合空間特征的能力。實驗結果表明,本文算法進行口罩佩戴檢測的平均準確率均值mAP可達到94.81%。相較于原始YOLOv4以及其他主流目標檢測算法,本文算法在密集小目標檢測、高曝光目標檢測以及遮擋目標檢測上均取得了優異的檢測效果,具有很好的實用性。