潘衛(wèi)華 羅裕坤
(華北電力大學計算機系 河北 保定 071000)
隨著經(jīng)濟的快速發(fā)展,我國人民生活水平日漸提高,車輛數(shù)量也隨之增長,但車輛的增長也伴隨著各種交通問題的發(fā)生。調(diào)查顯示,大部分事故是司機在無監(jiān)管情況下違規(guī)駕駛、異常停車造成的,若道路管理方可以加強監(jiān)控并及時發(fā)現(xiàn)駕駛員的違規(guī)行為,則可以減少交通事故的發(fā)生。在復(fù)雜的交通環(huán)境下精準且快速地識別車輛是熱點也是難點。傳統(tǒng)的目標檢測算法[1]一般分為區(qū)域選擇、特征提取、分類器分類三個階段,但是傳統(tǒng)算法的缺點較為明顯,算法時間復(fù)雜度高,窗口冗余,特征提取對多樣化的變化沒有很好的魯棒性。
伴隨著深度學習的發(fā)展,目標檢測算法也取得了巨大的突破,主流的基于深度學習的目標檢測算法[2]主要分為兩階段檢測算法(Two-stage detectors)和單階段檢測算法(Single-stage detectors)兩類。
兩階段檢測算法即基于候選區(qū)域的檢測方法,過程主要包括兩個階段,即算法先提取候選區(qū)域,然后再對候選區(qū)域進行分類和回歸。兩階段檢測算法主要包括R-CNN[3]、Fast R-CNN[4]、Faster R-CNN[5]、Mask R-CNN[6]等。而兩階段算法也存在明顯的缺陷,例如R-CNN須采用固定尺寸的輸入圖像,候選區(qū)域提取、特征提取、分類和回歸這些操作導(dǎo)致訓(xùn)練測試不簡潔,也是R-CNN檢測速度慢的主要原因。通過一系列改進的Fast R-CNN、Faster R-CNN、Mask R-CNN等算法檢測精度很高而且檢測速度也在不斷提升,但是仍然無法滿足實時性的要求。
單階段檢測算法即基于回歸的檢測方法,主要包括SSD[7]、YOLO[8]、YOLOv2[9]、YOLOv3[10]等。SSD是基于多尺度特征圖像的檢測,因此在一定限度上提升了小目標物體的檢測精度,并且SSD借鑒了Faster R-CNN[11]中的Anchor boxes思想,提升了檢測的召回率。YOLO系列是另一種單次目標檢測器,YOLOv1直接在輸出層回歸bounding box的位置和bounding box所屬的類別,網(wǎng)絡(luò)結(jié)構(gòu)借鑒了 GoogLeNet;YOLOv2在YOLOv1的基礎(chǔ)上加入了批量歸一化層以及殘差網(wǎng)絡(luò)結(jié)構(gòu);YOLOv3調(diào)整了網(wǎng)絡(luò)結(jié)構(gòu),使用了全新的Darknet-53殘差網(wǎng)絡(luò),并加入了多尺度預(yù)測,基本平衡了準確性與實時性間的關(guān)系。
將YOLOv3算法應(yīng)用于車輛檢測領(lǐng)域,為進一步提高算法對車輛檢測的準確性以及滿足車輛檢測的實時要求,對YOLOv3算法加以改進。首先將特征提取網(wǎng)絡(luò)進行刪減,減少不必要的運算量,其次引進DenseNet[12]網(wǎng)絡(luò),加入Dense Block[13]塊加深網(wǎng)絡(luò)層次,最后用PReLU損失函數(shù)[14-16]替代原有損失函數(shù)。每一步改進后都與原YOLOv3模型在相同數(shù)據(jù)集下進行實驗對比,在對比實驗中使用相同的測試圖片,以便發(fā)現(xiàn)方法的改進是否滿足最初的想法,再將完全改進后的算法與原始YOLOv3算法及主流的目標檢測算法進行實驗對比,在相同數(shù)據(jù)集和相同測試圖片的條件下,改進后的算法在mAP值、準確率及檢測速度等方面要優(yōu)于其他主流算法。
YOLOv3是目標檢測領(lǐng)域目前為止速度和精度最均衡的網(wǎng)絡(luò),與Faster R-CNN相比,YOLOv3實現(xiàn)了端到端的訓(xùn)練,降低了模型訓(xùn)練的復(fù)雜度,并且圖像的處理速度大幅度提高;與SSD算法相比,YOLOv3有著更高的檢測精度及更快的檢測速度。
YOLOv3網(wǎng)絡(luò)是從YOLO網(wǎng)絡(luò)和YOLOv2網(wǎng)絡(luò)的基礎(chǔ)上發(fā)展并改進而來的。首先,YOLOv3改進了特征提取網(wǎng)絡(luò),用更深Darknet-53網(wǎng)絡(luò)結(jié)構(gòu)代替YOLOv2的Darknet-19,具體網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,該網(wǎng)絡(luò)是在ResNet[17]網(wǎng)絡(luò)結(jié)構(gòu)上發(fā)展起來的,總體網(wǎng)絡(luò)結(jié)構(gòu)用由52個卷積層和一個全連接層組成,將輸入的圖像數(shù)據(jù)交替進行3×3、1×1的卷積。其次YOLOv3借鑒了FPN(Feature Pyramid Networks)[18]的思想,F(xiàn)PN通過高低層融合的方式增強低層特征的語義信息,從而提高對小目標檢測的準確率,YOLOv3分別在32倍降采樣、16倍降采樣、8倍降采樣時進行檢測,輸出三個特征圖并進行尺度融合,將深層信息與淺層信息結(jié)合,最后輸出多尺度預(yù)測結(jié)果。

