蘭 天 李岳陽 羅海馳
(1.江南大學江蘇省模式識別與計算智能工程實驗室 無錫 214122)
(2.江南大學物聯網工程學院 無錫 214122)
安全帽作為一種最常見和實用的個人防護用具,能夠有效地防止和減輕外來危險源對人們頭部的傷害。根據公開的網絡數據來看,由于施工人員的不安全行為造成的安全事故占到了所有事故總類的88%以上[1],保證工人佩戴安全帽是安全生產的重中之重。
近年來,基于深度學習的目標檢測技術得到了快速發展,主要可分為二階段和一階段兩種策略。在二階段方面,具有代表性的是從2014 年開始的R-CNN 網絡[2];之后又在2015 年提出該網絡模型的改進版Fast R-CNN[3]與Faster R-CNN 算法[4]。在一階段方面,具有代表性的是YOLO 系列網絡模型和SSD 算法[5]。對于YOLO 系列網絡模型,2015年由Joseph Redmon 提出YOLO 算法[6],又在2016年與2018 年分別提出了YOLOv2[7]與YOLOv3[8]算法,2020 年Alexey Bochkovskiy 提出了YOLOv4[9]的網絡結構。與R-CNN 系列模型相比,YOLO 系列目標檢測的方法檢測精度略低,但其檢測速度更快,檢測效率有很大提升,能夠應用于實時目標檢測任務中。
目前已有很多將上述網絡模型應用于解決實際問題的案例。例如,文獻[10]提出基于YOLOv4的乒乓球識別算法,文獻[11]提出棘突YOLOv4 輔助機器人巡檢算法,文獻[12]提出的基于YOLOv4的障礙物實時檢測算法。在安全帽檢測領域也有很多先例,例如文獻[13]提出基于輕量化網絡的安全帽檢測,文獻[14]一種基于高精度卷積神經網絡的安全帽識別算法,文獻[15]提出基于YOLOv3 的安全帽檢測算法。
綜合考慮不同檢測算法的優點,以及本文所要解決的工人安全帽佩戴實時檢測的任務,我們通過優化YOLOv4-Tiny和顯著性檢測模型,并將兩者有效融合,提出實時檢測工人安全帽佩戴的方法。所提出的方法主要有以下3個創新點。
1)為兼顧目標檢測的速度與準確率,我們采用YOLOv4-Tiny 算法對安全帽佩戴進行實時檢測。同時利用K-means聚類算法得到合適的先驗框,使模型檢測結果更為精準。
2)增加動態顯著性模型輸入的時間跨度,增強輸入數據的時序特征,更好地排除背景因素的影響,得到更為準確的顯著性檢測結果。
3)將優化后的YOLOv4-Tiny 模型目標檢測結果和改進后的動態顯著性檢測結果有效融合,對目標執行復檢操作,從而降低誤檢率。
YOLOv4-Tiny 目標檢測算法[16]是在YOLOv4模型的基礎之上改進而來的,對其主干網絡和特征提取網絡進行一定程度的精簡,如圖1 所示,其網絡主要分為主干網絡CSPDarknet53-Tiny 與加強特征提取網絡。

