?

YOLOv3在安全帽佩戴檢測中的應用研究

2021-01-04 09:11馬小陸王明明
關鍵詞:安全帽殘差尺度

馬小陸,王明明,王 兵

(安徽工業大學 電氣與信息工程學院,安徽 馬鞍山 243002)

安全帽是建筑施工人員必須佩戴的防護用具,它可以在發生高空墜物和頭部撞擊等危害時,有效保護甚至挽救人的生命[1]。但目前對建筑工人是否佩戴安全帽的檢測多是通過人來觀察監控的視頻[2],這種方法不僅耗時且效率低,因此針對安全帽佩戴的檢測成為研究熱點。

現有的安全帽佩戴檢測方法有兩類。一類是基于傳統機器學習的算法,如劉曉慧等[3]通過膚色定位到人臉,用SVM檢測Hu特征,在人臉以上區域檢測安全帽;何慧敏等[4]使用卷積神經網絡檢測行人,對行人部分做HSV空間變換,得到安全帽顏色的區域,再對圖像做圓Hough變換,檢測到的圓形物體即為安全帽;賈峻蘇等[5]將方向梯度直方圖、顏色特征和基于塊的局部二值模式直方圖結合成特征向量,再使用SVM檢測安全帽等。傳統算法依賴較強的先驗知識,需要耗費大量的時間設計特征,檢測精度低、耗時過長。另一類是基于深度學習的算法,分為兩種。一種是基于區域建議機制的Two Stage方法,如Girshick R等[6-9]使用改進Faster R-CNN檢測安全帽佩戴情況,該類方法檢測精度較高但是耗時較長,且魯棒性較差。另一種是基于回歸模型的One Stage方法[10-13],如SSD、YOLO系列等,如王秋余[14]對YOLO網絡結構進行改進,提出一種基于半監督學習的安全帽佩戴識別算法;方明等[15]在YOLOv2的基礎上加入密集塊用以快速檢測安全帽等,該類方法檢測速度較快但是精度較低,容易漏檢小目標。

綜上可以看出,傳統算法的精度和速度均達不到安全帽佩戴檢測的實際需要;Two Stage方法的檢測時間過長,且對不同場景的魯棒性較差,也不適用于復雜的施工現場;One Stage方法的速度較快,但是對小目標檢測效果較差,容易造成漏檢和誤檢,模型精度不高。

針對現有的安全帽佩戴檢測算法存在的檢測精度較低、魯棒性較差等問題,本文綜合了One Stage和Two Stage方法的特點及性能后選擇YOLOv3作為主體算法,YOLOv3使用了One Stage思想,在特征圖上直接回歸目標的類別和位置,檢測速度較快,同時吸收了殘差網絡和特征金字塔等算法優點,提高了模型的精度。本文在YOLOv3的基礎上,針對檢測對象的特點提出一種改進YOLOv3的安全帽佩戴檢測算法。采用數據增強手段進行數據集擴充,以提升模型的魯棒性;刪除大尺度輸出的同時增加一個特小尺度輸出以檢測特小目標,在輸出端引入了跳躍連接構成殘差模塊,同時改進分類損失,以提升模型的檢測精度。

1 YOLOv3簡介

1.1 網絡結構

YOLOv3由特征提取網絡Darknet-53和檢測層兩部分組成,如圖1所示。首先將輸入圖片縮放到416×416大小,進入特征提取網絡Darknet-53,通過卷積操作提取不同程度的特征,其中使用了殘差結構Residual Block[16],有助于深層網絡訓練時仍能保持收斂,防止過擬合,經過5次下采樣后變成13×13大小的特征圖,經過卷積后得到第一層輸出13×13。同時借鑒了特征金字塔(Feature Pyramid Network, FPN)[17]原理,將第一層輸出上采樣,并與輸入圖片下采樣得到的特征圖進行張量拼接,重復操作后得到三層不同尺度的輸出,分別為13×13、26×26和52×52,三種輸出可以檢測不同大小的目標,提高了模型的精度。

圖1 YOLOv3網絡結構Fig.1 Network structure of YOLOv3

檢測時,將輸入圖像分成S×S個網格(grid cells),如果目標的中心點在某個grid cell中,那么由該grid cell負責目標的預測,每個grid cell會預測出3個邊界框(bounding box, bbox),網絡輸出的維度如式(1)所示:

S×S×B×(4+1+C)

(1)

式中,B表示每個grid cell預測的bbox數量,默認為3;4表示bbox的4個參數,分別為中心坐標以及寬高(x,y,w,h);1表示該類別的置信度(confidence);C表示類別的總數。預測的類別置信度如式(2)所示:

(2)

1.2 邊框預測

