趙江河,王海瑞,吳 蕾
昆明理工大學 信息工程與自動化學院,昆明 650504
安全帽作為施工工地的一項重要的安全保障,外殼能有效地分散下墜物的沖擊力量,內部可以進一步地對沖擊力進行緩沖、吸能,從而保障工人的頭部安全。雖然安全帽可以有效地保護工人,但是依舊有很多建筑工人進入建筑工地以及在施工現場不佩戴安全帽,盡管有很多建筑工人管理者都會在工人進入建筑工地時進行強制性的佩戴安全帽的要求。但是在施工中,難免會有許多工人忘記佩戴安全帽,而導致嚴重的后果。針對實時性的安全帽檢測,需要使用計算機來代替人工巡視進行處理。
基于安全帽的佩戴檢測,包括傳統的手工提取的方法以及基于深度學習的方法。
傳統的手工提取的方法主要是通過膚色、眼睛等來大致判斷圖像中人臉所在的位置,隨后通過顏色以及線條的特征來判斷人臉的區域內是否有安全帽的特征。李太華等提出了一種基于頭盔的行人檢測和顏色識別算法,根據檢測到的行人識別是否戴頭盔[1]。馮國臣等采用Canny邊緣檢測方法先進行人體的邊緣檢測,通過人體的位置來估測實現安全帽的檢測識別,對估測矩形內的像素特征進行判別,若滿足安全帽像素特征,則判定為已佩戴安全帽,若不滿足,則判定為未佩戴安全帽[2]。龐霞等通過人臉定位來判斷安全帽的位置,采用檢測膚色和眼睛、嘴巴的映射定位人臉,然后掃描人臉上部的矩形區域區域,通過提取顏色和形狀特征來判斷頭部是否佩戴安全帽[3]。
基于深度學習的方式則是使用目標檢測的框架直接對安全帽進行檢測,不需要人手工地提取特征,實現起來相對簡單。現有的研究是在原有的SOTA(state-ofthe-art module)目標檢測框架上進行對應的優化來提升準確度,如Faster-RCNN[4]、YOLO[5-7]、Mask-RCNN[8]、DSSD[9]、RetinaNet[10]、CenterNet[11]等。Long等通過訓練深度卷積神經網絡(DCNN)來優化SSD[12]。Gu等基于骨骼點信息確定施工人員的頭部區域,使用YOLO v4檢測安全帽區域,通過兩個區域的交疊情況來判斷是否佩戴安全帽[13]。Li等提出了一種在線硬示例挖掘(OHEM)與多部分組合相結合的目標檢測框架來優化安全帽的檢測精度[14]。Shen等采用互蒸餾的方法訓練了具有兩個對等DenseNet網絡的網絡模型來提高準確性[15]。
此外針對目標檢測框架的優化還有復用特征圖、增加注意力模塊、修改損失函數以及替換特征提取主干網絡等操作。方鈞婷等提出了一種基于注意力機制的級聯網絡缺陷檢測算法來優化R-CNN[16]。趙鵬飛等選用Darknet-53來優化SSD并融入特征增強模塊以及通道注意力機制[17]。宋艷艷等利用殘差結構思想,將淺層特征和深層特征進行上采樣連接融合來優化YOLO v3[18]。
綜上所述,由于施工場地采取到的圖像較小,小目標的數量過多,導致深度學習的精確度并不高。本文采用網絡結構較為簡單的one-stage代表的CenterNet作為安全帽佩戴檢測的算法框架,并在此基礎上提出FPNCenterNet,實驗結果表明,該算法在安全帽佩戴檢測上有良好的準確性和效率。
對于施工場地采集到的圖像來說,往往存在由于多個施工工人在一起而出現的目標集中且目標范圍小的特點,這種情況,如:目標遮擋、目標重疊等就造成了關于關鍵點網絡(CenterNet)無法正常檢測目標的問題。
CenterNet是基于關鍵點的one-stage的Anchor-free的目標檢測網絡,首先使用經典的特征提取主干網絡(如:ResNet-50、DLA或Hourglass等)對圖像進行特征提取操作。然后采用反卷積操作,將特征圖的長寬變為原始輸入圖像的1/4。隨后在128×128長寬的特征圖上進行卷積計算分別求出128×128個物體類別以及置信度、對中心點的偏移進行回歸以及對邊框的長寬進行回歸。本文使用的是ResNet-50作為特征提取的主干網絡。
本文提出了針對CenterNet的三個方面的改進:
(1)借鑒FPN[19]的思想,將CenterNet提取到的特征進行金字塔的特征融合,構建FPN-CenterNet框架,對提取到的特征進行復用。
(2)在FPN-CenterNet的基礎上,在特征提取的主干網絡層ResNet-50中增加ACB[20](非對稱卷積核)模塊,來增強特征提取能力。
(3)針對Anchor-free邊框回歸精度不高的問題,引入了DIoU[21]損失函數來優化該問題。
改進的算法的整體框架FPN-CenterNet如圖1所示。改進之處分別用紅框框出并標出序號。