圖1 YOLOv4-Tiny網絡結構
YOLOv4-Tiny模型只在CSPDarkNet53-Tiny輸出兩個尺度的特征作為加強特征提取網絡(FPN)的輸入,其中對最后一個尺度的有效特征層卷積后進行上采樣,再與上一個尺度的特征層進行堆疊后卷積,二者分別輸出至YoloHead進行預測。
在YOLOv4-Tiny的損失函數的設計中,綜合考慮三個方面的誤差[8]:預測框與實際框的位置偏差Lloc、預測框與實際框的置信度誤差Lconf,以及預測框與實際框的預測種類誤差Lcls。損失函數為這三個部分的和,可以用如式(1)表示。
在計算預測框與實際框的位置偏差Lloc時,采用了CIOU[17]這個度量指標。CIOU 考慮了預測框與實際框之間的距離與重疊角度,同時引入二者框體長寬比不同的懲罰因子,使目標框體的回歸更加穩定。
為了在模型訓練時更加高效,模型中都會預設有不同尺度的先驗框,先驗框的設置直接關系到模型檢測性能的好壞。
為了獲得合適的先驗框,利用K-means聚類的方法來對數據集中的安全帽目標進行處理。在聚類過程中,首先隨機確定6 個初始聚類中心。之后以IOU 為評判標準,計算每個目標框與6 個聚類中心的距離,將該目標分配給最近的聚類中心。將所有目標框分配完畢后,對每個類計算所有屬于該類的目標框體的寬高平均值作為新的聚類中心。之后重復分配所有目標框體,直至聚類中心不再改變。具體分類的計算可用式(2)表示:
其中boxi為第i個檢測目標框,cenj為當前第j個聚類中心目標框,n為檢測目標的個數,k為所需聚類中心的個數。計算時隨機設定cenj的初始值,之后每計算一次,cenj為屬于第j個類內所有框體的尺寸平均值。
最終得到的先驗框與原始先驗框對比如表1所示。

表1 先驗框尺寸對比
為提高安全帽檢測的準確率,基于文獻[18],本文提出改進后的動態顯著性檢測算法。
基于全局對比度圖像顯著性檢測方法(LC)[19]是計算每個像素與圖片中其他所有像素在顏色上的距離之和,將該值作為該像素的顯著性值。該方法只是單純地比對像素顏色,故檢測效果較差。
為了能夠更好地檢測出圖片中的高顯著性區域,基于全卷積網絡,文獻[18]提出了一種顯著性檢測算法,具體結構如圖2所示。

圖2 基于全卷積網絡的顯著性模型結構
該顯著性檢測結構主要分為靜態顯著性檢測與動態顯著性檢測兩部分。其中靜態顯著性檢測網絡,會首先將圖片進行5 步共13 次的卷積,之后再利用對應的反卷積網絡得到靜態顯著性檢測結果。靜態顯著性檢測網絡的整體運算公式為
其中Y為輸出,I為圖像輸入,FS為卷積層產生的特征輸出,DS為反卷積操作,確保輸出Y與輸入圖像I相同大小,ΘF與ΘD代表卷積與反卷積時的參數。
如圖2 所示,動態顯著性檢測將靜態顯著性檢測網絡的輸入圖片It、該圖片的下一幀圖片It+1,以及靜態顯著性檢測結果Pt,三者在通道上連接作為輸入,該輸入通過如下公式進入第一層的卷積運算:
其中W為卷積權重,b為偏置項。It和It+1為相鄰兩幀圖像,Pt為It對應的靜態顯著性檢測結果。
該模型利用光流圖像對視頻相鄰兩幀的時間信息進行直接推斷,獲得了較高的計算效率與精度。
在文獻[18]的基于全卷積網絡的顯著性檢測算法中,其輸入數據為t時刻與t+1 時刻兩張相鄰幀的原圖It與It+1,以及t時刻對應的靜態顯著性檢測結果Pt。使用這種方法只利用到了兩幀的時序信息。
為了拓寬輸入幀的時序寬度,同時避免由于時序跨度過大而影響對移動目標檢測效果,我們把基于兩個時序輸入的方法拓展為基于三個時序輸入的方法,第一卷積層的計算公式修改如下:
其中W為卷積時的權重,b為偏置項。It+1和It+2為后續兩幀圖像,Pt為It對應的靜態顯著性檢測圖像。這種利用了三個時序特征的輸入可以進一步緩解圖像中背景因素影響。
對于一幀圖片,得到其目標檢測結果和動態顯著性檢測結果以后,可將兩者有效融合,得到最終的安全帽佩戴檢測結果。
具體操作為將目標檢測結果圖和顯著性檢測結果圖縮放至相同大小,這樣目標檢測結果中的目標框體位置,與顯著性檢測結果圖中的目標位置是相對應的,故可對目標檢測得到的每個目標,使用顯著性檢測結果進行復檢操作。
顯著性檢測結果圖為灰度圖,其中較亮的區域為高顯著性目標區域,較暗的區域為低顯著性背景區域。根據顯著性檢測結果,就可以判斷目標檢測框區域是否為高顯著區域,從而執行復檢操作。
利用動態顯著性檢測結果,對每一個YOLOv4-Tiny 模型檢測到的目標執行復檢,進一步判斷其是否為真實目標。如圖3 所示,圖3(a)、(b)和(d)分別為原圖、YOLOv4-Tiny 模型目標檢測結果圖和改進后的動態顯著性檢測結果圖,圖3(c)中三個小圖分別為根據圖3(b)中三個目標檢測的結果在圖3(d)中得到的對應三個顯著性檢測裁剪結果。

