張學立,賈新春,王美剛,智瀚宇
山西大學 自動化與軟件學院,太原 030013
分析近年來施工安全事故數據,發現近90%的事故是由于違章作業造成的,其中因未佩戴安全帽和反光衣而引發的事故尤為常見[1]。安全帽與反光衣在工業生產和交通作業中能起到預防安全事故的重要作用,被廣泛地用于工地、鋼鐵、機械和造船等制造業,交通運輸和戶外作業等場景中,是工作人員的安全保障。目前,在安全管理中依然采用傳統的視頻監控系統和人工監督,存在不能實時檢測,檢測效果低,而且成本高等問題。為了解決工業生產和交通中存在的安全問題,并且實現智能化的管理,對安全帽和反光衣進行實時檢測顯得尤為重要。
隨著近幾年深度卷積神經網絡和GPU計算能力的發展,目標檢測被廣泛應用于智慧農業、人臉識別、自動駕駛等領域[2]。如果將目標檢測技術應用到安全帽和反光衣的檢測中,可以有效降低安全事故的發生、人工成本,并且減少安全事故給企業和社會帶來的巨大損失。現階段目標檢測算法可以分為兩個主流方向,一類是基于回歸策略的單步檢測算法,如RetinaNet 算法[3]、YOLO系列算法[4-7]和SSD算法[8]類。此類算法的核心理論是將圖像輸入模型,直接返回目標的邊界錨框、位置、類別信息。另一類是兩步檢測算法,主要有R-CNN[9-11]系列,這類算法先定位物體區域,再對區域進行分類。目前,國內外有許多學者對安全帽與反光衣進行了相關研究。Wang等人[12]提出了一種基于改進YOLOv3的安全帽和防護服檢測算法,調整了錨框的尺寸增強安全帽和防護服的檢測能力。Song 等人[13]將多目標跟蹤算法DeepSort和YOLOv5相結合,在小目標與密集目標的環境下,提高了對安全帽的檢測速度與檢測準確率。Jin等人[14]在YOLOv5s 骨干網中加入DWCA 注意力機制,加強了特征學習,提高了對安全帽的檢測準確率。Zhang等人[15]在YOLOv5s 中增加了一層檢測頭,提高了模型對小目標的識別能力。Sun 等人[16]在YOLOv5s 中加入MCA 注意力機制來降低頭盔小物體的漏檢率,提高檢測精度。并使用通道剪枝策略對網絡進行壓縮。程換新等人[17]提出了一種基于改進YOLOX的安全帽反光衣檢測算法,將BiFPN 模塊替換原加強特征提取網絡,并且使用Mosaic 方法訓練,提高網絡在復雜場景下的檢測能力。
上述檢測方法雖然一定程度上提高了對安全帽與反光衣的檢測精度,但沒有改變檢測算法復雜、計算量大,對硬件設備要求高等問題,而且大多算法只是單一地對安全帽的檢測,忽略了對反光衣的識別,應用范圍小。針對目前安全帽和反光衣檢測算法存在的問題,本文提出基于改進YOLOv5s的輕量化檢測算法。在自制數據集上進行訓練,并且效果良好。在原有YOLOv5s的網絡基礎上,引入Ghost_conv 代替原有的卷積模塊,極大地減少了模型參數與計算量;在網絡中增加了CA注意力機制模塊提高了檢測算法對感興趣區域的特征提取;使用C3CBAM 模塊代替部分C3 模塊,在不提高模型復雜度的情況下,保持了檢測精度。實驗結果表明,所改進的YOLOv5s 檢測算法在保證檢測準確性的情況下,實現了模型的輕量化。
YOLOv5 是YOLO 算法檢測算法的第5 代版本,YOLOv5s網絡結構圖如圖1所示。

圖1 YOLOv5s網絡結構Fig.1 YOLOv5s network structure
其中根據網絡深度和寬度的不同,可以分為YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x。YOLOv5s 網絡主要由3 部分構成,Backbone(骨干網)、Neck(頸部)和Head(檢測頭)構成。其中Backbone由CBS(Conv+BN+SiLU)、C3 模塊和快速空間金字塔池化SPPF(spatial pyramid pooling-fast)構成,主要用于提取圖像特征;Neck由特征金字塔FPN(feature pyramid network)+路徑聚合網絡PAN(perceptual adversarial network)構成,主要進行特征融合;Head對圖像進行最終的預測。
在實際的應用環境中,YOLOv5s 網絡模型性能容易受到硬件內存與計算量的影響。為了適應移動與嵌入型設備,引入了GhostNet 網絡結構,以降低模型復雜度。GhostNet[18]是一種輕量化的網絡,與傳統的卷積神經網絡相比,GhostNet 在不調整輸出特征圖的情況下具有更少的參數和更低的計算量。GhostNet 網絡主要由Ghost模塊構成。
Ghost模塊[19]將傳統的卷積與簡單的線性運算相結合,利用了特征提取與特征圖冗余的關系。
在網絡中Ghost 模塊代替了傳統了卷積過程,先對特征圖進行普通卷積操作,進行通道壓縮,然后進行線性變換獲得更多的特征圖,然后將得到的特征圖進行拼接操作,得到最終的特征圖[20],結果如圖2所示,其中Φ表示線性變換。普通卷積浮點計算量FLOPs的公式如下:

