程澤華,韓俊英
(甘肅農業大學 信息科學技術學院,甘肅 蘭州 730070)
自新型冠狀病毒(COVID-19)肺炎爆發以來,人們的生產和生活方式都受到不同程度的影響,嚴重影響我國經濟發展的同時也對人們的生命健康產生了極大威脅。為了防止病毒的肆意傳播,合理佩戴口罩已經成為一種重要的保護手段。隨著病毒的不斷變異,其傳播能力也變得更強。在一些人口密集區域(例如超市、醫院和車站等)僅靠人工檢測是否合理佩戴口罩,在消耗大量人力的同時還存在漏檢情況,因此利用計算機視覺代替人工,完成對是否正確佩戴口罩的檢測具有重要意義。
近幾年,隨著科技的不斷發展,深度學習也得以快速發展。目前,基于深度學習的目標檢測算法主要分為One-Stage[1]和Two-Stage[2]兩類。One-Stage 算法有檢測速度快、網絡模型小、非常適合移動設備等優點,但它檢測精度相對較低,主要代表算法有SSD、YOLO[3]系列。隨著YOLO 系列不斷發展,到YOLOv5 網絡,已經解決了檢測精度低的問題。Two-Stage 算法具有檢測精度高的特點,但其檢測速度較慢、訓練時間長,主要的代表算法有Fast-CNN[4]、Faster R-CNN[5]等。目前,已產生了大量的口罩識別檢測算法,如文獻[6]設計一種高激活性鬼影模塊,以輕量的計算代價減少特征圖中的冗余;文獻[7]通過增加Max Module 結構以獲得更多目標的主要特征,提高檢測準確率;文獻[8]提出一種多尺度特征融合的輕量化口罩佩戴檢測算法,通過多層級交叉融合結構最大程度地提取有用信息以提高特征利用率。雖然,他們對網絡模型做了一定改進,但忽略了在人群密集、光線昏暗、檢測目標存在部分遮擋等復雜環境中,輕量化的網絡可能會導致特征提取能力不足的問題。針對上述問題,本文通過加入數據增強方法和設計輕量化的特征提取模塊,解決了光線昏暗、人群密集復雜環境下特征提取能力不足的問題,同時也實現了對YOLOv5算法的輕量化改進。
可分離卷積包括空間可分離卷積和深度可分離卷積[9]。空間可分離卷積通常將卷積核拆分為兩個較小的卷積核進行計算,在較小的損失情況下降低計算成本。本文將一個3×3 的卷積核拆分成一個3×1 的卷積核和一個1×3 的卷積核,先使用3×1 的卷積核對特征圖進行卷積操作,將卷積的結果再使用1×3 的卷積核進行卷積操作,得到輸出的特征圖。深度可分離卷積采用對每個通道分別進行卷積計算的方式,減少卷積計算的參數個數。其卷積計算要分兩步完成,首先對每個通道(深度)分別進行空間卷積,并對卷積結果進行拼接,然后使用單位卷積核進行通道卷積得到輸出的特征圖。
在圖像處理的特征融合過程中,常用的融合方式有通道維度上的拼接和相加兩種方式,特征表達能力并不強。本文提出了自適應權重特征融合方式(Adaptive Feature Fusion,AFF),首先通過神經網絡學習得到不同特征之間的權重,然后使用通道維度上拼接或相加的方式進行特征融合,計算方法如式(1)所示,通道維度拼接的自適應特征融合方式如圖1 所示,通道維度相加的自適應特征融合與之類似。

Fig.1 Adaptive feature fusion圖1 自適應特征融合
本文是對YOLOv5 算法的改進,在網絡的整體結構上與YOLOv5 網絡保持一致,有4 個部分組成:輸入網絡、骨干網絡、頸部網絡、頭部網絡。輸入網絡主要是對圖片進行數據增強處理;骨干網絡主要是對輸入的圖片進行特征提取;頸部網絡主要由PAN 結構和FPN 結構組成,PAN 結構是將輸出特征進行下采樣與骨干網絡中的特征進行信息融合,FPN 結構是將輸出的特征進行上采樣與PAN 結構中的特征進行信息融合;頭部網絡的主要作用是根據得到的特征層預測目標的類別信息。
改進后的網絡與原始YOLOv5網絡的區別主要體現在以下方面:在輸入網絡原有的數據增強基礎上添加了隨機遮擋和自適應對比度的方法,將骨干網絡中第一個C3 模塊刪除,其余的C3 模塊和頸部網絡中的C3 模塊全部使用SDC 模塊(Spatial Deep Convolution)進行替換,不但使網絡的參數量減小,同時也使網絡具有更好的性能。在細節方面,使用SIoU 作為邊框回歸損失函數,重新定義了懲罰指標,提高了模型精度。改進后的YOLOv5 網絡結構如圖2所示。