圖1 FPN-CenterNet框架Fig.1 Structure of FPN-CenterNet
FPN-CenterNet框架是在原有的CenterNet框架上融入了特征金字塔結構,將主干網絡提取到的特征以及反卷積提取到的特征進行計算,實現特征的復用。FPN的框架如圖2所示。

圖2 特征金字塔網絡結構Fig.2 Structure of feature pyramid net
小范圍目標的定義為像素值低于32×32的目標。當進行二倍下采樣的時候,原本32×32長寬的特征圖會變成16×16長寬的特征圖;當進行32倍下采樣的時候,會由原來的32×32長寬的特征圖變成1×1長寬的特征圖,由原來的1 024個像素點信息變成了1個像素點信息,在后面的預測中1個像素點的信息不足以支持高精確度的推導。在下采樣的過程中,小目標的像素信息會急劇減少。在之后的上采樣過程中,由于小目標像素點的信息較少,上采樣之后的信息也較少。
特征金字塔FPN的出發點是當特征圖在不斷的下采樣過程中特征圖的長寬在不斷減小,小目標由于本身所具有的像素信息就少,導致在下采樣的過程中信息會不斷消失。此外在CenterNet的上采樣的過程中會攜帶更少的小目標的信息進行推導從而導致CenterNet對小目標的推導的準確性并不高。因此采用FPN的結構對CenterNet進行優化,復用主干網絡提取過程中的特征圖,使得網絡攜帶更多的小目標的信息去推導,從而提高CenterNet對小目標推導的準確性。
ACNet(asymmetric convolution net)是通過三種不同的卷積核來對同一個特征圖進行卷積操作,卷積核長寬為H×W、1×W以及H×1三種尺寸。它的切入點是通過非對稱卷積核來獲取更好的特征表達。并且由于卷積計算滿足分配率的性質,其在推導過程中沒有帶來任何的時間損失。卷積計算的分配率如公式(1)所示:

其中,I表示輸入的矩陣,K(1)和K(2)表示的是兩種大小的卷積核。
以3×3的為例,在訓練階段非對稱卷積核則是由3×3、1×3、3×1組成,分別對特征圖進行三種不同的卷積計算,計算完成后則進行卷積加操作。在推導階段,則是將這三種卷積進行卷積加操作以3×3卷積核為基核,1×3的卷積核直接與3×3卷積核的第二行的各個值進行相加,3×1的卷積核則與卷積核的第二列的各個值進行相加操作,在對輸入的特征圖進行卷積計算,從而在不增加推導時間的同時提升了整體提取特征圖信息的豐富性。ACB卷積核如圖3所示。