圖2 Ghost模塊Fig.2 Ghost module
Ghost模塊的浮點計算量FLOPs公式如下:
式中,n為輸出通道的數量;h′輸出特征的高度;w′為輸出特征的寬度;c為輸入通道的數量;g為卷積核大小;s為Ghost模塊中生成的特征圖數量;d為線性操作卷積核的大小。
其中,s?c,由計算可得知,普通卷積的計算量大約為Ghost 模塊計算量的s倍。GhostBottleNeck(圖3)中第一個Ghost 模塊用于增加通道數目,第二個Ghost 模塊用于減少通道數目,使其與輸入通道數目相同。將C3模塊與GhostBottleNeck結合,得到C3Ghost模塊(圖4),降低了模型的參數量與計算量。

圖3 GhostBottleNeck模塊Fig.3 GhostBottleNeck module

圖4 C3Ghost模塊Fig.4 C3Ghost module
注意力機制可以忽略不重要的信息,獲得特征圖中重要的屬性,從而提高檢測性能。這種機制能夠通過學習全局信息來選擇性地強調信息豐富的特征并抑制無用的特征。在工業生產和交通作業,周圍環境復雜多變,為了使網絡更能關注到安全帽與反光衣,忽略背景信息,引入了CA注意力機制。
CA(coordinate attention)[21]是一種輕量化的注意力機制模塊(圖5),可以使模型更加準確地定位和識別感興趣的區域。將通道注意力分解為兩個1 維特征編碼過程,分別沿2 個空間方向對特征進行聚合。這樣,既可以沿空間方向捕獲遠程依賴關系,同時可以沿另一空間方向保留具體的位置信息,減輕由2D 全局池化引起的位置信息丟失[22]。然后將生成的特征圖分別編碼為一對方向感知和位置敏感的特征圖,可以將其互補地應用于輸入特征圖,以增強關注對象的表示。不僅捕獲跨通道信息,還捕獲方向感知和位置敏感信息,這有助于模型更準確地定位和識別感興趣的對象[23]。

圖5 CA注意力機制網絡結構Fig.5 CA attention mechanism network structure
CBAM[24](convolutional block attention module)是一個輕量級的通用模塊(圖6),它可以無縫集成到任何CNN架構中,計算量低,它由通道和空間的注意力機制模塊構成[25]。CBAM 包含CAM(channel attention module)和SAM(spartial attention module)兩個子模塊,分別在通道和空間上,找到感興趣的區域,這樣既減少了參數量又降低了計算量,并且可以嵌入任意的網絡結構中去。

圖6 CBAM注意力機制模塊Fig.6 CBAM attention mechanism module
本文將CBAM 與YOLOv5s 中的BottleNeck 模塊相結合,構成了CBAMBotteNeck(圖7),代替C3 中的BotteNeck,構成C3CBAM,既減少了參數量,又維持了一定的特征提取能力。

圖7 CBAMBottleNeck模塊Fig.7 CBAMBottleNeck model
改進后的YOLOv5s 網絡模型結構如圖8 所示,網絡的Backone 層和Neck 層中使用Ghost 模塊來代替傳統卷積層,極大地降低了模型復雜度,減小了計算量。并且使用C3Ghost代替了主干網絡中的C3模塊。在網絡模型中添加6個CA(coordinate attention)注意力機制模塊,在不增加過多參數量的情況下,增強對了對感興趣特征圖區域的定位與識別,提高了識別精度。C3CBAM模塊替代了Neck層的C3模塊,在保持了對特征提取的同時,減少了參數量。

圖8 改進后的YOLOv5s模型Fig.8 Improved YOLOv5s model
實驗CPU為Intel?Xeon?Gold 6230R @ 2.10 GHz,GPU 為NVIDIA Quadro RTX8000,顯存為48 GB,ubuntu20.04 系統。使用Pytorch1.9.0 版本,編程語言python3.8.0,CUDA 版本為10.2。訓練超參數設置為表1。共訓練300 Epoch,批次大小設置為32,未添加預訓練權重。

