摘 要:人臉口罩佩戴檢測(cè)是公共場(chǎng)所疫情防控極為重要的措施,如何智能、高效地檢測(cè)口罩佩戴情況具有重要意義。為實(shí)現(xiàn)多尺度條件下,模型壓縮和加速檢測(cè),提出一種基于改進(jìn) YOLOv5 的輕量化算法,設(shè)計(jì)更為經(jīng)濟(jì)的 GhostBottleneckCSP 和 ShuffleConv 模塊替換 YOLOv5 原網(wǎng)絡(luò)中的 C3 及部分 Conv 模塊,緩解特征通道融合過(guò)程的計(jì)算量占用問(wèn)題并增強(qiáng)了特征的表達(dá)能力。實(shí)驗(yàn)結(jié)果表明,改進(jìn)后模型識(shí)別精度最低達(dá) 95%,較 YOLOv5 原網(wǎng)絡(luò)精度近乎無(wú)損失的前提下,模型參數(shù)量和計(jì)算量分別僅為原來(lái)的 34.24%和 33.54%,且在 GPU 或 CPU 上運(yùn)行的速度分別提升了 13.64%和 28.25%,降低了平臺(tái)體積功耗存儲(chǔ)及計(jì)算能力的要求,與現(xiàn)有模型相比優(yōu)勢(shì)明顯,更利于模型在資源有限的移動(dòng)端部署,使人臉口罩佩戴監(jiān)督功能更易獲取。
彭成; 張喬虹; 唐朝暉; 桂衛(wèi)華, 計(jì)算機(jī)工程 發(fā)表時(shí)間:2021-07-29
關(guān)鍵詞:深度學(xué)習(xí);口罩佩戴檢測(cè);YOLOv5;GhostBottleneckCSP;ShuffleConv
疫情尚未過(guò)去,防護(hù)仍需重視,亞洲多國(guó)新增確診人數(shù)仍然持續(xù)上升,且病株的變異等情況也為疫情的防控增添更多的不確定風(fēng)險(xiǎn),在疫情防控常態(tài)化的情況下,佩戴口罩便是極為有效且經(jīng)濟(jì)的防控手段,因此,公共場(chǎng)合的口罩佩戴檢測(cè)成為一項(xiàng)核心工作。日常生活中,面對(duì)經(jīng)呼吸道傳播的傳染性疾病或工廠生產(chǎn)過(guò)程中產(chǎn)生的有害顆粒物,人們佩戴口罩進(jìn)行防護(hù)也可保護(hù)生命安全,減少危害源的接觸,提高安全衛(wèi)生等級(jí)。以人工的方式對(duì)活動(dòng)人員進(jìn)行監(jiān)督檢測(cè)耗時(shí)耗力,且近距離接觸待檢測(cè)人員存在一定安全風(fēng)險(xiǎn),因此構(gòu)建監(jiān)控系統(tǒng)檢測(cè)活動(dòng)人員的口罩佩戴情況,實(shí)現(xiàn)疫情防控的自動(dòng)化、數(shù)字化將長(zhǎng)期具有實(shí)際現(xiàn)實(shí)需求,對(duì)社會(huì)具有重要意義,在多種行業(yè)均存在使用場(chǎng)景。
人臉口罩佩戴檢測(cè)屬于計(jì)算機(jī)視覺(jué)中物體檢測(cè)的解決問(wèn)題范疇,物體檢測(cè)在過(guò)去的二十年中可大致分為兩個(gè)時(shí)期,以 2014 年為分水嶺,2014 年前的傳統(tǒng)目標(biāo)檢測(cè)期,及之后的基于深度學(xué)習(xí)的目標(biāo)檢測(cè)期[1]。隨著 GPU 和大數(shù)據(jù)的發(fā)展,深度學(xué)習(xí)逐漸展露其優(yōu)勢(shì),傳統(tǒng)機(jī)器學(xué)習(xí)多階段才能實(shí)現(xiàn)的功能可由深度學(xué)習(xí)串聯(lián)完成,輸入大量圖像、語(yǔ)音和文本信息即可直接進(jìn)行端到端的訓(xùn)練[2,3],在物體檢測(cè)、圖像分割等領(lǐng)域展現(xiàn)出遠(yuǎn)超傳統(tǒng)算法的實(shí)力。
為了使人臉口罩佩戴監(jiān)督功能更加易于獲取,口罩檢測(cè)網(wǎng)絡(luò)模型的輕量化也是一個(gè)必須要考慮的問(wèn)題。當(dāng)前經(jīng)典的物體檢測(cè)算法大多依賴卷積網(wǎng)絡(luò)[4,5,6]進(jìn)行特征提取,一系列優(yōu)秀的基礎(chǔ)網(wǎng)絡(luò) VGGNet[7]、ResNet [8]和 DenseNet[9]等被提出,但是這些網(wǎng)絡(luò)計(jì)算量往往較大,很難達(dá)到實(shí)時(shí)運(yùn)行的工業(yè)應(yīng)用要求,于是輕量化網(wǎng)絡(luò)應(yīng)運(yùn)而生。SqueezeNet[10]網(wǎng)絡(luò)從網(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ò)在移動(dòng)端的應(yīng)用,通過(guò)較少的計(jì)算量獲得了較高的精度。但是理論上,計(jì)算量仍然可以降低,ShuffleNet[13]利用組卷積和通道混洗的操作有效降低了點(diǎn)卷積的計(jì)算量,實(shí)現(xiàn)了更為優(yōu)越的性能。隨著移動(dòng)設(shè)備的進(jìn)步和應(yīng)用場(chǎng)景多樣化地發(fā)展,輕量化網(wǎng)絡(luò)展現(xiàn)出了更高的工程價(jià)值。
針對(duì)人臉口罩佩戴檢測(cè)的精度和速度問(wèn)題,多位學(xué)者進(jìn)行了各種嘗試,比如文獻(xiàn)[14]基于改進(jìn) SSD 算法,并在分類器末端增添改進(jìn)的非極大值抑制處理層,測(cè)試 mAP 最高達(dá)到 88%。文獻(xiàn)[15]提出一種基于 RetinaNet 的人臉口罩佩戴檢測(cè)的方法,通過(guò)遷移學(xué)習(xí)利用預(yù)訓(xùn)練的 ResNet 模型幫助新模型訓(xùn)練,最后在驗(yàn)證集上的 AP 值為 86.45%。文獻(xiàn)[16]基于 YOLOv3 網(wǎng)絡(luò)模型,引入改進(jìn)的空間金字塔池化結(jié)構(gòu)并優(yōu)化多尺度預(yù)測(cè)網(wǎng)絡(luò),替換損失函數(shù),準(zhǔn)確度提升 14.9%。文獻(xiàn)[17]基于 YOLOv5 網(wǎng)絡(luò)模型,在原數(shù)據(jù)集的基礎(chǔ)上進(jìn)行擴(kuò)充,采用翻轉(zhuǎn)和旋轉(zhuǎn)兩種方式,得到 30000 張圖片進(jìn)行訓(xùn)練,最終準(zhǔn)確率為 92.4%,還有其他學(xué)者進(jìn)行了各種優(yōu)化,在精度和速度上有了各自的提升。綜上所述,人臉口罩佩戴檢測(cè)方法仍有很大的改進(jìn)空間,相較于已有研究,本文主要?jiǎng)?chuàng)新如下:
1)針對(duì)在口罩檢測(cè)的實(shí)際應(yīng)用場(chǎng)景中,由于距離攝像頭的遠(yuǎn)近關(guān)系,一張圖片中存在物體尺度面積不平衡的問(wèn)題,使用 YOLOv5 進(jìn)行 20×20、40×40、 80×80 的大中小多尺度檢測(cè),提升對(duì)于小物體的檢測(cè)性能;
2)在模型精度和速度間取得平衡,合理優(yōu)化模型,設(shè)計(jì)更為輕量化的改進(jìn) YOLOv5 模型,在幾乎不降低模型精度的情況下,實(shí)現(xiàn)模型壓縮以及加快推理速度,得到一個(gè)優(yōu)化后的輕量化神經(jīng)網(wǎng)絡(luò),極大減輕對(duì)硬件環(huán)境的依賴;
3)實(shí)現(xiàn)有效識(shí)別過(guò)濾常見干擾,如用衣物或手捂嘴等操作,增強(qiáng)模型實(shí)用性。
1 基礎(chǔ)理論
1.1 YOLOv5 算法原理
YOLO(You Only Look Once)是一個(gè)高性能的通用目標(biāo)檢測(cè)模型,YOLOv1[18]創(chuàng)新性地使用一階結(jié)構(gòu)完成了分 類 與 目 標(biāo) 定 位 兩 個(gè) 任 務(wù) , 隨 后 的 YOLOv2[19] 與 YOLOv3[20]在速度和精度上的提升進(jìn)一步加速了物體檢測(cè)在工業(yè)界的落地,YOLOv4[21]更是可以實(shí)現(xiàn)在一塊普通的 GPU(1080Ti)上完成訓(xùn)練。從 YOLOv1 至今,YOLO 系列已經(jīng)發(fā)展至 YOLOv5,相較于 YOLOv4,YOLOv5 更加靈活,在某種程度上 YOLOv5 模型是所有已知 YOLO 實(shí)現(xiàn)中的 SOTA(state-of-the-art),它提供了 4 個(gè)大小版本,分別為 YOLOv5s、YOLOv5m、YOLOv5l、 YOLOv5x,4 個(gè)版本模型大小與精度依次遞增,由 Bottleneck 數(shù)目區(qū)分,采用了類似 EfficienctNet [22]的 channel 和 layer 控制因子來(lái)實(shí)現(xiàn)版本的變化,能夠根據(jù)應(yīng)用場(chǎng)景選取合適大小的模型。本文主要實(shí)現(xiàn)模型壓縮及加速,使其更易應(yīng)用于資源有限的嵌入式設(shè)備,故將基準(zhǔn)模型選擇范圍定在 YOLOv5s 系列中。
YOLOv5 也有著版本迭代更新,現(xiàn)已至 v5.0,其中 v3.0、v4.0、v5.0 各有千秋,v4.0 與 v5.0 中 YOLOv5-P5 模型結(jié)構(gòu)相同,v5.0 新提出 YOLOv5-P6 模型,較前面版本,添加了 1 個(gè)輸出層,共計(jì) 4 個(gè)輸出層 P3、P4、P5 和 P6,對(duì)應(yīng)下采樣幅度分別為 8、16、32 和 64,新增加的檢驗(yàn)層有利于檢測(cè)較大的物體,可以通過(guò)更高分辨率的訓(xùn)練獲得更高的精度。此外,YOLOv5-P5 模型使用 PyTorch1.7 中新支持的 SiLU()激活函數(shù)替換了先前版本中使用的 LeakyReLU()和 Hardswish()激活函數(shù),使得網(wǎng)絡(luò)中任何一個(gè)地方都只使用 SiLU 激活函數(shù),并刪減了先前版本中 BottleneckCSP 的部分 Conv 模塊。先前版本的 BottleneckCSP 以及 YOLOv5-P5 中的改進(jìn) BottleneckCSP 變化如下圖 1 所示,改進(jìn) BottleneckCSP 稱為 C3 模塊。
可以看到,C3 模塊由于消除了每個(gè)瓶頸結(jié)構(gòu)中的一個(gè)卷積,導(dǎo)致新版的 YOLOv5-P5 的尺寸都稍小一些,能夠得到更小的模型,且推理速度也有少許的提升,作者得出結(jié)論,尤其是較大的 YOLOv5x,推理時(shí)間由 6.9ms 提升至 6ms,可以說(shuō)最大的模型從這個(gè)變化中受益最大。下表 1 是對(duì) YOLOv5s 各版本性能進(jìn)行比較,出于更加輕量化更易部署于移動(dòng)設(shè)備的目的,可以看到雖然 YOLOv5s-P5 精度雖然較 YOLOv5s-3.0 有了 0.8%的下降,但是速度和參數(shù)量都更為優(yōu)秀,P6 雖然精度最高,但是無(wú)論是輸入 size 的高分辨率還是增加的檢測(cè)頭,都為設(shè)備資源分配增加了更大的負(fù)擔(dān),綜合考量,最終選擇 YOLOv5s-P5 作為基準(zhǔn)實(shí)驗(yàn)?zāi)P停云錇?baseline 進(jìn)行模型優(yōu)化,本文中后續(xù)出現(xiàn)的 YOLOv5 一詞,若沒(méi)有特別說(shuō)明,均指 YOLOv5s-P5。
YOLOv5由Backbone與Head兩部分組成,Backbone 主要有 Focus、C3 以及 SPP 模塊,Head 包括 PANet 以及 Detect 模塊。
在 Backbone 部分,通過(guò) 1 個(gè) Focus 模塊及 4 個(gè) Conv 模塊實(shí)現(xiàn) 32 倍下采樣,其中 Focus 模塊將輸入數(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]將一個(gè)階段中基礎(chǔ)層的特征圖分成兩部分,拆分和合并策略被跨階段使用,較好地減少了信息集成過(guò)程中重復(fù)的概率,由于重復(fù)梯度信息的減少,YOLOv5 網(wǎng)絡(luò)能夠有更好的學(xué)習(xí)能力,推理計(jì)算也有一定的減少。YOLOv4 中也使用了 CSP 模塊,但 YOLOv5 中做出創(chuàng)新,以有無(wú)殘差邊為區(qū)分標(biāo)準(zhǔn)設(shè)計(jì)了兩種 CSP 模塊,分別為 CSP-False 和 CSP-True,以 shortcut 的取值 False 或 True 來(lái)控制改變。
加入 SPP 模塊[24]至 CSP 模塊之后,使用組合的 3 個(gè)多尺度最大池化層,幾乎可以沒(méi)有速度損失地大幅度提升了感受野,提取出最重要的特征,同時(shí)也有效降低了直接將圖片進(jìn)行伸縮可以會(huì)出現(xiàn)的圖片信息丟失的可能性,進(jìn)一步提升模型精度。
Head 部分里,通過(guò)將高層的特征信息通過(guò)上采樣的方式與低層特征信息進(jìn)行傳遞融合,實(shí)現(xiàn)自頂向下的信息流動(dòng),再通過(guò)步長(zhǎng)為 2 的卷積進(jìn)行處理,將底層特征與高層特征進(jìn)行 Concat 操作,使底層分辨率高的特征容易傳到上層去,從而實(shí)現(xiàn)了 PANet [25]操作,更好地將底層與高層特征優(yōu)勢(shì)互補(bǔ),有效解決多尺度問(wèn)題。
YOLOv5 網(wǎng)絡(luò)結(jié)構(gòu)圖如圖 2 所示。
1.2 改進(jìn)的 GhostBottleneckCSP
GhostNet 提出了一個(gè)創(chuàng)新性的 Ghost 模塊,通過(guò)廉價(jià)操作生成更多的特征圖,這一全新的神經(jīng)網(wǎng)絡(luò)基本單元成功得實(shí)現(xiàn)以更少的參數(shù)量和計(jì)算量得到更多的特征圖[26]。該模塊的實(shí)現(xiàn)分為兩個(gè)部分,一個(gè)是普通卷積,一個(gè)是更為廉價(jià)的線性操作,先通過(guò)有限的普通卷積得到一部分特征圖,再將這里得到的特征圖通過(guò)線性操作生成更多特征圖,最后將兩組特征圖在指定維度拼接起來(lái)。其操作原理如下圖 3 所示。
普通卷積層的運(yùn)算可以表示為: Y X* = + ω b (1) 其 中 c h w ? ? X R ?代 表 卷 積 輸 入 , c 指輸入 channel 數(shù)量, h 及 w 分別指輸入特征圖高度和寬度。而 h w n ?? ?? Y R ?表示輸出為 n 個(gè)高度和寬度分別為 h?和 w ?的特征圖, c k k n ??? ω?R 代表進(jìn)行卷積運(yùn)算的是 c n ?個(gè)大小為 k k ?的卷積核, b 是偏差項(xiàng),逐點(diǎn)加至輸出特征圖每個(gè)小單元。分析可得出公式(1)運(yùn)算的 FLOPs 多達(dá) h w n c k k ?? ? ? ?? ?。而 Ghost 結(jié)構(gòu)進(jìn)行少量的普通卷積運(yùn)算,采用線性運(yùn)算高效實(shí)現(xiàn)減少特征冗余,更少計(jì)算量地得到同樣多的特征圖。
由上圖 3(b)可以看出 Ghost 結(jié)構(gòu)運(yùn)算可以表示為 Y X ? = *ω? (2) = ? ? Φi j , ( ), 1, , 1, i m j s ? ? ? ? ' Y Y ij i (3) 其中 h w m ? ? ? ? Y R ??代表對(duì)輸入 X 進(jìn)行卷積操作得到 m 個(gè)特征圖,這里 m n ?,省略了偏置項(xiàng),按照公式(2)運(yùn)算,F(xiàn)LOPs 為 h w m c k k ?? ? ? ?? ?。該 Ghost 模塊最后要得到 n 個(gè)特征圖,故公式(3)要通過(guò)線性操作生成 n m− 個(gè)特征圖,設(shè) Y?中的每一個(gè)特征圖都需要生成 s 個(gè)特征圖。 ' Yi 表示在 Y?中的第 i 個(gè)特征圖, Φi j , 是每一個(gè) ' Yi 用于生成第 j 個(gè) Ghost 特征映射 Yij 的第 j 個(gè)線性操作, Φis, 實(shí)現(xiàn)內(nèi)在特征映射的 identity 映射,即圖 3(b)中的直接拼接操作,公式 (2)、(3)依次運(yùn)行就能實(shí)現(xiàn) Ghost 模塊。
出于提高處理速度的目的,考慮到設(shè)備部署時(shí)的實(shí)用性,比起使用具有不同的形狀和參數(shù)的線性運(yùn)算,作者建議全部使用 3 3 ?或 5 5 ?的相同線性運(yùn)算,設(shè)線性運(yùn)算內(nèi)核大小為 d d ?,則可以將 Ghost 模塊與普通卷積的計(jì)算量進(jìn)行比較,得出提升程度,如下公式(4)所示。 ( ) s h w n c k k compare h w c k k m d d h w n m ? ? ? ? ? = ? ? ? ? ? + ?? ?? ? ?? − ?? ? ( 1) h w n c k k n n h w c k k d d h w s s s ? ? ? ? ? = ? ? ? ? ? + ? ? ? ?? ?? ? ? ? ? − 1 1 c k k s c k k d d s s ? ? = − ? ? ? + ? ? 1 c s c s ?? + − ? s (4) 這里 k k ?與 d d ?大小相同,且 s c ,故最終化簡(jiǎn)可以得到普通卷積的計(jì)算量近似為 Ghost module 的 s 倍,參數(shù)量計(jì)算類似,最終也可以近似化簡(jiǎn)為 s 。從理論上可以定量地證明 Ghost 模塊的優(yōu)越性,故以 Ghost 模塊為基礎(chǔ),進(jìn)而設(shè)計(jì) GhostBottleneck 及 GhostBottleneckCSP 模塊,具體結(jié)構(gòu)如圖 4 所示。
圖 4 中的 1 c 與 2 c 分別指輸入和輸出特征圖通道數(shù), h 和 w 代表意義與前文相同。在本文中,先使用如圖 4(a) 1 1?的普通卷積將通道數(shù)降至輸出通道數(shù)的 1⁄2,再根據(jù)得到的特征圖進(jìn)行大小為 5 5 ?的深度卷積,最后將兩組特征拼接。圖 4(b)第一個(gè) Ghost module 先將輸出通道降為目標(biāo)輸出通道的一半,再由第二個(gè) Ghost module 將通道數(shù)恢復(fù)至目標(biāo)輸出通道數(shù),并與殘差邊傳來(lái)的輸入特征圖逐點(diǎn)相加進(jìn)行特征融合。如圖 4(c)所示。使 用 GhostBottleneck 替 換 掉 YOLOv5 中所有的 Bottleneck 模 塊 , 與 C3 模 塊 形 成 新 的 GhostBottleneckCSP。原 Bottleneck 由 1 1?和 3 3 ?標(biāo)準(zhǔn)卷積組成,新結(jié)構(gòu)通過(guò)替換掉原來(lái) Bottleneck 中較多的 3 3 ?標(biāo)準(zhǔn)卷積,實(shí)現(xiàn)計(jì)算量的減少與模型大小的壓縮,理論上這種方法是完全可行的。
1.3 ShuffleConv
當(dāng)前優(yōu)秀的輕量級(jí)網(wǎng)絡(luò)絕大部分都使用組卷積或深度可分離卷積來(lái)降低卷積操作所產(chǎn)生的計(jì)算量,但是為了實(shí)現(xiàn)通道間特征融合,這些過(guò)程中使用的 1 1?卷積在整個(gè)卷積過(guò)程中占有較多的計(jì)算量,為了緩解這一問(wèn)題, ShuffleNet[10]提出了通道混洗的概念。在進(jìn)行組卷積后,使用通道混洗就可以實(shí)現(xiàn)組間信息的流通,以更加經(jīng)濟(jì)的方式增強(qiáng)了特征的表達(dá)能力。通道混洗并不復(fù)雜,可以通過(guò)張量的常規(guī)操作得以實(shí)現(xiàn),具體如圖 5 所示。
圖 5 中的數(shù)字是對(duì)輸入通道進(jìn)行的編號(hào),從 1~6,使 用 Reshape 操作將通 道擴(kuò)展為兩 維,并對(duì)通 過(guò) Transpose 實(shí)現(xiàn)擴(kuò)展出的兩個(gè)維度置換,這個(gè)操作就能夠?qū)崿F(xiàn)在不增加計(jì)算量的情況下,使組卷積通道之間信息融合,最后 Flatten 操作,將兩個(gè)維度復(fù)原為原來(lái)的初始維度,完成通道混洗。基于如上原理,我們可以認(rèn)為一個(gè)逐點(diǎn)卷積可以使用一個(gè) 1 1?組卷積和一個(gè)通道混洗操作組合代替,組卷積與標(biāo)準(zhǔn)卷積相比,參數(shù)量與計(jì)算量有較大減少,且從某個(gè)角度來(lái)說(shuō)組卷積有類似正則的作用,可以降低過(guò)擬合發(fā)生的概率。
出于這些優(yōu)點(diǎn),本文以此原理為基礎(chǔ)對(duì) YOLOv5 中 6個(gè)大小為 3 3 ?和2個(gè)大小為 1 1?的Conv模塊中的普通卷積操作做出改進(jìn),將原來(lái)的普通卷積更換為組卷積和通道混洗模塊,理論上可以實(shí)現(xiàn)模型的進(jìn)一步壓縮。
2 YOLOv5 增強(qiáng)網(wǎng)絡(luò)模型
2.1 YOLOv5 增強(qiáng)網(wǎng)絡(luò)結(jié)構(gòu)
YOLOv5 算法本身非常優(yōu)秀,隨著其版本的迭代更新,網(wǎng)絡(luò)各個(gè)模塊對(duì)物體檢測(cè)中的常見問(wèn)題都做了一定的優(yōu)化改進(jìn),本身就具有較好的工程實(shí)用性,選擇其作為口罩檢測(cè)模型的基準(zhǔn)網(wǎng)絡(luò)是可行的。但是從目前研究和應(yīng)用情況來(lái)看,YOLOv5 仍可以進(jìn)行進(jìn)一步的改進(jìn),結(jié)合 2.2 及 2.3 節(jié)的介紹,可以得到本文改進(jìn)后的 YOLOv5 網(wǎng)絡(luò)整體結(jié)構(gòu)如表 2 所示。
表 2 中 From 列的-1 是指輸入來(lái)自上一層輸出,Arguments 列的值分別代表該模塊的輸入通道數(shù)、輸出通道數(shù)、卷積核大小和步長(zhǎng)信息,Module 列中的 GhostBottleneckCSPn 模 塊 中 的 n 代表該模塊內(nèi) GhostBottleneck 的數(shù)量,經(jīng)過(guò)計(jì)算,改進(jìn)后的 YOLOv5 模型總計(jì) 367 層,2419191 個(gè) parameters,計(jì)算量為 5.5 GFLOPs 。 初 始 的 YOLOv5 模 型 共 計(jì) 7066239 個(gè) parameters,計(jì)算量為 16.4 GFLOPs,兩者比較,優(yōu)化后的模型參數(shù)量減少為原來(lái)的 34.24%,計(jì)算量減少為原來(lái)的 33.54%,實(shí)現(xiàn)了對(duì)原模型進(jìn)行較大程度的壓縮。
2.2 損失函數(shù)
模型損失函數(shù)由分類損失(classification loss)、定位損失(localization loss)和目標(biāo)置信度損失(confidence loss) 組成。YOLOv5 使用二元交叉熵?fù)p失函數(shù)計(jì)算類別概率和目標(biāo)置信度得分的損失,通過(guò)實(shí)驗(yàn),本文在 GIOU Loss[27]和 CIOU Loss [28]之間,最終選定效果略好的 CIOU Loss 作為 bounding box 回歸的損失函數(shù),CIOU Loss 公式如下所示。 2 1 2 2 1 d CIOU Loss IoU d ??? ? = − − − ? ? ? ? ? ? (5) 其中 (1 IoU ) ??? = − + , 1 1 2 2 4 (tan tan ) π gt gt W W h h ? − − = − , 1 d 代表預(yù)測(cè)框與目標(biāo)框兩個(gè)中心點(diǎn)的歐式距離, 2 d 代表最小外接矩形的對(duì)角線距離。 gt gt W h 和 W h 分別代表目標(biāo)框和預(yù)測(cè)框各自的的寬高比。CIOU Loss 較 GIOU Loss 考慮了邊界框?qū)捀弑鹊某叨刃畔ⅲ瑥闹丿B面積、中心點(diǎn)距離和長(zhǎng)寬比三個(gè)角度進(jìn)行衡量,使得預(yù)測(cè)框回歸的效果更佳。
2.3 本文整體實(shí)現(xiàn)
2.3.1 模型訓(xùn)練算法
算法:模型訓(xùn)練算法
輸入:人臉口罩?jǐn)?shù)據(jù)集圖片及標(biāo)記文件初始化參數(shù):訓(xùn)練時(shí)代數(shù)、學(xué)習(xí)率、批次大小、輸入圖片大小、網(wǎng)絡(luò)模型配置 yaml 文件、標(biāo)簽與 anchor 的 IoU 閾值、損失的系數(shù)、數(shù)據(jù)增強(qiáng)的系數(shù)、標(biāo)簽與 anchor 的長(zhǎng)、寬比閾值圖片預(yù)處理:調(diào)整圖片亮度、對(duì)比度、飽和度和 Mosaic 處理 1. 準(zhǔn)備數(shù)據(jù),制作數(shù)據(jù)集并劃分訓(xùn)練集、驗(yàn)證集; 2. 加載數(shù)據(jù)配置信息及初始化參數(shù),輸入數(shù)據(jù)并對(duì)其進(jìn)行預(yù)處理;3. 加載網(wǎng)絡(luò)模型,并對(duì)輸入圖片進(jìn)行特征提取及物體定位分類; 4. 隨著迭代次數(shù)的增加,使用 SGD 對(duì)網(wǎng)絡(luò)中各組參數(shù)進(jìn)行更新優(yōu)化; 5. 若當(dāng)前 epoch 不是最后一輪,則在驗(yàn)證集上計(jì)算當(dāng)前模型的 mAP,若計(jì)算得到的模型性能更佳,便更新存儲(chǔ)的最佳的模型; 6. 訓(xùn)練完設(shè)置的時(shí)代數(shù)后,獲得訓(xùn)練好的最優(yōu)性能模型和最近一次訓(xùn)練模型。輸出:本次訓(xùn)練中性能最佳的檢測(cè)模型。
2.3.2 整體實(shí)現(xiàn)流程
本文整體處理流程如下圖 6 所示,首先是準(zhǔn)備數(shù)據(jù),進(jìn)行人臉口罩佩戴圖片篩選及標(biāo)記,制作數(shù)據(jù)集并隨機(jī)劃分訓(xùn)練集、驗(yàn)證集、測(cè)試集。接著按照 2.3.1 中描述的算法進(jìn)行模型訓(xùn)練,得到性能最佳的人臉口罩佩戴檢測(cè)模型,之后對(duì)測(cè)試集數(shù)據(jù)進(jìn)行測(cè)試,并在測(cè)試圖片上畫出最終識(shí)別結(jié)果具體,即人臉位置和佩戴口罩狀態(tài)。
3 實(shí)驗(yàn)及結(jié)果分析
3.1 實(shí)驗(yàn)環(huán)境及數(shù)據(jù)集介紹
本文實(shí)驗(yàn)機(jī)器操作系統(tǒng)版本為 Ubuntu 9.3.0-10ubuntu2,CPU 型號(hào)為 Intel(R) Core(TM) i3-9100F CPU @ 3.60GHz,GPU 型號(hào)為 GeForce RTX 2080 Ti, 顯存大小 11GB,內(nèi)存大小 31GB。所有模型基于 Pytorch 1.8,并使用 cuda 10.1 和 cudnn 7.6.5 對(duì) GPU 進(jìn)行加速。
本文中使用的數(shù)據(jù)集來(lái)自 AIZOO 團(tuán)隊(duì)整理的開源數(shù)據(jù)集,該數(shù)據(jù)集主要從WIDER Face及MAFA 公開數(shù)據(jù)集中篩選得到,分別選擇了 3894 張及 4064 張圖片。在此基礎(chǔ)上對(duì)其進(jìn)行了二次篩選及擴(kuò)充,刪除錯(cuò)誤標(biāo)簽,加入部分 ROBOFLOW 開放的口罩?jǐn)?shù)據(jù)集,最終得到訓(xùn)練集 6110 張,驗(yàn)證集 1832 張,共計(jì) 7942 張。預(yù)定義為兩類,佩戴口罩和未佩戴口罩,佩戴口罩標(biāo)簽為 face-mask,未佩戴口罩為 face。
為了避免出現(xiàn)用手或衣物捂嘴此類動(dòng)作被預(yù)測(cè)為佩戴口罩,數(shù)據(jù)集中特地加入了嘴巴被手或衣物等其他物品捂住的數(shù)據(jù),有效過(guò)濾避免了此類干擾。數(shù)據(jù)集部分圖片如下圖 7 所示。
通過(guò)對(duì)數(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)用場(chǎng)景,但其存在輕微的類別間樣本不平衡的問(wèn)題,該問(wèn)題將在數(shù)據(jù)預(yù)處理中得到緩解。
3.2 數(shù)據(jù)預(yù)處理
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ī)則如下所示。 / center x x width = (6) / center y y height = (7) ( ) / w x x width = − max min (8) ( ) / max min h y y height = − (9) 其 中 id class 為類別的 id 編號(hào), max max min min x y x y , , ,分別指 VOC 格式的 xml 標(biāo)記文件中,相對(duì)于圖片左上角,標(biāo)記物體所在位置的左上角坐標(biāo)及右下角坐標(biāo)的值。
3.2.2 自適應(yīng)圖片采樣
本文所用數(shù)據(jù)集存在輕微類間不平衡,這也是物體檢測(cè)的一個(gè)常見問(wèn)題,模型訓(xùn)練時(shí)樣本過(guò)少的類別的參考性較小,可能會(huì)使模型主要關(guān)注樣本較多的類別,模型參數(shù)也主要根據(jù)樣本多的類別的損失進(jìn)行調(diào)整,最終導(dǎo)致少樣本類別精度有所下降。
為了解決這個(gè)問(wèn)題,本文采用自適應(yīng)圖片采樣策略,根據(jù)物體類別的數(shù)量占比及每張圖片中各類物體出現(xiàn)頻數(shù),綜合考慮生成每張圖片的采樣權(quán)重,再根據(jù)圖片的采樣權(quán)重生成采樣索引序列,類別數(shù)量和頻數(shù)與類別權(quán)重成反比,若某張圖片頻數(shù)最高的類別的數(shù)量占比也較其他類別更高,這張圖片被采樣的概率就會(huì)較小,通過(guò)這種采樣方式可以有效緩解類間不平衡問(wèn)題。
3.2.3 anchor 的設(shè)置
對(duì)于目標(biāo)檢測(cè),設(shè)置合適的 anchor 直接影響到最終模型的表現(xiàn)。合適的 anchor 是根據(jù)數(shù)據(jù)集物體大小而確定的,利用預(yù)設(shè)值 anchor 基于 shape 閾值對(duì) bbox 計(jì)算最好可能的召回率。如果召回率大于 0.98,則不用優(yōu)化,直接返回,如果小于 0.98,則利用遺傳算法與 k-means 重新設(shè)置 anchor。本文在人臉口罩?jǐn)?shù)據(jù)集上最好可能召回率為 0.9978,故使用 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],提出了這樣創(chuàng)新的數(shù)據(jù)處理方式:隨機(jī)選取四張圖片,并對(duì)其進(jìn)行隨機(jī)裁剪、隨機(jī)排布和隨機(jī)縮放的方式進(jìn)行拼接。得到效果圖如下圖 9 所示。這種方式隨機(jī)擴(kuò)充了數(shù)據(jù)集,特別是隨機(jī)縮放增加了小目標(biāo),使得網(wǎng)絡(luò)的魯棒性得到一定提升。另一方面經(jīng)過(guò) Mosaic 數(shù)據(jù)增強(qiáng)后相當(dāng)于一次性處理了四張圖片,batch-size 隱性增加,初始設(shè)置的 batch-size 值可以無(wú)需很大也可以得到一個(gè)不錯(cuò)的模型,對(duì) GPU 性能要求相對(duì)降低。
除此之外,還進(jìn)行了改變亮度、對(duì)比度、飽和度等常規(guī)數(shù)據(jù)增強(qiáng)方法,與 Mosaic 組合,在一定程度上有效防止了過(guò)擬合,能夠?qū)崿F(xiàn)更長(zhǎng)時(shí)間的訓(xùn)練獲得更優(yōu)的模型性能。
3.3 實(shí)驗(yàn)及結(jié)果分析
本文所有實(shí)驗(yàn)學(xué)習(xí)率均使用 Warmup[30]訓(xùn)練預(yù)熱,避免模型訓(xùn)練時(shí)初始學(xué)習(xí)率過(guò)高引起模型振蕩,以便維持模型深層的穩(wěn)定性。在 Warmpup 階段,采用一維線性插值對(duì)每次迭代的學(xué)習(xí)率進(jìn)行更新,bias 層的學(xué)習(xí)率從 0.1 下降到基準(zhǔn)學(xué)習(xí)率 0.01,其他的參數(shù)學(xué)習(xí)率從 0 增加到 0.01。在 Warmpup 階段之后,采用余弦退火算法[31]來(lái)對(duì)學(xué)習(xí)率進(jìn)行更新。實(shí)驗(yàn)中 BN 層、權(quán)重 weight 層和 bais 層的學(xué)習(xí)率分別為 lr0、 lr1、lr2,所有實(shí)驗(yàn)均訓(xùn)練 300 個(gè) epoch,batch-size 設(shè)為 32,學(xué)習(xí)率的變化如圖 10 所示,其中 lr0 及 lr1 曲線變化相同。
所有實(shí)驗(yàn)結(jié)果從 mAP@0.5、mAP@0.5:0.95、召回率 recall、準(zhǔn)確率 Precision、平均檢測(cè)處理時(shí)間、參數(shù)量、計(jì)算量和模型大小 8 個(gè)角度綜合進(jìn)行衡量,上述衡量標(biāo)準(zhǔn)具體計(jì)算公式如下。
其中公式(10)、(11)中的 TP、FP 和 FN 分別指正確檢驗(yàn)框、誤檢框和漏檢框數(shù)量。AP 值為 P-R 曲線面積,本文采用的是 101 個(gè)插值點(diǎn)的計(jì)算方法,考慮得更為精細(xì)。公式(13)中的 N 指檢測(cè)類別總數(shù),本文為 2。mAP@0.5 是指 IoU 設(shè)為 0.5 時(shí)所有類別的平均 AP,mAP@0.5:0.95 是指在不同 IoU 閾值上的平均 mAP,IoU 取值從 0.5 到 0.95,步長(zhǎng)為 0.05。平均檢測(cè)處理時(shí)間包括網(wǎng)絡(luò)推理時(shí)間及 NMS 處理所花費(fèi)的時(shí)間,模型大小是指最終訓(xùn)練結(jié)束得到保存的模型大小。
3.3.1 在人臉口罩?jǐn)?shù)據(jù)集上的實(shí)驗(yàn)結(jié)果
通過(guò)消融實(shí)驗(yàn)來(lái)逐步驗(yàn)證網(wǎng)絡(luò)結(jié)構(gòu)改變所引起的性能變化,三個(gè)實(shí)驗(yàn)分別訓(xùn)練了 YOLOv5、 Ghost-YOLOv5和Ghost-YOLOv5-Shuffle三個(gè)網(wǎng)絡(luò),通過(guò)名稱可以與前文中所說(shuō)的結(jié)構(gòu)變化一一對(duì)應(yīng)。實(shí)驗(yàn)過(guò)程和實(shí)驗(yàn)測(cè)試結(jié)果分別如下圖 11、12 和表 3 所示,其中曲線亮度依次遞增分別代表 YOLOv5、 Ghost-YOLOv5 和 Ghost-YOLOv5-Shuffle。
表 3 可以看出使用 GhostBottleneck 進(jìn)行替換后,模型計(jì)算量和參數(shù)量分別壓縮為原來(lái)的 63.41% 和 68.98%,在使用 GPU 或 CPU 的情況下分別有 13.64%和 16.37%的速度提升,并且模型大小變?yōu)樵瓉?lái)的 69.34%,但同時(shí),在圖 11(c)中也可以看出模型精確度有了明顯損失,且波動(dòng)更為劇烈,這在驗(yàn)證集的類別損失曲線中也有所體現(xiàn),所幸在訓(xùn)練后期,模型與 YOLOv5 之間精確度的差值較初期有所下降,除此之外,由圖 12 可知,Ghost-YOLOv5 最終所有類別的平均 AP 較 YOLOv5 僅下降 0.3%。
在繼續(xù)將標(biāo)準(zhǔn)卷積替換為 ShuffleConv 后,模型計(jì)算量和參數(shù)量進(jìn)一步分別壓縮為原來(lái)的33.54%和 34.24%,在使用 GPU 情況下速度仍然保持 1.9ms 不變,但 CPU 速度較 YOLOv5 提升了 28.25%,模型大小壓縮至原來(lái)的 35.77%。對(duì)于 GPU 情況下速度沒(méi)有提升的結(jié)果也是在預(yù)料之中,在算力足夠的 GPU 平臺(tái)上,組卷積雖然降低了運(yùn)算量和參數(shù)量,但是由于內(nèi)存交換速度的限制,ShuffleConv 的瓶頸并非是計(jì)算強(qiáng)度,故此模塊對(duì) GPU 環(huán)境下的影響微乎其微,但當(dāng)在計(jì)算能力有限的 CPU 平臺(tái)上,計(jì)算速度便會(huì)有相當(dāng)?shù)奶嵘鼮檫m合部署在資源有限的嵌入式設(shè)備之上。再者,Ghost-YOLOv5-Shuffle 在 Ghost-YOLOv5 的基礎(chǔ)上精度有所提升,從各個(gè)衡量標(biāo)準(zhǔn)來(lái)看都與 YOLOv5 的檢測(cè)能力更加貼近,且從分類損失曲線來(lái)看,在一定程度上證實(shí)了組卷積的正則化效果,由圖 12 可知最終 mAP@0.5 為 0.95,較 YOLOv5 的 0.951,幾乎沒(méi)有精度下降,且各類間差值都在 0.003 的范圍之內(nèi)。
YOLOv5s 與 Ghost-YOLOv5-Shuffle 實(shí)際運(yùn)行效果圖如下圖 13 所示,左邊圖片為 YOLOv5,右邊圖片為 Ghost-YOLOv5-Shuffle。
通過(guò)圖 13 中不同場(chǎng)景的實(shí)際檢測(cè)效果對(duì)比可以看出改進(jìn)后的模型在進(jìn)行非極小物體的識(shí)別時(shí)與基準(zhǔn)模型幾乎沒(méi)有區(qū)別,面對(duì)分布極為密集的模糊小物體時(shí),基準(zhǔn)模型要比改進(jìn)后的模型略微精確,但絕大部分小物體還是能夠正確識(shí)別。
3.3.2 不同網(wǎng)絡(luò)的對(duì)比實(shí)驗(yàn)
為了進(jìn)一步驗(yàn)證本文提出模塊及網(wǎng)絡(luò)的高效性,將其與同類輕量級(jí)網(wǎng)絡(luò) YOLOv3-tiny 、 YOLOv4-tiny 等重要經(jīng)典網(wǎng)絡(luò)進(jìn)行對(duì)比,得到結(jié)果如下表 4 所示,表中對(duì) 7 個(gè)不同模型進(jìn)行了多角度對(duì)比分析,根據(jù)序號(hào)分組進(jìn)行對(duì)比,從多維度證明了本文觀點(diǎn)。其中實(shí)驗(yàn)(5)、(6)Model 項(xiàng)中的括號(hào)里的數(shù)字代表模型中前三個(gè) GhostBottleneckCSP 中 GhostBottleneck 的個(gè)數(shù)。
首先由實(shí)驗(yàn)(0)、(2)、(4)、(6)對(duì)比可以看出本文提出模型相較 YOLOv3-tiny、YOLOv4-tiny、 YOLOv5-P6 具有絕對(duì)的優(yōu)勢(shì)。其模型大小分別僅為上述模型的 30.12%、40.65%和 20.9%,但 mAP 明顯大于 YOLOv3-tiny 、 YOLOv4-tiny ,且與 YOLOv5-P6 的 mAP@0.5 大小相同,結(jié)合表格,可得出選擇本文提出網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行人臉口罩佩戴檢測(cè)是合理且經(jīng)濟(jì)的。
其次通過(guò)實(shí)驗(yàn)(0)、(1)和實(shí)驗(yàn)(2)、(3)兩組對(duì)比實(shí)驗(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%,具體性能增強(qiáng)數(shù)據(jù)見表格實(shí)驗(yàn)(2)、(3)對(duì)比。最 后 , 通 過(guò) 實(shí) 驗(yàn) (5) 、 (6) 說(shuō) 明 適當(dāng)調(diào)整 GhostBottleneckCSP 中的 GhostBottleneck 數(shù)量能夠在一定程度上增加模型對(duì)小物體的檢測(cè)能力,在本文 提 出 模 型 的 基 礎(chǔ) 上 , 將 第 二 個(gè) 和 第 三 個(gè) GhostBottleneckCSP 中的 GhostBottleneck 數(shù)量分別設(shè)為 1 和 3,對(duì)應(yīng)實(shí)驗(yàn)(2)、(3),更大數(shù)量的模型精度有輕微地提升,且對(duì)小物體的檢測(cè)能力更強(qiáng)。在實(shí) 際 應(yīng) 用 場(chǎng) 景 中 可 根 據(jù) 任 務(wù) 需 要 適 當(dāng) 調(diào) 整 GhostBottleneck 模塊數(shù)量,達(dá)到模型大小與精度之間的巧妙平衡,實(shí)現(xiàn)更好的檢測(cè)性能。
4 結(jié)束語(yǔ)
本文設(shè)計(jì)并實(shí)現(xiàn)了輕量化的 YOLOv5 增強(qiáng)網(wǎng)絡(luò)模型,該模型可以壓縮并加快推理速度,模型精度得到最大限度的優(yōu)化,同時(shí)極大減輕了對(duì)硬件環(huán)境的依賴,能滿足實(shí)際應(yīng)用需求。后續(xù)工作將解決如何高效進(jìn)行移動(dòng)端的模型部署,在實(shí)際應(yīng)用中驗(yàn)證并完善所提模型;同時(shí)將口罩佩戴與其他關(guān)聯(lián)特征相結(jié)合,實(shí)現(xiàn)實(shí)用性更強(qiáng)的安全衛(wèi)生監(jiān)督系統(tǒng),以更好滿足社會(huì)實(shí)際需求。
論文指導(dǎo) >
SCI期刊推薦 >
論文常見問(wèn)題 >
SCI常見問(wèn)題 >