付惠琛, 高軍偉*, 車魯陽
(1.青島大學(xué) 自動(dòng)化學(xué)院, 山東 青島 266071;2.山東省工業(yè)控制技術(shù)重點(diǎn)實(shí)驗(yàn)室, 山東 青島 266071)
新冠疫情爆發(fā)以來,我國堅(jiān)持動(dòng)態(tài)清零政策,保證了極低的感染率、病亡率,而居民外出佩戴好口罩,仍是預(yù)防疫情反撲的重要方法[1]。但隨著時(shí)間的推移以及國家正確政策下社會有條不紊運(yùn)行的情況,讓許多居民心存僥幸,麻痹大意,出現(xiàn)了不規(guī)范佩戴口罩的情況,例如口罩未覆蓋口鼻、口罩戴在下巴上甚至?xí)胁慌宕骺谡值那闆r出現(xiàn)[2]。因此,在人流密集的公共場合進(jìn)行口罩佩戴檢測,對疫情防控有著重要的作用。傳統(tǒng)的口罩檢測只是檢測了人臉和口罩這兩個(gè)目標(biāo),只能判斷出目標(biāo)人物是否佩戴口罩而無法檢測出目標(biāo)人物的佩戴情況是否有誤,針對側(cè)面和遮擋等情況的識別效果也不盡如人意。
隨著社會的需要和深度學(xué)習(xí)[3]的發(fā)展,出現(xiàn)了不少目標(biāo)檢測算法,如Fast-RCNN算法[4]、SSD算法和YOLO系列算法[5]等。文獻(xiàn)[6]在YOLO算法中引入了MobileNetv2網(wǎng)絡(luò)對口罩的佩戴情況進(jìn)行分類,提高了動(dòng)態(tài)檢測的速度;文獻(xiàn)[7]在YOLOv4算法的基礎(chǔ)上增加了路徑聚合網(wǎng)絡(luò),并使用標(biāo)簽平滑來降低損失函數(shù),但只是簡單地分了是否佩戴口罩這兩個(gè)類別,沒有考慮佩戴錯(cuò)誤的情況。YOLO系列算法的檢測速度快,精度較高,但考慮到某些具體的檢測目標(biāo)有特征復(fù)雜、背景多樣等特點(diǎn),必須對網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行相應(yīng)的改進(jìn)。文獻(xiàn)[8]通過引入數(shù)據(jù)增廣的方法,提高了細(xì)胞信息的利用率。隨著檢測算法精度和速度的提升,出現(xiàn)了不少能完成實(shí)時(shí)檢測任務(wù)的算法。文獻(xiàn)[9]通過模板匹配與LSTM相結(jié)合,提升了模型檢測準(zhǔn)確率且能夠?qū)崿F(xiàn)目標(biāo)實(shí)時(shí)檢測。在實(shí)際的檢測場景中,多目標(biāo)檢測逐漸成為主流。文獻(xiàn)[10]中基于熱力圖的Top-down和Bottom-up方法可以有效地完成多目標(biāo)檢測任務(wù)。隨著網(wǎng)絡(luò)復(fù)雜性的提高,網(wǎng)絡(luò)模型的泛化能力十分重要。文獻(xiàn)[11]通過設(shè)計(jì)隨機(jī)擴(kuò)散器的方法,提高了網(wǎng)絡(luò)的泛化能力。
本文將居民佩戴口罩時(shí)常見的3種情況(沒有佩戴口罩、正確佩戴口罩、錯(cuò)誤佩戴口罩)設(shè)為檢測目標(biāo),對YOLOv7算法進(jìn)行改進(jìn)。在Head區(qū)域加入了卷積注意力機(jī)制(CBAM),從通道和空間兩方面入手,使得網(wǎng)絡(luò)更加關(guān)注于目標(biāo)的重要特征,提高了網(wǎng)絡(luò)對口罩佩戴目標(biāo)的學(xué)習(xí)能力。在主干網(wǎng)絡(luò)(Backbone)區(qū)引入了改進(jìn)后的ConvNeXT,對原有的SPPCSPC進(jìn)行改進(jìn),在原有池化層的結(jié)構(gòu)上增加了串行連接,在不降低識別精度的同時(shí)加快了收斂速度和識別速度。
YOLOv7算法在2022年由Alexey Bochkovskiy團(tuán)隊(duì)提出,在檢測精度和速度兩方面均優(yōu)于YOLOv5。YOLOv7的整體結(jié)構(gòu)由輸入層、主干網(wǎng)絡(luò)(Backbone)、Head和預(yù)測端4部分組成,其模型結(jié)構(gòu)如圖1所示。其中輸入層對數(shù)據(jù)的部分預(yù)處理方法延用YOLOv5,如Mosaic數(shù)據(jù)增強(qiáng)、自適應(yīng)錨框計(jì)算和圖片自適應(yīng)縮放等。
圖1 YOLOv7模型結(jié)構(gòu)圖Fig.1 YOLOv7 model structure
Mosaic數(shù)據(jù)增強(qiáng)通過對圖片進(jìn)行隨機(jī)的縮放、裁剪、排布來充實(shí)檢測目標(biāo)的背景變相地對batch_size進(jìn)行提高。自適應(yīng)錨框計(jì)算會在網(wǎng)絡(luò)模型訓(xùn)練的初始狀態(tài)設(shè)定好錨框,隨后輸出一個(gè)預(yù)測框,將錨框跟真實(shí)框進(jìn)行對照,再多次計(jì)算誤差并進(jìn)行反饋,通過不斷的計(jì)算和補(bǔ)償來選取適應(yīng)度最好的錨框,從而產(chǎn)生最后的預(yù)測框[12]。圖片自適應(yīng)縮放通過獲取較小的放縮系數(shù)減少圖片放縮后增添的黑邊,在推理時(shí)減少信息冗余,大幅減少計(jì)算量以及提高檢測的速度[13]。
YOLOv7對Mosaic數(shù)據(jù)增強(qiáng)方法進(jìn)行了優(yōu)化。傳統(tǒng)的Mosaic方法會選取4張圖片進(jìn)行增強(qiáng),而YOLOv7則會根據(jù)函數(shù)的隨機(jī)生成值與超參數(shù)值進(jìn)行比較,當(dāng)隨機(jī)值過小時(shí)會關(guān)閉Mosaic數(shù)據(jù)增強(qiáng)功能,當(dāng)隨機(jī)值適中時(shí)會抽取4張圖片進(jìn)行增強(qiáng),而隨機(jī)值過大時(shí)則會選取9張圖片進(jìn)行增強(qiáng),從而更加靈活地增加了數(shù)據(jù)的多樣性。
主干網(wǎng)絡(luò)Backbone由CBS模塊、ELAN模塊和MPC-B模塊組成。其中CBS模塊包含了卷積(Conv)、批正則化層(BN)和SiLU激活函數(shù)這三部分。MPC-B模塊由1個(gè)池化層和3個(gè)CBS組成,作用是下采樣,同時(shí)通過卷積和池化層的結(jié)合可以獲取局部小區(qū)域所有值的信息,避免了池化層只獲取最大值的弊端。ELAN模塊由多個(gè)CBS組成,是一個(gè)高效聚合的網(wǎng)絡(luò)結(jié)構(gòu),刪除了1×1的卷積,提高了GPU計(jì)算效率,大幅降低了訪問內(nèi)存的消耗,并采用了梯度分割的思想,在卷積網(wǎng)絡(luò)的輸出和輸入層直接添加了較短的連接,使得梯度流在不同的網(wǎng)絡(luò)結(jié)構(gòu)中傳播,解決了輸入以及梯度信息的過度膨脹,同時(shí)能控制最短和最長的梯度路徑,使得網(wǎng)絡(luò)能提取更多的特征,使訓(xùn)練更加高效和精確。
Head層主要由SPPCSPC模塊、ELAN-H模塊、MPC-N模塊、UPSample模塊和RepConv模塊組成。SPPCSPC是一種空間金字塔池化改進(jìn)模塊[14],內(nèi)部由多個(gè)CBS模塊和池化層組成,通過最大池化來得到不同的感受野,在使得算法能適應(yīng)不同分辨率的圖片的同時(shí),能防止圖像在剪裁和放縮過程中出發(fā)生失真,還能避免卷積對圖像的特征重復(fù)提取,降低計(jì)算量,加速預(yù)選框的生成。ELAN-H模塊與ELAN模塊在功能和結(jié)構(gòu)上高度類似,區(qū)別于ELAN模塊在第二條分支將3個(gè)輸出進(jìn)行相加,ELAN-H則將5個(gè)CBS的結(jié)果取和。MPC-N模塊則是在MPC-B模塊的基礎(chǔ)上增加了與前向輸出層的鏈接。UPSample模塊的作用是上采樣,采用最近鄰插值的方法[15]能減少網(wǎng)絡(luò)的計(jì)算量。RepConv模塊是一個(gè)結(jié)構(gòu)重參數(shù)化模塊,能將訓(xùn)練中結(jié)構(gòu)的改變轉(zhuǎn)變?yōu)橥评磉^程時(shí)參數(shù)的變化,將結(jié)構(gòu)的等價(jià)替換轉(zhuǎn)變?yōu)閰?shù)的等價(jià)替換,從而達(dá)到提高性能、節(jié)省空間的目的。
最后的預(yù)測端包括了損失函數(shù)計(jì)算以及邊界框預(yù)測??傮w損失函數(shù)由定位損失、目標(biāo)置信度損失和分類損失3部分組成,其中目標(biāo)置信度和分類損失采用了BCEWithLogitsLoss算法,坐標(biāo)損失采用CIoU算法。
除了網(wǎng)絡(luò)結(jié)構(gòu)的深度、寬度以及網(wǎng)絡(luò)的基數(shù)這3個(gè)重要因素外,注意力機(jī)制也能提高卷積網(wǎng)絡(luò)的性能[16]。注意力機(jī)制的添加能幫助卷積神經(jīng)網(wǎng)絡(luò)更重視目標(biāo)重要的特征以及忽略不必要的特征。卷積注意力機(jī)制(CBAM)結(jié)構(gòu)如圖2所示。
圖2 卷積注意力結(jié)構(gòu)圖Fig.2 Convolutional attention structure diagram
卷積運(yùn)算基于通道和空間兩種信息來綜合提取信息特征。卷積注意力機(jī)制(CBAM)從這兩個(gè)方面入手,融合了通道注意模塊(CAM)和空間注意模塊(SAM)來提高卷積神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)能力。
通道注意力Mc來關(guān)注特征的通道信息,從而確定圖像中由主要特征的目標(biāo)及通道。通道注意力Mc的計(jì)算如公式(1)所示:
式中:σ為sigmoid函數(shù),W0∈RC/r×C,W1∈RC×C/r,當(dāng)σ在W0前時(shí)為ReLU激活函數(shù)??臻g注意模塊(SAM)也使用了平均池化(AP)和最大池化(MP)的方法,采用了特征空間的關(guān)系來產(chǎn)生空間注意力Ms從而確定空間內(nèi)包含主要特征信息的位置。Ms的計(jì)算如公式(2)所示。式中σ為sigmoid函數(shù),f7×7是大小為7的卷積核。
近幾年來,Transformer[17]網(wǎng)絡(luò)以其模態(tài)融合能力和全局特性被大量研究和應(yīng)用,但是因其計(jì)算效率低下,局部信息獲取的能力較弱且頂層梯度會被歸一化部分阻斷等問題,使Transformer的應(yīng)用不如卷積神經(jīng)網(wǎng)絡(luò)廣泛。ConvNeXt在ResNet50卷積網(wǎng)絡(luò)的基礎(chǔ)上引入了Transformer的優(yōu)點(diǎn),在保留卷積網(wǎng)絡(luò)結(jié)構(gòu)簡潔的同時(shí)提高了性能[18]。ResNet50網(wǎng)絡(luò)使用的卷積核尺寸為3,而ConvNeXt借鑒了Transformer將卷積核尺寸上調(diào)為7,同時(shí)將ResNet50中常用的ReLU激活函數(shù)替換為Transformer網(wǎng)絡(luò)中常用的GeLU激活函數(shù),并從Transformer網(wǎng)絡(luò)中獲得啟發(fā),減少了激活函數(shù)和正則化函數(shù)的使用,從而減少了計(jì)算量。本文通過自身數(shù)據(jù)的特點(diǎn)對ConvNeXt進(jìn)行改進(jìn),將正則化函數(shù)中的層正則化(Layer Normalization)替換成批正則化(Batch Normalization)。進(jìn)一步提高了模型的魯棒性。改進(jìn)后的ConvNeXt的結(jié)構(gòu)如圖3所示。
圖3 ConvNeXt改進(jìn)結(jié)構(gòu)圖Fig.3 Improved ConvNeXt structure diagram
空間金字塔池化的功能主要是使圖像可以以任意大小和像素寬高比輸入,其輸入端可以接納任意大小的圖片[19]。本文對原有的SPPCSPC結(jié)構(gòu)進(jìn)行改進(jìn),將原有的3個(gè)并行的池化層添加上串行結(jié)構(gòu),在不改變原有結(jié)構(gòu)感受野的情況下,提升檢測速度同時(shí)能幫助網(wǎng)絡(luò)收斂和抑制過擬合。改進(jìn)前后的結(jié)構(gòu)如圖4所示。具體實(shí)現(xiàn)過程為:
圖4 空間金字塔池化結(jié)構(gòu)改進(jìn)圖Fig.4 Diagram of improved space pyramid pool structure
(1)對Backbone主干網(wǎng)絡(luò)中ELAN-H模塊的特征輸出進(jìn)行CBS卷積操作,即分別經(jīng)過卷積操作、批正則化和SiLU激活函數(shù)處理。
(2)對第一步中進(jìn)行過一次CBS卷積操作的特征再進(jìn)行兩次CBS卷積操作,并在每個(gè)卷積操作后進(jìn)行一次最大池化處理,隨后將3次最大池化后的特征進(jìn)行串并行連接,并進(jìn)行特征層融合。
(3)將第二步中的結(jié)果經(jīng)過兩次CBS卷積處理后與第一步中的結(jié)果融合,再最后進(jìn)行一次CBS處理,即可得到最終輸出特征層。
本文的算法在Pycharm集成軟件中實(shí)現(xiàn),采用的編程語言為Python3.9,使用Pytorch 1.12.1作為深度學(xué)習(xí)框架,并使用了CUDA11.3硬件加速工具。實(shí)驗(yàn)平臺使用了NVIDIA RTX3080 GPU,Intel(R)Core(TM)i7-12700KF @ 3.60 GHz處理器,操作系統(tǒng)為Win10,設(shè)備內(nèi)存為32.0 GB。
由于目前網(wǎng)絡(luò)上公開的口罩佩戴情況數(shù)據(jù)集較少,而且很少有不正確佩戴口罩的數(shù)據(jù)集,因此本文通過在互聯(lián)網(wǎng)查找和組織同學(xué)拍攝共計(jì)9 000余張圖片,采用LabelImg軟件自行標(biāo)注制作了口罩佩戴數(shù)據(jù)集。數(shù)據(jù)集包括了各種不同的場景,其中有不佩戴口罩、正確佩戴口罩和錯(cuò)誤佩戴口罩3種情況,包含了正臉、左側(cè)臉、右側(cè)臉3種角度及不同的背景、光線和遮擋等情形,如圖5所示。
圖5 數(shù)據(jù)集圖片示例Fig.5 Example of dataset images
數(shù)據(jù)分類包括沒有佩戴口罩、正確佩戴口罩和不正確佩戴口罩3種,并將訓(xùn)練集、測試集以及驗(yàn)證集按照8∶1∶1的比例進(jìn)行分割,訓(xùn)練批次為16,學(xué)習(xí)率0.005,模型迭代150次。
表1展示了數(shù)據(jù)集中各類情況的數(shù)量。
表1 數(shù)據(jù)集中的目標(biāo)分類及數(shù)量Tab.1 Classification and number of targets in the data set
本文采用精度(P)、召回率(R)、均值平均精度(mAP)作為評價(jià)指標(biāo)檢驗(yàn)?zāi)P偷男Ч>群驼倩芈实谋磉_(dá)式為:
以本文檢測中沒有佩戴口罩類別No-mask為例,TP為訓(xùn)練完成的模型將沒有佩戴口罩的圖片目標(biāo)檢測為No-mask類別的數(shù)量,F(xiàn)P為模型將正確佩戴口罩以及錯(cuò)誤佩戴口罩的圖片目標(biāo)檢測為No-mask類別的數(shù)量,F(xiàn)N為模型將沒有佩戴口罩的圖片目標(biāo)檢測為正確佩戴口罩(Wearing correctly)和不正確佩戴口罩(Wearing incorrectly)類別的數(shù)量。精度(P)描述了模型對該類別分類的精確情況,召回率(R)描述了模型對該分類的漏檢情況,平均精度(AP)是P-R曲線與橫縱坐標(biāo)正半軸所圍成的面積,從精度(P)和召回率(R)兩個(gè)方面評估模型在該類別上的檢測效果。均值平均精度(mAP)是模型中所有分類的平均精度(AP)的均值,能有效評估該模型對所有分類的檢測情況。平均精度(AP)和均值平均精度(mAP)的計(jì)算公式如式(5)和式(6)所示:
為了驗(yàn)證改進(jìn)后的算法對口罩佩戴檢測的效果,本文采用了兩組對照實(shí)驗(yàn),第一組將改進(jìn)后的算法模型與和原始的YOLOv7算法以及不同改進(jìn)部分的算法模型進(jìn)行對照,第二組將改進(jìn)后的算法與Faster-RCNN算法進(jìn)行比較。
4.4.1 損失函數(shù)收斂對比
改進(jìn)前后的YOLOv7 在訓(xùn)練過程中驗(yàn)證集的損失函數(shù)變化如圖6所示,圖中曲線A為原始YOLOv7損失函數(shù),曲線B為改進(jìn)后的損失函數(shù)。損失函數(shù)曲線在初始階段下降較快且波動(dòng)很大。隨著訓(xùn)練輪數(shù)的增加,在訓(xùn)練50個(gè)Epoch之后,波動(dòng)起伏開始變小,損失函數(shù)逐漸降低,曲線趨于平穩(wěn)。在訓(xùn)練約100個(gè)Epoch時(shí),損失函數(shù)逐漸穩(wěn)定,模型逐漸收斂。由圖6可見改進(jìn)后的算法損失函數(shù)更低且收斂更快。
圖6 損失函數(shù)對比Fig.6 Example of dataset images
4.4.2 改進(jìn)方法對模型性能的影響
本文通過對不同改進(jìn)方法的檢測指標(biāo)進(jìn)行對照實(shí)驗(yàn),分析不同改進(jìn)部分對網(wǎng)絡(luò)性能提升情況,表2為不同改進(jìn)方法對模型性能的改進(jìn)結(jié)果。由表2中數(shù)據(jù)對比可見,YOLOv7-A在Head層引入卷積注意力(CABM)使得原始模型的精度提升3.2%,mAP值提升0.7%。YOLOv7-B在YOLOv7-A的基礎(chǔ)上在Backbone層中引入了改進(jìn)的ConNeXt網(wǎng)絡(luò)結(jié)構(gòu),使得原始模型的精度提升2.7%,mAP值提升1.7%。YOLOv7-C在YOLOv7-B的基礎(chǔ)上在Head層中對SPPCSPC進(jìn)行優(yōu)化,使得原始模型的損失函數(shù)顯著下降,精度提升2.2%,mAP值提升3.6%。
表2 不同改進(jìn)方法的性能指標(biāo)Tab.2 Performance index of different improvement methods
4.4.3 改進(jìn)前后與主流檢測模型的性能對比
模型訓(xùn)練完成后,采用多次檢測抽樣的統(tǒng)計(jì)方法,將驗(yàn)證集中的數(shù)據(jù)進(jìn)行測試,并與改進(jìn)前的YOLOv7以及Fast-RCNN進(jìn)行對比,驗(yàn)證集中包含了單人、多人及側(cè)面等不同情況,部分對比結(jié)果如圖7所示。由圖7(a)、圖7(b)和圖7(c)對比可以看出,從側(cè)面角度檢測時(shí),改進(jìn)后的算法置信度比Fast-RCNN和原始YOLOv7算法均有提升;由圖7(d)、圖7(e)和圖7(f)對比可以看出,目標(biāo)錯(cuò)誤佩戴口罩時(shí),改進(jìn)后的算法置信度比Fast-RCNN和原始YOLOv7算法均有提升;由正面和側(cè)面對比可以得出,側(cè)面的識別置信度要低于正面的識別置信度;由圖7(g)、圖7(h)和圖7(i)對比可以看出,在3種類別中,改進(jìn)后的算法的置信度比其他兩種算法高,同時(shí)圖7(g)中Fast-RCNN算法發(fā)生錯(cuò)檢情況且3種類別的置信度均較低,圖7(h)中改進(jìn)前的算法將錯(cuò)誤佩戴口罩的情況誤檢為正確佩戴口罩,而圖7(f)中改進(jìn)后算法則進(jìn)行了正確的分類。從3種算法的檢測情況對比可以得出,改進(jìn)后的YOLOv7算法檢測結(jié)果最好,尤其在側(cè)面和多人的檢測情況下,效果提升更多。
圖7 Fast-RCNN、YOLOv7與改進(jìn)YOLOv7的檢測結(jié)果對比。Fig.7 Comparison of Fast-RCNN, YOLOv7 and improved YOLOv7 detection results.
將本文算法與其他的檢測算法的檢測指標(biāo)進(jìn)行對比,結(jié)果如表3所示。改進(jìn)后的YOLOv7的mAP值比其他算法有所提升,比Fast-RCNN高21.4%,比YOLOv7_A、YOLOv7_B以及原始YOLOv7分別高1.9%、2.9%、3.6%。相較于原始YOLOv7,各個(gè)類別的檢測精度均有提升,沒佩戴口罩類別的AP值提升6.8%,正確佩戴口罩類別的AP值提升2.1%,不正確佩戴口罩類別的AP值提升1.7%。通過數(shù)據(jù)對比可以得出結(jié)論,改進(jìn)后的YOLOv7的檢測指標(biāo)要優(yōu)于其他算法。
表3 不同檢測算法的性能指標(biāo)對比Tab.3 Comparison of performance indicators of different detection algorithms
針對目前部分居民口罩佩戴不正確等問題,本文提出了一種改進(jìn)YOLOv7的口罩佩戴檢測算法。通過自行拍攝和網(wǎng)上搜集,豐富了口罩佩戴錯(cuò)誤類別以及側(cè)面遮擋等情況的數(shù)據(jù)集。通過在Head層引入卷積注意力機(jī)制,加強(qiáng)了網(wǎng)絡(luò)結(jié)構(gòu)在空間和通道上對有效特征的重視,提高了網(wǎng)絡(luò)對口罩佩戴目標(biāo)的學(xué)習(xí)能力。在Backbone層引入ConvNeXt網(wǎng)絡(luò)結(jié)構(gòu),提高了網(wǎng)絡(luò)結(jié)構(gòu)的性能和魯棒性。對Head層SPPCSPC模塊進(jìn)行優(yōu)化,有效減少了損失函數(shù),將平均精度從90.2%提高到93.8%。同時(shí)各個(gè)類別的檢測精度均有提升,沒佩戴口罩、正確佩戴口罩、不正確佩戴口罩類別的精度提升分別提升6.8%、2.1%、1.7%;并且減少了漏檢和錯(cuò)檢的情況,提高了系統(tǒng)的魯棒性。