圖1 YOLOv3模型結(jié)構(gòu)圖
圖1中Convolutional由一個卷積層(Conv2d)、BN層批量歸一化層(Batch Normalization)[19]和激活函數(shù)(Leaky ReLU)[20]組成,BN層在神經(jīng)網(wǎng)絡(luò)訓(xùn)練網(wǎng)絡(luò)模型時加速網(wǎng)絡(luò)收斂,并且能夠解決梯度消失和梯度爆炸問題。Residual代表一個殘差塊,Concatenate代表張量拼接,Convolutional Set由五個卷積核分別為1×1、3×3、1×1、3×3、1×1的Convolutional單元組成。
雖然YOLOv3算法中使用的Darknet-53網(wǎng)絡(luò)在實時性和準確性方面獲得了很好的平衡,并且通過使用殘差網(wǎng)絡(luò)結(jié)構(gòu)使得訓(xùn)練難度降低,但考慮到是針對車輛的目標檢測,原網(wǎng)絡(luò)結(jié)構(gòu)中過多的卷積層顯得有些復(fù)雜和冗余,導(dǎo)致檢測速度變慢,不符合擋路車輛檢測對實時性的要求。因此,為滿足車輛檢測實時性,將原來的Darknet-53網(wǎng)絡(luò)結(jié)構(gòu)進行刪減,將原有的1×、2×、8×、8×、4×殘差塊的五組網(wǎng)絡(luò)改成1×、2×、4×、4×、2×殘差塊的五組網(wǎng)絡(luò),參數(shù)數(shù)量減少,運算復(fù)雜度下降,改進的網(wǎng)絡(luò)模型結(jié)構(gòu)圖如圖2所示。

