黃林泉,蔣良衛(wèi),高曉峰
(南華大學計算機學院,衡陽421000)
在如今的工業(yè)界中,各種生產(chǎn)安全事故頻繁發(fā)生,在對近幾年全國安全事故數(shù)據(jù)分析后發(fā)現(xiàn)95%的生產(chǎn)安全事故是由于工作人員的不安全行為所導致的,如未佩戴安全帽進入車間。而產(chǎn)生這些現(xiàn)象的原因是由于生產(chǎn)監(jiān)管不力,因為目前的生產(chǎn)監(jiān)管工作枯燥且人力物力耗費大。為了解決上述問題,本文提出了一種視頻中安全帽佩戴檢測方法,可以很好的適用于多種復雜場景,具有較高的準確率且滿足實時性要求。將該方法應用于生產(chǎn)車間場景下,僅需一個攝像頭和一臺服務器便可完成工作車間的管控,實時可靠的檢測車間工作人員是否佩戴安全帽,對于不安全行為及時進行報警提示,幫助車間管理人員更好更輕松地監(jiān)管車間的安全情況,避免安全事故的發(fā)生。
Joseph Redmon 于2018 年提出的YOLOv3[1-3]算法由于其輕量、依賴少、算法高效等優(yōu)點而十分受歡迎??墒窃诟邷蚀_率的要求下YOLOv3 卻很難達到高速率的要求。并且在YOLOv3 算法中,會分別取用特征提取網(wǎng)絡DarkNet53 輸出的三種尺度的特征圖進行特征融合,這三種尺度的特征圖分別對應了不同級別的特征信息,而這些特征圖之間跨度十分大,經(jīng)歷了多個卷積層之后導致上一尺度的特征信息丟失嚴重,進而會導致特征融合質(zhì)量較差的問題。針對上述問題,本文種使用了基于ResNet[4]網(wǎng)絡和InceptionV3[11]網(wǎng)絡改進的ResNeXt50[5]網(wǎng)絡作為新的特征提取網(wǎng)絡以增強特征圖的表達能力。同時引入CSP Net[6]中提出的梯度分流截斷機制,在減少模型運算量的同時進一步的提高卷積網(wǎng)絡的學習能力。并且融入了SPP Net[7]和PA Net[8]網(wǎng)絡中的思想提高特征融合質(zhì)量。為了提高算法的整體速度,結(jié)合DeepSort[9]多目標跟蹤技術實現(xiàn)跳幀檢測,對檢測到的每個目標進行運動預測,計算出目標的下一幀位置以代替目標檢測,減少時耗,進而提高算法處理視頻時的實時性。
目前開源的安全帽數(shù)據(jù)集只有SHWD(Safety Hel?met Wear Dataset)數(shù)據(jù)集,該數(shù)據(jù)集一共包含7581 張圖片數(shù)據(jù),以Pascal VOC 格式進行了標注,共分為per?son(未佩戴安全帽)和ha(t佩戴安全帽)兩類。通過對該數(shù)據(jù)集進行研究分析發(fā)現(xiàn),該數(shù)據(jù)集包括9044 個佩戴安全帽的目標以及111514 個未佩戴安全帽的目標,正負例樣本十分不均衡,且存在數(shù)據(jù)場景種類較單一、拍攝角度多為直拍、缺乏易于安全帽混淆的帽子數(shù)據(jù)(如防曬帽、貝雷帽等)以及安全帽未正確佩戴數(shù)據(jù)(如安全帽置于手中或桌面上等情況)。因此本文針對性的采集了上述缺乏的數(shù)據(jù)和一些復雜難例數(shù)據(jù)共2400張圖片數(shù)據(jù)并且進行標注,與SHWD 數(shù)據(jù)集共9981 張圖片用于算法的訓練以及驗證。數(shù)據(jù)集樣例如圖1 和2 所示。
圖1 易混淆安全帽數(shù)據(jù)
圖2 安全帽未正確佩戴數(shù)
針對于安全帽檢測,大部分的數(shù)據(jù)都為遠距離的小目標數(shù)據(jù),而密集小目標數(shù)據(jù)對于目標檢測算法來說一直都是一個難題,本文使用數(shù)據(jù)鑲嵌(Data Mosa?ic)的方法進行數(shù)據(jù)增強。數(shù)據(jù)鑲嵌技術指的是在指定的圖像尺寸下,隨機選取4 張圖片轉(zhuǎn)換到同一尺寸,接著在圖像中隨機選取一點p 作為切分點,將圖像切分為4 部分并且分別從上述隨機選取的4 張圖片中進行裁剪得到section 1、2、3、4,最終將這四部分鑲嵌在一起得到結(jié)果。流程如圖3 所示。之后進一步判斷各個部分是否包含了檢測目標,如果包含了目標就將各sec?tion 所包含的目標組合形成鑲嵌后圖像的標注數(shù)據(jù)。此外,本文還使用了隨機放縮、隨機水平翻轉(zhuǎn)、隨機通道抖動等數(shù)據(jù)增強手段。在訓練過程當中,采用了0.4-1.6 的圖像放縮,50%概率的水平翻轉(zhuǎn),以及幅值為0.7 的通道抖動等。
圖3 數(shù)據(jù)鑲嵌示意圖
為了提高算法精度,本文主要針對于YOLOv3 算法的特征提取網(wǎng)絡、特征融合以及損失函數(shù)三個部分進行改進,改進后的網(wǎng)絡結(jié)構如圖4 所示。
圖4 本文算法模型結(jié)構
3.1.1 ResNeXt
本文使用從ResNet 改進而來的ResNeXt50 作為特征提取網(wǎng)絡并且通過梯度分流截斷機制以提高特征圖的表達能力。兩者都屬于殘差網(wǎng)絡,通過殘差機制加深網(wǎng)絡層次而有效避免梯度彌散和梯度爆炸的問題。兩者的區(qū)別主要在于ResNeXt 的殘差單元引入了cardinality 因子,相當于分組卷積的形式,如圖5 所示,這種形式使得每一組卷積網(wǎng)絡所學習到的特征具有較大的差異性,分別關注于不同的特征點,因此會具有更強的特征表達能力,并且每組卷積都具有相同的拓撲結(jié)構,簡化了模型復雜度。對于圖5(b)所示的殘差單元其計算公式為:
其中σ表示leaky relu 激活函數(shù),C 表示cardinality即集合數(shù),Wi表示每一組卷積的權重參數(shù),x表示上一個單元的輸出,f(x,Wi)表示輸入經(jīng)過拓撲結(jié)構卷積后的輸出。
圖5 殘差單元對比
3.1.2 CSP Net
上述基于skip connection 的計算方式是相對暴力的,即在激活函數(shù)之前就將上一個單元的輸出與當前單元的輸出進行相加連接。包括ResNeXt 在內(nèi)的ResNet、DenseNet[15]等基于skip connection 機制的殘差網(wǎng)絡均存在這個問題。以Dense Net 為例進行論證,這個過程可以用公式(2)表示:
這種方法會導致反向傳播過程中,梯度信息重復計算,被多個卷積層重復利用降低卷積網(wǎng)絡的學習能力并且增加模型重復的計算,如公式(3)所示:
每一層的權重參數(shù)都重復使用了上一層的梯度信息。而CSP Net 中的跨層連接和梯度分流截斷可以很好的解決上述問題。對于每一個殘差單元的輸入x0,首先將其分成兩部分先經(jīng)過一個dense block 進行殘差映射得到輸出然后經(jīng)過一個跨通道池化操作進行梯度信息截斷得到xT,之后直接與沒有進行殘差映射的進行拼接再經(jīng)過一個跨通道池化操作得到輸出xU。該方法的前向傳播和權重更新過程可以用公式(4)和(5)表示。
通過這種方式,最后進行拼接的兩部分輸出和均不存在重復的梯度信息,很好的避免了梯度重復計算。經(jīng)實驗證明,該方法可以很好地適用于同樣基于skip connection 機制的ResNeXt 殘差網(wǎng)絡,只需對原ResNeXt 殘差單元的輸入進行切分即可,并且由于切分后的輸入僅為原輸入的一半,因此不再需要瓶頸層(bottleneck),如圖6。
圖6 應用CSP Net于ResNeXt
使用本文算法其他結(jié)構不變,僅更換特征提取網(wǎng)絡進行對比實驗,實驗結(jié)果如表1 所示。
表1 特征提取網(wǎng)絡效果對比
3.2.1 PA Net
在YOLOv3 算法中,會選取特征提取網(wǎng)絡輸出的三種尺度的特征圖進行特征融合,它們分別對應了不同級別的特征信息,而這些特征圖之間跨度十分大,在經(jīng)過多個卷積層后導致各層級特征之間分離度較高,每個層級的特征對其他層級的特征信息保留較少。因此本文引用了PA Net 中從下至上(Bottom-Up)的特征融合思想。在高層級特征與低層級特征之間直接建立一個短連接(short connection)進行融合產(chǎn)生新的特征圖。對于每種尺度的特征圖,首先經(jīng)過下采樣使其與下一級特征圖保持尺寸一致(最低層級映射后的結(jié)果就是自身),然后與其下一層級特征圖進行元素級拼接,之后經(jīng)過一系列的卷積單元將其映射到新的特征圖上完成特征融合,其過程如圖7 所示,(a)部分代表的是原多尺度特征圖的形成過程即從上至下的過程,(b)部分代表的是Bottom-Up 從下至上的特征融合過程。
圖7 Bottom-Up特征融合
3.2.2 SPP Net
為了提高算法在局部特征上的關注度以提高算法的尺度適應能力。本文在最高層級(Y1)的特征圖上使用了空間金字塔層級的思想,分別進行三次5×5、9×9、13×13 步長(stride)為1 的最大池化(max pooling)得到三種不同局部的特征圖,然后將其在通道維度上進行拼接。這種方式可以很好的關注圖像不同尺度的局部特征,并將局部特征與整體特征進行融合,豐富特征圖的表達能力。融合過程如圖8 所示。
圖8 SPP特征融合
在YOLOv3 中使用均方方差(Mean Square Error)作為目標框中心坐標和寬高的損失函數(shù)如公式(6):
其中S 表示網(wǎng)格個數(shù),一共S×S 個網(wǎng)格,B 表示每個網(wǎng)格產(chǎn)生B 個候選框。x、y、w 和h 分別表示目標框的中心坐標及寬高,x?、y?、w?和h?分別表示預測框的中心坐標及寬高。I 表示當前候選框是否負責預測,若是則為1,否則為0。但這種方法無法區(qū)分目標框與預測框之間不同的包含情況,且無法適應尺度上的區(qū)別。而交并比(Intersect over Union,IoU)損失函數(shù)(公式7)可以較好地解決上述問題。
兩者效果對比如圖9 所示。
圖9 MSE與IoU對比
MSE 損失函數(shù)無法區(qū)分上述三種不同的包含情況,而IoU 損失函數(shù)表現(xiàn)較好。然而IoU 損失函數(shù)依舊存在問題。即當預測框和目標框完全不相交時IoU為0,此時損失函數(shù)不可導,無法優(yōu)化兩個框不相交的情況;IoU 無法反映兩個框是如何相交的(包括中心點距離、角度、長寬比等問題);因此本文使用更為優(yōu)化的CIoU[10]作為目標框的損失函數(shù)。CIoU 在其基礎上充分考慮了目標框與預測框之間重疊比、中心點距離以及長寬比。計算公式為:
其中IoU表示目標框與預測框的交并比,ρ(b,bgt)表示預測的中心點與真實中心點之間的歐氏距離,用來擬合中心點,υ用來衡量長寬比一致性。使用CIoU作為損失函數(shù),可以很好的提升算法準確率。
針對視頻流數(shù)據(jù),本文使用DeepSort 目標跟蹤技術對每個目標進行位置預測,代替目標檢測結(jié)果以實現(xiàn)插幀檢測。DeepSort 通過目標的外形特征以及運動特征對目標進行跟蹤,兩大核心算法是卡爾曼濾波和匈牙利算法分別負責對應目標的狀態(tài)估計和分配問題。算法通過一個8 維向量(μ,υ,γ,h,x?,y?,γ?,h?)來表示目標的狀態(tài),其中(μ,υ)是目標框的中心坐標,γ是長寬比,h是高,其余4 個變量分別代表目標在圖像坐標系中所對應的速度信息。使用一個基于常量速度模型和線性預測模型的標準卡爾曼(Kalman)濾波器對目標運動狀態(tài)進行預測,預測的結(jié)果為(μ,υ,γ,h)。在分配問題上,DeepSort 同時考慮了目標的運動信息以及外觀信息以進行關聯(lián),以解決跟蹤過程中相機運動導致的目標Id 頻繁切換的問題。使用目標檢測框與跟蹤器預測框之間的馬氏距離來描述運動關聯(lián)程度:
其中dj表示第j 個檢測框的位置,yi表示跟蹤器對目標i 的預測位置。Si表示目標i 的檢測位置與預測位置之間的協(xié)方差矩陣,即以目標檢測位置與預測位置之間標準差的形式對狀態(tài)測量的不確定性進行考慮。然后使用重識別網(wǎng)絡提取目標的特征向量作為外觀信息,對每一幀成功匹配的結(jié)果進行緩存作為特征向量集,對于每一個目標檢測框,將其特征向量與所有跟蹤器的特征向量集計算最小余弦距離。如公式(10):
其中rj表示第j 個目標檢測框的特征向量,Ri表示第i 個跟蹤器的特征向量集。最后使用兩種關聯(lián)方式的線性加權值作為最終匹配度量,λ為權重系數(shù)。
在YOLOv3 算法中錨點框用于大致確定目標位置以及大小以便后續(xù)算法進行回歸精修。因此錨點框的質(zhì)量直接影響到目標檢測的效果。本文使用K-means聚類算法在9981 張圖片數(shù)據(jù)上進行9 類聚類以確定最適合當前數(shù)據(jù)集的錨點框,然后根據(jù)錨點框大小將其分配到對應尺度的特征圖上,得到的結(jié)果如表2。
表2 錨點框分配
本文將SHWD 數(shù)據(jù)集和自建數(shù)據(jù)集共9981 張圖片按照8:2 的比例分成訓練集和測試集。在Ubuntu 18.04 操作系統(tǒng)進行模型訓練,使用GPU 加速工具CU?DA 10.1。 CPU 為 Intel Xeon Gold 6148 CPU @2.40GHz,GPU 為NVDIA Tesla V100@16 GB,內(nèi)存為32 GB。梯度下降方式為隨機梯度下降(Stochastic Gra?dient Descent,SGD),動 量 為0.926,權 重 衰 減 為0.00048,使用4×16 小批量訓練方式。學習率從0.001開始。整個訓練過程一共為20000 次迭代,按需調(diào)整學習率在迭代進行到80%(16000)及90%(18000)的時候?qū)W習率分別減小10 倍。為了與原算法進行效果對比,在相同環(huán)境下訓練得到原始的YOLOv3 模型。
本文使用目標檢測領域常用的平均精度(Average Precision,AP)、平均精度均值(Mean Average Precision,mAP)和每秒檢測幀數(shù)(Frame Per Second,F(xiàn)PS)作為評測指標來評測本文算法對安全帽佩戴檢測的效果。在將IoU 設置為0.5 時在規(guī)模為1996 張圖片的測試集進行測試,結(jié)果如表3 所示。
表3 實驗結(jié)果對比
可以發(fā)現(xiàn),本文算法由于引入了PA Net 和SPP Net 進行特征融合,加大了模型運算量,因此在未結(jié)合DeepSort 的時候,運行效率略低于YOLOv3,但在檢測精度上,更換了特征表達能力更強的特征提取網(wǎng)絡以及優(yōu)化損失函數(shù)等,兩種類別的檢測精度相比于YO?LOv3 都有較大程度提升。具體檢測實例如圖10 所示,其中綠色方框表示佩戴安全帽,紅色方框表示未佩戴安全帽。在圖10(a)一般場景下,YOLOv3 與本文算法均具有較好的檢測效果。在圖10(b)人群較密集存在遮擋的場景下,YOLOv3 漏檢了部分遮擋較嚴重的目標,而本文算法未出現(xiàn)漏檢。在圖10(c)圖片質(zhì)量較差情況下,圖片中間存在一個由于運動而高度模糊的目標,YOLOv3 與本文算法均出現(xiàn)了漏檢。圖11(d)存在極小目標的情況下,YOLOv3 算法對于小目標出現(xiàn)了較為嚴重的漏檢而本文算法表現(xiàn)優(yōu)異。
圖10 安全帽佩戴檢測效果對比
為了評測PA Net 和SPP Net 對算法模型的貢獻,本文中使用消融實驗在相同測試集上進行評測,為了進一步細化實驗效果,將尺寸小于32×32 的目標劃分為小目標(Small),大于32×32 且小于64×64 的劃分為中等目標(Medium),其余為大目標(Large)。最終實驗結(jié)果如表3 所示。可以發(fā)現(xiàn),在第1 組中,算法對大目標的檢測效果較好,相對來說小目標的檢測效果不太理想。在第2 組中引入了SPP Net 對三類目標的檢測效果均有提升,其中提升最顯著的是中等目標為5.28%,并且在檢測精度本就較高的大目標上繼續(xù)提升了2.15%。在第3 組中引入PA Net,其大大提升了算法對小目標和中等目標的檢測精度而對大目標的檢測精度提升較微弱。在第4 組同時引入SPP Net 和PA Net 的情況下,對小目標、中等目標和大目標的檢測效果均取得了最優(yōu)。證明本文中所使用的方法能夠有效地提升算法檢測精度。
表4 消融實驗結(jié)果
為了驗證本文算法可以很好地適用于各種復雜場景。對人群密集場景、低亮度場景、易混淆安全帽佩戴場景、遠距離場景、多角度場景、低清晰度場景、背對鏡頭場景和安全帽未佩戴場景八種復雜場景進行測試驗證,實驗結(jié)果如圖11 所示??梢钥闯霰疚乃惴▋H在遠距離場景下對少數(shù)極小目標存在漏檢以及低清晰度場景下存在漏檢,這也是后續(xù)希望進一步優(yōu)化的方向。而在大多數(shù)場景下均具有較好的檢測效果,因此本文算法可以很好地適用于各種場景進行安全帽佩戴檢測。
圖11 多場景測試結(jié)果示例
本文對YOLOv3 算法進行改進優(yōu)化,提出了一種對自然場景下視頻圖像中工作人員是否佩戴安全帽的實時性檢測算法。通過使用特征表達能力更強的特征提取網(wǎng)絡并且結(jié)合PA Net 和SPP Net 中的特征融合技術,進一步增強特征圖的尺度適應能力以提高對小目標的檢測效果,使用更加魯棒精確的CIoU 作為目標框的損失函數(shù),提高對目標位置預測的精度。在1996 張圖片以及多場景情況下進行實驗測試,測試結(jié)果表示本文算法均有較高的精度以及穩(wěn)定性,并且結(jié)合Deep?Sort 技術,在NVIDIA GTX 1060 顯卡環(huán)境下檢測速率可以達到32 幀/s。以上測試結(jié)果均證明了本文方法的有效性。在未來研究中,將對算法結(jié)構進行進一步的優(yōu)化以提高算法對小目標和在低清晰度場景下的檢測精度。