彭 成,張喬虹,唐朝暉,桂衛華
(1.湖南工業大學 計算機學院,湖南 株洲 412007;2.中南大學 自動化學院,長沙 410083)
近日,全球多國面臨新一輪疫情沖擊,且病株變異等情況也為疫情防控增添了更多的不確定風險,在疫情防控常態化的情況下,佩戴口罩是極為有效且經濟的防控手段,因此,公共場合的口罩佩戴檢測成為一項重要工作。在日常生活中,面對經呼吸道傳播的傳染性疾病或工廠生產過程中產生的有害顆粒物,佩戴口罩也可保護生命安全,減少危害源的接觸,提高安全衛生等級。以人工的方式對活動人員進行監督檢測耗時耗力,且近距離接觸待檢測人員存在一定的安全風險,因此,構建自動監控系統檢測活動人員的口罩佩戴情況,對日常防護工作具有重要意義。
人臉口罩佩戴檢測屬于計算機視覺中的物體檢測范疇,在過去的二十年中,物體檢測的發展大致可分為2 個階段,即2014 年以前的傳統目標檢測以及2014 年以后的基于深度學習的目標檢測[1]。隨著GPU 和大數據的發展,傳統機器學習多階段才能實現的功能可由深度學習串聯完成,輸入大量圖像、語音和文本信息即可直接進行端到端的訓練[2-3],因此,深度學習在物體檢測、圖像分割等領域展現出遠超傳統算法的能力。
為了使人臉口罩佩戴監督功能更易獲取,口罩檢測網絡模型的輕量化也是一個必須要考慮的問題。當前經典的物體檢測算法大多依賴卷積網絡[4-6]進行特征提取,一系列優秀的基礎網絡(如VGGNet[7]、ResNet[8]、DenseNet[9]等)被提出,但是這些網絡計算量往往較大,很難達到實時運行的工業應用要求,于是輕量化網絡應運而生。SqueezeNet[10]從網絡結構優化出發,先壓縮再擴展,使用常見的模型壓縮技術,在性能與AlexNet[11]相近的基礎上,模型參數僅為AlexNet 的1/50。但該網絡仍然采用標準的卷積計算方式,之后的MobileNet[12]采用更加有效的深度可分離卷積,提高了網絡速度并進一步促進了卷積神經網絡在移動端的應用,同時通過較少的計算量獲得了較高的精度。但是在理論上,MobileNet的計算量仍然可以繼續降低。ShuffleNet[13]利用組卷積和通道混洗的操作有效降低了點卷積的計算量,實現了更為優越的性能。隨著移動設備的進步和應用場景多樣化的發展,輕量化網絡展現出了更高的工程價值[14]。
針對人臉口罩佩戴檢測的精度和速度問題,多位學者進行了各種嘗試。文獻[15]提出一種基于RetinaNet 的人臉口罩佩戴檢測方法,其通過遷移學習并利用預訓練的ResNet 模型幫助新模型訓練,在驗證集上的AP 值達到86.45%。文獻[16]基于YOLOv3 網絡模型,引入改進的空間金字塔池化結構并優化多尺度預測網絡,同時替換損失函數,相較YOLOv3,其準確率提升14.9%。文獻[17]基于YOLOv5 網絡模型,在原數據集的基礎上進行擴充,采用翻轉和旋轉2 種方式得到30 000 張圖片用于訓練,最終準確率達到92.4%。
本文提出一種改進的口罩佩戴檢測方法。為在模型精度和速度間取得平衡,設計更為輕量化的改進YOLOv5 模型,在幾乎不降低模型精度的情況下實現模型壓縮并加快推理速度,同時降低對硬件環境的依賴性。針對實際應用場景中由距離攝像頭遠近不同而導致的一張圖片中存在物體尺度面積不平衡的問題,使用YOLOv5 分別進行20×20、40×40、80×80 的多尺度檢測,從而提升模型對于小物體的檢測性能。
YOLO(You Only Look Once)是一個高性能的通用目標檢測模型,YOLOv1[18]使用一階結構完成了分類與目標定位2個任務,隨后的YOLOv2[19]與YOLOv3[20]在速度和精度上取得提升,進一步促進了物體檢測在工業界的應用,YOLOv4[21]則實現了在一塊普通的GPU(1080Ti)上完成模型訓練。從YOLOv1至今,YOLO 系列已經發展至YOLOv5,相較YOLOv4,YOLOv5 更加靈活,它提供了4 個大小的版本,分別為YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,4 個版本模型大小與精度依次遞增,根據Bottleneck 數目區分,采用了類似EfficienctNet[22]的channel和layer 控制因子來實現版本的變化,在實際應用中,可以根據具體場景的不同來選取合適大小的模型。本文主要實現模型壓縮及加速,使其更易應用于資源有限的嵌入式設備,因此,選擇YOLOv5s 系列作為基準模型。
YOLOv5 也有著版本迭代更新,目前已更新至v5.0,其中,v3.0、v4.0、v5.0 各有優勢,v4.0 與v5.0 中的YOLOv5-P5模型結構相同,v5.0新提出YOLOv5-P6模型,較已有版本,其添加了1個輸出層,共計P3、P4、P5和P6這4個輸出層,對應下采樣幅度分別為8、16、32和64,新增加的檢驗層有利于檢測較大的物體,可以通過更高分辨率的訓練獲得更高的精度。此外,YOLOv5-P5模型使用PyTorch1.7中新支持的SiLU()激活函數替換了先前版本中使用的LeakyReLU()和HardSwish()激活函數,使得網絡中任何一個模塊都只使用SiLU 激活函數,并刪減了先前版本中BottleneckCSP 的部分Conv 模塊。先前版本的BottleneckCSP以及YOLOv5-P5中的改進BottleneckCSP 對比如圖1 所示,改進BottleneckCSP也稱為C3模塊。