圖3 非對稱卷積核Fig.3 Asymmetric convolution kernel
非對稱卷積核能提升特征圖的信息,是因為其提升了模型對目標翻轉以及旋轉的魯棒性。如圖4所示,例如針對1×3的卷積核獲取到的特征提取,在圖像旋轉后就成了3×1的特征提取,三個紅色框分別代表原始的、翻轉后的以及旋轉后的1×3卷積核。因此1×3以及3×1的卷積核相對于3×3的卷積核來說是一個特征提取的擴展,可以更有效地獲取圖像中目標旋轉以及翻轉之后的特征信息。

圖4 圖像翻轉旋轉之后的信息Fig.4 Information after image flip and spin
DIoU(distance-IoU)損失函數是在IoU損失函數的基礎上考慮了預測款和真實框中心點的距離,從而提升了回歸的準確性。其計算公式如公式(2)所示:

其中,ρ(b,bgt)表示的是預測框以及真實框之間中心點的距離,c表示的是兩個邊框構成的最小閉包的對角線長度。如圖5所示。

圖5 預測框與真實框的距離比Fig.5 Distance ratio between bounding box and ground true
公式(2)中IoU的值如公式(3)所示:

其中,A表示的是預測框,B表示的是真實框。
IoU的圖表示如圖6所示。其中A表示預測框,B表示真實框。

圖6 交并比Fig.6 IoU
原始的邊框的回歸分為兩個損失函數,分別為邊框中心點的偏移回歸以及邊框的寬高回歸,原始的邊框回歸損失函數Lbox如公式(4)所示:

公式(4)中λoff和λsize分別是偏移損失和尺寸損失的權重;偏移損失Loff如公式(5)所示:

其中,N表示真實框的個數,表示各個中心點偏移的預測值;表示原始點縮放比的向下取整,如公式(6)所示;R表示圖像的縮放比,這里的值一般設置為4。

尺寸損失Lsize如公式(7)所示:

其中,N表示真實框的個數;表示各個中心點對應的邊框長寬的預測值;sk表示各個中心點對應邊框的真實值。
使用DIoU損失函數替換原始的邊框損失,故總修改之后的總損失如公式(8)所示:
其中focal損失函數如公式(9)所示:

其中,N表示熱度圖點的個數;Yxyc表示的是在特征圖中(x,y,c)這個點是否代表有物體,0表示不是物體,1表示是物體;表示在特征圖中(x,y,c)這個點的置信度;α、β是超參數,分別設置成2和4。
DIoU是在IoU損失函數的基礎上添加了預測框與真實框之間的中心點的距離關系,并且將該項作為損失函數的懲罰項。它可以直接最小化兩個中心點的距離,比GIoU損失函數還要收斂得快,此外,當兩個邊框沒有交集的時候,可以根據該懲罰項來提供梯度優化的方向。
對于Anchor-based的目標檢測框架來說,每一個點都要預測3~9個不等的邊框,而對于Anchor-free的目標檢測框架來說,每一個點只預測一個邊框。雖然Anchorfree減少了參數量,但是只有一個預測框會很大程度上導致整體預測框的不準確性。針對以上分析,Anchor-free系列的目標檢測框架應該使用對交并比更敏感的DIoU的損失函數來進行優化。從而提升單個預測框的精度。
本實驗采用的是Windows 10操作系統,使用的深度學習框架是PyTorch深度學習框架,使用的是Python3.8作為代碼解釋器。實驗環境配置如表1所示。

表1 實驗環境及配置Table 1 Experimental environment and configuration
由于網上沒有相關的安全帽數據集,因此在數據集方面需要自己去制作。該數據集的分類有兩類,一個是Hat(代表佩帶安全帽的),一類是Person(代表的是沒有佩戴安全帽的)。使用網絡爬蟲的技術在百度圖庫等網站上抓取圖片,以及采用視頻截取的方式來獲取數據源圖片,然后使用Labelimg工具進行圖片的標注,將其制作成Voc格式的數據并存儲到硬盤中。
由于在實際應用環境中,可能會出現檢測目標過小的情況,因此在數據采集的過程中盡量采集圖像中目標較小的情況。最終收集到的數據集共7 581張圖像。圖像中目標的展示如圖7所示。