YOLOv3使用了先驗框anchor box機制,anchor box最初由Faster R-CNN提出,使用統計學中的先驗數據或人類的經驗作為約束條件。比如需要檢測的對象為行人,那么目標一定是瘦高的,只需要在目標中心點周圍尋找瘦高的bbox即可,這樣可以縮小檢測的范圍,有助于模型的收斂。

原始YOLOv3對COCO數據集聚類出9個anchor box:(10×13)、(16×30)、(33×23)、(30×61)、(62×45)、(59×119)、(116×90)、(156×198)、(373×326),并平均分配給3個尺度的輸出。其中13×13的輸出有最大的感受野,使用最大的三個anchor box檢測大型目標;26×26的輸出感受野中等,使用中間的三個anchor box檢測中等目標;52×52的輸出的感受野最小,使用最小的三個anchor box檢測小目標。grid cell預測目標時,在預設的anchor box基礎上,通過平移變換加縮放即可得到bbox,如圖2所示。

圖2 邊框預測Fig.2 Bounding box prediction

圖2中,虛線框表示預設的先驗框anchor box,實線框表示網絡的預測框bbox,bbox的中心點坐標以及寬高(bx,by,bw,bh)的計算如式(3)—(6)所示:

bx=σ(tx)+cx

(3)

by=σ(ty)+cy

(4)

bw=pwetw

(5)

bh=pheth

(6)

式(3)—(6)中,(cx,cy)表示目標中心所在的grid cell左上角的坐標;pw,ph分別表示預設的anchor box映射到特征圖中的寬和高;(tx,ty,tw,th)則是網絡需要訓練求解的參數;σ(tx),σ(ty)表示使用Sigmoid函數將tx,ty壓縮到區間(0, 1)上,否則模型無法收斂。

1.3 損失函數

YOLOv3的損失函數分為四個部分,如式(7)所示,分別為bbox坐標損失Lossxy、bbox寬高損失Losswh、置信度損失Lossconf以及類別損失Lossclass,具體計算如式(8)—(11)所示:

Loss(object)=Lossxy+Losswh+Lossconf+Lossclass

(7)

(8)

(9)

(10)

(11)

2 YOLOv3改進

2.1 輸出尺度改進

YOLOv3有大、中、小三個不同尺度的輸出,每層輸出上預設三個anchor box,在預設的anchor box基礎上通過平移和縮放變換即可得到預測框bbox,所以anchor box的設定對預測的精準性有很大影響,并且其大小與YOLOv3的輸出尺度相對應,大尺度的輸出上設定3個較大的anchor box,以此類推,因此對輸出的尺度改進取決于anchor box的大小。anchor box的值是對數據集的標注框聚類得到的,使用K-means聚類算法對“安全帽”數據集重新聚類生成新的anchor box,令K取不同的值即選擇不同數量的聚類中心得到的anchor box大小,如表1所示。

表1 不同K值對應的anchor box

由表1數據可知,當K值繼續增大時,聚類中心相距較近,為了避免增加計算量產生冗余,選取K=6時的anchor box大小。通過比較重新聚類出的6個anchor box與原來的9個anchor box大小可知,“安全帽”數據集的目標中沒有特別大的尺寸,多了更小的尺寸。針對anchor box與輸出尺度一一對應,將原有大尺度輸出刪除,并且增加一個特小尺度輸出以檢測特小目標。

在深度學習中,加深網絡層數多次進行卷積和下采樣操作可以提取更強的語義特征,但與此同時,小像素目標也會更容易丟失特征信息。因此將原始的輸入尺寸從416×416增大至608×608,以確保多次下采樣之后,小像素目標的特征不會丟失,經過5次下采樣操作得到的特征圖尺寸依次為:304×304、152×152、76×76、38×38、19×19,此時YOLOv3的三層輸出分別為:19×19、38×38、76×76。根據K-means聚類得到的anchor box的尺寸情況,沒有特別大的anchor box,將檢測大目標的輸出19×19刪除,針對最小anchor box為(6, 12),增加一個特小尺度輸出以檢測特小目標:將76×76的輸出進行上采樣至152×152,同時與輸入圖片第二次下采樣得到的152×152特征圖進行張量拼接,這樣同時保留了淺層特征的高分辨率信息和深層特征的高語義信息,得到了第三層輸出152×152。

此時新設定的三層輸出以及對應的anchor box大小分配如表2所示。

表2 不同輸出分配的anchor box

改變輸出尺度之后的YOLOv3網絡結構如圖3所示。

圖3 改進YOLOv3網絡結構Fig.3 Improved YOLOv3 network structure

2.2 引入殘差模塊

深層網絡中小目標所包含的特征信息較少,為了使檢測層可以檢測到深層特征圖中包含的信息,在輸出端的卷積層之間引入跳躍連接構成殘差模塊實現網絡間的信息傳遞,這樣在網絡加深的同時可以提高對深層特征的檢測能力,保證了模型檢測的準確度。殘差單元結構如圖4所示。