圖1 BottleneckCSP 和C3 模 塊Fig.1 BottleneckCSP and C3 module
可以看到,C3 模塊由于消除了每個瓶頸結構中的一個卷積,導致新版YOLOv5-P5 的尺寸都稍小,能夠得到更小的模型,且推理速度也有少量提升,對于較大的YOLOv5x,推理時間由6.9 ms 降低至6 ms,即模型越大,從這個變化中受益越大。表1 所示為YOLOv5s各版本的性能比較,可以看到,雖然YOLOv5s-P5 精度較YOLOv5s-3.0 有0.8%的下降,但是速度和參數量都更為優秀,YOLOv5s-P6 雖然精度最高,但是無論是高分辨率的輸入還是增加的檢測頭,都為設備資源分配增加了更大的負擔。綜合考量,本文最終選擇YOLOv5s-P5作為基準實驗模型,以其為baseline 進行模型優化。本文中后續出現的YOLOv5 一詞,若沒有特別說明,均指YOLOv5s-P5。

表1 YOLOv5s 各版本性能分析Table 1 Performance analysis of various versions of YOLOv5s
YOLOv5 由Backbone 與Head 2 個部分組成,Backbone 主要有Focus、C3 以及SPP 模塊,Head 包括PANet 以 及Detect 模塊。
在Backbone 部分,通過1 個Focus 模塊、4 個Conv 模塊實現32 倍下采樣,其中,Focus 模塊將輸入數據切分為4 份,每份數據都是相當于2 倍下采樣得到的,然后在channel 維度進行拼接,最后再進行卷積操作,Focus 模塊減少了卷積的成本,以reshape tensor 實現下采樣并增加channel 維度,可以減少FLOPs 并提升速度。
C3 模塊參照CSPNet 結構[23],將一個階段中基礎層的特征圖分成2 個部分,拆分和合并策略被跨階段使用,較好地降低了信息集成過程中重復的概率,重復梯度信息的減少,使得YOLOv5 網絡能夠有更好的學習能力,推理計算也有一定的減少。YOLOv4 中也使用了CSP 模塊,但YOLOv5 中做出創新,以有無殘差邊為區分標準設計2 種CSP 模塊,分別為CSP-False 和CSP-True,以shortcut 的取值False 或True 來控制改變。
加入SPP 模塊[24]至CSP 模塊之后,使用組合的3 個多尺度最大池化層,在幾乎沒有速度損失的情況下大幅提升了感受野,提取出了最重要的特征,同時也有效降低了直接將圖片進行伸縮而導致的圖片信息丟失的可能性,進一步提升了模型精度。
在Head 部分,通過將高層特征信息上采樣的方式與低層特征信息進行傳遞融合,實現了自頂向下的信息流動,再通過步長為2 的卷積進行處理,將低層特征與高層特征作Concat 操作,使低層分辨率高的特征容易傳到上層,從而實現了PANet[25]操作,更好地將低層特征與高層特征進行優勢互補,有效解決了多尺度問題。
YOLOv5 網絡結構如圖2 所示。

