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