圖4 殘差單元結構Fig.4 The structure of the Residual Block

當輸入為x時,學習到的特征記為H(x),此時的殘差為F(x)=H(x)-x,因為殘差F(x)一般比較小,即需要學習的內容比較少,因此殘差學習比原始特征直接學習更容易。

殘差單元的計算如式(12)和式(13)所示:

yl=h(xl)+F(xl,Wl)

(12)

xl+1=f(yl)

(13)

式(12)和式(13)中,xl,xl+1分別表示第l個殘差單元的輸入和輸出;F是殘差函數,表示學習到的殘差;h(xl)=xl表示恒等映射;f表示ReLu激活函數。通過遞歸可以得到淺層單元l到深層單元L的特征表達式,如式(14)所示:

(14)

因此殘差模塊可以保證在深層的網絡結構中提取到淺層網絡的高分辨率信息,同時保留深層網絡的高語義信息,提升了對小目標特征的檢測能力。

2.3 損失函數改進

One Stage算法精度要低于Two Stage算法,因為One Stage算法沒有在檢測之前先使用區域建議網絡提取圖片中待檢測目標所處的部分區域。一幅圖片中只有少部分區域是包含待檢測目標的,將圖片中含有待檢測目標“安全帽”的部分區域稱為正樣本;將圖片中不含有待檢測目標的其它區域稱為負樣本,如圖5所示。

圖5 正負樣本失衡Fig.5 Positive and Negative samples imbalance

圖5中,白色框中包含待檢測目標“安全帽”,為正樣本;黑色框中均不含有待檢測目標,為負樣本;可知負樣本數量遠大于正樣本,造成了正負樣本比例失衡現象,導致了總體損失Loss負樣本占大部分,影響了模型的收斂。較難分類的樣本稱為困難樣本;容易分類的樣本稱為簡單樣本。又因為正樣本中待檢測目標的類別大多較難分類,所以正樣本多數為困難正樣本;負樣本大多容易分類,所以負樣本多數為簡單負樣本。由式(11)可知,YOLOv3以交叉熵作為分類損失,可以簡化成式(15)的形式:

(15)

為了平衡不同樣本對模型的貢獻,本文引入焦點損失函數(Focal Loss, FL)[18]思想,在原有函數加入調節因子以降低簡單易區分樣本在訓練中所占的比重,使模型更專注于困難樣本的分類。改進后的分類損失簡化成式(16)的形式:

(16)

3 實驗結果與分析

實驗平臺的軟硬件配置如表3所示。

表3 實驗平臺配置

3.1 訓練

由于針對安全帽佩戴檢測沒有官方的數據集,為了進行本次研究,從互聯網上搜集“佩戴安全帽的人”以及“沒有佩戴安全帽的人”圖片共7 000余張。使用標注工具LabelImg對圖片內目標進行標注,將“佩戴安全帽的人”歸于“hat”類,將“沒有佩戴安全帽的人”歸于“person”類,標注過程如圖6所示。

圖6 數據集的標注Fig.6 Data set annotation

標注完成后,會得到相應的xml文件,xml文件中存放了每一個目標GT框的標簽信息,包括輸入圖像的大小以及目標的類別和位置信息,如圖7所示。

圖7 標簽信息Fig.7 Label information

所有的圖片標注完后即完成“安全帽數據集”建立,將數據集按照7∶1∶2的比例劃分成訓練集train、驗證集val以及測試集test。train是參與訓練的主要樣本,在訓練過程中對誤差進行梯度下降,訓練權重參數;val是訓練過程中單獨留出的樣本,每訓練一段時間驗證一下模型的檢測效果,并調整參數優化模型;test是用來評估最終模型的能力,不參與訓練。為了提高模型的泛化能力,使用數據增強的手段對數據集進行擴充,具體操作為:改變圖片的飽和度、亮度以及色調等,如圖8所示。

圖8中,增加亮度及減少亮度可以模擬光線不同時場景的變化情況,改變色調可以模擬不同顏色的安全帽,這樣可以增加樣本的數量以提高模型對不同場景的魯棒性,并且采用多尺度訓練的方式,在將樣本送入網絡訓練前隨機改變樣本的大小,以提高模型對不同尺度目標的檢測能力。

圖8 數據增強示例圖Fig.8 Data augmentation example

將訓練批次數(Batches)設置為50 200次,分別將數據集送至YOLOv3和改進YOLOv3中進行訓練,訓練過程中模型的平均損失值(Average Loss)由式(7)可以計算出,損失值越小表示訓練出的模型與數據集的真實模型越接近;訓練期間YOLOv3和改進YOLOv3的損失函數曲線(Loss Curve)如圖9所示。

圖9 損失曲線Fig.9 The Loss curve