圖2 YOLOv5 網絡結構Fig.2 Network structure of YOLOv5
GhostNet 提出了一個創新性的模塊Ghost,其通過更少的參數量和計算量生成了更多的特征圖[26]。Ghost 的實現分為2 個部分,一個是普通卷積,另一個是具有更少參數量和計算量的線性操作。先通過有限的普通卷積得到一部分特征圖,再將所得的特征圖通過線性操作生成更多的特征圖,最后將2 組特征圖在指定維度進行拼接。Ghost 的操作原理如圖3 所示。

圖3 普通卷積與Ghost 模塊的對比Fig.3 Comparison between ordinary convolution and Ghost module
普通卷積層的運算可以表示為:

其中:X∈Rc×h×w代表卷積輸入,c指輸 入channel 數量,h及w分別指輸入特征圖的高度和寬度;表示輸出n個高度和寬度分別為h′和w′的特征圖;ω∈Rc×k×k×n代表進行卷積運算的是c×n個大小為k×k的卷積核;b是偏差項,逐點加至輸出特征圖的每個小單元。分析可得式(1)運算的FLOPs多達h′×w′×n×c×k×k。而Ghost 結構進行少量的普通卷積運算,采用線性運算高效減少特征冗余,以更少的計算量得到同樣多的特征圖。由圖3(b)可以看出,Ghost 模塊的運算可以表示為:

出于提高處理速度的目的,考慮到設備部署時的實用性,相較使用具有不同形狀和參數的線性運算,本文全部使用3×3 或5×5 的相同線性運算。設線性運算內核大小為d×d,則可以將Ghost 模塊與普通卷積的計算量進行比較,得出Ghost 模塊相對普通卷積的提升程度,如下所示:

這里的k×k與d×d大小相同,且s?c,因此,最終化簡可以得到普通卷積的計算量近似為Ghost 模塊的s倍,參數量計算類似,最終也可以近似化簡為s。從理論上可以定量地證明Ghost模塊的優越性,因此,以Ghost模塊為基礎,進而設計GhostBottleneck及GhostBottleneckCSP模塊,具體結構如圖4所示。

圖4 GhostBottleneck 和GhostBottleneckCSP 模塊結構Fig.4 GhostBottleneck and GhostBottleneckCSP module structure
圖4中的c1與c2分別指輸入和輸出特征圖通道數。在本文中,先使用圖4(a)所示的1×1 普通卷積將通道數降至輸出通道數的1?2,再根據得到的特征圖進行大小為5×5 的深度卷積,最后將2 組特征拼接。圖4(b)中第1 個Ghost module 先將輸出通道數降為目標輸出通道數的1?2,再由第2 個Ghost module 將通道數恢復至目標輸出通道數,并與殘差邊傳來的輸入特征圖逐點相加進行特征融合。如圖4(c)所示,使用GhostBottleneck 替換掉YOLOv5 中所有的Bottleneck模塊,與C3 模塊形成新的GhostBottleneckCSP,原Bottleneck 由1×1 和3×3 標準卷積組成,新結構通過替換掉原來Bottleneck 中較多的3×3 標準卷積,減少了計算量并壓縮了模型。
當前優秀的輕量級網絡絕大部分都使用組卷積或深度可分離卷積來降低卷積操作所產生的計算量,但是,為了實現通道間的特征融合,這些網絡中使用的1×1 卷積在整個過程中占用較多的計算量,為了緩解這一問題,ShuffleNet[10]提出了通道混洗的概念。在進行組卷積后,使用通道混洗就可以實現組間信息的流通,以更加經濟的方式增強特征的表達能力。通道混洗可以通過張量的常規操作來實現,具體過程如圖5 所示。