圖2 改進的Darknet-53網(wǎng)絡(luò)模型結(jié)構(gòu)圖
為提高目標檢測性能,在改進的Darknet-53網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)上加入DenseNet[16]網(wǎng)絡(luò)結(jié)構(gòu)來提高特征提取網(wǎng)絡(luò)的信息傳遞能力。相比ResNet,DenseNet[16]的特征重用(feature reuse)是通過特征在channel上的連接來實現(xiàn)的,所以DenseNet在與ResNet參數(shù)量相等的情況下,計算成本更少,但性能比ResNet高,DenseNet將所有層都互相連接,后面每個層的輸入都是前面所有層的輸出。式(1)和式(2)分別代表了ResNet和DenseNet的信息傳遞方式,通過公式可以更直觀地對比出DenseNet的優(yōu)越性。
xl=Hl(xl-1)+xl-1
(1)
xl=Hl(x0,x1,…,xl-1)
(2)
式中:l代表神經(jīng)網(wǎng)絡(luò)層數(shù);H(·)代表非線性轉(zhuǎn)化函數(shù);xl代表第l層的輸出。可以看出ResNet網(wǎng)絡(luò)第l層的輸出為第l-1層輸出的非線性轉(zhuǎn)化加上第l-1層的輸出,而DenseNet網(wǎng)絡(luò)第l層的輸出則是從第0層到第l-1層的輸出都進行非線性轉(zhuǎn)換,再將這些非線性轉(zhuǎn)換進行維度拼接而成的,顯然DenseNet網(wǎng)絡(luò)減少了許多計算量,因此決定將DenseBlock[17]結(jié)構(gòu)融入到特征提取網(wǎng)絡(luò)中以提高檢測精度。
由于網(wǎng)絡(luò)層次越深其語義信息就越豐富,所以將DenseBlock結(jié)構(gòu)加入到改進好的網(wǎng)絡(luò)結(jié)構(gòu)中。而DenseNet網(wǎng)絡(luò)結(jié)構(gòu)過深則會導(dǎo)致算法復(fù)雜度升高,從而使得檢測速度變慢,所以不宜增加過多的DenseBlock結(jié)構(gòu),因此決定在特征提取網(wǎng)絡(luò)末尾增加倆個DenseBlock結(jié)構(gòu)來提升檢測精度。在DenseBlock中,非線性組合函數(shù)H(·)采用的是BN+ReLU+1×1 Conv+BN+ReLU+3×3 Conv結(jié)構(gòu),與ResNet不同,DenseBlock在卷積后均輸出k個特征圖,k在DenseNet稱為增長率(growth rate),同時在DenseBlock中1×1的卷積數(shù)量為4k個,3×3的卷積數(shù)量為k個,本文中擬決定k為24(因為一般使用較小的k就可以獲得較好的性能)。
單個DenseBlock結(jié)構(gòu)如圖3所示。

圖3 單個DenseBlock結(jié)構(gòu)圖
最終的特征提取網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。

圖4 最終的特征提取網(wǎng)絡(luò)結(jié)構(gòu)圖
在圖4中每個DenseBlock塊由倆組1×1和3×3的卷積構(gòu)成,每組的輸入都和前面每組的輸出有關(guān),輸入圖片后,將輸出五種尺寸不同用于檢測的特征圖,例如輸入的圖片尺寸為512×512,輸出的特征圖尺寸則為64×64、32×32、16×16、8×8、4×4。輸出的五組特征圖通過FPN的思想進行上采樣尺度融合構(gòu)造特征金字塔,通過高低層信息融合的方式進行目標檢測。而如果將原有特征提取網(wǎng)絡(luò)全部替換為DenseNet網(wǎng)絡(luò),雖然會更有效地提取特征信息,但會使得特征提取網(wǎng)絡(luò)變得冗余復(fù)雜,計算量加大,檢測速度則會大大減慢,與改進初衷有所相悖,故采用添加DenseBlock塊的方式來提高檢測精度。
在車輛檢測數(shù)據(jù)集中,存在一些數(shù)據(jù)集車輛被障礙物遮擋或者在光照條件不好的情況下車輛的特征不明顯的情況,為了改善在復(fù)雜環(huán)境下車輛的檢測,決定使用參數(shù)修正單元PReLU激活函數(shù)來代替原有的Leaky ReLU激活函數(shù)。Leaky ReLU會給予所有負值0.01的非零斜率即將數(shù)據(jù)中的負特征看作弱特征,導(dǎo)致在檢測的過程中會出現(xiàn)漏檢或錯檢的情況。Leaky ReLU公式定義如下:

