彭 成,張喬虹,唐朝暉,桂衛(wèi)華
(1.湖南工業(yè)大學(xué) 計算機(jī)學(xué)院,湖南 株洲 412007;2.中南大學(xué) 自動化學(xué)院,長沙 410083)
近日,全球多國面臨新一輪疫情沖擊,且病株變異等情況也為疫情防控增添了更多的不確定風(fēng)險,在疫情防控常態(tài)化的情況下,佩戴口罩是極為有效且經(jīng)濟(jì)的防控手段,因此,公共場合的口罩佩戴檢測成為一項重要工作。在日常生活中,面對經(jīng)呼吸道傳播的傳染性疾病或工廠生產(chǎn)過程中產(chǎn)生的有害顆粒物,佩戴口罩也可保護(hù)生命安全,減少危害源的接觸,提高安全衛(wèi)生等級。以人工的方式對活動人員進(jìn)行監(jiān)督檢測耗時耗力,且近距離接觸待檢測人員存在一定的安全風(fēng)險,因此,構(gòu)建自動監(jiān)控系統(tǒng)檢測活動人員的口罩佩戴情況,對日常防護(hù)工作具有重要意義。
人臉口罩佩戴檢測屬于計算機(jī)視覺中的物體檢測范疇,在過去的二十年中,物體檢測的發(fā)展大致可分為2 個階段,即2014 年以前的傳統(tǒng)目標(biāo)檢測以及2014 年以后的基于深度學(xué)習(xí)的目標(biāo)檢測[1]。隨著GPU 和大數(shù)據(jù)的發(fā)展,傳統(tǒng)機(jī)器學(xué)習(xí)多階段才能實現(xiàn)的功能可由深度學(xué)習(xí)串聯(lián)完成,輸入大量圖像、語音和文本信息即可直接進(jìn)行端到端的訓(xùn)練[2-3],因此,深度學(xué)習(xí)在物體檢測、圖像分割等領(lǐng)域展現(xiàn)出遠(yuǎn)超傳統(tǒng)算法的能力。
為了使人臉口罩佩戴監(jiān)督功能更易獲取,口罩檢測網(wǎng)絡(luò)模型的輕量化也是一個必須要考慮的問題。當(dāng)前經(jīng)典的物體檢測算法大多依賴卷積網(wǎng)絡(luò)[4-6]進(jìn)行特征提取,一系列優(yōu)秀的基礎(chǔ)網(wǎng)絡(luò)(如VGGNet[7]、ResNet[8]、DenseNet[9]等)被提出,但是這些網(wǎng)絡(luò)計算量往往較大,很難達(dá)到實時運(yùn)行的工業(yè)應(yīng)用要求,于是輕量化網(wǎng)絡(luò)應(yīng)運(yùn)而生。SqueezeNet[10]從網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化出發(fā),先壓縮再擴(kuò)展,使用常見的模型壓縮技術(shù),在性能與AlexNet[11]相近的基礎(chǔ)上,模型參數(shù)僅為AlexNet 的1/50。但該網(wǎng)絡(luò)仍然采用標(biāo)準(zhǔn)的卷積計算方式,之后的MobileNet[12]采用更加有效的深度可分離卷積,提高了網(wǎng)絡(luò)速度并進(jìn)一步促進(jìn)了卷積神經(jīng)網(wǎng)絡(luò)在移動端的應(yīng)用,同時通過較少的計算量獲得了較高的精度。但是在理論上,MobileNet的計算量仍然可以繼續(xù)降低。ShuffleNet[13]利用組卷積和通道混洗的操作有效降低了點(diǎn)卷積的計算量,實現(xiàn)了更為優(yōu)越的性能。隨著移動設(shè)備的進(jìn)步和應(yīng)用場景多樣化的發(fā)展,輕量化網(wǎng)絡(luò)展現(xiàn)出了更高的工程價值[14]。
針對人臉口罩佩戴檢測的精度和速度問題,多位學(xué)者進(jìn)行了各種嘗試。文獻(xiàn)[15]提出一種基于RetinaNet 的人臉口罩佩戴檢測方法,其通過遷移學(xué)習(xí)并利用預(yù)訓(xùn)練的ResNet 模型幫助新模型訓(xùn)練,在驗證集上的AP 值達(dá)到86.45%。文獻(xiàn)[16]基于YOLOv3 網(wǎng)絡(luò)模型,引入改進(jìn)的空間金字塔池化結(jié)構(gòu)并優(yōu)化多尺度預(yù)測網(wǎng)絡(luò),同時替換損失函數(shù),相較YOLOv3,其準(zhǔn)確率提升14.9%。文獻(xiàn)[17]基于YOLOv5 網(wǎng)絡(luò)模型,在原數(shù)據(jù)集的基礎(chǔ)上進(jìn)行擴(kuò)充,采用翻轉(zhuǎn)和旋轉(zhuǎn)2 種方式得到30 000 張圖片用于訓(xùn)練,最終準(zhǔn)確率達(dá)到92.4%。
本文提出一種改進(jìn)的口罩佩戴檢測方法。為在模型精度和速度間取得平衡,設(shè)計更為輕量化的改進(jìn)YOLOv5 模型,在幾乎不降低模型精度的情況下實現(xiàn)模型壓縮并加快推理速度,同時降低對硬件環(huán)境的依賴性。針對實際應(yīng)用場景中由距離攝像頭遠(yuǎn)近不同而導(dǎo)致的一張圖片中存在物體尺度面積不平衡的問題,使用YOLOv5 分別進(jìn)行20×20、40×40、80×80 的多尺度檢測,從而提升模型對于小物體的檢測性能。
YOLO(You Only Look Once)是一個高性能的通用目標(biāo)檢測模型,YOLOv1[18]使用一階結(jié)構(gòu)完成了分類與目標(biāo)定位2個任務(wù),隨后的YOLOv2[19]與YOLOv3[20]在速度和精度上取得提升,進(jìn)一步促進(jìn)了物體檢測在工業(yè)界的應(yīng)用,YOLOv4[21]則實現(xiàn)了在一塊普通的GPU(1080Ti)上完成模型訓(xùn)練。從YOLOv1至今,YOLO 系列已經(jīng)發(fā)展至YOLOv5,相較YOLOv4,YOLOv5 更加靈活,它提供了4 個大小的版本,分別為YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,4 個版本模型大小與精度依次遞增,根據(jù)Bottleneck 數(shù)目區(qū)分,采用了類似EfficienctNet[22]的channel和layer 控制因子來實現(xiàn)版本的變化,在實際應(yīng)用中,可以根據(jù)具體場景的不同來選取合適大小的模型。本文主要實現(xiàn)模型壓縮及加速,使其更易應(yīng)用于資源有限的嵌入式設(shè)備,因此,選擇YOLOv5s 系列作為基準(zhǔn)模型。
YOLOv5 也有著版本迭代更新,目前已更新至v5.0,其中,v3.0、v4.0、v5.0 各有優(yōu)勢,v4.0 與v5.0 中的YOLOv5-P5模型結(jié)構(gòu)相同,v5.0新提出YOLOv5-P6模型,較已有版本,其添加了1個輸出層,共計P3、P4、P5和P6這4個輸出層,對應(yīng)下采樣幅度分別為8、16、32和64,新增加的檢驗層有利于檢測較大的物體,可以通過更高分辨率的訓(xùn)練獲得更高的精度。此外,YOLOv5-P5模型使用PyTorch1.7中新支持的SiLU()激活函數(shù)替換了先前版本中使用的LeakyReLU()和HardSwish()激活函數(shù),使得網(wǎng)絡(luò)中任何一個模塊都只使用SiLU 激活函數(shù),并刪減了先前版本中BottleneckCSP 的部分Conv 模塊。先前版本的BottleneckCSP以及YOLOv5-P5中的改進(jìn)BottleneckCSP 對比如圖1 所示,改進(jìn)BottleneckCSP也稱為C3模塊。
圖1 BottleneckCSP 和C3 模 塊Fig.1 BottleneckCSP and C3 module
可以看到,C3 模塊由于消除了每個瓶頸結(jié)構(gòu)中的一個卷積,導(dǎo)致新版YOLOv5-P5 的尺寸都稍小,能夠得到更小的模型,且推理速度也有少量提升,對于較大的YOLOv5x,推理時間由6.9 ms 降低至6 ms,即模型越大,從這個變化中受益越大。表1 所示為YOLOv5s各版本的性能比較,可以看到,雖然YOLOv5s-P5 精度較YOLOv5s-3.0 有0.8%的下降,但是速度和參數(shù)量都更為優(yōu)秀,YOLOv5s-P6 雖然精度最高,但是無論是高分辨率的輸入還是增加的檢測頭,都為設(shè)備資源分配增加了更大的負(fù)擔(dān)。綜合考量,本文最終選擇YOLOv5s-P5作為基準(zhǔn)實驗?zāi)P停云錇閎aseline 進(jìn)行模型優(yōu)化。本文中后續(xù)出現(xiàn)的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 模塊實現(xiàn)32 倍下采樣,其中,F(xiàn)ocus 模塊將輸入數(shù)據(jù)切分為4 份,每份數(shù)據(jù)都是相當(dāng)于2 倍下采樣得到的,然后在channel 維度進(jìn)行拼接,最后再進(jìn)行卷積操作,F(xiàn)ocus 模塊減少了卷積的成本,以reshape tensor 實現(xiàn)下采樣并增加channel 維度,可以減少FLOPs 并提升速度。
C3 模塊參照CSPNet 結(jié)構(gòu)[23],將一個階段中基礎(chǔ)層的特征圖分成2 個部分,拆分和合并策略被跨階段使用,較好地降低了信息集成過程中重復(fù)的概率,重復(fù)梯度信息的減少,使得YOLOv5 網(wǎng)絡(luò)能夠有更好的學(xué)習(xí)能力,推理計算也有一定的減少。YOLOv4 中也使用了CSP 模塊,但YOLOv5 中做出創(chuàng)新,以有無殘差邊為區(qū)分標(biāo)準(zhǔn)設(shè)計2 種CSP 模塊,分別為CSP-False 和CSP-True,以shortcut 的取值False 或True 來控制改變。
加入SPP 模塊[24]至CSP 模塊之后,使用組合的3 個多尺度最大池化層,在幾乎沒有速度損失的情況下大幅提升了感受野,提取出了最重要的特征,同時也有效降低了直接將圖片進(jìn)行伸縮而導(dǎo)致的圖片信息丟失的可能性,進(jìn)一步提升了模型精度。
在Head 部分,通過將高層特征信息上采樣的方式與低層特征信息進(jìn)行傳遞融合,實現(xiàn)了自頂向下的信息流動,再通過步長為2 的卷積進(jìn)行處理,將低層特征與高層特征作Concat 操作,使低層分辨率高的特征容易傳到上層,從而實現(xiàn)了PANet[25]操作,更好地將低層特征與高層特征進(jìn)行優(yōu)勢互補(bǔ),有效解決了多尺度問題。
YOLOv5 網(wǎng)絡(luò)結(jié)構(gòu)如圖2 所示。
圖2 YOLOv5 網(wǎng)絡(luò)結(jié)構(gòu)Fig.2 Network structure of YOLOv5
GhostNet 提出了一個創(chuàng)新性的模塊Ghost,其通過更少的參數(shù)量和計算量生成了更多的特征圖[26]。Ghost 的實現(xiàn)分為2 個部分,一個是普通卷積,另一個是具有更少參數(shù)量和計算量的線性操作。先通過有限的普通卷積得到一部分特征圖,再將所得的特征圖通過線性操作生成更多的特征圖,最后將2 組特征圖在指定維度進(jìn)行拼接。Ghost 的操作原理如圖3 所示。
圖3 普通卷積與Ghost 模塊的對比Fig.3 Comparison between ordinary convolution and Ghost module
普通卷積層的運(yùn)算可以表示為:
其中:X∈Rc×h×w代表卷積輸入,c指輸 入channel 數(shù)量,h及w分別指輸入特征圖的高度和寬度;表示輸出n個高度和寬度分別為h′和w′的特征圖;ω∈Rc×k×k×n代表進(jìn)行卷積運(yùn)算的是c×n個大小為k×k的卷積核;b是偏差項,逐點(diǎn)加至輸出特征圖的每個小單元。分析可得式(1)運(yùn)算的FLOPs多達(dá)h′×w′×n×c×k×k。而Ghost 結(jié)構(gòu)進(jìn)行少量的普通卷積運(yùn)算,采用線性運(yùn)算高效減少特征冗余,以更少的計算量得到同樣多的特征圖。由圖3(b)可以看出,Ghost 模塊的運(yùn)算可以表示為:
出于提高處理速度的目的,考慮到設(shè)備部署時的實用性,相較使用具有不同形狀和參數(shù)的線性運(yùn)算,本文全部使用3×3 或5×5 的相同線性運(yùn)算。設(shè)線性運(yùn)算內(nèi)核大小為d×d,則可以將Ghost 模塊與普通卷積的計算量進(jìn)行比較,得出Ghost 模塊相對普通卷積的提升程度,如下所示:
這里的k×k與d×d大小相同,且s?c,因此,最終化簡可以得到普通卷積的計算量近似為Ghost 模塊的s倍,參數(shù)量計算類似,最終也可以近似化簡為s。從理論上可以定量地證明Ghost模塊的優(yōu)越性,因此,以Ghost模塊為基礎(chǔ),進(jìn)而設(shè)計GhostBottleneck及GhostBottleneckCSP模塊,具體結(jié)構(gòu)如圖4所示。
圖4 GhostBottleneck 和GhostBottleneckCSP 模塊結(jié)構(gòu)Fig.4 GhostBottleneck and GhostBottleneckCSP module structure
圖4中的c1與c2分別指輸入和輸出特征圖通道數(shù)。在本文中,先使用圖4(a)所示的1×1 普通卷積將通道數(shù)降至輸出通道數(shù)的1?2,再根據(jù)得到的特征圖進(jìn)行大小為5×5 的深度卷積,最后將2 組特征拼接。圖4(b)中第1 個Ghost module 先將輸出通道數(shù)降為目標(biāo)輸出通道數(shù)的1?2,再由第2 個Ghost module 將通道數(shù)恢復(fù)至目標(biāo)輸出通道數(shù),并與殘差邊傳來的輸入特征圖逐點(diǎn)相加進(jìn)行特征融合。如圖4(c)所示,使用GhostBottleneck 替換掉YOLOv5 中所有的Bottleneck模塊,與C3 模塊形成新的GhostBottleneckCSP,原Bottleneck 由1×1 和3×3 標(biāo)準(zhǔn)卷積組成,新結(jié)構(gòu)通過替換掉原來Bottleneck 中較多的3×3 標(biāo)準(zhǔn)卷積,減少了計算量并壓縮了模型。
當(dāng)前優(yōu)秀的輕量級網(wǎng)絡(luò)絕大部分都使用組卷積或深度可分離卷積來降低卷積操作所產(chǎn)生的計算量,但是,為了實現(xiàn)通道間的特征融合,這些網(wǎng)絡(luò)中使用的1×1 卷積在整個過程中占用較多的計算量,為了緩解這一問題,ShuffleNet[10]提出了通道混洗的概念。在進(jìn)行組卷積后,使用通道混洗就可以實現(xiàn)組間信息的流通,以更加經(jīng)濟(jì)的方式增強(qiáng)特征的表達(dá)能力。通道混洗可以通過張量的常規(guī)操作來實現(xiàn),具體過程如圖5 所示。
圖5 通道混洗的實現(xiàn)過程Fig.5 Realization process of channel shuffle
圖5 中的數(shù)字是輸入通道的編號,使用Reshape操作將通道擴(kuò)展為兩維,并通過Transpose 對擴(kuò)展出的2 個維度進(jìn)行置換,通過這個操作能夠在不增加計算量的情況下使組卷積通道之間的信息完成融合,最后Flatten 操作將2 個維度復(fù)原為原來的初始維度,完成通道混洗?;谝陨显?,可以認(rèn)為一個逐點(diǎn)卷積可以使用一個1×1 組卷積和1 個通道混洗操作組合代替,組卷積與標(biāo)準(zhǔn)卷積相比參數(shù)量與計算量有較大減少,且組卷積有類似正則的作用,可以降低過擬合發(fā)生的概率。出于這些優(yōu)點(diǎn),本文對YOLOv5 中6 個大小為3×3、2 個大小為1×1 的Conv 模塊中的普通卷積操作進(jìn)行改進(jìn),將原來的普通卷積更換為組卷積和通道混洗模塊,理論上可以實現(xiàn)模型的進(jìn)一步壓縮。
YOLOv5 具有較好的工程實用性,選擇其作為口罩檢測模型的基準(zhǔn)網(wǎng)絡(luò)具有可行性。但是,從目前的研究和應(yīng)用情況來看,YOLOv5 仍可以進(jìn)行進(jìn)一步改進(jìn)。結(jié)合1.2 節(jié)及1.3 節(jié)的內(nèi)容,得到本文改進(jìn)后的YOLOv5 網(wǎng)絡(luò),其整體結(jié)構(gòu)如表2 所示。
表2 改進(jìn)的YOLOv5 網(wǎng)絡(luò)整體結(jié)構(gòu)Table 2 Overall structure of improved YOLOv5 network
在表2 中:第2 列的-1 是指輸入來自上一層輸出;最后1列的值依次對應(yīng)該模塊的輸入通道數(shù)、輸出通道數(shù)、卷積核大小、步長信息;第4列GhostBottleneckCSPn模塊中的n代表該模塊內(nèi)GhostBottleneck 的數(shù)量。經(jīng)過計算,改進(jìn)YOLOv5 模型總計367 層,2 419 191 個參數(shù),計算量為5.5GFLOPs。初始YOLOv5 模型共計7 066 239 個參數(shù),計算量為16.4GFLOPs。兩者比較,優(yōu)化后的模型參數(shù)量減少為原來模型的34.24%,計算量減少為原來模型的33.54%,實現(xiàn)了較大程度的模型壓縮。
模型損失函數(shù)由分類損失(classification loss)、定位損失(localization loss)、目標(biāo)置信度損失(confidence loss)組成。YOLOv5 使用二元交叉熵?fù)p失函數(shù)計算類別概率和目標(biāo)置信度得分的損失,通過實驗,本文在GIOU Loss[27]和CIOU Loss[28]之間最終選定效果略好的CIOU Loss 作為bounding box 回歸的損失函數(shù)。CIOU Loss 計算公式如下:
2.3.1 模型訓(xùn)練算法
本文模型訓(xùn)練算法實現(xiàn)過程描述如算法1所示。
算法1模型訓(xùn)練算法
輸入人臉口罩?jǐn)?shù)據(jù)集圖片及標(biāo)記文件
輸出本次訓(xùn)練中性能最佳的檢測模型
初始化參數(shù)訓(xùn)練epoch 數(shù),學(xué)習(xí)率,批次大小,輸入圖片大小,網(wǎng)絡(luò)模型配置yaml 文件,標(biāo)簽與anchor 的IoU 閾值,損失系數(shù),數(shù)據(jù)增強(qiáng)系數(shù),標(biāo)簽與anchor 的長寬比閾值
圖片預(yù)處理調(diào)整圖片亮度、對比度、飽和度并進(jìn)行Mosaic 處理
步驟1準(zhǔn)備數(shù)據(jù),制作數(shù)據(jù)集并劃分訓(xùn)練集和驗證集。
步驟2加載數(shù)據(jù)配置信息及初始化參數(shù),輸入數(shù)據(jù)并對其進(jìn)行預(yù)處理。
步驟3加載網(wǎng)絡(luò)模型,并對輸入圖片進(jìn)行特征提取及物體定位分類。
步驟4隨著迭代次數(shù)的增加,使用SGD 對網(wǎng)絡(luò)中各組參數(shù)進(jìn)行更新優(yōu)化。
步驟5若當(dāng)前epoch 不是最后一輪,則在驗證集上計算當(dāng)前模型的mAP,若計算得到的模型性能更佳,則更新存儲的最佳模型。
步驟6在訓(xùn)練完所設(shè)置的迭代數(shù)后,獲得訓(xùn)練好的最佳性能模型和最近一次訓(xùn)練的模型。
步驟7輸出性能最佳的模型。
2.3.2 整體實現(xiàn)流程
本文方法整體實現(xiàn)流程如圖6 所示:首先準(zhǔn)備數(shù)據(jù),進(jìn)行人臉口罩佩戴圖片篩選及標(biāo)記,制作數(shù)據(jù)集并隨機(jī)劃分訓(xùn)練集、驗證集、測試集;接著按照算法1 進(jìn)行模型訓(xùn)練,得到性能最佳的人臉口罩佩戴檢測模型;之后對測試集數(shù)據(jù)進(jìn)行測試,并在測試圖片上呈現(xiàn)最終的識別結(jié)果,即人臉位置和口罩佩戴狀態(tài)。
圖6 本文方法整體流程Fig.6 Overall process of this method
本文實驗的機(jī)器操作系統(tǒng)版本為Ubuntu 9.3.0-10ubuntu2,CPU 型號為Intel?CoreTMi3-9100F CPU@3.60 GHz,GPU 型號為GeForce RTX 2080 Ti,顯存大小為11 GB,內(nèi)存大小為31 GB。所有模型基于PyTorch 1.8,并使用cuda 10.1 和cudnn 7.6.5 對GPU 進(jìn)行加速。
實驗使用的數(shù)據(jù)集來自AIZOO 團(tuán)隊整理的開源數(shù)據(jù)集,該數(shù)據(jù)集主要從WIDER Face 及MAFA 公開數(shù)據(jù)集中篩選得到,從中分別選擇3 894 張及4 064 張圖片,并對其進(jìn)行二次篩選及擴(kuò)充,刪除錯誤標(biāo)簽,加入部分ROBOFLOW 開放的口罩?jǐn)?shù)據(jù)集,最終得到訓(xùn)練集6 110 張,驗證集1 832 張,共計7 942 張圖片。將圖片預(yù)定義為佩戴口罩和未佩戴口罩兩類,佩戴口罩標(biāo)簽為face-mask,未佩戴口罩標(biāo)簽為face。
為了避免將捂嘴動作預(yù)測為佩戴口罩,實驗數(shù)據(jù)集中加入了嘴巴被手或衣物等其他物品捂住的數(shù)據(jù),從而有效過濾了此類干擾。數(shù)據(jù)集部分圖片如圖7 所示。
圖7 數(shù)據(jù)集部分圖片F(xiàn)ig.7 Partial pictures of dataset
通過對數(shù)據(jù)集進(jìn)行分析得到可視化結(jié)果如圖8 所示:圖8(b)中x、y指中心點(diǎn)位置,顏色越深代表該點(diǎn)位置目標(biāo)框的中心點(diǎn)越集中;圖8(c)中width、height 分別代表圖片中物體的寬、高。從圖8(b)、圖8(c)可以看出,數(shù)據(jù)集物體分布比較均勻,且中小物體占比更大,存在物體間遮擋的情況,符合日常實際應(yīng)用場景,但數(shù)據(jù)集存在輕微的類別間樣本不平衡問題,該問題將在數(shù)據(jù)預(yù)處理中得到緩解。
圖8 數(shù)據(jù)集分析結(jié)果Fig.8 Dataset analysis results
3.2.1 數(shù)據(jù)集標(biāo)記
實驗數(shù)據(jù)集為PASCAL VOC 格式,但YOLOv5所需為YOLO 格式的txt 標(biāo)記文件,具體格式為(class_id,x,y,w,h),且都是歸一化后的值,因此,需要做相應(yīng)轉(zhuǎn)換,具體運(yùn)算規(guī)則如下所示:
其中:class_id 為類別的id 編號;xmax、ymax、xmin、ymin分別指VOC 格式的xml 標(biāo)記文件中相對于圖片左上角,標(biāo)記物體所在位置的左上角坐標(biāo)及右下角坐標(biāo)的值。
3.2.2 自適應(yīng)圖片采樣
本文所用數(shù)據(jù)集存在輕微的類間不平衡問題,這也是物體檢測中的一個常見問題,模型訓(xùn)練時樣本過少的類別的參考性較小,可能會使模型主要關(guān)注樣本較多的類別,模型參數(shù)也主要根據(jù)樣本多的類別的損失進(jìn)行調(diào)整,最終導(dǎo)致針對少樣本類別的檢測精度有所下降。
為了解決上述問題,本文采用自適應(yīng)圖片采樣策略,根據(jù)物體類別的數(shù)量占比及每張圖片中各類物體的出現(xiàn)頻數(shù),生成每張圖片的采樣權(quán)重,再根據(jù)圖片的采樣權(quán)重生成采樣的索引序列,類別數(shù)量和頻數(shù)與類別權(quán)重成反比,若某張圖片頻數(shù)最高的類別的數(shù)量占比也較其他類別高,則這張圖片被采樣的概率就會降低,通過這種采樣方式可以有效緩解類間不平衡問題。
3.2.3 anchor 設(shè)置
對于目標(biāo)檢測任務(wù),設(shè)置合適的anchor直接影響模型的最終表現(xiàn)。合適的anchor 是根據(jù)數(shù)據(jù)集物體大小而確定的,利用預(yù)設(shè)值anchor,基于shape 閾值對bbox 計算可能的最優(yōu)召回率。如果召回率大于0.98,則無需優(yōu)化,直接返回;如果召回率小于0.98,則利用遺傳算法與k-means 重新設(shè)置anchor。本文模型在人臉口罩?jǐn)?shù)據(jù)集上可能的最優(yōu)召回率為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 數(shù)據(jù)增強(qiáng)
本文實驗的Mosaic 數(shù)據(jù)增強(qiáng)參考CutMix[29]:隨機(jī)選取4 張圖片并對其進(jìn)行隨機(jī)裁剪、排布和縮放,然后完成拼接,得到的效果如圖9 所示。這種方式隨機(jī)擴(kuò)充了數(shù)據(jù)集,特別是隨機(jī)縮放增加了小目標(biāo),使得網(wǎng)絡(luò)的魯棒性得到一定提升。經(jīng)過Mosaic 數(shù)據(jù)增強(qiáng)后相當(dāng)于一次性處理了4 張圖片,batch size 隱性增加,初始設(shè)置的batch size 值無需很大也可以得到一個性能較好的模型,對GPU 性能要求相對降低。
圖9 Mosaic 數(shù)據(jù)增強(qiáng)效果Fig.9 Mosaic data enhancement effect
除此之外,本文還進(jìn)行了改變亮度、對比度、飽和度等常規(guī)數(shù)據(jù)增強(qiáng)方法,與Mosaic 相結(jié)合,在一定程度上有效防止了過擬合問題,能夠?qū)崿F(xiàn)更長時間的訓(xùn)練從而獲得更優(yōu)的模型性能。
本文所有實驗中學(xué)習(xí)率均使用Warmup[30]訓(xùn)練,避免模型訓(xùn)練時初始學(xué)習(xí)率過高引起模型振蕩,以便維持模型的穩(wěn)定性。在Warmup 階段,采用一維線性插值對每次迭代的學(xué)習(xí)率進(jìn)行更新,bias 層的學(xué)習(xí)率從0.1下降到基準(zhǔn)學(xué)習(xí)率0.01,其他參數(shù)學(xué)習(xí)率從0 增加到0.01。在Warmup 階段之后,采用余弦退火算法[31]對學(xué)習(xí)率進(jìn)行更新。實驗中BN 層、權(quán)重weight 層、bais 層的學(xué)習(xí)率分別為lr0、lr1、lr2,所有實驗均訓(xùn)練300 個epoch,batch size 設(shè)為32。學(xué)習(xí)率的變化曲線如圖10所示,其中,lr0 和lr1 曲線變化相同。
圖10 學(xué)習(xí)率變化曲線Fig.10 Curve of learning rate
從mAP(0.5)、mAP(0.5∶0.95)、召回率Recall、準(zhǔn)確率Precision、平均檢測處理時間、參數(shù)量、計算量、模型大小這8 個角度對模型性能進(jìn)行衡量。上述部分評價指標(biāo)的具體計算公式如下:
其中:TP、FP、FN分別指正確檢驗框、誤檢框、漏檢框數(shù)量;AAP值為P-R 曲線面積,本文采用101 個插值點(diǎn)的計算方法;N指檢測類別總數(shù),本文為2;mAP(0.5)指IoU設(shè)為0.5 時所有類別的平均AP;mAP(0.5∶0.95)指在不同IoU 閾值下的平均mAP,IoU 取值從0.5 增加到0.95,步長為0.05。平均檢測處理時間包括網(wǎng)絡(luò)推理時間及NMS 處理所花費(fèi)的時間,模型大小指最終訓(xùn)練結(jié)束得到并保存的模型大小。
3.3.1 在人臉口罩?jǐn)?shù)據(jù)集上的實驗結(jié)果
通過消融實驗來逐步驗證網(wǎng)絡(luò)結(jié)構(gòu)改變所引起的性能變化,本節(jié)3 個實驗分別訓(xùn)練YOLOv5、Ghost-YOLOv5、Ghost-YOLOv5-Shuffle 這3 個網(wǎng)絡(luò),實驗測試結(jié)果分別如圖11、圖12、表3 所示,其中,曲線灰度依次遞增分別代表YOLOv5、Ghost-YOLOv5-Shuffle 和Ghost-YOLOv5。
表3 各模型的性能對比結(jié)果Table 3 Performance comparison results of each model
圖11 各模型在人臉口罩?jǐn)?shù)據(jù)集上的實驗結(jié)果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 模塊后,模型計算量和參數(shù)量分別壓縮為原來的63.41%和68.98%,在使用GPU 或CPU 的情況下分別有13.64%和16.37%的速度提升,并且模型大小變?yōu)樵瓉淼?9.34%,但同時,從圖11(c)中也可以看出,模型精確度有了明顯損失,且波動更為劇烈,這在驗證集的類別損失曲線中也有所體現(xiàn),所幸在訓(xùn)練后期,Ghost-YOLOv5 模型與YOLOv5 之間精確度的差值較初期有所下降,除此之外,從圖12 可知,Ghost-YOLOv5 模型最終的所有類別平均AP 較YOLOv5 僅下降0.3%。
在繼續(xù)將標(biāo)準(zhǔn)卷積替換為ShuffleConv 后,模型計算量和參數(shù)量進(jìn)一步壓縮,分別為原來的33.54%和34.24%,在使用GPU 情況下處理時間仍然保持1.9 ms不變,但CPU 速度較YOLOv5 提升了28.25%,模型大小壓縮至原來的35.77%。GPU 情況下速度沒有提升,原因是在算力足夠的GPU 平臺上,組卷積雖然降低了運(yùn)算量和參數(shù)量,但是由于內(nèi)存交換速度的限制,ShuffleConv的瓶頸并非是計算強(qiáng)度,因此,此模塊對GPU環(huán)境下的影響微乎其微,但當(dāng)在計算能力有限的CPU平臺上,計算速度便會有相當(dāng)?shù)奶嵘?,更適合部署在資源有限的嵌入式設(shè)備上。此外,Ghost-YOLOv5-Shuffle在Ghost-YOLOv5 的基礎(chǔ)上精度有所提升,從各個衡量標(biāo)準(zhǔn)來看都與YOLOv5 的檢測能力更加貼近,且從分類損失曲線來看,在一定程度上證實了組卷積的正則化效果,由圖12 可知,Ghost-YOLOv5-Shuffle 的最終mAP(0.5)為0.950,較YOLOv5 的0.951 幾乎沒有精度下降,且各類間差值都在0.003 范圍之內(nèi)。
YOLOv5 與Ghost-YOLOv5-Shuffle 實際運(yùn)行效果如圖13 所示,每個小圖中的左邊圖片為YOLOv5,右邊圖片為Ghost-YOLOv5-Shuffle。通過圖13 的實際檢測效果對比可以看出,改進(jìn)后的模型在進(jìn)行非極小物體的識別時與基準(zhǔn)模型幾乎沒有區(qū)別,面對分布極為密集的模糊小物體時,基準(zhǔn)模型比改進(jìn)模型略微精確,但改進(jìn)模型對絕大部分小物體還是能夠?qū)崿F(xiàn)正確識別。
圖13 復(fù)雜場景下的實際檢測效果Fig.13 Actual detection effect in complex scenes
3.3.2 不同網(wǎng)絡(luò)的對比實驗
為了進(jìn)一步驗證本文所提模塊及網(wǎng)絡(luò)的高效性,將其與同類輕量級網(wǎng)絡(luò)YOLOv3-tiny、YOLOv4-tiny等進(jìn)行對比,結(jié)果如表4所示。其中,實驗5、實驗6第2列括號中的數(shù)字代表模型中前3 個GhostBottleneckCSP 中GhostBottleneck的個數(shù)。從表4可以得出:
表4 不同網(wǎng)絡(luò)的性能對比Table 4 Performance comparison of different networks
1)由實驗0、實驗2、實驗4、實驗6的對比可以看出,本文模型相較YOLOv3-tiny、YOLOv4-tiny、YOLOv5-P6具有絕對優(yōu)勢,其模型大小分別僅為上述模型的30.12%、40.65%、20.9%,但mAP 明顯大于YOLOv3-tiny、YOLOv4-tiny,且與YOLOv5-P6的mAP(0.5)大小相同,即選擇本文所提網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行人臉口罩佩戴檢測是合理且經(jīng)濟(jì)的。
2)通過實驗0 和實驗1、實驗2 和實驗3 這兩組對比實驗可以驗證GhostBottleneckCSP 和ShuffleConv 模塊在其他網(wǎng)絡(luò)上的優(yōu)化通用性,加入GhostBottleneckCSP和ShuffleConv 模塊的YOLOv3-tiny 模型大小僅為原模型的8.43%,大量的3×3 和1×1 標(biāo)準(zhǔn)卷積被替換,實現(xiàn)了模型的極限壓縮,且由于加入了更加高效的CSP模塊,實驗1 的精度較原模型也有了明顯提升。同理,在YOLOv4-tiny 上做類似替換也能實現(xiàn)模型壓縮及精度提升,且在CPU 上的推理速度也提高了27.13%。
3)通過實驗5、實驗6 可以說明,適當(dāng)調(diào)整GhostBottleneckCSP 中 的GhostBottleneck 數(shù)量能夠在一定程度上提升模型對小物體的檢測能力,在本文所提模型的基礎(chǔ)上,將第2個和第3個GhostBottleneckCSP中的GhostBottleneck 數(shù)量分別設(shè)為1 和3,對應(yīng)實驗2、實驗3,更大數(shù)量的模型的精度有輕微提升,且對小物體的檢測能力更強(qiáng)。在實際應(yīng)用場景中,可根據(jù)任務(wù)需要適當(dāng)調(diào)整GhostBottleneck 模塊的數(shù)量,以達(dá)到模型大小與精度之間的平衡,實現(xiàn)更好的檢測性能。
本文設(shè)計并實現(xiàn)了一種輕量化的YOLOv5 增強(qiáng)網(wǎng)絡(luò)模型,該模型可以壓縮大小并加快推理速度,模型精度得到一定程度的優(yōu)化,同時極大降低了對硬件環(huán)境的依賴性,能夠滿足實際應(yīng)用的需求。后續(xù)將在移動端進(jìn)行模型部署,在實際應(yīng)用場景中驗證并完善所提模型,此外,將口罩佩戴特征與其他關(guān)聯(lián)特征相結(jié)合,實現(xiàn)實用性更強(qiáng)的安全衛(wèi)生監(jiān)督系統(tǒng),以更好地滿足社會與日常生活的實際需求,也是下一步的研究方向。