胡昌冉,樊彥國,禹定峰
(1.中國石油大學(xué)(華東)海洋與空間信息學(xué)院,山東 青島 266580;2.齊魯工業(yè)大學(xué)(山東省科學(xué)院)海洋儀器儀表研究所,山東 青島 266061)
隨著我國經(jīng)濟(jì)的快速發(fā)展,車輛的持有數(shù)量逐年遞增,對于道路交通的壓力逐年加劇,從而導(dǎo)致車輛擁堵以及交通事故等的頻繁發(fā)生,在這種情況下,催生出了智能交通系統(tǒng)。智能交通系統(tǒng)是一個(gè)全面、高效、實(shí)時(shí)的綜合交通運(yùn)輸管理系統(tǒng),其作為未來交通系統(tǒng)的重要發(fā)展方向可以在許多方面發(fā)揮作用,是一項(xiàng)多學(xué)科技術(shù)的集成應(yīng)用。車輛檢測對于智能交通系統(tǒng)來說至關(guān)重要,通過提取車輛的特征點(diǎn)以及特征區(qū)域,來預(yù)測車輛行駛的速度等信息,同時(shí)結(jié)合車牌識(shí)別算法為交管部門在分析車輛違規(guī)行為方面提供重要依據(jù)[1]。
隨著深度學(xué)習(xí)的不斷發(fā)展和創(chuàng)新,對于車輛檢測的研究取得了重要進(jìn)展[2],且隨著深度學(xué)習(xí)在圖像分類與識(shí)別領(lǐng)域的快速發(fā)展,使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)來進(jìn)行目標(biāo)檢測已經(jīng)成了研究熱點(diǎn)[3-4],現(xiàn)有的基于卷積神經(jīng)網(wǎng)絡(luò)的車輛檢測算法大部分已經(jīng)可以滿足多種復(fù)雜場景下的車輛檢測要求。深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)是由Krizhevsky等人[5]在2012年提出的,也稱為AlexNet網(wǎng)絡(luò)。R-CNN[6]通過Selective Search方法[7]來對目標(biāo)圖像提取感興趣的候選區(qū)域,相比較傳統(tǒng)的機(jī)器學(xué)習(xí)方法檢測效能有了大幅度提升,但是R-CNN輸入尺度單一,同時(shí)訓(xùn)練過程較復(fù)雜,所以大大影響了檢測速度。SPP-Net通過金字塔池化層[8],實(shí)現(xiàn)了多尺度預(yù)測,同時(shí)也減少了重復(fù)計(jì)算,從而大大提高了算法的速度和性能。Fast R-CNN[9]算法汲取了SPP-Net的優(yōu)點(diǎn)并加入了ROI Pooling的池化層結(jié)構(gòu),解決了傳統(tǒng)方法計(jì)算耗時(shí)的問題。Faster R-CNN[10]算法提出了RPN (Region Proposal Network)網(wǎng)絡(luò)結(jié)構(gòu),通過RPN產(chǎn)生候選區(qū)域,同時(shí)還將卷積層提取的特征信息進(jìn)行全網(wǎng)絡(luò)的權(quán)值共享,解決了由于大量候選框而引起的速度慢的問題。YOLO[11]算法首先將圖像劃分為7×7的單元格,然后在每個(gè)單元格上預(yù)測2個(gè)邊界框的位置、置信度和多個(gè)類別的概率。YOLOv2[12]算法加入BN[13]層,雖然使精度發(fā)生輕微下降,但是漏檢率卻得到極大的降低。為了在保持速度的同時(shí)實(shí)現(xiàn)更高的定位精度,YOLOv3[14]算法達(dá)到了檢測精度與速度的最佳平衡點(diǎn),但最小特征圖尺寸仍然偏大,這必然會(huì)造成不必要的損失,比如車輛的錯(cuò)檢、漏檢或者重復(fù)檢測的問題。如圖1所示,故存在大量的改進(jìn)算法來解決此類問題[15-16],但是效果不佳。由于YOLOv3算法擁有較高的檢測精度和快速的檢測速度,通過綜合衡量,本文選取YOLOv3算法作為基礎(chǔ)研究網(wǎng)絡(luò),并提出改進(jìn)思路,在檢測效率無損失的情況下可提高檢測精度。
(a) 錯(cuò)檢
(b) 漏檢
(c) 重復(fù)檢測
YOLO (You Only Look Once)[11]是一種端到端的目標(biāo)檢測方法,其模型由2個(gè)基本部分組成:卷積神經(jīng)網(wǎng)絡(luò)CNN和經(jīng)過特殊設(shè)計(jì)的損失函數(shù)。CNN主干網(wǎng)受到GoogLeNet[17]的啟發(fā),具有24個(gè)卷積層,其后是2個(gè)全連接層。YOLO將網(wǎng)絡(luò)輸出重塑為二維網(wǎng)格,形狀為GhGw,其中Gh是垂直的網(wǎng)格單元數(shù),而Gw是水平的網(wǎng)格單元數(shù)。每個(gè)網(wǎng)格單元都占據(jù)圖像的一部分,如圖2所示。
圖2 YOLO原理示意圖
如果對象的中心落入網(wǎng)格單元,則該網(wǎng)格單元負(fù)責(zé)檢測該對象。每個(gè)網(wǎng)格單元預(yù)測B個(gè)邊界框和這些框的置信度得分。若單元格中包含對象,置信度分?jǐn)?shù)則等于預(yù)測框與地面實(shí)況之間的交并比(IoU)。每個(gè)邊界框包含5個(gè)預(yù)測量:x、y、w、h和置信度C。(x,y)坐標(biāo)為相對于網(wǎng)格單元邊界的中心,(w,h)是相對于整個(gè)圖像預(yù)測框的寬度和高度。最后,置信度表示預(yù)測框與任何地面真實(shí)框之間的IoU。置信度C的計(jì)算方法如下:
C=Pobject·IoU
(1)
(2)
其中:Pobject表示預(yù)測框中含有目標(biāo)的概率,若預(yù)測框中含有車輛目標(biāo),則Pobject=1,若預(yù)測框中未含有車輛目標(biāo),則Pobject=0;A(·)為面積函數(shù);Bb為預(yù)測邊界框,Bgroundtruth表示真實(shí)邊界框。
同時(shí),每個(gè)網(wǎng)格單元還可以預(yù)測類別條件概率P(class|object)。這些概率以包含對象的網(wǎng)格單元為條件,預(yù)測每個(gè)網(wǎng)格單元的一組類概率,與框Box的數(shù)量無關(guān)。在測試時(shí),將預(yù)測的類別條件概率與各個(gè)框的置信度相乘,從而為每個(gè)Box的特定類別提供了置信度得分。這些分?jǐn)?shù)既編碼了該類別出現(xiàn)在盒子中的概率,也預(yù)測了Box包含對象的可靠程度P。
P=Pr(class|object)·C
=Pr(class|object)·Pobject·IoU
(3)
其中:P(class|object)表示預(yù)測框中包含目標(biāo)下的條件概率;C為置信度。
將圖像輸入卷積網(wǎng)絡(luò)的過程中,對其進(jìn)行連續(xù)操作,包括卷積、池化、降采樣等,整合多尺度上下文信息,這樣會(huì)損失一些分辨率,導(dǎo)致一些圖像細(xì)節(jié)信息無法重構(gòu)。針對以上問題,本文在YOLOv3主干網(wǎng)絡(luò)結(jié)構(gòu)Darknet-53中引入空洞卷積模塊,使其在不增加計(jì)算量、不損失特征圖分辨率的情況下擴(kuò)增特征圖的感受野[18],從而能夠獲取更豐富的上下文信息以增強(qiáng)對小車輛以及遮擋車輛的檢測能力。
空洞卷積對卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行了一定程度的改進(jìn),對于一個(gè)3×3、擴(kuò)張率為2的空洞卷積,其輸出圖像中心位置的像素響應(yīng)圖如圖3所示。由圖3可見,通過空洞卷積的操作使得感受野增加到了5×5,并且保持了網(wǎng)絡(luò)計(jì)算量不變??斩淳矸e核和感受野的計(jì)算方法如下:
fn=fk+(fk-1)(Dr-1)
(4)
(5)
其中:fk表示原始卷積核大?。籪n表示空洞卷積核大?。籇r表示膨脹系數(shù);lm-1表示第(m-1)層感受野大?。籰m表示經(jīng)空洞卷積后的第m層感受野大??;Si表示第i層的步幅stride的大小。
(a) 3×3卷積操作
(b) 3×3空洞卷積操作
(c) 3×3空洞卷積操作響應(yīng)
本文提出改進(jìn)的車輛檢測方法整體框架如圖4所示。該方法以YOLOv3的整體架構(gòu)為基礎(chǔ)并對其進(jìn)行改進(jìn),輸入量為整張圖像,輸出為檢測到的所有車輛的位置及其相應(yīng)的類別。首先,本文提出的算法以Darknet-53網(wǎng)絡(luò)提取車輛特征;然后在網(wǎng)絡(luò)結(jié)構(gòu)中嵌入空洞卷積模塊以增強(qiáng)感受野,采用不同膨脹系數(shù)獲得不同尺度的圖像信息;最后使用非極大值抑制NMS剔除多余的邊界框??斩淳矸e模塊如圖5所示。
圖4 改進(jìn)的YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)圖
圖5 空洞卷積模塊
為更好地預(yù)測車輛檢測邊界框,F(xiàn)aster R-CNN[10]提出通過錨框代替?zhèn)鹘y(tǒng)的圖像金字塔作為選取車輛邊界框的方法。這種改進(jìn)提高了模型的訓(xùn)練效率。本文同樣采用了YOLOv3中的錨框機(jī)制預(yù)測目標(biāo)邊界框并取得了較好的檢測效果。
本文除了對深度卷積網(wǎng)絡(luò)進(jìn)行優(yōu)化之外,還對原YOLOv3中錨點(diǎn)框的計(jì)算方法進(jìn)行優(yōu)化。根據(jù)文獻(xiàn)[19]提出的基于K-means(K均值)的聚類算法對錨點(diǎn)框的選取方式進(jìn)行改進(jìn),通過聚類算法實(shí)現(xiàn)Bounding Box自動(dòng)尋找合適尺寸的錨點(diǎn)框以獲得更高的IoU,同時(shí)錨點(diǎn)框的定位準(zhǔn)確度也得到了較大的提升,從而大大解決了車輛檢測框定位不準(zhǔn)確的問題。其中K-means算法中距離公式為:
d(box,centroid)=1-IoU(box,centroid)
(6)
本文在自建的車輛檢測數(shù)據(jù)集上重新生成新的錨框尺寸,改進(jìn)的YOLOv3算法對于輸入分辨率為416×416的車輛圖片,可生成9個(gè)不同尺寸的錨點(diǎn)框,分別為11×26、18×40、27×88、41×58、46×115、62×197、93×114、97×252和223×253。
NMS算法通常選取得分最高的框從而抑制得分較低的框。但是在有遮擋的情況下,如圖6中,實(shí)線邊框和虛線邊框分別有0.96和0.83的類別得分。對于傳統(tǒng)的NMS算法,如果其中的一個(gè)框得分大于另一個(gè)框,會(huì)將得分較低的框過濾掉,從而出現(xiàn)漏檢的情況。針對以上問題,本文改進(jìn)了NMS模塊,使用降低后的分?jǐn)?shù)來替代原有的分?jǐn)?shù),而不是直接將其過濾掉。
圖6 檢測框位置靠近
對于NMS算法,當(dāng)2個(gè)框之間的IoU大于設(shè)定閾值時(shí)會(huì)直接被過濾掉,容易加大漏檢。本文中使用降低后的分?jǐn)?shù)來代替原有的分?jǐn)?shù),而不是直接置0。具體定義如下:
(7)
其中:Si表示窗口被過濾掉的可能性大??;IoU表示面積的交并比;Nt表示預(yù)先設(shè)定的閾值。閾值在實(shí)際的操作過程中通常設(shè)定為0.5,在目標(biāo)檢測的車輛檢測領(lǐng)域中,通常認(rèn)為覆蓋到車輛一半以上即可認(rèn)為檢測到了車輛目標(biāo)。
目前網(wǎng)上公開的目標(biāo)檢測領(lǐng)域的標(biāo)準(zhǔn)數(shù)據(jù)集主要有KITTI數(shù)據(jù)集[20]與UA-DETRAC數(shù)據(jù)集[21-22]。相對來說交通視頻的公開數(shù)據(jù)集較少,且有些視頻車輛數(shù)量較少并且分辨率較低。鑒于現(xiàn)有的車輛檢測算法大多是根據(jù)公開的標(biāo)準(zhǔn)數(shù)據(jù)集進(jìn)行測試驗(yàn)證,選取網(wǎng)絡(luò)上已有的車輛檢測數(shù)據(jù)集,用來對比本文提出的改進(jìn)算法與先前算法的檢測效果。
鑒于目前公開的交通數(shù)據(jù)集較少,同時(shí)清晰度較低以及場景復(fù)雜度不高,為了豐富車輛檢測數(shù)據(jù)集,提高模型檢測能力,并進(jìn)一步驗(yàn)證本文提出的改進(jìn)算法的優(yōu)越性,本文構(gòu)建了自己的車輛檢測數(shù)據(jù)集。具體做法如下:首先準(zhǔn)備KITTI標(biāo)準(zhǔn)數(shù)據(jù)集以進(jìn)行訓(xùn)練和學(xué)習(xí),同時(shí)對比本文算法與先前算法;然后構(gòu)建自己的車輛檢測數(shù)據(jù)集,用于驗(yàn)證本文算法在實(shí)際情況下檢測的準(zhǔn)確性。車輛數(shù)據(jù)集中的圖片均來自于實(shí)際場景,共包含5700幅圖像。圖例如圖7所示。測試集圖片包括1100張。
圖7 車輛檢測數(shù)據(jù)集圖例
本文采用YOLO_MARK對車輛圖片進(jìn)行標(biāo)注。實(shí)際車輛運(yùn)行過程中,道路以及其他交通設(shè)施同樣存在,故樣本標(biāo)注時(shí)必須考慮到只有道路或者只有其他交通設(shè)施時(shí)將其誤判為車輛的情況,從而引起誤報(bào)。因此對車輛進(jìn)行標(biāo)注時(shí),在保留車輛形狀完整的情況下,盡可能地減少框入過多的道路或者其他交通設(shè)施,并針對性地對車輛進(jìn)行標(biāo)注。
實(shí)驗(yàn)平臺(tái):本文實(shí)驗(yàn)基于Windows 10操作系統(tǒng),配置為Intel(R) Xeon(R) Bronze 3106 CPU@1.70 GHz, TITAN XP顯卡。
本文在自建的車輛檢測數(shù)據(jù)集中對改進(jìn)的YOLOv3算法進(jìn)行訓(xùn)練。整個(gè)訓(xùn)練過程中,進(jìn)行了50000次迭代。其中設(shè)置沖量為0.9,權(quán)重衰減設(shè)置為0.0005,批處理大小設(shè)置為64,初始學(xué)習(xí)率設(shè)置為0.001。當(dāng)訓(xùn)練的迭代次數(shù)依次達(dá)到40000和50000時(shí),其學(xué)習(xí)效率隨之依次降低為10-4與10-5。前2000次的迭代震蕩幅度較大,故可忽略,當(dāng)?shù)螖?shù)逐漸增加,曲線也逐漸趨于平穩(wěn)狀態(tài)。
傳統(tǒng)車輛檢測算法多以TP率作為性能的評價(jià)指標(biāo)。TP指的是真正例(True Positive)。TP率即在所有圖片中檢測到含車輛圖片的比例。除TP外,樣本還可被分為假正例(False Positive, FP)、真負(fù)例(True Negative, TN)和假負(fù)例(False Negative, FN)?;诰矸e神經(jīng)網(wǎng)絡(luò)的檢測算法指標(biāo)評價(jià)多采用文獻(xiàn)[23]所提標(biāo)準(zhǔn),即評價(jià)各模型的精確率(Precision)、召回率(Recall)與F1值。計(jì)算公式分別為:
(8)
(9)
(10)
其中:TP表示為正確檢測到的車輛數(shù)量;FN表示漏檢的車輛數(shù)量;FP表示誤檢的車輛數(shù)量;TN表示檢測正確的非車輛類別的數(shù)量。精確率又稱查準(zhǔn)率,是模型檢測能力的真實(shí)反映,表示正確檢測到的車輛數(shù)量和所有檢測出的車輛數(shù)量的比值;召回率又稱查全率,是模型查全性能的體現(xiàn),表示的是模型檢測出的車輛數(shù)目和所有車輛總數(shù)的比值。為了平衡查準(zhǔn)率和查全率,利用F1值進(jìn)行綜合測評。F1值越高,表示模型的檢測性能越好。
本文首先在公開車輛檢測數(shù)據(jù)集KITTI上對比了Fast R-CNN[9]、Faster R-CNN[10]、DAVE[24]、YOLO[11]、YOLOv2[12]、原YOLOv3[14]及本文所提算法的檢測效果,以驗(yàn)證本文算法優(yōu)于其他傳統(tǒng)的車輛檢測算法。各算法結(jié)果列于表1中,同時(shí)本文針對引言中提到的漏檢、錯(cuò)檢以及重復(fù)檢測問題對原YOLOv3以及改進(jìn)的YOLOv3算法結(jié)果進(jìn)行對比,如圖8所示。從圖8中可以看出,YOLOv3中出現(xiàn)的錯(cuò)檢、漏檢情況運(yùn)用本文的方法后得到了明顯的改善。從表1中可以看出,本文提出的改進(jìn)YOLOv3算法不僅檢測精度上相比傳統(tǒng)的車輛檢測方法有明顯提升,檢測耗時(shí)也大大縮短。
表1 不同方法在KITTI數(shù)據(jù)集上的檢測結(jié)果
從表1中不難看出,經(jīng)典的車輛檢測算法Fast R-CNN與Faster R-CNN的平均精確率分別為0.72和0.86,在目標(biāo)檢測領(lǐng)域,后者的精確率提升較大,但它們比本文提出的改進(jìn)算法的精確率分別低了0.24與0.10。DAVE算法的平均檢測精確率為0.88,比傳統(tǒng)方法的精確率稍高,但是相對于YOLOv3以及本文提出的改進(jìn)算法仍有較大差距。檢測速度方面,傳統(tǒng)的方法中Faster R-CNN最快,但仍然沒有達(dá)到實(shí)時(shí)檢測的要求,這是兩階段目標(biāo)檢測的通病。表1中顯示了YOLO系列的算法均達(dá)到了實(shí)時(shí)性的要求,且其中YOLOv2的檢測速度最快,每幀用時(shí)為0.037 s。同樣YOLOv3以及本文提出的改進(jìn)算法的檢測速度也達(dá)到了實(shí)時(shí)處理的要求。YOLOv2、YOLOv3和本文改進(jìn)的YOLOv3算法的檢測精確率分別為0.91、0.94和0.96,且在召回率方面,本文提出的改進(jìn)算法相較于其余2個(gè)YOLO系列算法更高,性能更好。綜上,在KITTI數(shù)據(jù)集中的測試結(jié)果顯示,本文改進(jìn)的YOLOv3算法綜合效果最好。
(a) 圖片1的YOLOv3算法檢測結(jié)果
(b) 圖片1的改進(jìn)的YOLOv3算法檢測結(jié)果
(c) 圖片2的YOLOv3算法檢測結(jié)果
(d) 圖片2的改進(jìn)的YOLOv3算法檢測結(jié)果
(e) 圖片3的YOLOv3算法檢測結(jié)果
(f) 圖片3的改進(jìn)的YOLOv3算法檢測結(jié)果
(g) 圖片4的YOLOv3算法檢測結(jié)果
(h) 圖片4的改進(jìn)的YOLOv3算法檢測結(jié)果
(i) 圖片5的YOLOv3算法檢測結(jié)果
(j) 圖片5的改進(jìn)的YOLOv3算法檢測結(jié)果
為了進(jìn)一步驗(yàn)證本文提出的算法在實(shí)際場景中的檢測能力,將該算法運(yùn)用于自建的車輛檢測數(shù)據(jù)集中進(jìn)行驗(yàn)證,其檢測結(jié)果如圖9所示。
(a) 圖片6的改進(jìn)的YOLOv3算法檢測結(jié)果
(b) 圖片7的改進(jìn)的YOLOv3算法檢測結(jié)果
(c) 圖片8的改進(jìn)的YOLOv3算法檢測結(jié)果
(d) 圖片9的改進(jìn)的YOLOv3算法檢測結(jié)果
此外,將車輛檢測算法應(yīng)用于實(shí)際場景時(shí),保證精度是必然的要求。針對誤檢的處理,主要是在建立車輛檢測數(shù)據(jù)集時(shí)充分選取不同尺度以及不同場景的車輛圖片,同時(shí)在標(biāo)注的過程中著重強(qiáng)調(diào)車輛的位置以及類別。模型在進(jìn)行訓(xùn)練的時(shí)候只會(huì)對數(shù)據(jù)集中標(biāo)注的車輛進(jìn)行特征提取和學(xué)習(xí),從而將其他視為背景,因此降低了模型的誤檢率。最后,本文在自建的車輛檢測數(shù)據(jù)集上進(jìn)一步比對了原YOLOv3以及改進(jìn)后的YOLOv3的各項(xiàng)指標(biāo),如表2所示。結(jié)合表1和表2來看,相較于公開數(shù)據(jù)集,本文自建的車輛檢測數(shù)據(jù)集上的各項(xiàng)指標(biāo)均有所下降,這是因?yàn)樵摂?shù)據(jù)集包含多種復(fù)雜場景下的多種尺度大小的車輛樣本。部分樣本檢測難度較大,模型需進(jìn)一步優(yōu)化。不過對于改進(jìn)的YOLOv3來說,其檢測精度依然優(yōu)于原YOLOv3模型。在檢測速度方面,嚴(yán)格的實(shí)時(shí)檢測速度一般不低于24幀/s。對于本文的算法來說,其速度較原始算法雖有所下降,但是精度有較大提高。在速度沒有過多損失的情況下提高了檢測精度,基本能夠滿足實(shí)時(shí)檢測的需求。
表2 改進(jìn)的YOLOv3與原YOLOv3結(jié)果對比
現(xiàn)有的車輛檢測算法很難同時(shí)兼顧速度與精度,因此,本文提出一種基于YOLOv3改進(jìn)的車輛檢測算法,在Darknet-53特征提取網(wǎng)絡(luò)中加入了空洞卷積模塊,提升了網(wǎng)絡(luò)對小型目標(biāo)車輛以及遮擋車輛的檢測能力,并自建了一個(gè)包含多尺度以及多場景的車輛檢測數(shù)據(jù)集。本文在公開數(shù)據(jù)集上對比了本文的算法和傳統(tǒng)算法之間的性能,結(jié)果顯示,本文算法在速度和精度方面均優(yōu)于其他算法。為了進(jìn)一步驗(yàn)證,本文還在自建的車輛檢測數(shù)據(jù)集中進(jìn)行測試,驗(yàn)證了本算法對遮擋車輛以及小型車輛的檢測效果。
綜上,該算法具有較強(qiáng)的實(shí)用性同時(shí)也存在一些不足。算法在測試集上對車輛的定位還是不夠精確,在測試集中的結(jié)果和標(biāo)準(zhǔn)數(shù)據(jù)集中有所差距。考慮到樣本選取的數(shù)量和質(zhì)量有所不足,這也是導(dǎo)致檢測結(jié)果和標(biāo)準(zhǔn)數(shù)據(jù)集中有所差距的原因。在后續(xù)的研究中會(huì)進(jìn)一步研究造成差距的原因并著重解決這些問題,提升算法的檢測能力。