(3)
PReLU則會根據(jù)數(shù)據(jù)來確定負值的斜率即會根據(jù)數(shù)據(jù)特征來調(diào)整斜率,在檢測的過程中會更加注重數(shù)據(jù)中的負特征。PReLU的公式定義如下:
(4)
可以看出在檢測場景簡單的條件下(即數(shù)據(jù)無遮擋以及光照條件較為良好的條件下),PReLU函數(shù)就會退化成Leaky ReLU函數(shù),兩種函數(shù)都可以將數(shù)據(jù)目標的特征在卷積層之間傳遞;在檢測場景復(fù)雜的條件下,PReLU函數(shù)會更加注重負特征的變化,在反向傳播的過程中會根據(jù)負特征的變化來改變線性函數(shù)的斜率,在對目標進行分類回歸時,結(jié)合語義信息以及負特征,會一定程度上改善車輛在被障礙物遮擋以及光照條件不好的場景下檢測效果不佳的情況。在神經(jīng)網(wǎng)絡(luò)反向傳播的過程中,是采用帶動量的更新方式來更新斜率ai的:
(5)
式中:ai的初始值為0.25;μ為動量因子;ε為學習率,φ為常數(shù)。
實驗的軟硬件配置如下:處理器Intel(R) Core(TM) i7-8700 CPU @3.20 GHz 16 GB,顯卡Nvidia GeForce GTX 1080Ti的Windows 10 64位,深度學習框架為Tensorflow,程序設(shè)計語言為Python。
RETRAC數(shù)據(jù)集是從北京和天津不同的24個區(qū)域道路的監(jiān)控中截取的,其俯拍照片與本文道路車輛實時監(jiān)測的場景相吻合,從RETRAC數(shù)據(jù)集中選取了具有代表意義的8 000幅圖片作為本文的數(shù)據(jù)集,其中訓(xùn)練集為7 500幅,測試集為500幅,并將輸入圖片的尺寸改為512像素×512像素。
YOLOv3的9組anchor box是由COCO和VOC數(shù)據(jù)集訓(xùn)練所得的,對本文的數(shù)據(jù)集來說其原有的anchor box的尺寸不合適,故本文采用聚類算法對車輛數(shù)據(jù)重新進行聚類分析,生成15組大小分別為(36,36)、(442,68)、(76,77)、(89,88)、(126,134)、(150,142)、(147,200)、(162,228)、(76,240)、(320,107)、(162,134)、(184,277)、(247,327)、(342,276)、(396,412)的anchor box,其中小尺寸的負責檢測小目標,大尺寸的負責檢測大目標。由于本文只檢測車輛一個類別,故本文迭代次數(shù)為5 000次,avg loss最終為0.113 2。
改進后的算法評價指標為平均精度均值(Mean Average Precision,mAP)、單幅圖片檢測時間(單位:ms)以及準確率。
對特征提取網(wǎng)絡(luò)的改進結(jié)果如表1和圖5所示,并在表1中列出了改進特征提取網(wǎng)絡(luò)的其他兩種網(wǎng)絡(luò)結(jié)構(gòu)(即Darknet-45和Darknet-19)。

表1 特征提取網(wǎng)絡(luò)改進效果表

圖5 引入密集連接網(wǎng)絡(luò)效果測試圖
由表1可以看出,對特征提取網(wǎng)絡(luò)進行刪減會不同程度地提高網(wǎng)絡(luò)的運算速度,但經(jīng)過比較Darknet-33(即本文改進的方法)在平均精度均值及準確度方面皆優(yōu)于其他兩種改進方法,故本文提出的特征提取網(wǎng)絡(luò)改進方式更優(yōu)。由圖5(左為原YOLOv3算法效果,右為改進后效果)的實驗結(jié)果可以看出,在刪減卷積層后,雖然一個車輛目標沒有被檢測出來,但是檢測速度大大提高,比原來的網(wǎng)絡(luò)結(jié)構(gòu)單幅圖片檢測速度提高了大約16 ms,符合了改進的初衷,滿足了檢測的實時性,因此刪減不必要的卷積層是有意義的。
引入密集連接網(wǎng)絡(luò)后的改進結(jié)果如表2和圖6所示。