圖5 通道混洗的實現過程Fig.5 Realization process of channel shuffle
圖5 中的數字是輸入通道的編號,使用Reshape操作將通道擴展為兩維,并通過Transpose 對擴展出的2 個維度進行置換,通過這個操作能夠在不增加計算量的情況下使組卷積通道之間的信息完成融合,最后Flatten 操作將2 個維度復原為原來的初始維度,完成通道混洗。基于以上原理,可以認為一個逐點卷積可以使用一個1×1 組卷積和1 個通道混洗操作組合代替,組卷積與標準卷積相比參數量與計算量有較大減少,且組卷積有類似正則的作用,可以降低過擬合發生的概率。出于這些優點,本文對YOLOv5 中6 個大小為3×3、2 個大小為1×1 的Conv 模塊中的普通卷積操作進行改進,將原來的普通卷積更換為組卷積和通道混洗模塊,理論上可以實現模型的進一步壓縮。
YOLOv5 具有較好的工程實用性,選擇其作為口罩檢測模型的基準網絡具有可行性。但是,從目前的研究和應用情況來看,YOLOv5 仍可以進行進一步改進。結合1.2 節及1.3 節的內容,得到本文改進后的YOLOv5 網絡,其整體結構如表2 所示。

表2 改進的YOLOv5 網絡整體結構Table 2 Overall structure of improved YOLOv5 network
在表2 中:第2 列的-1 是指輸入來自上一層輸出;最后1列的值依次對應該模塊的輸入通道數、輸出通道數、卷積核大小、步長信息;第4列GhostBottleneckCSPn模塊中的n代表該模塊內GhostBottleneck 的數量。經過計算,改進YOLOv5 模型總計367 層,2 419 191 個參數,計算量為5.5GFLOPs。初始YOLOv5 模型共計7 066 239 個參數,計算量為16.4GFLOPs。兩者比較,優化后的模型參數量減少為原來模型的34.24%,計算量減少為原來模型的33.54%,實現了較大程度的模型壓縮。
模型損失函數由分類損失(classification loss)、定位損失(localization loss)、目標置信度損失(confidence loss)組成。YOLOv5 使用二元交叉熵損失函數計算類別概率和目標置信度得分的損失,通過實驗,本文在GIOU Loss[27]和CIOU Loss[28]之間最終選定效果略好的CIOU Loss 作為bounding box 回歸的損失函數。CIOU Loss 計算公式如下:

2.3.1 模型訓練算法
本文模型訓練算法實現過程描述如算法1所示。
算法1模型訓練算法
輸入人臉口罩數據集圖片及標記文件
輸出本次訓練中性能最佳的檢測模型
初始化參數訓練epoch 數,學習率,批次大小,輸入圖片大小,網絡模型配置yaml 文件,標簽與anchor 的IoU 閾值,損失系數,數據增強系數,標簽與anchor 的長寬比閾值
圖片預處理調整圖片亮度、對比度、飽和度并進行Mosaic 處理
步驟1準備數據,制作數據集并劃分訓練集和驗證集。
步驟2加載數據配置信息及初始化參數,輸入數據并對其進行預處理。
步驟3加載網絡模型,并對輸入圖片進行特征提取及物體定位分類。
步驟4隨著迭代次數的增加,使用SGD 對網絡中各組參數進行更新優化。
步驟5若當前epoch 不是最后一輪,則在驗證集上計算當前模型的mAP,若計算得到的模型性能更佳,則更新存儲的最佳模型。
步驟6在訓練完所設置的迭代數后,獲得訓練好的最佳性能模型和最近一次訓練的模型。
步驟7輸出性能最佳的模型。
2.3.2 整體實現流程
本文方法整體實現流程如圖6 所示:首先準備數據,進行人臉口罩佩戴圖片篩選及標記,制作數據集并隨機劃分訓練集、驗證集、測試集;接著按照算法1 進行模型訓練,得到性能最佳的人臉口罩佩戴檢測模型;之后對測試集數據進行測試,并在測試圖片上呈現最終的識別結果,即人臉位置和口罩佩戴狀態。