表1 超參數設置Table 1 Hyperparameter setting
本文使用自己從網絡上收集的圖片,有三種圖片類型,分別為安全帽、反光衣和其他類衣服,共1 083 張。為了增加樣本數量,對圖像進行了隨機翻轉和加噪等操作,數據集圖像增加到5 415張,并使用labelImg對數據集中的圖像進行了標注。其中訓練集和測試集的比例為8∶2(訓練集4 332張、測試集1 083張)。
本文的評價指標主要有平均精度mAP(mean average precision)、參數量、浮點計算量FLOPs和模型大小。
式中,TP(true positive)表示正樣本被分類為正樣本;FP(false positive)表示負樣本被分類為正樣本;FN(false negative)表示正樣本被分類為負樣本。N表示樣本類別。P(precision)表示精確率,R(recall)表示召回率,AP(average precision)表示某個類比的平均精度。參數量與計算量FLOPs來衡量模型的復雜程度。
為了驗證本文所提出模型算法有效性,在自制數據集上進行了消融實驗如表2 所示。在加入Ghost 模塊后YOLOv5s的參數量下降了3.33×106、計算量下降了7.8 GFLOPs、模型大小降低了6.28%,但mAP 值也下降了1.7 個百分點。在YOLOv5s 中單獨加入CA 模塊后,在保持參數量和計算量幾乎不變的情況下,mAP值提升了0.5個百分點。單獨加入C3CBAM模塊后,模型mAP值降低了0.9 個百分點,參數量降低了0.5×106。從表2的對比中可以看出,Ghost 模塊可以大幅度降低模型的復雜程度,但同時影響了模型的平均精度。加入CA模塊雖然能提高mAP 值,但同時也略微增加了模型復雜程度。C3CBAM 也降低了模型的復雜程度,同時保持了一定的mAP 值。本文將3 種模塊與YOLOv5s 相結合,mAP 值達到93.6%,參數量為4.28×106,計算量為9.2 GFLOPs,模型大小為8.58 MB。與原始的YOLOv5s模型相比較,參數量下降了39%,計算量降低了41.7%,模型大小降低了37.3%,而模型的mAP值略高于原來的YOLOv5s檢測算法。

表2 消融實驗Table 2 Ablation experiment
P-R 曲線代表Precision(精度率)與Recal(l召回率)之間的關系。橫坐標為召回率,縱坐標為精確率。
P-R曲線與坐標軸圍成的面積為此種類型的AP,所以曲線越靠近右上方,AP 越大,算法性能越好。如圖9所示三條細線分別代表安全帽、反光衣和其他類衣服,藍色實線為三種類別的平均精度mAP。可以看出,所有曲線都非常靠近右上角,圍成面積占到90%以上。

圖9 P-R曲線Fig.9 Precision-Recall curve
圖10為算法的mAP曲線,共迭代300輪,當訓練到50 Epoch 時,算法的平均精度已經達到0.8 以上,收斂塊。訓練到120 Epoch,平均精度已經達到0.9,算法的平均精度高。

圖10 改進YOLOv5s mAP曲線Fig.10 Improved YOLOv5s mAP Curve
在自制數據集上,對安全帽,反光衣和其他類衣服,使用YOLOv5s 與改進后的YOLOv5s 檢測算法對目標進行識別對比,結果如圖11所示。從六張圖可以看出,對于安全帽的識別,改進前和改進后置信度相似,但對于反光衣和其他類衣服的檢測,改進后的檢測算法得到的置信度略高于改進后,展示了所改進算法的實用性。

圖11 檢測對比Fig.11 Detection and comparison
為了更進一步展示所提出算法的優異性,將本文所改進的檢測算法與YOLO系列的輕量級模型YOLOv3-Tiny、YOLOv4-Tiny 和YOLOv7-tiny 相比較,同時也和經典YOLO 檢測算法YOLOv3、YOLOv4 和YOLOv7 相比較,結果如表3 所示。YOLOv4-Tiny 的mAP 值僅為65.99%,模型大小為22.49 MB 與改進后的YOLOv5s 模型有較大差距。YOLOv3-Tiny 的mAP 值為86%,遠遠低于YOLOv5s的平均檢測精度。YOLOv7-tiny的mAP值為92.0%,參數量為6.01×106,性能表現良好,但并未超越改進后YOLOv5 的效果。改進后的YOLOv5s 的mAP達到93.6%,而且模型的復雜程度也小于其他輕量級模型。而YOLOv3 檢測算法的mAP 值雖然達到93.7%與改進后的算法相接近,但其模型參數量達到61.5×106,計算量為154.6 GFLOPs,相較于輕量級算法過大。YOLOv4的模型復雜度也相對較高,而且在自制數據集的上檢測精度也過低,僅為61.2%。YOLOv7 的mAP 值略高于改進后的YOLOv5s,但其模型復雜,不符合輕量化。YOLOv7-tiny、YOLOv3-tiny 與YOLOv4-tiny模型的每幀推理時間分別為2.0 ms、2.9 ms與3.1 ms,檢測速度較快。改進后的YOLOv5 的每幀推理時間5.3 ms與原始YOLOv5s 相近,但比YOLOv3、YOLOv4、YOLOv7檢測算法更快。綜合比較后,可以看出改進后模型的性能明顯優于其他網絡模型。

表3 對比實驗Table 3 Contrast experiment
本文針對安全帽與反光衣提出了一種改進的輕量化YOLOv5s檢測算法。使用Ghost模塊替換了YOLOv5s中的卷積,極大程度地減少了模型的參數量和浮點計算量。同時加入了CA注意力機制,并且用C3CBAM模塊替換了網絡中原來的C3模塊,維持了算法原本mAP值。通過消融實驗對比,展示了改進各模塊的優點。最后與其他輕量級算法相比較,改進后檢測算法的各項指標表現優異,符合模型輕量化要求,更適合在移動設備和嵌入式中使用。