圖7 安全帽數據集Fig.7 Safety helmet date sets
本實驗的初始化學習率設為0.001,前5次的訓練的批次設置為10。后55次的學習率設為0.000 1,訓練批次為3。
針對學習率的修改,使用的是PyTorch下的Reduce-LROnPlateau函數來動態地更新學習率,當發現評估的損失不再降低時,則動態減小學習率,factor設為0.5,patience設為2。后55次的學習率隨著訓練次數的變化如圖8所示。

圖8 學習率的變化Fig.8 Changes in learning rates
修改DIoU損失函數后,損失函數的值由分類損失以及DIoU損失兩部分構成,經過115 600次梯度優化之后,分類的損失徘徊在了0.74左右,DIoU的損失則是徘徊在了0.52左右。如圖9為后55輪訓練后的loss值。
在最后的5輪訓練中,除了最開始的一批的波動外,損失值接近于平穩,如圖10所示分類損失穩定在0.74左右,定位損失穩定在0.52左右。

圖9 分類和定位loss值Fig.9 Loss value of classify and locate

圖10 最后5輪訓練的損失值Fig.10 Loss value of last 5 rounds of training
將原始的模型以及修改的三個模型(在原始的模型上依次增加FPN模塊、ACB非對稱卷積核模塊和DIOU損失函數)按照上述相同的超參數進行60輪的迭代訓練,同時訓練Faster-RCNN以及YOLO v3,并且對這幾種模型進行比較。
mAP(mean average precision)表示的是各類AP的均值。AP表示的是PR曲線、x軸和y軸所圍成的近似面積。PR曲線是由Precision和Recall組成的曲線。其中精度Precision的計算公式如公式(10)所示,召回率Recall的計算公式如公式(11)所示。

TP(true positives)表示的是推導結果是正樣本并且確實是正樣本;FP(false positives)表示的是推導結果為正樣本但實際為負樣本;FN(false negative)表示的是推導結果為負樣本但實際為正樣本。正樣本表示的是計算的類型為該類且計算的邊框與真實框的交并比大于某個閾值,AP(0.5)時,該閾值為0.5。如圖11為FPNCenterNet的佩戴安全帽類的PR曲線。
根據控制變量法的思想,對修改處進行消融實驗,實驗結果如表2所示。其中mAP(0.5)表示的是在IoU交并比大于等于0.5的情況下,所有類的平均精確度。本實驗中FPS是指在GTX GeForce 1050的顯卡上的每秒處理的幀數。

圖11 FPN-CenterNet的佩戴安全帽類的PR曲線Fig.11 PR curve of wearing helmet of FPN-centernet

表2 消融實驗Table 2 Ablation experiment
由表2的消融實驗數據可知,在加入FPN(實驗2)之后,mAP(0.5)提升了4.52個百分點,FPS減少了0.51,提升了非常多,在沒有明顯減少推理速度的同時增加了mAP。證實了CenterNet在推理過程中,由于下采樣而造成的像素信息的消失,這也造成了在后續上采樣的過程中像素信息不夠而導致的小目標的檢測精度不高。在引入FPN之后,安全帽佩戴檢測的精度有了很大程度的提升。原因在于FPN的引入很大程度上增加了推導的特征圖的像素信息,將特征提取的主干網絡推導過程中的特征圖進行復用,即復用推導過程中特征圖的像素信息。
實驗3是在FPN的基礎上增加了ACNet模塊,將ACNet模塊添加到特征提取的主干網絡ResNet-50中,目的是為了增強主干網絡的特征提取能力,相比于實驗2,其mAP增加了0.42個百分點,FPS下降了0.9。本實驗中使用ACB非對稱卷積模塊代替普通的3×3卷積核。目的在于通過額外增加的兩個卷積核來提升網絡提取旋轉以及翻轉后目標特征的能力。在沒有明顯增加推理時間的同時能提升特征圖的細粒度信息。
實驗4是在實驗3的基礎上將原始的邊框損失函數修改為了DIoU損失函數。mAP提升了0.05個百分點。由于沒有修改網絡結構,因此FPN不變。對于Anchorfree來說一個點的邊框回歸只有一個,不需要進行非極大抑制剔除多余的預測框。不像Anchor-based可以一個點預測好幾種不同尺寸大小的邊框,當使用非極大抑制算法來消去多余的預測框時會增加整體的推導時間,此外使用DIoU損失函數優化效果也不是很明顯,但還是有點提升。由于數據集沒有進行縮放等數據增強的行為,因此提升較低。
本實驗中,還分別使用該數據集訓練了YOLO v3和Faster-RCNN,它們的mAP以及FPS對比數據如表3所示。