圖6 本文方法整體流程Fig.6 Overall process of this method
本文實驗的機器操作系統版本為Ubuntu 9.3.0-10ubuntu2,CPU 型號為Intel?CoreTMi3-9100F CPU@3.60 GHz,GPU 型號為GeForce RTX 2080 Ti,顯存大小為11 GB,內存大小為31 GB。所有模型基于PyTorch 1.8,并使用cuda 10.1 和cudnn 7.6.5 對GPU 進行加速。
實驗使用的數據集來自AIZOO 團隊整理的開源數據集,該數據集主要從WIDER Face 及MAFA 公開數據集中篩選得到,從中分別選擇3 894 張及4 064 張圖片,并對其進行二次篩選及擴充,刪除錯誤標簽,加入部分ROBOFLOW 開放的口罩數據集,最終得到訓練集6 110 張,驗證集1 832 張,共計7 942 張圖片。將圖片預定義為佩戴口罩和未佩戴口罩兩類,佩戴口罩標簽為face-mask,未佩戴口罩標簽為face。
為了避免將捂嘴動作預測為佩戴口罩,實驗數據集中加入了嘴巴被手或衣物等其他物品捂住的數據,從而有效過濾了此類干擾。數據集部分圖片如圖7 所示。

圖7 數據集部分圖片Fig.7 Partial pictures of dataset
通過對數據集進行分析得到可視化結果如圖8 所示:圖8(b)中x、y指中心點位置,顏色越深代表該點位置目標框的中心點越集中;圖8(c)中width、height 分別代表圖片中物體的寬、高。從圖8(b)、圖8(c)可以看出,數據集物體分布比較均勻,且中小物體占比更大,存在物體間遮擋的情況,符合日常實際應用場景,但數據集存在輕微的類別間樣本不平衡問題,該問題將在數據預處理中得到緩解。

圖8 數據集分析結果Fig.8 Dataset analysis results
3.2.1 數據集標記
實驗數據集為PASCAL VOC 格式,但YOLOv5所需為YOLO 格式的txt 標記文件,具體格式為(class_id,x,y,w,h),且都是歸一化后的值,因此,需要做相應轉換,具體運算規則如下所示:

其中:class_id 為類別的id 編號;xmax、ymax、xmin、ymin分別指VOC 格式的xml 標記文件中相對于圖片左上角,標記物體所在位置的左上角坐標及右下角坐標的值。
3.2.2 自適應圖片采樣
本文所用數據集存在輕微的類間不平衡問題,這也是物體檢測中的一個常見問題,模型訓練時樣本過少的類別的參考性較小,可能會使模型主要關注樣本較多的類別,模型參數也主要根據樣本多的類別的損失進行調整,最終導致針對少樣本類別的檢測精度有所下降。
為了解決上述問題,本文采用自適應圖片采樣策略,根據物體類別的數量占比及每張圖片中各類物體的出現頻數,生成每張圖片的采樣權重,再根據圖片的采樣權重生成采樣的索引序列,類別數量和頻數與類別權重成反比,若某張圖片頻數最高的類別的數量占比也較其他類別高,則這張圖片被采樣的概率就會降低,通過這種采樣方式可以有效緩解類間不平衡問題。
3.2.3 anchor 設置
對于目標檢測任務,設置合適的anchor直接影響模型的最終表現。合適的anchor 是根據數據集物體大小而確定的,利用預設值anchor,基于shape 閾值對bbox 計算可能的最優召回率。如果召回率大于0.98,則無需優化,直接返回;如果召回率小于0.98,則利用遺傳算法與k-means 重新設置anchor。本文模型在人臉口罩數據集上可能的最優召回率為0.997 8,因此,使用YOLOv5 的初始anchor 值[10,13,16,30,33,23]、[30,61,62,45,59,119]和[116,90,156,198,373,326]。
3.2.4 Mosaic 數據增強
本文實驗的Mosaic 數據增強參考CutMix[29]:隨機選取4 張圖片并對其進行隨機裁剪、排布和縮放,然后完成拼接,得到的效果如圖9 所示。這種方式隨機擴充了數據集,特別是隨機縮放增加了小目標,使得網絡的魯棒性得到一定提升。經過Mosaic 數據增強后相當于一次性處理了4 張圖片,batch size 隱性增加,初始設置的batch size 值無需很大也可以得到一個性能較好的模型,對GPU 性能要求相對降低。

