彭 成,張喬虹,唐朝暉,桂衛(wèi)華
(1.湖南工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,湖南 株洲 412007;2.中南大學(xué) 自動化學(xué)院,長沙 410083)
近日,全球多國面臨新一輪疫情沖擊,且病株變異等情況也為疫情防控增添了更多的不確定風(fēng)險,在疫情防控常態(tài)化的情況下,佩戴口罩是極為有效且經(jīng)濟(jì)的防控手段,因此,公共場合的口罩佩戴檢測成為一項(xiàng)重要工作。在日常生活中,面對經(jīng)呼吸道傳播的傳染性疾病或工廠生產(chǎn)過程中產(chǎn)生的有害顆粒物,佩戴口罩也可保護(hù)生命安全,減少危害源的接觸,提高安全衛(wèi)生等級。以人工的方式對活動人員進(jìn)行監(jiān)督檢測耗時耗力,且近距離接觸待檢測人員存在一定的安全風(fēng)險,因此,構(gòu)建自動監(jiān)控系統(tǒng)檢測活動人員的口罩佩戴情況,對日常防護(hù)工作具有重要意義。
人臉口罩佩戴檢測屬于計(jì)算機(jī)視覺中的物體檢測范疇,在過去的二十年中,物體檢測的發(fā)展大致可分為2 個階段,即2014 年以前的傳統(tǒng)目標(biāo)檢測以及2014 年以后的基于深度學(xué)習(xí)的目標(biāo)檢測[1]。隨著GPU 和大數(shù)據(jù)的發(fā)展,傳統(tǒng)機(jī)器學(xué)習(xí)多階段才能實(shí)現(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ò)計(jì)算量往往較大,很難達(dá)到實(shí)時運(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)的卷積計(jì)算方式,之后的MobileNet[12]采用更加有效的深度可分離卷積,提高了網(wǎng)絡(luò)速度并進(jìn)一步促進(jìn)了卷積神經(jīng)網(wǎng)絡(luò)在移動端的應(yīng)用,同時通過較少的計(jì)算量獲得了較高的精度。但是在理論上,MobileNet的計(jì)算量仍然可以繼續(xù)降低。ShuffleNet[13]利用組卷積和通道混洗的操作有效降低了點(diǎn)卷積的計(jì)算量,實(shí)現(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)練,在驗(yà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ì)更為輕量化的改進(jìn)YOLOv5 模型,在幾乎不降低模型精度的情況下實(shí)現(xiàn)模型壓縮并加快推理速度,同時降低對硬件環(huán)境的依賴性。針對實(shí)際應(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]則實(shí)現(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 控制因子來實(shí)現(xiàn)版本的變化,在實(shí)際應(yīng)用中,可以根據(jù)具體場景的不同來選取合適大小的模型。本文主要實(shí)現(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個輸出層,共計(jì)P3、P4、P5和P6這4個輸出層,對應(yīng)下采樣幅度分別為8、16、32和64,新增加的檢驗(yàn)層有利于檢測較大的物體,可以通過更高分辨率的訓(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)實(shí)驗(yàn)?zāi)P?,以其為baseline 進(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 模塊實(shí)現(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 實(shí)現(xiàn)下采樣并增加channel 維度,可以減少FLOPs 并提升速度。
C3 模塊參照CSPNet 結(jié)構(gòu)[23],將一個階段中基礎(chǔ)層的特征圖分成2 個部分,拆分和合并策略被跨階段使用,較好地降低了信息集成過程中重復(fù)的概率,重復(fù)梯度信息的減少,使得YOLOv5 網(wǎng)絡(luò)能夠有更好的學(xué)習(xí)能力,推理計(jì)算也有一定的減少。YOLOv4 中也使用了CSP 模塊,但YOLOv5 中做出創(chuàng)新,以有無殘差邊為區(qū)分標(biāo)準(zhǔn)設(shè)計(jì)2 種CSP 模塊,分別為CSP-False 和CSP-True,以shortcut 的取值False 或True 來控制改變。
加入SPP 模塊[24]至CSP 模塊之后,使用組合的3 個多尺度最大池化層,在幾乎沒有速度損失的情況下大幅提升了感受野,提取出了最重要的特征,同時也有效降低了直接將圖片進(jìn)行伸縮而導(dǎo)致的圖片信息丟失的可能性,進(jìn)一步提升了模型精度。
在Head 部分,通過將高層特征信息上采樣的方式與低層特征信息進(jìn)行傳遞融合,實(shí)現(xiàn)了自頂向下的信息流動,再通過步長為2 的卷積進(jìn)行處理,將低層特征與高層特征作Concat 操作,使低層分辨率高的特征容易傳到上層,從而實(shí)現(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ù)量和計(jì)算量生成了更多的特征圖[26]。Ghost 的實(shí)現(xiàn)分為2 個部分,一個是普通卷積,另一個是具有更少參數(shù)量和計(jì)算量的線性操作。先通過有限的普通卷積得到一部分特征圖,再將所得的特征圖通過線性操作生成更多的特征圖,最后將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是偏差項(xiàng),逐點(diǎn)加至輸出特征圖的每個小單元。分析可得式(1)運(yùn)算的FLOPs多達(dá)h′×w′×n×c×k×k。而Ghost 結(jié)構(gòu)進(jìn)行少量的普通卷積運(yùn)算,采用線性運(yùn)算高效減少特征冗余,以更少的計(jì)算量得到同樣多的特征圖。由圖3(b)可以看出,Ghost 模塊的運(yùn)算可以表示為:
出于提高處理速度的目的,考慮到設(shè)備部署時的實(shí)用性,相較使用具有不同形狀和參數(shù)的線性運(yùn)算,本文全部使用3×3 或5×5 的相同線性運(yùn)算。設(shè)線性運(yùn)算內(nèi)核大小為d×d,則可以將Ghost 模塊與普通卷積的計(jì)算量進(jìn)行比較,得出Ghost 模塊相對普通卷積的提升程度,如下所示:
這里的k×k與d×d大小相同,且s?c,因此,最終化簡可以得到普通卷積的計(jì)算量近似為Ghost 模塊的s倍,參數(shù)量計(jì)算類似,最終也可以近似化簡為s。從理論上可以定量地證明Ghost模塊的優(yōu)越性,因此,以Ghost模塊為基礎(chǔ),進(jìn)而設(shè)計(jì)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)卷積,減少了計(jì)算量并壓縮了模型。
當(dāng)前優(yōu)秀的輕量級網(wǎng)絡(luò)絕大部分都使用組卷積或深度可分離卷積來降低卷積操作所產(chǎn)生的計(jì)算量,但是,為了實(shí)現(xiàn)通道間的特征融合,這些網(wǎng)絡(luò)中使用的1×1 卷積在整個過程中占用較多的計(jì)算量,為了緩解這一問題,ShuffleNet[10]提出了通道混洗的概念。在進(jìn)行組卷積后,使用通道混洗就可以實(shí)現(xiàn)組間信息的流通,以更加經(jīng)濟(jì)的方式增強(qiáng)特征的表達(dá)能力。通道混洗可以通過張量的常規(guī)操作來實(shí)現(xiàn),具體過程如圖5 所示。
圖5 通道混洗的實(shí)現(xiàn)過程Fig.5 Realization process of channel shuffle
圖5 中的數(shù)字是輸入通道的編號,使用Reshape操作將通道擴(kuò)展為兩維,并通過Transpose 對擴(kuò)展出的2 個維度進(jìn)行置換,通過這個操作能夠在不增加計(jì)算量的情況下使組卷積通道之間的信息完成融合,最后Flatten 操作將2 個維度復(fù)原為原來的初始維度,完成通道混洗。基于以上原理,可以認(rèn)為一個逐點(diǎn)卷積可以使用一個1×1 組卷積和1 個通道混洗操作組合代替,組卷積與標(biāo)準(zhǔn)卷積相比參數(shù)量與計(jì)算量有較大減少,且組卷積有類似正則的作用,可以降低過擬合發(fā)生的概率。出于這些優(yōu)點(diǎn),本文對YOLOv5 中6 個大小為3×3、2 個大小為1×1 的Conv 模塊中的普通卷積操作進(jìn)行改進(jìn),將原來的普通卷積更換為組卷積和通道混洗模塊,理論上可以實(shí)現(xiàn)模型的進(jìn)一步壓縮。
YOLOv5 具有較好的工程實(shí)用性,選擇其作為口罩檢測模型的基準(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ì)算,改進(jìn)YOLOv5 模型總計(jì)367 層,2 419 191 個參數(shù),計(jì)算量為5.5GFLOPs。初始YOLOv5 模型共計(jì)7 066 239 個參數(shù),計(jì)算量為16.4GFLOPs。兩者比較,優(yōu)化后的模型參數(shù)量減少為原來模型的34.24%,計(jì)算量減少為原來模型的33.54%,實(shí)現(xiàn)了較大程度的模型壓縮。
模型損失函數(shù)由分類損失(classification loss)、定位損失(localization loss)、目標(biāo)置信度損失(confidence loss)組成。YOLOv5 使用二元交叉熵?fù)p失函數(shù)計(jì)算類別概率和目標(biāo)置信度得分的損失,通過實(shí)驗(yàn),本文在GIOU Loss[27]和CIOU Loss[28]之間最終選定效果略好的CIOU Loss 作為bounding box 回歸的損失函數(shù)。CIOU Loss 計(jì)算公式如下:
2.3.1 模型訓(xùn)練算法
本文模型訓(xùn)練算法實(shí)現(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)練集和驗(yà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 不是最后一輪,則在驗(yàn)證集上計(jì)算當(dāng)前模型的mAP,若計(jì)算得到的模型性能更佳,則更新存儲的最佳模型。
步驟6在訓(xùn)練完所設(shè)置的迭代數(shù)后,獲得訓(xùn)練好的最佳性能模型和最近一次訓(xùn)練的模型。
步驟7輸出性能最佳的模型。
2.3.2 整體實(shí)現(xiàn)流程
本文方法整體實(shí)現(xiàn)流程如圖6 所示:首先準(zhǔn)備數(shù)據(jù),進(jìn)行人臉口罩佩戴圖片篩選及標(biāo)記,制作數(shù)據(jù)集并隨機(jī)劃分訓(xùn)練集、驗(yàn)證集、測試集;接著按照算法1 進(jìn)行模型訓(xùn)練,得到性能最佳的人臉口罩佩戴檢測模型;之后對測試集數(shù)據(jù)進(jìn)行測試,并在測試圖片上呈現(xiàn)最終的識別結(jié)果,即人臉位置和口罩佩戴狀態(tài)。
圖6 本文方法整體流程Fig.6 Overall process of this method
本文實(shí)驗(yàn)的機(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í)驗(yàn)使用的數(shù)據(jù)集來自AIZOO 團(tuán)隊(duì)整理的開源數(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 張,驗(yàn)證集1 832 張,共計(jì)7 942 張圖片。將圖片預(yù)定義為佩戴口罩和未佩戴口罩兩類,佩戴口罩標(biāo)簽為face-mask,未佩戴口罩標(biāo)簽為face。
為了避免將捂嘴動作預(yù)測為佩戴口罩,實(shí)驗(yàn)數(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ù)集物體分布比較均勻,且中小物體占比更大,存在物體間遮擋的情況,符合日常實(shí)際應(yīng)用場景,但數(shù)據(jù)集存在輕微的類別間樣本不平衡問題,該問題將在數(shù)據(jù)預(yù)處理中得到緩解。
圖8 數(shù)據(jù)集分析結(jié)果Fig.8 Dataset analysis results
3.2.1 數(shù)據(jù)集標(biāo)記
實(shí)驗(yàn)數(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 計(jì)算可能的最優(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)
本文實(shí)驗(yàn)的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)的模型性能。
本文所有實(shí)驗(yàn)中學(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)行更新。實(shí)驗(yàn)中BN 層、權(quán)重weight 層、bais 層的學(xué)習(xí)率分別為lr0、lr1、lr2,所有實(shí)驗(yàn)均訓(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ù)量、計(jì)算量、模型大小這8 個角度對模型性能進(jìn)行衡量。上述部分評價指標(biāo)的具體計(jì)算公式如下:
其中:TP、FP、FN分別指正確檢驗(yàn)框、誤檢框、漏檢框數(shù)量;AAP值為P-R 曲線面積,本文采用101 個插值點(diǎn)的計(jì)算方法;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ù)集上的實(shí)驗(yàn)結(jié)果
通過消融實(shí)驗(yàn)來逐步驗(yàn)證網(wǎng)絡(luò)結(jié)構(gòu)改變所引起的性能變化,本節(jié)3 個實(shí)驗(yàn)分別訓(xùn)練YOLOv5、Ghost-YOLOv5、Ghost-YOLOv5-Shuffle 這3 個網(wǎng)絡(luò),實(shí)驗(yàn)測試結(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ù)集上的實(shí)驗(yàn)結(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 模塊后,模型計(jì)算量和參數(shù)量分別壓縮為原來的63.41%和68.98%,在使用GPU 或CPU 的情況下分別有13.64%和16.37%的速度提升,并且模型大小變?yōu)樵瓉淼?9.34%,但同時,從圖11(c)中也可以看出,模型精確度有了明顯損失,且波動更為劇烈,這在驗(yàn)證集的類別損失曲線中也有所體現(xiàn),所幸在訓(xùn)練后期,Ghost-YOLOv5 模型與YOLOv5 之間精確度的差值較初期有所下降,除此之外,從圖12 可知,Ghost-YOLOv5 模型最終的所有類別平均AP 較YOLOv5 僅下降0.3%。
在繼續(xù)將標(biāo)準(zhǔn)卷積替換為ShuffleConv 后,模型計(jì)算量和參數(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的瓶頸并非是計(jì)算強(qiáng)度,因此,此模塊對GPU環(huán)境下的影響微乎其微,但當(dāng)在計(jì)算能力有限的CPU平臺上,計(jì)算速度便會有相當(dāng)?shù)奶嵘?,更適合部署在資源有限的嵌入式設(shè)備上。此外,Ghost-YOLOv5-Shuffle在Ghost-YOLOv5 的基礎(chǔ)上精度有所提升,從各個衡量標(biāo)準(zhǔn)來看都與YOLOv5 的檢測能力更加貼近,且從分類損失曲線來看,在一定程度上證實(shí)了組卷積的正則化效果,由圖12 可知,Ghost-YOLOv5-Shuffle 的最終mAP(0.5)為0.950,較YOLOv5 的0.951 幾乎沒有精度下降,且各類間差值都在0.003 范圍之內(nèi)。
YOLOv5 與Ghost-YOLOv5-Shuffle 實(shí)際運(yùn)行效果如圖13 所示,每個小圖中的左邊圖片為YOLOv5,右邊圖片為Ghost-YOLOv5-Shuffle。通過圖13 的實(shí)際檢測效果對比可以看出,改進(jìn)后的模型在進(jìn)行非極小物體的識別時與基準(zhǔn)模型幾乎沒有區(qū)別,面對分布極為密集的模糊小物體時,基準(zhǔn)模型比改進(jìn)模型略微精確,但改進(jìn)模型對絕大部分小物體還是能夠?qū)崿F(xiàn)正確識別。
圖13 復(fù)雜場景下的實(shí)際檢測效果Fig.13 Actual detection effect in complex scenes
3.3.2 不同網(wǎng)絡(luò)的對比實(shí)驗(yàn)
為了進(jìn)一步驗(yàn)證本文所提模塊及網(wǎng)絡(luò)的高效性,將其與同類輕量級網(wǎng)絡(luò)YOLOv3-tiny、YOLOv4-tiny等進(jìn)行對比,結(jié)果如表4所示。其中,實(shí)驗(yàn)5、實(shí)驗(yàn)6第2列括號中的數(shù)字代表模型中前3 個GhostBottleneckCSP 中GhostBottleneck的個數(shù)。從表4可以得出:
表4 不同網(wǎng)絡(luò)的性能對比Table 4 Performance comparison of different networks
1)由實(shí)驗(yàn)0、實(shí)驗(yàn)2、實(shí)驗(yàn)4、實(shí)驗(yàn)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)通過實(shí)驗(yàn)0 和實(shí)驗(yàn)1、實(shí)驗(yàn)2 和實(shí)驗(yàn)3 這兩組對比實(shí)驗(yàn)可以驗(yàn)證GhostBottleneckCSP 和ShuffleConv 模塊在其他網(wǎng)絡(luò)上的優(yōu)化通用性,加入GhostBottleneckCSP和ShuffleConv 模塊的YOLOv3-tiny 模型大小僅為原模型的8.43%,大量的3×3 和1×1 標(biāo)準(zhǔn)卷積被替換,實(shí)現(xiàn)了模型的極限壓縮,且由于加入了更加高效的CSP模塊,實(shí)驗(yàn)1 的精度較原模型也有了明顯提升。同理,在YOLOv4-tiny 上做類似替換也能實(shí)現(xiàn)模型壓縮及精度提升,且在CPU 上的推理速度也提高了27.13%。
3)通過實(shí)驗(yàn)5、實(shí)驗(yàn)6 可以說明,適當(dāng)調(diào)整GhostBottleneckCSP 中 的GhostBottleneck 數(shù)量能夠在一定程度上提升模型對小物體的檢測能力,在本文所提模型的基礎(chǔ)上,將第2個和第3個GhostBottleneckCSP中的GhostBottleneck 數(shù)量分別設(shè)為1 和3,對應(yīng)實(shí)驗(yàn)2、實(shí)驗(yàn)3,更大數(shù)量的模型的精度有輕微提升,且對小物體的檢測能力更強(qiáng)。在實(shí)際應(yīng)用場景中,可根據(jù)任務(wù)需要適當(dāng)調(diào)整GhostBottleneck 模塊的數(shù)量,以達(dá)到模型大小與精度之間的平衡,實(shí)現(xiàn)更好的檢測性能。
本文設(shè)計(jì)并實(shí)現(xiàn)了一種輕量化的YOLOv5 增強(qiáng)網(wǎng)絡(luò)模型,該模型可以壓縮大小并加快推理速度,模型精度得到一定程度的優(yōu)化,同時極大降低了對硬件環(huán)境的依賴性,能夠滿足實(shí)際應(yīng)用的需求。后續(xù)將在移動端進(jìn)行模型部署,在實(shí)際應(yīng)用場景中驗(yàn)證并完善所提模型,此外,將口罩佩戴特征與其他關(guān)聯(lián)特征相結(jié)合,實(shí)現(xiàn)實(shí)用性更強(qiáng)的安全衛(wèi)生監(jiān)督系統(tǒng),以更好地滿足社會與日常生活的實(shí)際需求,也是下一步的研究方向。