張學(xué)立,賈新春,王美剛,智瀚宇
山西大學(xué) 自動化與軟件學(xué)院,太原 030013
分析近年來施工安全事故數(shù)據(jù),發(fā)現(xiàn)近90%的事故是由于違章作業(yè)造成的,其中因未佩戴安全帽和反光衣而引發(fā)的事故尤為常見[1]。安全帽與反光衣在工業(yè)生產(chǎn)和交通作業(yè)中能起到預(yù)防安全事故的重要作用,被廣泛地用于工地、鋼鐵、機(jī)械和造船等制造業(yè),交通運(yùn)輸和戶外作業(yè)等場景中,是工作人員的安全保障。目前,在安全管理中依然采用傳統(tǒng)的視頻監(jiān)控系統(tǒng)和人工監(jiān)督,存在不能實(shí)時檢測,檢測效果低,而且成本高等問題。為了解決工業(yè)生產(chǎn)和交通中存在的安全問題,并且實(shí)現(xiàn)智能化的管理,對安全帽和反光衣進(jìn)行實(shí)時檢測顯得尤為重要。
隨著近幾年深度卷積神經(jīng)網(wǎng)絡(luò)和GPU計(jì)算能力的發(fā)展,目標(biāo)檢測被廣泛應(yīng)用于智慧農(nóng)業(yè)、人臉識別、自動駕駛等領(lǐng)域[2]。如果將目標(biāo)檢測技術(shù)應(yīng)用到安全帽和反光衣的檢測中,可以有效降低安全事故的發(fā)生、人工成本,并且減少安全事故給企業(yè)和社會帶來的巨大損失?,F(xiàn)階段目標(biāo)檢測算法可以分為兩個主流方向,一類是基于回歸策略的單步檢測算法,如RetinaNet 算法[3]、YOLO系列算法[4-7]和SSD算法[8]類。此類算法的核心理論是將圖像輸入模型,直接返回目標(biāo)的邊界錨框、位置、類別信息。另一類是兩步檢測算法,主要有R-CNN[9-11]系列,這類算法先定位物體區(qū)域,再對區(qū)域進(jìn)行分類。目前,國內(nèi)外有許多學(xué)者對安全帽與反光衣進(jìn)行了相關(guān)研究。Wang等人[12]提出了一種基于改進(jìn)YOLOv3的安全帽和防護(hù)服檢測算法,調(diào)整了錨框的尺寸增強(qiáng)安全帽和防護(hù)服的檢測能力。Song 等人[13]將多目標(biāo)跟蹤算法DeepSort和YOLOv5相結(jié)合,在小目標(biāo)與密集目標(biāo)的環(huán)境下,提高了對安全帽的檢測速度與檢測準(zhǔn)確率。Jin等人[14]在YOLOv5s 骨干網(wǎng)中加入DWCA 注意力機(jī)制,加強(qiáng)了特征學(xué)習(xí),提高了對安全帽的檢測準(zhǔn)確率。Zhang等人[15]在YOLOv5s 中增加了一層檢測頭,提高了模型對小目標(biāo)的識別能力。Sun 等人[16]在YOLOv5s 中加入MCA 注意力機(jī)制來降低頭盔小物體的漏檢率,提高檢測精度。并使用通道剪枝策略對網(wǎng)絡(luò)進(jìn)行壓縮。程換新等人[17]提出了一種基于改進(jìn)YOLOX的安全帽反光衣檢測算法,將BiFPN 模塊替換原加強(qiáng)特征提取網(wǎng)絡(luò),并且使用Mosaic 方法訓(xùn)練,提高網(wǎng)絡(luò)在復(fù)雜場景下的檢測能力。
上述檢測方法雖然一定程度上提高了對安全帽與反光衣的檢測精度,但沒有改變檢測算法復(fù)雜、計(jì)算量大,對硬件設(shè)備要求高等問題,而且大多算法只是單一地對安全帽的檢測,忽略了對反光衣的識別,應(yīng)用范圍小。針對目前安全帽和反光衣檢測算法存在的問題,本文提出基于改進(jìn)YOLOv5s的輕量化檢測算法。在自制數(shù)據(jù)集上進(jìn)行訓(xùn)練,并且效果良好。在原有YOLOv5s的網(wǎng)絡(luò)基礎(chǔ)上,引入Ghost_conv 代替原有的卷積模塊,極大地減少了模型參數(shù)與計(jì)算量;在網(wǎng)絡(luò)中增加了CA注意力機(jī)制模塊提高了檢測算法對感興趣區(qū)域的特征提??;使用C3CBAM 模塊代替部分C3 模塊,在不提高模型復(fù)雜度的情況下,保持了檢測精度。實(shí)驗(yàn)結(jié)果表明,所改進(jìn)的YOLOv5s 檢測算法在保證檢測準(zhǔn)確性的情況下,實(shí)現(xiàn)了模型的輕量化。
YOLOv5 是YOLO 算法檢測算法的第5 代版本,YOLOv5s網(wǎng)絡(luò)結(jié)構(gòu)圖如圖1所示。
圖1 YOLOv5s網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 YOLOv5s network structure
其中根據(jù)網(wǎng)絡(luò)深度和寬度的不同,可以分為YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x。YOLOv5s 網(wǎng)絡(luò)主要由3 部分構(gòu)成,Backbone(骨干網(wǎng))、Neck(頸部)和Head(檢測頭)構(gòu)成。其中Backbone由CBS(Conv+BN+SiLU)、C3 模塊和快速空間金字塔池化SPPF(spatial pyramid pooling-fast)構(gòu)成,主要用于提取圖像特征;Neck由特征金字塔FPN(feature pyramid network)+路徑聚合網(wǎng)絡(luò)PAN(perceptual adversarial network)構(gòu)成,主要進(jìn)行特征融合;Head對圖像進(jìn)行最終的預(yù)測。
在實(shí)際的應(yīng)用環(huán)境中,YOLOv5s 網(wǎng)絡(luò)模型性能容易受到硬件內(nèi)存與計(jì)算量的影響。為了適應(yīng)移動與嵌入型設(shè)備,引入了GhostNet 網(wǎng)絡(luò)結(jié)構(gòu),以降低模型復(fù)雜度。GhostNet[18]是一種輕量化的網(wǎng)絡(luò),與傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)相比,GhostNet 在不調(diào)整輸出特征圖的情況下具有更少的參數(shù)和更低的計(jì)算量。GhostNet 網(wǎng)絡(luò)主要由Ghost模塊構(gòu)成。
Ghost模塊[19]將傳統(tǒng)的卷積與簡單的線性運(yùn)算相結(jié)合,利用了特征提取與特征圖冗余的關(guān)系。
在網(wǎng)絡(luò)中Ghost 模塊代替了傳統(tǒng)了卷積過程,先對特征圖進(jìn)行普通卷積操作,進(jìn)行通道壓縮,然后進(jìn)行線性變換獲得更多的特征圖,然后將得到的特征圖進(jìn)行拼接操作,得到最終的特征圖[20],結(jié)果如圖2所示,其中Φ表示線性變換。普通卷積浮點(diǎn)計(jì)算量FLOPs的公式如下:
圖2 Ghost模塊Fig.2 Ghost module
Ghost模塊的浮點(diǎn)計(jì)算量FLOPs公式如下:
式中,n為輸出通道的數(shù)量;h′輸出特征的高度;w′為輸出特征的寬度;c為輸入通道的數(shù)量;g為卷積核大小;s為Ghost模塊中生成的特征圖數(shù)量;d為線性操作卷積核的大小。
其中,s?c,由計(jì)算可得知,普通卷積的計(jì)算量大約為Ghost 模塊計(jì)算量的s倍。GhostBottleNeck(圖3)中第一個Ghost 模塊用于增加通道數(shù)目,第二個Ghost 模塊用于減少通道數(shù)目,使其與輸入通道數(shù)目相同。將C3模塊與GhostBottleNeck結(jié)合,得到C3Ghost模塊(圖4),降低了模型的參數(shù)量與計(jì)算量。
圖3 GhostBottleNeck模塊Fig.3 GhostBottleNeck module
圖4 C3Ghost模塊Fig.4 C3Ghost module
注意力機(jī)制可以忽略不重要的信息,獲得特征圖中重要的屬性,從而提高檢測性能。這種機(jī)制能夠通過學(xué)習(xí)全局信息來選擇性地強(qiáng)調(diào)信息豐富的特征并抑制無用的特征。在工業(yè)生產(chǎn)和交通作業(yè),周圍環(huán)境復(fù)雜多變,為了使網(wǎng)絡(luò)更能關(guān)注到安全帽與反光衣,忽略背景信息,引入了CA注意力機(jī)制。
CA(coordinate attention)[21]是一種輕量化的注意力機(jī)制模塊(圖5),可以使模型更加準(zhǔn)確地定位和識別感興趣的區(qū)域。將通道注意力分解為兩個1 維特征編碼過程,分別沿2 個空間方向?qū)μ卣鬟M(jìn)行聚合。這樣,既可以沿空間方向捕獲遠(yuǎn)程依賴關(guān)系,同時可以沿另一空間方向保留具體的位置信息,減輕由2D 全局池化引起的位置信息丟失[22]。然后將生成的特征圖分別編碼為一對方向感知和位置敏感的特征圖,可以將其互補(bǔ)地應(yīng)用于輸入特征圖,以增強(qiáng)關(guān)注對象的表示。不僅捕獲跨通道信息,還捕獲方向感知和位置敏感信息,這有助于模型更準(zhǔn)確地定位和識別感興趣的對象[23]。
圖5 CA注意力機(jī)制網(wǎng)絡(luò)結(jié)構(gòu)Fig.5 CA attention mechanism network structure
CBAM[24](convolutional block attention module)是一個輕量級的通用模塊(圖6),它可以無縫集成到任何CNN架構(gòu)中,計(jì)算量低,它由通道和空間的注意力機(jī)制模塊構(gòu)成[25]。CBAM 包含CAM(channel attention module)和SAM(spartial attention module)兩個子模塊,分別在通道和空間上,找到感興趣的區(qū)域,這樣既減少了參數(shù)量又降低了計(jì)算量,并且可以嵌入任意的網(wǎng)絡(luò)結(jié)構(gòu)中去。
圖6 CBAM注意力機(jī)制模塊Fig.6 CBAM attention mechanism module
本文將CBAM 與YOLOv5s 中的BottleNeck 模塊相結(jié)合,構(gòu)成了CBAMBotteNeck(圖7),代替C3 中的BotteNeck,構(gòu)成C3CBAM,既減少了參數(shù)量,又維持了一定的特征提取能力。
圖7 CBAMBottleNeck模塊Fig.7 CBAMBottleNeck model
改進(jìn)后的YOLOv5s 網(wǎng)絡(luò)模型結(jié)構(gòu)如圖8 所示,網(wǎng)絡(luò)的Backone 層和Neck 層中使用Ghost 模塊來代替?zhèn)鹘y(tǒng)卷積層,極大地降低了模型復(fù)雜度,減小了計(jì)算量。并且使用C3Ghost代替了主干網(wǎng)絡(luò)中的C3模塊。在網(wǎng)絡(luò)模型中添加6個CA(coordinate attention)注意力機(jī)制模塊,在不增加過多參數(shù)量的情況下,增強(qiáng)對了對感興趣特征圖區(qū)域的定位與識別,提高了識別精度。C3CBAM模塊替代了Neck層的C3模塊,在保持了對特征提取的同時,減少了參數(shù)量。
圖8 改進(jìn)后的YOLOv5s模型Fig.8 Improved YOLOv5s model
實(shí)驗(yàn)CPU為Intel?Xeon?Gold 6230R @ 2.10 GHz,GPU 為NVIDIA Quadro RTX8000,顯存為48 GB,ubuntu20.04 系統(tǒng)。使用Pytorch1.9.0 版本,編程語言python3.8.0,CUDA 版本為10.2。訓(xùn)練超參數(shù)設(shè)置為表1。共訓(xùn)練300 Epoch,批次大小設(shè)置為32,未添加預(yù)訓(xùn)練權(quán)重。
表1 超參數(shù)設(shè)置Table 1 Hyperparameter setting
本文使用自己從網(wǎng)絡(luò)上收集的圖片,有三種圖片類型,分別為安全帽、反光衣和其他類衣服,共1 083 張。為了增加樣本數(shù)量,對圖像進(jìn)行了隨機(jī)翻轉(zhuǎn)和加噪等操作,數(shù)據(jù)集圖像增加到5 415張,并使用labelImg對數(shù)據(jù)集中的圖像進(jìn)行了標(biāo)注。其中訓(xùn)練集和測試集的比例為8∶2(訓(xùn)練集4 332張、測試集1 083張)。
本文的評價(jià)指標(biāo)主要有平均精度mAP(mean average precision)、參數(shù)量、浮點(diǎn)計(jì)算量FLOPs和模型大小。
式中,TP(true positive)表示正樣本被分類為正樣本;FP(false positive)表示負(fù)樣本被分類為正樣本;FN(false negative)表示正樣本被分類為負(fù)樣本。N表示樣本類別。P(precision)表示精確率,R(recall)表示召回率,AP(average precision)表示某個類比的平均精度。參數(shù)量與計(jì)算量FLOPs來衡量模型的復(fù)雜程度。
為了驗(yàn)證本文所提出模型算法有效性,在自制數(shù)據(jù)集上進(jìn)行了消融實(shí)驗(yàn)如表2 所示。在加入Ghost 模塊后YOLOv5s的參數(shù)量下降了3.33×106、計(jì)算量下降了7.8 GFLOPs、模型大小降低了6.28%,但mAP 值也下降了1.7 個百分點(diǎn)。在YOLOv5s 中單獨(dú)加入CA 模塊后,在保持參數(shù)量和計(jì)算量幾乎不變的情況下,mAP值提升了0.5個百分點(diǎn)。單獨(dú)加入C3CBAM模塊后,模型mAP值降低了0.9 個百分點(diǎn),參數(shù)量降低了0.5×106。從表2的對比中可以看出,Ghost 模塊可以大幅度降低模型的復(fù)雜程度,但同時影響了模型的平均精度。加入CA模塊雖然能提高mAP 值,但同時也略微增加了模型復(fù)雜程度。C3CBAM 也降低了模型的復(fù)雜程度,同時保持了一定的mAP 值。本文將3 種模塊與YOLOv5s 相結(jié)合,mAP 值達(dá)到93.6%,參數(shù)量為4.28×106,計(jì)算量為9.2 GFLOPs,模型大小為8.58 MB。與原始的YOLOv5s模型相比較,參數(shù)量下降了39%,計(jì)算量降低了41.7%,模型大小降低了37.3%,而模型的mAP值略高于原來的YOLOv5s檢測算法。
表2 消融實(shí)驗(yàn)Table 2 Ablation experiment
P-R 曲線代表Precision(精度率)與Recal(l召回率)之間的關(guān)系。橫坐標(biāo)為召回率,縱坐標(biāo)為精確率。
P-R曲線與坐標(biāo)軸圍成的面積為此種類型的AP,所以曲線越靠近右上方,AP 越大,算法性能越好。如圖9所示三條細(xì)線分別代表安全帽、反光衣和其他類衣服,藍(lán)色實(shí)線為三種類別的平均精度mAP。可以看出,所有曲線都非??拷疑辖?,圍成面積占到90%以上。
圖9 P-R曲線Fig.9 Precision-Recall curve
圖10為算法的mAP曲線,共迭代300輪,當(dāng)訓(xùn)練到50 Epoch 時,算法的平均精度已經(jīng)達(dá)到0.8 以上,收斂塊。訓(xùn)練到120 Epoch,平均精度已經(jīng)達(dá)到0.9,算法的平均精度高。
圖10 改進(jìn)YOLOv5s mAP曲線Fig.10 Improved YOLOv5s mAP Curve
在自制數(shù)據(jù)集上,對安全帽,反光衣和其他類衣服,使用YOLOv5s 與改進(jìn)后的YOLOv5s 檢測算法對目標(biāo)進(jìn)行識別對比,結(jié)果如圖11所示。從六張圖可以看出,對于安全帽的識別,改進(jìn)前和改進(jìn)后置信度相似,但對于反光衣和其他類衣服的檢測,改進(jìn)后的檢測算法得到的置信度略高于改進(jìn)后,展示了所改進(jìn)算法的實(shí)用性。
圖11 檢測對比Fig.11 Detection and comparison
為了更進(jìn)一步展示所提出算法的優(yōu)異性,將本文所改進(jìn)的檢測算法與YOLO系列的輕量級模型YOLOv3-Tiny、YOLOv4-Tiny 和YOLOv7-tiny 相比較,同時也和經(jīng)典YOLO 檢測算法YOLOv3、YOLOv4 和YOLOv7 相比較,結(jié)果如表3 所示。YOLOv4-Tiny 的mAP 值僅為65.99%,模型大小為22.49 MB 與改進(jìn)后的YOLOv5s 模型有較大差距。YOLOv3-Tiny 的mAP 值為86%,遠(yuǎn)遠(yuǎn)低于YOLOv5s的平均檢測精度。YOLOv7-tiny的mAP值為92.0%,參數(shù)量為6.01×106,性能表現(xiàn)良好,但并未超越改進(jìn)后YOLOv5 的效果。改進(jìn)后的YOLOv5s 的mAP達(dá)到93.6%,而且模型的復(fù)雜程度也小于其他輕量級模型。而YOLOv3 檢測算法的mAP 值雖然達(dá)到93.7%與改進(jìn)后的算法相接近,但其模型參數(shù)量達(dá)到61.5×106,計(jì)算量為154.6 GFLOPs,相較于輕量級算法過大。YOLOv4的模型復(fù)雜度也相對較高,而且在自制數(shù)據(jù)集的上檢測精度也過低,僅為61.2%。YOLOv7 的mAP 值略高于改進(jìn)后的YOLOv5s,但其模型復(fù)雜,不符合輕量化。YOLOv7-tiny、YOLOv3-tiny 與YOLOv4-tiny模型的每幀推理時間分別為2.0 ms、2.9 ms與3.1 ms,檢測速度較快。改進(jìn)后的YOLOv5 的每幀推理時間5.3 ms與原始YOLOv5s 相近,但比YOLOv3、YOLOv4、YOLOv7檢測算法更快。綜合比較后,可以看出改進(jìn)后模型的性能明顯優(yōu)于其他網(wǎng)絡(luò)模型。
表3 對比實(shí)驗(yàn)Table 3 Contrast experiment
本文針對安全帽與反光衣提出了一種改進(jìn)的輕量化YOLOv5s檢測算法。使用Ghost模塊替換了YOLOv5s中的卷積,極大程度地減少了模型的參數(shù)量和浮點(diǎn)計(jì)算量。同時加入了CA注意力機(jī)制,并且用C3CBAM模塊替換了網(wǎng)絡(luò)中原來的C3模塊,維持了算法原本mAP值。通過消融實(shí)驗(yàn)對比,展示了改進(jìn)各模塊的優(yōu)點(diǎn)。最后與其他輕量級算法相比較,改進(jìn)后檢測算法的各項(xiàng)指標(biāo)表現(xiàn)優(yōu)異,符合模型輕量化要求,更適合在移動設(shè)備和嵌入式中使用。