圖9 Mosaic 數據增強效果Fig.9 Mosaic data enhancement effect
除此之外,本文還進行了改變亮度、對比度、飽和度等常規數據增強方法,與Mosaic 相結合,在一定程度上有效防止了過擬合問題,能夠實現更長時間的訓練從而獲得更優的模型性能。
本文所有實驗中學習率均使用Warmup[30]訓練,避免模型訓練時初始學習率過高引起模型振蕩,以便維持模型的穩定性。在Warmup 階段,采用一維線性插值對每次迭代的學習率進行更新,bias 層的學習率從0.1下降到基準學習率0.01,其他參數學習率從0 增加到0.01。在Warmup 階段之后,采用余弦退火算法[31]對學習率進行更新。實驗中BN 層、權重weight 層、bais 層的學習率分別為lr0、lr1、lr2,所有實驗均訓練300 個epoch,batch size 設為32。學習率的變化曲線如圖10所示,其中,lr0 和lr1 曲線變化相同。

圖10 學習率變化曲線Fig.10 Curve of learning rate
從mAP(0.5)、mAP(0.5∶0.95)、召回率Recall、準確率Precision、平均檢測處理時間、參數量、計算量、模型大小這8 個角度對模型性能進行衡量。上述部分評價指標的具體計算公式如下:


其中:TP、FP、FN分別指正確檢驗框、誤檢框、漏檢框數量;AAP值為P-R 曲線面積,本文采用101 個插值點的計算方法;N指檢測類別總數,本文為2;mAP(0.5)指IoU設為0.5 時所有類別的平均AP;mAP(0.5∶0.95)指在不同IoU 閾值下的平均mAP,IoU 取值從0.5 增加到0.95,步長為0.05。平均檢測處理時間包括網絡推理時間及NMS 處理所花費的時間,模型大小指最終訓練結束得到并保存的模型大小。
3.3.1 在人臉口罩數據集上的實驗結果
通過消融實驗來逐步驗證網絡結構改變所引起的性能變化,本節3 個實驗分別訓練YOLOv5、Ghost-YOLOv5、Ghost-YOLOv5-Shuffle 這3 個網絡,實驗測試結果分別如圖11、圖12、表3 所示,其中,曲線灰度依次遞增分別代表YOLOv5、Ghost-YOLOv5-Shuffle 和Ghost-YOLOv5。

表3 各模型的性能對比結果Table 3 Performance comparison results of each model

圖11 各模型在人臉口罩數據集上的實驗結果Fig.11 Experimental results of each model on face mask dataset