圖9中,橫坐標batches表示訓練的批次數,縱坐標avg_loss表示平均損失值。由圖9(a)和圖9(b)可以看出,兩次訓練過程網絡損失均保持穩定下降趨勢并在迭代50 200次左右收斂,說明訓練基本順利。同時,與圖9 (a)的曲線相比,圖9 (b)的曲線收斂速度更快,并且網絡波動幅度變小,收斂于一個更小的值,說明改進后的模型更接近數據集的真實模型。

3.2 測試

在目標檢測領域,一般使用平均精度(mean Average Precision,mAP)評估模型的效果,AP表示單個類別的平均準確率,mAP表示多個類別的AP的均值[19]。mAP的值越大表示模型的整體識別準確率越高。AP可以由模型分類結果的混淆矩陣求得,混淆矩陣的定義如表4所示。

表4 混淆矩陣

以Recall為橫軸,Precision為縱軸繪成的曲線圖稱為PR曲線,PR曲線綜合了精確率與召回率的信息,曲線與兩坐標軸圍成的面積即為AP的值,如式(17)所示。

(17)

測試集上測得改進前及改進后模型的PR曲線如圖10所示。由圖計算得出YOLOv3的APhat=88.97%,APperson=85.23%,mAP=87.10%;改進YOLOv3的APhat=90.59%,APperson=93.30%,mAP=91.94%。

圖10 PR曲線Fig.10 The PR curve

圖10中,橫坐標Recall表示模型的召回率;縱坐標Precision表示模型的精確率;紅色和藍色的虛線分別表示原始YOLOv3的“hat”和“person”的PR曲線,紅色和藍色的實線分別表示改進YOLOv3的“hat”和“person”的PR曲線,由圖10可以看出改進YOLOv3的兩個類別PR曲線坡度更加平滑,精確率Precision和召回率Recall均得到了提升,曲線與坐標軸圍成的面積也更大,即平均準確率AP得到了提高??梢姼倪M的YOLOv3模型對兩類目標檢測能力均有不同幅度地提升,模型的整體檢測精度更高。

實驗中,為了驗證兩種模型的精度,在測試集中挑選部分樣本進行測試,兩種模型的檢測效果對比如圖11所示,圖11(a)為原圖,圖11(b)為YOLOv3的檢測圖,圖11(c)為改進YOLOv3檢測圖。

由圖11可知,兩種模型均可以檢測到佩戴安全帽的目標“hat”以及未佩戴安全帽的目標“person”。同時,由第一組檢測結果可知,原始YOLOv3漏檢了部分被遮擋目標和重疊目標,而在改進YOLOv3中可以成功檢測到;由第二組檢測結果可知,原始YOLOv3無法判斷中間的目標為“hat”還是“person”,屬于困難樣本,而改進后的YOLOv3可以正確的區分;由第三組檢測結果可知,原始YOLOv3無法檢測到特小目標,而改進后的YOLOv3可以檢測更多的小目標。對比檢測結果可知,改進后的YOLOv3提升了對被遮擋的目標、困難樣本以及小目標的檢測能力,檢測精度有所提高。

圖11 檢測對比圖Fig.11 Comparison of detection results

同時,為了測試改進后的YOLOv3模型的泛化能力和魯棒性,挑選不同的場景以及不是佩戴“安全帽”的目標進行測試,測試結果如圖12所示。

圖12 不同場景測試圖Fig.12 Detection results of different scenes

由圖12可以看出,改進后的YOLOv3模型在不同場景下均有較強的檢測能力,同時模型可以判斷出工人所佩戴的是否為安全帽,若佩戴的不是安全帽,則會將其歸類于“person”。由此可知,改進后的模型泛化能力和魯棒性較強,受場景、光照及色彩等變換的影響較小,整體的檢測效果較為理想。

4 結論

本文提出了一種安全帽佩戴檢測算法,以YOLOv3算法為主體,聚類出更符合“安全帽”的anchor box;并根據anchor box大小修改了網絡的輸出尺度,降低了輸出維度并減小了模型大??;引入跳躍連接在輸出端構建殘差模塊,更有效地對特征進行表示;同時改進分類損失,平衡了正負樣本失衡現象以及難易樣本對模型的影響。實驗結果表明此方法提升了YOLOv3的模型性能,增強了魯棒性,針對小目標的檢測能力得到了提高,具有較高的精度,達到了安全帽佩戴檢測的實際需要。

猜你喜歡
安全帽殘差尺度
基于殘差-注意力和LSTM的心律失常心拍分類方法研究
基于雙向GRU與殘差擬合的車輛跟馳建模
基于殘差學習的自適應無人機目標跟蹤算法
財產的五大尺度和五重應對
基于深度卷積的殘差三生網絡研究與應用
爆笑四格
危險
宇宙的尺度
9
“多功能”安全帽
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合