趙奉奎,成海飛,蘇珊珊,張 涌
(南京林業(yè)大學(xué) 汽車與交通工程學(xué)院,江蘇 南京 210037)
隨著我國社會經(jīng)濟的迅猛發(fā)展,機動車數(shù)量越來越多,各式多樣的交通工具給人們出行帶來極大便利的同時還存在著許多交通安全隱患。數(shù)據(jù)統(tǒng)計顯示,全球每年因交通事故的受傷人數(shù)已達到數(shù)千萬人,大概有80%以上的交通事故是由于駕駛員來不及反應(yīng)而導(dǎo)致的[1]。如果汽車能夠在行駛過程中提前檢測到周圍障礙物的情況,便能夠在事故發(fā)生前提醒駕駛員注意周圍路況,從而在源頭上減少交通安全事故發(fā)生。
目標(biāo)檢測[2]已經(jīng)成為汽車自動駕駛的關(guān)鍵研究內(nèi)容和重要前提。卷積神經(jīng)網(wǎng)絡(luò)的提出[3],解決了傳統(tǒng)圖像處理方法需要手動提取特征的問題,為目標(biāo)分類、檢測和分割提供了強有力的工具[4]。當(dāng)前目標(biāo)檢測框架均基于卷積神經(jīng)網(wǎng)絡(luò),其計精度及檢測速度得到很大程度上提高[5]。目前目標(biāo)檢測算法可分為Anchor-based算法[6]和Anchor-free算法[7]。其中,Anchor-based算法[8]是在預(yù)測過程中利用錨框計算預(yù)測邊界框的尺寸信息,應(yīng)用較為廣泛的有RetinaNet[9]、SSD[10]、Faster R-CNN[11]、You Only Look Once(YOLO)系列[12]等,即在圖片上設(shè)定大量的先驗框,網(wǎng)絡(luò)的預(yù)測結(jié)果會對先驗框進行調(diào)整獲得預(yù)測框。先驗框很大程度上提高了網(wǎng)絡(luò)的檢測能力,但基于框錨的目標(biāo)檢測算法會將目標(biāo)全部可能存在的位置和分類結(jié)果列舉出來,將會涉及到大量的標(biāo)識與訓(xùn)練,設(shè)定過程繁瑣且低效,因而運行速度較低,不僅消耗大量的時間還需要額外的后處理?;贏nchor-free算法有CornerNet算法[13]、CenterNet算法[14]等,此類算法利用深度卷積神經(jīng)網(wǎng)絡(luò),采用了關(guān)鍵點預(yù)測的方法,在預(yù)測時無需生成大量錨框,通過關(guān)鍵點獲得目標(biāo)的位置及類別,能夠改善錨框帶來的各種問題,減少了檢測時帶來的計算量,極大提高了目標(biāo)檢測的速度和精度。
筆者對CenterNet目標(biāo)檢測算法進行改進,將ReLU函數(shù)改進為LeakyReLU函數(shù),解決其神經(jīng)元死亡問題以達到更高的識別性能,從而可以準確識別交通場景目標(biāo),實時檢測道路情況,為防撞系統(tǒng)提供有效的目標(biāo)信息[15]。同時,得到Y(jié)OLOV4目標(biāo)檢測網(wǎng)絡(luò)中空間金字塔池化(spatial pyramid pooling,SPP)的啟發(fā),在CenterNet目標(biāo)檢測算法中ResNet-50主干網(wǎng)絡(luò)之后增加了SPP結(jié)構(gòu),增大了感受野,從而可以更好提取交通場景目標(biāo)的特征信息,提高道路實時檢測精度[16]。
CenterNet用邊界框中心點代表目標(biāo),通過對關(guān)鍵點估算預(yù)測中心點,并利用中心點處提取的圖像特征回歸目標(biāo)的尺寸和維度等信息實現(xiàn)目標(biāo)預(yù)測。因此,基于CenterNet的目標(biāo)檢測實際上是一種關(guān)鍵點估算的問題。在預(yù)測時,將圖像輸入到卷積神經(jīng)網(wǎng)絡(luò)中,卷積神經(jīng)網(wǎng)絡(luò)輸出熱力圖,熱力圖中的峰值點即為目標(biāo)中心點,之后根據(jù)圖像特征回歸邊界框的高和寬。
(1)
(2)
(3)
(4)
Ldet=Lk+λsizeLsize+λoffLoff
(5)
(6)
CenterNet目標(biāo)檢測算法全部的輸出都是直接通過關(guān)鍵點估計來產(chǎn)生,圖像特征在每個峰值處可直接回歸預(yù)測出預(yù)測框的寬和高,對其進行調(diào)整后即可獲得預(yù)測框,無需根據(jù)交并比IOU(intersection over union)進行非極大值抑制的運算。對關(guān)鍵點的提取可完全取代非極大值抑制,并可利用3×3最大池化層的高效運算。
CenterNet目標(biāo)檢測算法可使用ResNet-18,ResNet-101,DLA-34或Hourglass-104作為主干網(wǎng)絡(luò)提取圖像特征。
ResNet是文獻[18]提出的一種用于圖像分類的深度神經(jīng)網(wǎng)絡(luò),能夠在不增加網(wǎng)絡(luò)復(fù)雜度的情況下增加網(wǎng)絡(luò)深度,提高網(wǎng)絡(luò)模型準確率。ResNet有18、34、50、101和152層等不同深度的網(wǎng)絡(luò)結(jié)構(gòu),綜合考慮網(wǎng)絡(luò)深度、浮點運算數(shù)量和在ImageNet上的錯誤率,采用50層深度神經(jīng)網(wǎng)絡(luò)ResNet作為主干網(wǎng)絡(luò),替代原CenterNet中的主干網(wǎng)絡(luò)提取網(wǎng)絡(luò)提取車輛的特征。
為利用非線性函數(shù)描述神經(jīng)網(wǎng)絡(luò)提取的特征,神經(jīng)網(wǎng)絡(luò)通過仿射變換后需要緊跟非線性激活函數(shù)。神經(jīng)網(wǎng)絡(luò)常用的激活函數(shù)主要有Sigmoid函數(shù)、Tanh函數(shù)、ReLU函數(shù)、LeakyReLU等。CenterNet目標(biāo)檢測算法原文中所使用的激活函數(shù)為ReLU函數(shù),ReLU函數(shù)的表達式如式(7):
y=max(0,x)
(7)
該函數(shù)能夠解決梯度消失的問題,且實現(xiàn)收斂速度較快,在計算上較為高效,相對于Sigmoid函數(shù)梯度的計算,ReLU函數(shù)梯度取值只有0或1,且ReLU將負值截斷為0,避免了無用信息的干擾,為網(wǎng)絡(luò)引入了稀疏性,進一步提升了計算效率。
ReLU函數(shù)曲線如圖1(a),該函數(shù)為分段線性函數(shù)。當(dāng)x>0,其梯度不為0,可用于權(quán)重更新;當(dāng)x<0時,f(x)=0,其梯度為0,權(quán)重?zé)o法更新,相當(dāng)于其輸出為0,神經(jīng)元不會被激活,從而使得網(wǎng)絡(luò)變得稀疏,可進行高效率計算。
圖1 ReLU和LeakyReLU函數(shù)圖像Fig. 1 ReLU and LeakyReLU function image
通常激活函數(shù)的輸入值有一項偏置值,假設(shè)偏置值太小,以至于輸入激活函數(shù)的值總是負的,那么反向傳播過程經(jīng)過該處的梯度恒為0,對應(yīng)的權(quán)重和偏置參數(shù)此次無法得到更新。如果對于所有的樣本輸入,該激活函數(shù)的輸入都是負的,該神經(jīng)元無法學(xué)習(xí),稱為神經(jīng)元“死亡”。盡管稀疏性可以提升計算高效性,但同樣可能阻礙訓(xùn)練過程,網(wǎng)絡(luò)稀疏會使ReLU在訓(xùn)練時不夠穩(wěn)定,很容易出現(xiàn)神經(jīng)元“死亡”現(xiàn)象。當(dāng)一個相當(dāng)大的梯度流過采用ReLU作為激活函數(shù)的神經(jīng)元時,該神經(jīng)元更新參數(shù)后不會輸出有效數(shù)據(jù),梯度將會永遠為0。
LeakyReLU的提出可以解決ReLU神經(jīng)元“死亡”的問題,其函數(shù)表達式如式(8)。式中α為一個很小的常數(shù),保留了一些負軸的值,使得負軸的信息不會全部丟失。
(8)
LeakyReLU函數(shù)圖像如圖1(b)。LeakyReLU與ReLU很相似,僅在輸入小于0的部分有差別。ReLU輸入小于0的部分數(shù)值為0,而LeakyReLU輸入小于0的部分數(shù)值為負值,且有微小的梯度。在反向傳播過程中,對于LeakyReLU激活函數(shù),輸入小于0的部分可以計算得到梯度,避免了神經(jīng)元的“死亡”現(xiàn)象。
基于以上分析,將CenterNet目標(biāo)檢測網(wǎng)絡(luò)中的激活函數(shù)由ReLU改為LeakyReLU,以提高算法的目標(biāo)檢測性能。
大感受野可以感知到整個物體,感知到物體周圍的環(huán)境,進而增加圖像像素點和激活函數(shù)之間的連接數(shù)量[19]。空間金字塔池化(spatial pyramid pooling,SPP)是一種增加感受野的常用手段,事實上在CNN普及之前,SPP是圖像分類和圖像檢測領(lǐng)域的一種關(guān)鍵技術(shù)。考慮到SPP的顯著特性,將其應(yīng)用在CNN的環(huán)境中,將CNN層之后的池化層代替為SPP層,它將圖像從細到粗進行分割,并結(jié)合其中的局部特征,具體來說,它將特征映射從主干分割成幾個d×d塊,d∈Z是正整數(shù)。SPP的每個空間箱中,它們匯集了每個過濾器的響應(yīng),從而使CNN接受任何尺度的輸入信息,極大增加了網(wǎng)絡(luò)模型的尺度不變性,有效抑制了模型的過擬合,典型網(wǎng)絡(luò)模型如圖2??臻g金字塔池化通過采取多個不同池化核的最大池化操作來保證固定的特征向量輸出,從而實現(xiàn)任何尺度的輸入。設(shè)定不同的池化尺寸,再按照不同的池化尺寸進行池化操作,最后合并不同的池化結(jié)果,即得到空間金字塔池化的結(jié)果。
圖2 空間金字塔池化層Fig. 2 Pool layer of space pyramid
筆者由YOLOV4目標(biāo)檢測主干網(wǎng)絡(luò)CSPdarknet53最后一個卷積特征層得到啟發(fā),利用SPP增大感受野,融合多尺度特征,更好地分離出交通場景中最顯著的上下文特征信息。在CenterNet中,利用主干特征提取網(wǎng)絡(luò)Resnet50,獲取了一個初步的特征層,其大小為16×16×2 048,SPP結(jié)構(gòu)就添加在該特征層之后,再分別利用三個不同尺度的最大池化操作進行處理,該最大池化的池化核大小分別為13×13、9×9、5×5,同時,池化操作得到的特征層作為下面三次上采樣的輸入特征層。
計算機處理器為Intel i9-9900K CPU,主頻3.60 GHz,內(nèi)存32 G,顯卡型號Nvidia GeForce RTX 2080 Ti,采用Ubuntu 18.04操作系統(tǒng),使用主流深度學(xué)習(xí)框架Keras搭建神經(jīng)網(wǎng)絡(luò)。網(wǎng)絡(luò)輸入大小為512×512,訓(xùn)練時Batch_size設(shè)置為4,初始學(xué)習(xí)率為0.001,訓(xùn)練100輪。網(wǎng)絡(luò)模型的訓(xùn)練采用VOC數(shù)據(jù)集,利用實際場景圖片對網(wǎng)絡(luò)模型進行測試。
精確率和召回率是最常用的兩個目標(biāo)檢測算法評價指標(biāo)。精確率是指正確識別為正類的目標(biāo)在所有判定為正類的目標(biāo)中所占的比例,記為Pr;召回率是指被正確識別為正類的目標(biāo)在所有正類目標(biāo)中所占的比例,記為Re。精確率和召回率的計算公式分別如式(9)、式(10):
(9)
(10)
式中:TP為正確識別為正類的目標(biāo)個數(shù);FP為錯誤識別為正類的目標(biāo)個數(shù);FN為錯誤識別為負類的目標(biāo)個數(shù)。
在實際的應(yīng)用過程中,精確率和召回率無法同時滿足要求,因此使用平均精度AP值綜合考慮兩個指標(biāo),從而衡量神經(jīng)網(wǎng)絡(luò)的性能。AP計算公式如式(11):
(11)
式中:N為測試集中圖片數(shù)量;Pr(k)為第k張圖片的Pr值;ΔRe(k)為從k-1張圖片到k張圖片Re值的變化情況。
針對具有C類目標(biāo)的具體任務(wù)時,一般采用平均AP值,即mAP,來衡量網(wǎng)絡(luò)的性能,其計算如式(12):
(12)
在實際運用時需要綜合考慮精確率和召回率,F(xiàn)1是精確率和召回率的調(diào)和平均,其值的大小能夠綜合反映模型檢測能力以及查全性能,F(xiàn)1值越高代表模型的檢測性能越好,公式如式(13)。
(13)
采用以上指標(biāo)對所提出的算法進行驗證分析。
對激活函數(shù)進行優(yōu)化后,針對交通場景對網(wǎng)絡(luò)重新進行訓(xùn)練,并計算神經(jīng)網(wǎng)絡(luò)的召回率、準確率、mAP以及F1數(shù)值進行分析。置信度為0.3時,CenterNet和改進后的CenterNet各參數(shù)指標(biāo)如表1。
表1 ResNet-50和改進后的CenterNet的召回率、準確率、AP值以及F1值Table 1 The Pr, Re, AP value and F1 value of CenterNet and the improved CenterNet
由表1可知:相比于CenterNet網(wǎng)絡(luò)模型,采用改進后的CenterNet網(wǎng)絡(luò)模型在F1值、AP值、精確率和召回率上都有顯著提升。改進后的算法雖然在檢測為汽車時精確度略有降低,由99.05%下降為98.13%,檢測為汽車的召回率從48.37%提高到了60.88%,AP值提高了0.57%,在實際應(yīng)用中,不能僅僅通過對物體檢測所得到的精確率和召回率的觀察獲得結(jié)論,這兩個指標(biāo)相互對立,一個指標(biāo)的提高,另一個指標(biāo)就會下降,因此需要通過觀察綜合指標(biāo)mAP以及F1的值判斷改進算法后的優(yōu)化效果。
由表1可以看出,相較于原始CenterNet網(wǎng)絡(luò)模型,改進后的CenterNet在汽車檢測的綜合評價指標(biāo)F1值提高了0.1,mAP提高了4.17%;檢測自行車和公交車的精確率不變,均為100%,其召回率分別提高了11.90%和35.44%,AP分別提高了2.47%和11.43%,兩者的F1值分別提高了0.11和0.33;檢測摩托車的各項指標(biāo)都得到了提高,其精確率由97.22%提高至98.48%,召回率提高了7.32%,AP值提高0.46,綜合性指標(biāo)F1提高了0.06。
以上五種交通場景目標(biāo)的平均F1值由0.576變?yōu)?.714,提高13.8%,綜合性指標(biāo)mAP值從原來改進前的83.13%提高到了87.35%,模型檢測速度FPS由原來的95.5略微下降至94.8,但其他各項性能指標(biāo)均提升明顯,表明筆者所改進的CenterNet網(wǎng)絡(luò)模型有效提高了目標(biāo)檢測性能和查全性能,增強了模型的檢測能力,同時對于目標(biāo)遮擋問題有明顯的改善。
檢測實例如圖3。圖3(a)為未改進CenterNet網(wǎng)絡(luò)檢測結(jié)果,該網(wǎng)絡(luò)能夠檢測大部分目標(biāo),但是有一輛電動車漏檢。圖3(b)為改進后CenterNet網(wǎng)絡(luò)檢測結(jié)果,該網(wǎng)絡(luò)能夠檢測圖中所有目標(biāo),且多數(shù)目標(biāo)檢測概率提高。對比圖3(a)和圖3(b)可知,對激活函數(shù)進行改進后,目標(biāo)檢測算法的檢測能力得到了有效的提高。
圖3 檢測效果比較Fig. 3 Comparison of detection results
研究了交通場景目標(biāo)檢測算法,提出了基于改進CenterNet的目標(biāo)檢測算法, 將CenterNet網(wǎng)絡(luò)中的ReLU激活函數(shù)改進為LeakyReLU函數(shù),同時利用SPP結(jié)構(gòu)修改了主干網(wǎng)絡(luò)ResNet-50,對神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練后進行測試,試驗結(jié)果表明,與原CenterNet網(wǎng)絡(luò)相比,改進的神經(jīng)網(wǎng)絡(luò)對絕大多數(shù)交通場景目標(biāo)的F1值、精確度、召回率和mAP都有顯著提高,僅有汽車的精確度由99.05%下降為98.13,下降幅度為0.009%,基本保持不變,考慮到增加網(wǎng)絡(luò)結(jié)構(gòu)深度會略微降低檢測速度的原因,除FPS指標(biāo)略有下降外,其他性能指標(biāo)提升明顯,說明改進的算法有效改進了原算法的目標(biāo)檢測性能。通過對實際拍攝圖片的測試發(fā)現(xiàn),改善了目標(biāo)漏檢、目標(biāo)遮擋等情況。