徐澤昊,劉 川
(巢湖學院信息工程學院 安徽 合肥 238014)
目前防控工作中行人佩戴口罩檢測無法實現高精度識別。因此針對口罩佩戴的檢測成為研究熱點。朱亞茹等[1]采用特征臉算法,通過面部區域特征來判斷行人是否佩戴口罩,但是此算法的檢測準確性不高。相比傳統算法,基于深度學習的目標檢測算法可以獲取到更深層次的特征,適用于背景復雜的情況并能夠捕捉到目標物體的泛化特性,從而使準確率得到了提高。
目前,針對目標檢測的深度學習方法有兩大類。一種是基于候選區的兩階段檢測算法,例如:Fast R-CNN、Faster R-CNN、Mask R-CNN等。它代替了傳統的滑動窗口,通過神經網絡等方式來進行候選區域的生成。該方法可以很好地解決滑動窗出現的目標不明確的問題。劉攀等[2]利用Faster-RCNN算法實現了口罩佩戴檢測,但這類算法檢測速度較慢、時效性低,不利于進行實時監測人流量大的地方。另一類是基于回歸的一階段的目標檢測算法,例如:RetinaNet、SSD、YOLOv2、YOLOv3等。它們運用卷積神經網絡來完成檢測流程,選用了預定義候選框,直接在圖像中回歸出目標檢測框和類型。這類算法更容易優化訓練并且檢測速率快,便于進行實時監測人流量大的地方。
本文提出一種基于Draknet-53為主干網絡,進行優化改進后的口罩佩戴識別檢測算法。首先,在原有的YOLOv3基礎上添加了SPP(spatial pyramid pooling)結構,解決了輸入神經網絡圖像尺寸差異的問題,使模型適應不同尺度物體。其次決定使用CIOU Loss作為模型的損失函數。由于CIOU損失函數中包含了重疊面積,中心點距離以及長寬比這三個主要因素,從而使得預測框更加符合真實框,盡而提高口罩佩戴檢測效果。再使用爬蟲工具來獲取大量樣本圖片,經過Labelimg標記以及人工篩選自建樣本集。最后再對樣本集采用K-Means算法進行重新聚類得到新的錨框。經過自建樣本集模型進行訓練及其驗證可得,改進后的口罩檢測佩戴算法相比較原始YOLOv3,mAP提高了1.8%,FPS提高了1.3%。
在2018年,Joseph Redmon等[3]在基于YOLOv2算法的基礎之上提出了YOLOv3算法。YOLOv3將YOLOv2中的網絡結構中Darknet-19換成了Darknet-53,取消了YOLOv2中的最大池化層,并引入了殘差層結構。其次YOLOv3通過聚類方法得到9個錨框取代了YOLOv2中的5個錨框,并用多尺度預測替代了YOLOv2中的單一預測。YOLOv3最終會輸出三種不同規模的特征圖來對進行預測,它們的尺寸分別為13×13,26×26以及52×52[4]。這些優化使YOLOv3相比較YOLOv2具有更高的檢測精度以及檢測速度。Darknet-53結構如圖1所示。
YOLOv3的網絡架構可以分為DarkNet53主干網絡和多尺度預測模塊兩部分。DarkNet53主干網絡由53個卷積層組成,前52層卷積層主要由5組殘差結構組成,最后一層為全連接層用來提取圖片特征并進行分類[5]。YOLOv3結構中使用了卷積、BN和Leaky ReLU激活函數,這三部分構成了模型的最小組件也就是DarknetConv2D結構每一次卷積后都進行L2正則化,是為防止模型過擬合并且使求解更穩定快速。在多尺度預測中,YOLOv3模型中可以產生三種不同的特征層,分別用于檢測不同大小物體的口罩佩戴情況[6-7]。這三個特征層采用上取樣、特征融合、多次卷積處理后,最終通過DarknetConv2D和一次3×3卷積所獲得。最后形成三種不同特征層分別用來預測不同大小目標的口罩佩戴情況。模型使用多尺度預測后,對于小目標檢測的效果明顯提高。
YOLOv3在實時檢測過程中若遇到遮擋,密集人群以及小目標檢測等問題時整體檢測效果欠佳。本文對原YOLOv3算法進行了相應的優化,從而使模型更加適合口罩佩戴場景下的檢測。
空間金字塔池化(spatial pyramid pooling,SPP)是為解決輸入神經網絡圖象尺寸不一致的問題而提出的一種解決方法。SPP可以將任意尺寸的圖像進行多尺度的池化處理,并將其拼接為一段特定長度的特征量,對于圖像形變具有較好的抑制。SPP結構如圖2所示,SPP層有4條分支,分別是由池化核為5×5,9×9,13×13,步長為1的最大池化下采樣這三個分支和由輸入直接到輸出這4個部分所構成。
由于在卷積神經網絡中的全連接層對輸入特征尺寸有大小的要求,且存在不同場景得到的數據大小不固定等問題,本文在原始YOLOv3中引入了SPP結構。本文中引入的SPP結構主要用于提取多尺度的局部信息,并將其與全局特征相結合,使其具有更多的特征表達,繼而進一步提升了口罩佩戴檢測的準確度。
本文在Darknet-53網絡中的卷積集(Convolutional Set)模塊加入了SPP結構。添加SPP結構后,模型可以進一步獲取多尺度局部特征信息。然后,再將獲得的局部特征與整體特征相結合,可以得到更為豐富的特征表達,進而讓模型適應不同尺度的物體,提升預測精度。改進后的YOLOv3結構如圖3所示。
模型在進行檢測時,會在圖像上會生成大量候選框并會對生成的候選框是否含有物體進行預測,因此為計算出候選區域預測的準確性而引入了交并比IOU(intersection over union)[8]。IOU表示預測框和實際框之間的交叉比例,預測框和實際框重疊區域越大,則表明該算法預測效果越好。如公式1所示。其中A和B分別表示預測框和真實框的面積。
IOU雖然考慮到了重疊面積的問題,并且具有良好的尺度不變性,但依然存有缺陷。若當預測框和真實框之間不重疊時,IOU一直為0無法讓網絡進行調整,并且IOU只與兩框之間的重疊面積相關,不能準確地反映出它們之間的一致性。為了解決IOU無法準確反映兩框之間的重合程度以及無梯度回傳等問題,因此本文引入了CIOU(Complete-IOU)損失函數替換原始IOU損失函數。
CIOU是在DIOU(Distance-IOU)的基礎上增加了長寬比這一因素,而增加了這一因素會使損失函數更偏向于朝重疊區域增多的方向加以優化,特別是當IOU為零時,解決了IOU無梯度回傳的問題。如公式2所示。
CIOU將損失函數的3個主要因素包括重疊面積(IOU)、中心點距離以及長寬比等都包含在其中。對比IOU,增加了中心點距離以及長寬比的因素,使目標框在回歸時具有較好的穩定性,并能很好地解決IOU損失值在訓練時產生發散等問題[9]。
本文實驗環境包含為,Intel i7-10700k CPU 3.8 GHz,英偉達RTX 2080 Ti 11G CPU,16 GB DDR4內存。系統的軟件部分使用了Windows10操作系統、PyTorch 1.6.0框架,并使用CUDA10.2和CUDNN7.6為GPU訓練進行加速。
本文所用的數據通過使用爬蟲工具,對網絡上的大量圖片進行了爬取,對爬取下來的照片進行人工篩選,相應的數據清洗,然后整理并存儲標記為原始數據集。原始數據集共有圖片8 765張,其中未佩戴口罩的圖片共有4 657張,佩戴口罩的圖片共有4 108張。并按8:2的比例,將8 765幅圖像分為訓練集,驗證集和測試集,訓練集驗證集共有7 012張,測試集共有1753張,接著對數據集進行裁剪,旋轉和翻轉等進行數據增加,并使用Labelimg進行標注,如圖4所示。
YOLOv3中引入了先驗框(anchor box)思想,采用K-Means聚類算法根據標注的目標框(ground truth)選取了對應的9個anchor box,并通過選擇合適的anchor box來進一步提高檢測的精確度以及加快檢測速度。在口罩佩戴檢測任務中,通過聚類計算是為了讓anchor box更加接近真實框[10]。本文使用自建的樣本集,通過對標注的口罩數據集進行聚類計算,經過多次測試,重新計算出9個anchor box。對13×13的特征層使用(235,217),(199,161),(163,207)來檢測大型目標口罩佩戴情況。在對26×26的特征層上用(158,145),(104,66),(91,131)來檢測中等目標口罩佩戴情況。對52×52的特征層上用(55,69),(40,39),(20,26)來檢測較小目標口罩佩戴情況。
為了檢驗優化之后的YOLOv3算法的性能,本文采取了mAP(mean average precision)平均精度和FPS(Frames Per Second)每秒傳輸幀數兩種指標來對本文優化過后的算法性能進行了評估。如公式3、公式4所示。TP表示對圖像進行分類時,把該圖像劃分為正的樣本并正確地進行識別;FP表示將此圖像分成正的樣本,但是是錯誤的辨識。FN表示把該圖像劃分成負樣本但識別有誤。
本文在對優化過后的模型進行訓練,在此基礎上,繪制出了訓練過程中Ours模型和YOLOv3模型的損失值與Epoch的之間的對應關系曲線,如圖5所示。
從圖中可以看出,改進后的模型在訓練代數為20前損失值迅速下降,訓練代數達到80后損失值逐步平穩,當訓練代數達到100后,損失值基本不變并且總損失值趨于2。而YOLOv3算法的總損失值整體變化趨勢同本文改進后的模型相同,但當訓練代數達到100后,總損失值趨向4,高于本文改進后模型的總損失值。
通過與其他算法的性能對比,進一步展示了本文算法的優勢,對比結果如表1所示。本文算法輸入的是分辨率為416×416的圖片。由表1可知,與原YOLOv3模型相比,該模型的精確度提高了1.8%,FPS也提高了1.3%,達到了27.8。相比較一階段SSD算法,本文優化后的模型mAP提升了5.5%,精確度得到了一定的提升,雖FPS相對降低,但仍然可以達到實時監測的要求。而相比較二階段Faster-RCNN算法,本文優化后的模型FPS提升了25.5%,在檢測速度上有了很大的提高,雖然在精確度上有細微的降低,但不影響最終檢測結果的準確性。并且本文優化后的模型在低照度、故意遮擋以及密集場景等復雜情況下也具有較好的檢測效果。

表1 整體檢測性能對比
本文針對在檢測口罩佩戴情況時精確度較低,檢測效果欠佳以及對于圖像形變沒有較好的魯棒性等問題上對原算法進行了優化。基于YOLOv3的基礎之上改進了anchor的參數,改進后的YOLOv3模型對于檢測口罩佩戴的精確度提高了1.8%左右,并且在YOLOv3網絡結構中增加了SPP結構能夠產生固定大小的特征表示,使其對于圖像的形變具備更好的魯棒性[11]。最后我們將IOU替換成了CIOU,替換之后的算法將能夠更好地反應出框的回歸問題,相較于IOU效率更高,使模型更加的容易收斂,在將IOU替換成了CIOU后,FPS能夠達到27.8左右,達到實時檢測。
在實際檢測中我們還發現陰雨、霧霾天氣對檢測效果會產生一定的影響,后續將考慮改進檢測算法的模塊以及添加相應的圖像增強技術,從而進一步提高檢測精確度。