Fig.2 YOLOv5 network structure圖2 YOLOv5網絡結構
為了讓網絡參數量減少的同時,網絡的特征提取能力還可以得到提升,本文設計了一種融合注意力的特征提取模塊SDC,其主要由瓶頸網絡(BottleNeck)、深度可分離卷積網絡、注意力網絡3部分組成。
瓶頸網絡中使用一個3×1 的卷積核和一個1×3 的卷積核對輸入的特征進行卷積,其作用效果與直接使用3×3 的卷積核相似,但使用空間可分離卷積使得網絡的參數量減少。同時,瓶頸網絡有BottleNeck1 和BottleNeck2 兩種結構,在骨干網絡中的SDC 模塊,使用BottleNeck1 結構,在頸部網絡中的SDC 模塊,使用BottleNeck2 結構。為了提取到小目標更深層次的信息,使用卷積核為7×7 的深度可分離卷積進行特征提取,既增強了網絡的特征提取能力又避免了計算量增加的問題,將深度可分離卷積網絡的輸出和瓶頸網絡的輸出通過通道維度拼接的自適應特征融合方式進行特征融合。為了降低一些不太顯著的特征權重,將基于歸一化的注意力模塊(Normalization-based Attention Module)[10]融入到SDC 模塊中,首先對輸入特征進行批歸一化得到每個通道的縮放因子,然后根據縮放因子計算出每個通道的權重,最后通過Sigmoid 激活函數將每個通道的縮放因子和權重的乘積進行歸一化操作,得到每個通道的注意力,將注意力分別加權到輸入特征的每個通道上,得到注意力網絡的輸出。將注意力網絡的輸出和前面融合的特征再使用通道維度相加的自適應特征融合方式進行特征融合得到SDC 模塊,其結構如3所示。
目標檢測的有效性很大程度取決于損失函數的定義,邊框損失函數也是目標檢測任務中重要的損失函數,傳統的邊框損失函數(CIoU、GIoU、DIoU 等[11-12])并沒有考慮到所需真實框與預測框之間不匹配的問題,這樣會出現收斂速度慢的問題。本文使用SIoU[13]為邊框損失函數,其考慮到所需回歸之間的向量角度,提高了訓練速度和推理準確性,如式(2)所示。在YOLOv5 網絡的訓練過程中,邊框損失函數分別使用CIoU Loss 和SIoU Loss 進行訓練,得到如圖4 的實驗結果。可以看出,相較于CIoU 損失函數,SIoU 損失函數的損失值下降更快,模型也可以在訓練過程中更快速地收斂,提高了模型推理速度。

Fig.4 Box loss function圖4 邊框損失函數
本文對YOLOv5算法添加了隨機遮擋和自適應對比度的數據增強方法,隨機遮擋數據增強方法是將輸入的圖片,隨機遮擋若干個矩形區域。使用隨機遮擋數據增強的方法以防止過擬合現象出現,同時也可以模擬真實場景下部分目標出現遮擋的現象,從而提高模型泛化能力。
在實際生活中存在光線昏暗、對比度低等復雜場景,可采用自適應對比度的方法對數據進行增強。自適應對比度圖像增強算法來自于Gamma 變換[14],對輸入圖像灰度值進行非線性操作,可以模擬出一幅圖片在不同光線下的場景,從而達到數據增強的目的,經過自適應對比度數據增強后的圖片如圖5所示。

Fig.5 Gamma transform圖5 Gamma變換
本文實驗使用的操作系統為Ubuntu20.04,顯卡為Nvidia GeForce RTX 2080Ti,11GB 顯存,處理器為Intel(R)Xeon(R)Platinum 8,CUDNN 版本為11.3,在PyTorch1.8 框架上完成訓練和測試,使用Python 版本為Python3.8。
目前,對于是否正確佩戴口罩的數據集較少,在口罩識別的公開數據集中只有佩戴口罩和沒有佩戴口罩兩種類別,并沒有不規范佩戴口罩的類別,因此需要重新搜集和標注數據集。根據實際需求,使用爬蟲技術在互聯網上共采集了5 000 張圖片,將這些圖片進行數據清洗后剩余3 100 張圖片。選取不同場景、不同時間段的100 張圖片作為測試集,將剩余3 000 張圖片使用LabelImg 工具進行樣本標注。一共標注了4 935 個目標,其中不佩戴口罩(Nmask)目標有1 930 個,不規范佩戴口罩(Fmask)目標有1 380 個,正確佩戴口罩(Tmask)目標有1 625 個,將標注的3 類圖片分別按照8∶2 的比例劃分訓練集和驗證集。將數據集進行數據增強處理后部分圖片如圖6 所示,其中圖6(a)表示訓練集圖片,圖6(b)表示測試集圖片。