圖3 利用顯著性檢測結果進行復檢
對圖3(b)中每一個目標檢測結果執行復檢操作的步驟如下:
1)對于圖3(c)中每一個顯著性檢測裁剪小圖,檢測每一像素,如果其像素灰度值小于設定閾值T1,則判定為背景像素;否則,判定為目標像素。
2)預先設定一個占比閾值T2,對于圖3(c)中當前復檢的顯著性檢測裁剪小圖,如果在該顯著性檢測裁剪小圖中,背景像素占比小于閾值T2,則判定該顯著性檢測裁剪小圖對應的圖3(b)中的目標檢測結果為有效目標,復檢通過;反之,則對應的圖3(b)中的檢測結果為背景區域,目標檢測結果為誤檢。
在本文的實驗中,閾值T1設定為15(假設顯著性檢測結果圖中像素灰度值的范圍為0~255),閾值T2設定為70%。
本實驗在Windows10 操作系統環境下完成,實驗所采用的硬件設備配置為NVDIA GeForce GTX 1060 6GB 顯存的GPU,內存16GB。所使用的編程語言為Python,模型開發框架為Tensorflow。
對于優化后的YOLOv4-Tiny模型,其初始權重為基于COCO 數據集得到的預訓練模型權重。訓練與測試使用的數據集為從網絡中搜索得到共3645張圖片的安全帽數據集,按照7∶1的比例劃分為訓練集與測試集,這些圖片為單獨的照片,內含有佩戴安全帽的人員hat 與未佩戴安全帽的人員person。
針對安全帽佩戴檢測任務,本文采用K-means聚類方法得到適合安全帽數據集的先驗框,最終得到的先驗框大小如表1 所示。改進后先驗框尺寸相對較小,能夠更適合當前安全帽檢測任務。
對于450 張測試集,本文所提出的優化后的YOLOv4-Tiny 模型與原始模型在安全帽佩戴檢測任務中檢測結果對比如圖4 所示,其中圖4(a)顯示的是原始模型檢測結果,而圖4(b)顯示的是本文所提出的優化后的YOLOv4-Tiny模型檢測結果。

圖4 優化后的YOLOv4-Tiny模型與原始YOLOv4-Tiny模型檢測結果對比
圖4 中分別顯示了對hat 與person 兩個目標檢測正誤的數量。圖4(a)為原始模型檢測結果,圖4(b)為優化后YOLOv4-Tiny檢測結果。
在本文的實驗中,使用準確率和mAP 作為評價指標。其中,準確率Precision的計算公式為
其中,TP(True Positive)為模型判定為正樣本且實際標簽也為正樣本的數量,FP(False Positive)為模型判定為正樣本但實際標簽為負樣本的數量。
表2 所示的是本文所提出的優化后的YOLOv4-Tiny 模型與原始模型在安全帽佩戴檢測任務中檢測準確率以及mAP 對比結果。可以看出,優化后YOLOv4-Tiny 模型識別準確率和mAP 均有提升。