圖12 各模型的所有類別AP 值對比Fig.12 Comparison of AP values of all categories of each model
從表3 可以看出,使用GhostBottleneck 替換YOLOv5 中所有的Bottleneck 模塊后,模型計算量和參數量分別壓縮為原來的63.41%和68.98%,在使用GPU 或CPU 的情況下分別有13.64%和16.37%的速度提升,并且模型大小變為原來的69.34%,但同時,從圖11(c)中也可以看出,模型精確度有了明顯損失,且波動更為劇烈,這在驗證集的類別損失曲線中也有所體現,所幸在訓練后期,Ghost-YOLOv5 模型與YOLOv5 之間精確度的差值較初期有所下降,除此之外,從圖12 可知,Ghost-YOLOv5 模型最終的所有類別平均AP 較YOLOv5 僅下降0.3%。
在繼續將標準卷積替換為ShuffleConv 后,模型計算量和參數量進一步壓縮,分別為原來的33.54%和34.24%,在使用GPU 情況下處理時間仍然保持1.9 ms不變,但CPU 速度較YOLOv5 提升了28.25%,模型大小壓縮至原來的35.77%。GPU 情況下速度沒有提升,原因是在算力足夠的GPU 平臺上,組卷積雖然降低了運算量和參數量,但是由于內存交換速度的限制,ShuffleConv的瓶頸并非是計算強度,因此,此模塊對GPU環境下的影響微乎其微,但當在計算能力有限的CPU平臺上,計算速度便會有相當的提升,更適合部署在資源有限的嵌入式設備上。此外,Ghost-YOLOv5-Shuffle在Ghost-YOLOv5 的基礎上精度有所提升,從各個衡量標準來看都與YOLOv5 的檢測能力更加貼近,且從分類損失曲線來看,在一定程度上證實了組卷積的正則化效果,由圖12 可知,Ghost-YOLOv5-Shuffle 的最終mAP(0.5)為0.950,較YOLOv5 的0.951 幾乎沒有精度下降,且各類間差值都在0.003 范圍之內。
YOLOv5 與Ghost-YOLOv5-Shuffle 實際運行效果如圖13 所示,每個小圖中的左邊圖片為YOLOv5,右邊圖片為Ghost-YOLOv5-Shuffle。通過圖13 的實際檢測效果對比可以看出,改進后的模型在進行非極小物體的識別時與基準模型幾乎沒有區別,面對分布極為密集的模糊小物體時,基準模型比改進模型略微精確,但改進模型對絕大部分小物體還是能夠實現正確識別。

圖13 復雜場景下的實際檢測效果Fig.13 Actual detection effect in complex scenes
3.3.2 不同網絡的對比實驗
為了進一步驗證本文所提模塊及網絡的高效性,將其與同類輕量級網絡YOLOv3-tiny、YOLOv4-tiny等進行對比,結果如表4所示。其中,實驗5、實驗6第2列括號中的數字代表模型中前3 個GhostBottleneckCSP 中GhostBottleneck的個數。從表4可以得出:

表4 不同網絡的性能對比Table 4 Performance comparison of different networks
1)由實驗0、實驗2、實驗4、實驗6的對比可以看出,本文模型相較YOLOv3-tiny、YOLOv4-tiny、YOLOv5-P6具有絕對優勢,其模型大小分別僅為上述模型的30.12%、40.65%、20.9%,但mAP 明顯大于YOLOv3-tiny、YOLOv4-tiny,且與YOLOv5-P6的mAP(0.5)大小相同,即選擇本文所提網絡結構進行人臉口罩佩戴檢測是合理且經濟的。
2)通過實驗0 和實驗1、實驗2 和實驗3 這兩組對比實驗可以驗證GhostBottleneckCSP 和ShuffleConv 模塊在其他網絡上的優化通用性,加入GhostBottleneckCSP和ShuffleConv 模塊的YOLOv3-tiny 模型大小僅為原模型的8.43%,大量的3×3 和1×1 標準卷積被替換,實現了模型的極限壓縮,且由于加入了更加高效的CSP模塊,實驗1 的精度較原模型也有了明顯提升。同理,在YOLOv4-tiny 上做類似替換也能實現模型壓縮及精度提升,且在CPU 上的推理速度也提高了27.13%。
3)通過實驗5、實驗6 可以說明,適當調整GhostBottleneckCSP 中 的GhostBottleneck 數量能夠在一定程度上提升模型對小物體的檢測能力,在本文所提模型的基礎上,將第2個和第3個GhostBottleneckCSP中的GhostBottleneck 數量分別設為1 和3,對應實驗2、實驗3,更大數量的模型的精度有輕微提升,且對小物體的檢測能力更強。在實際應用場景中,可根據任務需要適當調整GhostBottleneck 模塊的數量,以達到模型大小與精度之間的平衡,實現更好的檢測性能。
本文設計并實現了一種輕量化的YOLOv5 增強網絡模型,該模型可以壓縮大小并加快推理速度,模型精度得到一定程度的優化,同時極大降低了對硬件環境的依賴性,能夠滿足實際應用的需求。后續將在移動端進行模型部署,在實際應用場景中驗證并完善所提模型,此外,將口罩佩戴特征與其他關聯特征相結合,實現實用性更強的安全衛生監督系統,以更好地滿足社會與日常生活的實際需求,也是下一步的研究方向。