Fig.6 Partial pictures of data set圖6 數據集部分圖片
在檢測速度方面,本文使用檢測的幀率(FPS)作為評估指標,即每秒內可以處理圖片的數量或者處理一張圖片所需要的時間。在檢測準確性方面,本文選用平均精度均值(mAP)、精確率(Precision)、召回率(Recall)作為評價指標,其計算公式如下:
其中,c代表類別數目,APi表示第i類的平均精度(Average Precision),即精確率—召回率曲線下的面積,TP 表示樣本被分為正樣本且分配正確,TN 表示樣本被分為負樣本且分配正確,FP 表示樣本被分為正樣本但分配錯誤,FN 表示樣本被分為負樣本但分配錯誤。
為驗證本文對YOLO 算法改進的性能,將改進的YOLOv5 算法與目前主流的輕量化目標檢測算法,在相同的數據集上進行實驗結果對比,得到如表1 所示實驗結果。其中模型的評價指標有平均精度均值、精確率、召回率、幀率。在平均精度均值評價指標上,改進后的YOLOv5 算法相較于Faster R-CNN 和YOLOX[15]算法分別降低0.2%和0.1%,但比SSD[16]、YOLOv3-tiny[17]、YOLOv4[18]、YOLOv5算法分別提升7.1%、5.8%、5%、1.3%。在精確率和召回率的評價指標上,改進后的YOLOv5 算法只比Faster R-CNN和YOLOX 算法略低,說明改進后的YOLOv5 算法在檢測精度上達到了現有算法的先進水平。同時,模型檢測速度也是非常重要的評價指標,它決定了模型是否可以更好地應用于實際場景中。在檢測速度評價指標上,改進后的YOLOv5 算法達到42frame/s,分別比SSD300、YOLOv3-tiny、YOLOv4、YOLOX、YOLOv5 提升210%、168%、150%、175%、140%。改進后YOLOv5 網絡的檢測速度更加滿足實際場景的需求。

Table1 Comparative experimental results表1 對比實驗結果
為了評估幾種改進方法對模型的影響,設置了5 組不同的實驗進行驗證。實驗1:使用原始的YOLOv5 算法模型;實驗2:使用SIoU Loss 作為YOLOv5 的邊框損失函數;實驗3:在實驗2 的基礎上使用SDC 模塊替換YOLOv5 骨干網絡和頸部網絡中的C3 模塊;實驗4:在實驗3 的基礎上,加入了隨機遮擋的數據增強方法;實驗5:在實驗4 的基礎上,增加了自適應對比度的數據增強方法。消融實驗結果如表2所示。

Table 2 Ablation experimental results表2 消融實驗結果
將數據集中的圖片分別輸入到這5 組實驗中進行訓練和測試,得到如表2 所示的實驗結果。通過對比實驗1和實驗2 可知,使用SIoU 邊框損失函數在預測框的回歸過程中,考慮到所需真實框與預測框之間不匹配的方向,使預測框可以更準確地進行回歸,從而提高了模型精度和檢測速度。
從實驗2 和實驗3 可以看出,使用SDC 模塊使模型精確率提升了0.5 個百分點,因為在SDC 模塊中使用了基于歸一化的注意力,可以幫助神經網絡抑制通道中不太顯著的特征,從而提升模型精確率;模型召回率提升了1.9 個百分點,因為在SDC 模塊中使用了7×7 的大卷積核進行特征提取,通過自適應權重的方法進行信息融合,可以使輸出特征融合更豐富的語義特征和位置信息,故召回率提升幅度相對較大;模型大小減小了4.1M,檢測速度提升了1.4倍,因為在SDC 模塊中主要使用深度可分離卷積和空間可分卷積,相對于普通卷積它的計算量和參數量大幅度減少,通過減小計算量使模型檢測速度得到提升,通過減少參數量使模型大小減小;相較于C3 模塊,SDC 模塊具有更好的特征提取能力。
由實驗3、實驗4 和實驗5 可知,使用隨機遮擋和自適應對比度數據增強方法,可以模擬人群密集和光線昏暗等復雜場景,從而提高了模型泛化能力,使模型在平均精度均值、精確率、召回率上都有所提升,說明本文使用的兩種數據增強方式非常有效。
將測試集中的圖片分別輸入到訓練好的YOLOv5網絡模型和改進后的YOLOv5 網絡模型進行測試,選取部分測試結果如圖7 所示。從測試結果可以看出,YOLOv5 網絡在光線昏暗人群密集的場景下,存在部分目標無法識別,個別目標即會被識別為不規范佩戴口罩,又會被識別為正確佩戴口罩的問題,而改進后的YOLOv5 算法特征提取能力更強,可以正確識別出每個目標。在光線充足人群密集的情況下,YOLOv5 算法會出現個別目標漏檢的問題,使用改進后的YOLOv5 算法在復雜環境下也不存在漏檢情況。在檢測速度上,改進后的YOLOv5 算法檢測效率有了顯著提升,同時改進后的YOLOv5 算法模型的參數量也只有原始YOLOv5 算法的72%,實現了對YOLOv5 算法的輕量化改進。

Fig.7 Partial test results圖7 部分測試結果
本文通過設計一種輕量化的特征提取模塊,解決了YOLOv5 網絡對是否正確戴口罩識別能力不足的問題,同時也在很大程度上減小了網絡的參數量。在原有的數據增強基礎上新添加隨機遮擋的方法,解決了過擬合現象和人群密集場景下存在的遮擋現象,添加自適應對比度的方法解決在光線昏暗場景下檢測能力低的問題。使用SIoU邊框損失函數加快了模型推理速度。本文實現了YOLOv5算法的輕量化改進,但還存在網絡參數量不夠少、訓練所得模型不夠小的不足,后續將在這兩方面對模型繼續加以改進,提升算法在復雜場景下口罩識別的性能。