表3 各算法的性能對比Table 3 Performance comparison of each algorithm
根據表3的數據顯示,改進之后的FPN-CenterNet能有效地檢測安全帽的佩戴,相比與原始的CenterNet,mAP提升了4.99個百分點。相比于Faster-RCNN(Vgg-16)、Faster-RCNN(ResNet-50)、YOLO v3(ResNet-50)、YOLO v3(DarkNet-53)和FAENet(ResNet-50),mAP分別高了37.37、33.47、14.25、8.67和12.15個百分點。同時在GTX GeForce 1050的顯卡上,FPS分別提高了20.74、23.01、9.97、11.13和16.7。Hog+SVM算法則是使用opencv的人像檢測再按比例計算出頭部的位置,隨后根據SVM分類器進行分類。由于人像檢測和分類器必須兩者全部預測正確,結果才能預測正確,因此mAP并不高。
如圖12是原始的CenterNet和改進之后的FPNCenterNet的效果比較。

圖12 改進前后的檢測結果比較Fig.12 Comparison of test results before and after improvement
如圖12所示,改進前圖像的中間有許多的目標沒有檢測到從而導致了檢測精確度的下降。改進之后中間許多目標都檢測到了,每一個框的置信度都相較于原始的算法有了一定的提升。這說明FPN-CenterNet能有效地利用像素的信息來有效地提升安全帽檢測的精度。其在安全帽數據集的效果如圖13所示。

圖13 FPN-CenterNet效果展示Fig.13 FPN-Centernet effect display
如本實驗結果所示,FPN-CenterNet在安全帽的佩戴檢測方面有良好的精確度以及效率。
本文針對原始的CenterNet在安全帽佩戴檢測中精度不高的問題做出了分析。由于小范圍目標的數量較多而且容易出現密集分布,對于以關鍵點來驗證的CenterNet來說,密集的分布更容易出現像素點信息的丟失。針對下采樣過程中像素點信息容易消散的問題,結合了FPN的思想,對原始的框架進行了修改,修改為FPN-CenterNet框架,將提取到的特征信息進行了復用,從而減緩了下采樣過程中出現的像素點信息消散的情況;此外將非對稱卷積核融入到特征提取的主干網絡ResNet-50中,使用非對稱卷積來替換原始的3×3卷積核,在不增加推導時間的同時能豐富提取到的特征信息,提升特征圖的細粒度信息;最后通過DIoU損失函數替換原始的中心點偏移損失以及邊框的長寬回歸損失,對于Anchor-free來說每個點只有一個回歸的框,使用DIoU損失函數代替原有的邊框損失函數,能在一定程度上提升邊框預測的準確性。
實驗結果表明,FPN-CenterNet的改進相比于原始的CenterNet在速度基本不變的情況下可以有更好的檢測精度。改進之后的FPN-CenterNet算法相比于原始的CenterNet的mAP提升了4.99個百分點,在GTX GeForce 1050的顯卡上FPS為25.81。實驗表明修改之后的FPN-CenterNet算法在安全帽佩戴檢測上有良好的準確性和效率。
但依舊存在漏檢等問題,該問題出現在多個目標重疊或相近等情況,可能的原因是單尺度預測導致多個關鍵點重疊從而在解碼階段只有一個關鍵點有預測的信息。今后的實驗將會圍繞著這個問題進行優化和改進。