表2 本文所提出的優化后的YOLOv4-Tiny模型與原始YOLOv4-Tiny模型性能對比
在速度方面,相比于YOLOv4 網絡中六千四百萬的參數量,本文使用的YOLOv4-Tiny的參數量僅有不到六百萬,可以很好滿足對安全滿檢測的實時性要求。在本文的環境中,使用該模型可以達到平均每秒22幀,滿足對實地安全帽實時檢測需求。
由于動態顯著性檢測的輸入數據必須為連續的多張視頻幀,上述實驗使用的獨立圖片集在此實驗中不適用。故在測試顯著性檢測性能的實驗中,我們自建一組內含100幀連續圖片的視頻測試集。
圖5 所示的是視頻測試集中三幀連續圖片的四種顯著性檢測模型的檢測結果對比。其中圖5(a)為三幀連續圖片,圖5(b)為采用優化后的YOLOv4-Tiny 模型目標檢測結果,圖5(c)為真實顯著性圖,圖5(d)~(g)分別為LC檢測結果、靜態顯著性檢測結果、原始動態顯著性檢測結果和改進后動態顯著性檢測結果,圖5(h)為對應圖5(b)的檢測到的多個目標,在改進后動態顯著性模型的檢測結果圖中裁剪得到的小圖。
如果只是采用優化后的YOLOv4-Tiny模型,有時會將圖5(b)所在行中第一幀圖片中的一個沒有佩戴在工人頭上的安全帽誤檢為hat(工人佩戴安全帽)。之后進行復檢,我們可以得到在圖5(h)所在行的第一幀圖片的中間一個裁剪小圖,因其背景像素占比大于閾值T2,則判定該目標檢測結果為背景區域,即為誤檢目標,復檢不通過。
為了驗證顯著性檢測的效果,本文采用平均絕對誤差MAE(Mean Absolute Error)作為評判顯著性檢測的標準。MAE的計算方法如式(7)所示:
其中h和w表示圖片的高和寬;P(xi)和G(xi)分別表示像素的預測灰度值與真實灰度值,在計算時二者都會被歸一化到區間[0,1]。
表3 所示的是四種顯著性檢測的對比結果。其中傳統LC 方法效果最差,靜態顯著性檢測結果仍會有較多干擾區域,改進后動態顯著性檢測模型檢測結果最為準確。
實驗結果表明,如果使用靜態顯著性檢測方法進行復檢,無法剔除誤檢目標。利用改進動態顯著性檢測方法則可以有效檢測出圖5(b)中目標檢測得到的誤檢目標,從而將誤檢目標剔除。
表4 所示的是安全帽佩戴檢測的消融實驗結果。首先,從表中可看出,如果只是采用目標檢測模型,與原始YOLOv4-Tiny 模型對比,優化后的YOLOv4-Tiny模型檢測準確率會提升較多。

表4 安全帽佩戴檢測消融實驗結果
其次,不論目標檢測模型采用原始YOLOv4-Tiny模型還是優化后的YOLOv4-Tiny模型,靜態顯著性檢測模型沒有起到復檢效果。使用靜態顯著性檢測進行復檢,對應的檢測準確率沒有提升。
最后,不論目標檢測模型采用原始YOLOv4-Tiny模型還是優化后的YOLOv4-Tiny模型,改進后的動態顯著性檢測模型能夠起到復檢作用,可有效提升檢測準確率。
在本文中,對YOLOv4-Tiny 模型進行優化,再與改進的動態顯著性檢測算法相結合,應用于工人安全帽佩戴檢測。首先針對安全帽佩戴檢測數據集,利用K-means 聚類的方法選擇合適的YOLOv4-Tiny 模型目標檢測先驗框,有效提升目標檢測的準確率。在動態顯著性檢測算法中,使用連續三個時序圖片的信息作為輸入,得到更為準確的高顯著性區域檢測。最終,使用動態顯著性檢測結果,對優化后的YOLOv4-Tiny模型檢測到的每一個目標執行復檢操作,有效剔除誤檢目標,從而提高安全帽佩戴檢測準確率。