表2 引入密集連接網(wǎng)絡(luò)效果表

(a) 原YOLOv3算法 (b) 本文算法圖6 引入密集連接網(wǎng)絡(luò)效果測試圖
從表2可以看出,在加入Dense Block加深網(wǎng)絡(luò)結(jié)構(gòu)后,平均精度均值相較于原始的YOLOv3提高了3.02百分點,準確率提高了2.52百分點,并且滿足實時性的要求。從圖6可以看出,同一幅測試圖片,在原始YOLOv3中沒有檢測出的車輛在本模型中可以檢測出來,改進后的YOLOv3算法利用五組不同尺度構(gòu)成的特征金字塔可以較好地解決漏檢的問題,小尺度的特征對測試集中較小的目標檢測效果較好,而由于使用了密集連接網(wǎng)絡(luò),加深網(wǎng)絡(luò)層次并不會引起梯度消失和梯度爆炸,因此引入密集連接網(wǎng)絡(luò)是有意義的。
表3為對原始的YOLOv3算法、用Focal loss改進損失函數(shù)[21]及使用PReLU損失函數(shù)的數(shù)據(jù)對比。

表3 損失函數(shù)改進效果表

(a) 原YOLOv3算法 (b) 本文算法圖7 改進損失函數(shù)結(jié)果效果圖
從表3可以看出,使用Focal loss對損失函數(shù)進行改進后,在mAP值、單幅圖片檢測時間以及準確率方面都有所提升,但是使用PReLU損失函數(shù)代替原有的損失函數(shù)后,mAP值和準確率比使用Focal loss對損失函數(shù)進行改進后都高,檢測單幅圖片的速度也更快,并且PReLU損失函數(shù)提高了對負特征的關(guān)注,所以從圖7可以看出,在光照條件不好的情況下,改進后的算法可以檢測出原算法漏檢的車輛,因此在使用PReLU損失函數(shù)后,降低了原算法的漏檢率。
在對YOLOv3算法進行改進后,改進模型在準確率和實時性方面都高于當前主流的目標檢測算法。

表4 總體改進效果表

圖8 與其他主流算法相比較結(jié)果測試圖
從表4和圖8可以看出,改進的算法在準確率和實時性方面是優(yōu)于其他三個算法的。改進后的算法檢測出了其他三種算法都沒有檢測出的小目標及模糊目標,明顯改善了小目標的識別效果。改進后的算法mAP值比Mask R-CNN高14.50百分點,檢測單幅圖片的時間比Mask R-CNN少36.49 ms,同時準確率提高了1.32百分點,故本文算法滿足實時性和準確性的要求,有效地降低了車輛的漏檢率,并在遮擋和拍攝模糊的情況下仍然有著良好的檢測效果。
表5給出了其他改進YOLOv3算法與本文改進YOLOv3算法的結(jié)果對比,可以看出改進后mAP值和速度都有一定程度的提升,而其他文獻的算法改進只是在速度或者精度一方面的提升,對比而言,本文提出的改進更具有綜合性。

表5 與其他改進后的YOLOv3算法進行比較
為了對道路車輛進行實時且準確的檢測,提出將YOLOv3算法改進并應(yīng)用于道路車輛的檢測中。為了滿足車輛檢測的實時性,對原YOLOv3算法特征提取網(wǎng)絡(luò)中不必要的卷積層刪減,大大提高了檢測速度,并且引入了密集連接網(wǎng)絡(luò)來加深網(wǎng)絡(luò)層次提高車輛檢測的準確率。最后將原損失函數(shù)改為參數(shù)修正單元PReLU損失函數(shù),有效地改善了車輛錯檢和漏檢的問題,并有效改善了小目標車輛的識別效果。實驗結(jié)果表明,提出的算法在車輛檢測中mAP值達到了83.63%,檢測單幅圖片的速度達到了32.64 ms,并且準確率達到了96.77%,為后續(xù)研究車輛跟蹤奠定了良好的基礎(chǔ)。