李 軒,李 靜,王海燕
(沈陽航空航天大學電子信息工程學院,遼寧 沈陽 110136)
目標檢測是從復雜的場景中能準確的識別目標的類別并且能對目標進行相對精確的定位,這是計算機視覺領域最基本和最具有挑戰(zhàn)性的問題之一。自深度學習發(fā)展,目標檢測逐漸突破發(fā)展瓶頸,取得了一系列進展?;谏疃葘W習的目標檢測根據(jù)特征提取和預測的不同方式大體上可以分為兩個方向,基于區(qū)域建議的Two-Stage檢測算法和基于回歸思想的One-Stage檢測算法。Two-Stage算法以R-CNN[1]及其優(yōu)化算法為代表,包括R-CNN,SPPNet[2],F(xiàn)ast-RCNN[3],F(xiàn)aster-RCNN[4],R-FCN[5]等。這類算法首先進行區(qū)域建議,產(chǎn)生可能包含物體信息的候選區(qū)域,再將這些信息傳入分類器或者神經(jīng)網(wǎng)絡進行分類和位置預測, 經(jīng)過區(qū)域建議的Two-Stage算法在準確率上一般都有很好的表現(xiàn);One-Stage算法以YOLO(You Only Look Once)[6],SSD(Single Shot MultiBox Detector)[7],Retina-Net[8]為代表。One-Stage最大的優(yōu)點在于不需要復雜的候選區(qū)域檢測過程,直接輸出最終需要的結果,因此這類算法具有更快的檢測速度。
盡管基于深度學習的目標檢測領域已經(jīng)在檢測速度和準確率上已經(jīng)取得很大的進展,但現(xiàn)實交通場景中目標極易受到天氣狀況影響,待檢測圖片視頻質量不佳,造成在神經(jīng)網(wǎng)絡提取特征過程中特征信息提取不完善,極易形成目標的漏檢和錯檢等現(xiàn)象。因此本文在原目標檢測算法YOLOv3[9]的基礎上將質量不佳的圖片進行暗通道去霧進行增強處理,再利用密集連接模塊對圖像特征進行多重利用和傳播,達到更準確地檢測效果。
YOLOv3在檢測過程中首先將輸入圖像劃分成S×S個小格,當物體的中心坐標落在某個小格時該小格負責預測這個物體。YOLOv3借鑒了類似FPN網(wǎng)絡的金字塔結構對特征圖進行了上采樣和融合做法,分別在13×13,26×26,52×52三個尺寸上進行檢測,每個單元格首先借助anchor box預測3個檢測框,再根據(jù)卷積神經(jīng)網(wǎng)絡輸出的坐標對anchor box進行修正,最終保留檢測框和真實框之間的交并比最大值作為預測框。修正后的邊界框坐標為
bx=σ(tx)+cx
(1)
by=σ(ty)+cy
(2)
bw=pwetw
(3)
bh=pheth
(4)
式中cx,cy為目標中心所在小格相對于左上角的偏移量,tx,ty,tw,th為網(wǎng)絡學習輸出。pw,ph為預設錨點的寬高,具體描述如圖1所示。坐標的損失函數(shù)采用平方誤差損失函數(shù)。
圖1 YOLOv3坐標預測圖
在類別預測方面YOLOv3將原來的單標簽改進為多標簽分類,網(wǎng)絡結構上將原來的softmax層換成用于多標簽分類的邏輯回歸層。softmax層假設一張圖片或者一個待檢測物體都只屬于一個類別,但這并不適用于復雜的場景中,在復雜的場景中一個待檢測的物體可能存在多個標簽,分屬于不同的類,這就需要用邏輯回歸函數(shù)對每個類別做二分類。邏輯回歸層用到sigmoid函數(shù)將輸出概率限制在0-1之間,如果一張圖像經(jīng)過特征提取后的某一類輸出經(jīng)過sigmoid函數(shù)約束后大于0.5,就表示屬于該類。類別公式計算如下
Pr(object)*IOU(b,object)=s(to)
(5)
文獻[10]證明了暗通道去霧算法在天氣質量不佳時尤其在霧霾天氣對行人檢測起到了很好的增強效果,本文將暗通道去霧算法作為目標檢測的前置算法,經(jīng)過處理后的圖片傳入神經(jīng)網(wǎng)絡,并且對YOLOv3神經(jīng)網(wǎng)絡提出以下改進。
YOLO V3采用Darknet-53殘差網(wǎng)絡結構,加深了網(wǎng)絡層數(shù),同時通過大量使用1×1卷積結構壓縮網(wǎng)絡channels數(shù)量,降低了參數(shù)量,但對于場景較為單一的檢測來說會顯得過于冗余復雜,訓練過程需要更多的數(shù)據(jù)并且拖慢檢測時間,因此本文提出使用密集網(wǎng)絡結構(Densenet)代替殘差網(wǎng)絡(Resnet)。Densenet相比Resnet網(wǎng)絡結構具有如下特點:第一,對于每一個網(wǎng)絡層,前面所有特征圖的輸出都是它的輸入,因此加強了特征傳播,鼓勵了特征復用,Densenet和Resnet網(wǎng)絡連接公式對比如公式(6)。式中x0,x1,…,xl-1表示將0到l-1層特征圖的輸出。第二,減少了訓練中的特征彌散現(xiàn)象,Densenet每層都能獲取前面各層的損失函數(shù),有效加強了特征的前向傳播,因此可以訓練出更深的網(wǎng)絡層。第三,在特征重用的角度上,極大的減少了參數(shù)。
xl=HL(xl-1)+xl-1
xl=Hl([x0,x1,…,xl-1])
(6)
圖2為DenseNet結構圖,DenseNet的整體結構主要包含稠密塊(Dense Blocks,x1,x2,x3,x4),過渡塊(transition layers,H1,H2,H3,H4),池化層,卷積層。Dense Blocks內部必須特征圖大小一致,是稠密連接的high-way模塊,而不是ResNet的element-wise連接,每個Dense Blocks由數(shù)目不同的Bottleneck Layer組成,Bottleneck Layer中包含3×3和1×1卷積,在進行3×3卷積之前首先用一個 1×1進行通道壓縮,達到降維的目的。Dense Blocks每一層的輸入都來自這個模塊內這一層之前所有層輸入的concat拼接。Transition layers起到連接Dense Blocks的作用,Transition layer中包含的Pooling層會改變特征圖的大小,通過BN層和dropout進一步執(zhí)行歸一化和過擬合處理。
空洞卷積在空洞卷積可以在不增加網(wǎng)絡架構的卷積層層數(shù)或計算量的情況下擴大了感受野, 這從根本上降低網(wǎng)絡架構的復雜程度;同時空洞卷積允許靈活地聚合多尺度上下文信息。空洞卷積是將具有K×K小卷積核的濾波器, 擴大為KX×KX卷積核的濾波器,KX=K+(K-1)×(r-1), 其中K為原濾波器的卷積核大小,r為空洞卷積的空洞率,KX為擴張之后濾波器的卷積核大小。本文在YOLOv3多尺度輸出前將普通卷積替換為空洞卷積。
本文所使用的網(wǎng)絡結構Yolov3_dense如下圖所示,由4個Dense Block和3個transition layer組成,采用上采樣和特征融合方法最終輸出13×13,26×26,52×52三個不同尺度的特征圖進行多尺度預測。對于網(wǎng)絡特征提取方面采用3×3卷積代替7×7,實驗表明,采用多個3×3小卷積核參數(shù)量上大大減少,并且網(wǎng)絡提取特征性能并沒有受到明顯影響;其次將Y1,Y2,Y3輸出前的普通卷積替換成空洞卷積,增大了感受野;另外,針對各個Dense Block的輸出通道數(shù),通過實驗對比,最終將各層輸出通道數(shù)從上至下確定為6,12,24,16,實驗表明,本文的網(wǎng)絡結構參數(shù)量較傳統(tǒng)YOLov3網(wǎng)絡參數(shù)減少30%。
基于回歸系列的深度學習目標檢測yolov3算法先驗框采用手工設計。雖然理論上模型可以直接輸出預測框的寬度和高度,但是這可能會導致訓練期間梯度不穩(wěn)定,很難快速收斂。所以YOLOv3算法設置預定義檢測框大小,再根據(jù)情況進行簡單的偏移,更容易收斂使模型達到局部最優(yōu)。Yolov3采用kmeans算法對數(shù)據(jù)進行聚類分析,確定anchor的個數(shù)和尺度。
Kmeans如果使用標準的歐式距離大尺度的預測框會比小檢測框產(chǎn)生更多的誤差,所以采用交并比作為距離評價指標來避免尺寸對kmeans損失的影響,自定義的度量公式為:
d(box,centroid)=1-IOU(box,centroid)
(7)
其中,centroid表示簇中心,box表示樣本,IOU(box,centroid)表示簇中心框和聚類框的交并比。下圖對比了K=[2-9]之間不同值時交并比之間的關系,從圖中可以看出當K>=9時曲線趨于平穩(wěn),本文選取k=9,anchor的參數(shù)分別為[20,21], [28,69], [34,26], [49,34], [68,148], [73,45], [117,63], [181,102], [295,179]
圖4 預測框個數(shù)與交并比關系圖
本文的算法在開源框架Keras框架上實現(xiàn),電腦配置為Intel(R) Core(TM) i3-4170CPU@3.70GHZ,運行內存8G,顯卡1050Ti,操作系統(tǒng)為Windows 10。采用召回率,平均精度,F(xiàn)1分數(shù)作為算法評價指標。
其中:TP為真正例,F(xiàn)P為假正例,F(xiàn)N為假負例。AP為平均精度。AP采用PascalVOC競賽中的Interpolating all points全插值法作為評價標準
(8)
本文算法在行人檢測數(shù)據(jù)集INRIA基礎上進行擴增。INRIA是最常用的靜態(tài)行人檢測數(shù)據(jù)集之一,訓練集1832張包含2400多個行人,測試集741張包含1100多個行人。擴增數(shù)據(jù)集在此基礎上加入北京市交通路口行人流動集,用Labelme對數(shù)據(jù)進行標注處理。標注結果如圖5所示
圖5 數(shù)據(jù)集處理
本文的訓練過程參考YOLOv3 Keras框架訓練方法分為兩個階段,第1階段訓練40個epochs,采用凍結Densenet原本網(wǎng)絡結構,只訓練后69層不同尺度特征提取層的遷移學習方法。在此訓練過程中將數(shù)據(jù)集拆分為10份,訓練9份,驗證1份,學習率η=0.001,權重衰減系數(shù)為0.0001,優(yōu)化器采用Adam。同時,在訓練過程中,也會不斷保存epoch完成的模型權重,設置參數(shù)為:只存儲權重(save_weights_only);只存儲最優(yōu)結果(save_best_only);每隔3個epoch存儲一次(period)以達到穩(wěn)定網(wǎng)絡參數(shù)的目的。第2階段,使用第1階段已訓練完成的網(wǎng)絡權重,繼續(xù)訓練:將全部的權重都設置為可訓練, 優(yōu)化器仍使用Adam,學習率減少至0.0001。從第40個epoch開始,一直訓練到第80個epoch,增加了兩個提前終止的條件。
當評價指標不在提升時,減少學習率,每次減少10%,當驗證損失值,持續(xù)3次未減少時,則終止訓練。當驗證集損失值,連續(xù)增加小于0時,持續(xù)10個epoch,則終止訓練。至此,在第2階段訓練完成之后,輸出的網(wǎng)絡權重,就是最終的模型權重。第二階段訓練目的旨在調整飽和度,色調,曝光度等微調,達到更好的識別效果。
將本文提出的算法與Tiny-YOLOv3,YOLO v3進行對比如表1所示,可以看出本文提出的算法都有較為明顯的優(yōu)勢。平均準確率較YOLOv3提高了4.77%,較Tiny-YOLOv3提高27.29%,在召回率上也有較好的表現(xiàn)效果。在模型收斂和特征提取上均達到了超出以往算法的效果。
表1 INRIA擴增數(shù)據(jù)集上不同算法檢測性能比較
本文主要基于當下性能最優(yōu)的目標檢測算法YOLOv3網(wǎng)絡架構進行改進,設計出一個加入密集連接模塊的網(wǎng)絡主架構,并在多尺度檢測輸入前加入膨脹卷積增大感受野。實驗表明本文提出的YOLOv3_dense算法在復雜氣象條件下交通場景目標檢測中表現(xiàn)出良好的魯棒性,在精確度,召回率和運行速度上較原YOLOv3均有改善,并且本文算法權重文件166M較原YOLOv3權重235M參數(shù)量上減少了30%。本文的算法在更換數(shù)據(jù)集的情況下適應性較差,下一步旨在繼續(xù)增大數(shù)據(jù)集,優(yōu)化網(wǎng)絡,權衡精確度和速度兩個指標,找到更優(yōu)更好的模型。