李 龍,張重陽(yáng)
(南京理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,江蘇 南京 210094)
目標(biāo)檢測(cè)和環(huán)境感知是無(wú)人駕駛汽車(chē)領(lǐng)域中的重要研究問(wèn)題,最有代表性的是車(chē)輛檢測(cè)、車(chē)牌識(shí)別、道路線檢測(cè)等。汽車(chē)在駕駛的過(guò)程中,尾燈是一個(gè)明顯的、具有重要意義的對(duì)象,尾燈可以用來(lái)預(yù)測(cè)前車(chē)的駕駛意圖和對(duì)后面車(chē)輛作出提醒和警示,從而避免交通事故的發(fā)生??梢钥闯?,對(duì)于前車(chē)尾燈的檢測(cè)和識(shí)別是無(wú)人駕駛汽車(chē)領(lǐng)域必不可少的重要環(huán)節(jié)。
在早期的研究中,檢測(cè)和識(shí)別車(chē)輛尾燈所用的方法都是基于傳統(tǒng)的圖像技術(shù)實(shí)現(xiàn)的,并且結(jié)合了顏色、亮度、紋理等特征,然后利用對(duì)稱(chēng)性匹配尾燈對(duì),最后識(shí)別尾燈燈語(yǔ)。文獻(xiàn)[1-3]提出了用灰度圖像來(lái)分割圖像中的亮點(diǎn)。但是,道路上的光源會(huì)產(chǎn)生許多亮點(diǎn),例如路燈、信號(hào)燈和反射,它們需要大量的計(jì)算時(shí)間才能單獨(dú)定位尾燈位置。Chien等[4]結(jié)合形態(tài)學(xué)和邏輯運(yùn)算來(lái)提取尾燈中的過(guò)度曝光區(qū)域,聚集2個(gè)尾燈候選區(qū)域,代表車(chē)輛的一對(duì)尾燈,配對(duì)標(biāo)準(zhǔn)包括燈的面積、形狀和高度的相似性。文獻(xiàn)[5-11]僅僅檢測(cè)夜間的尾燈,因?yàn)橐归g道路圖像中的干擾因素比較少,而且夜間尾燈比較明顯,易于檢測(cè)。隨后由于技術(shù)的提高,研究者開(kāi)始在白天環(huán)境下檢測(cè)尾燈,如文獻(xiàn)[12-15]。尾燈是車(chē)輛的一部分,尾燈脫離車(chē)輛是不存在的,因此文獻(xiàn)[16-17]是通過(guò)先檢測(cè)車(chē)輛區(qū)域來(lái)進(jìn)一步在邊界框中搜索尾燈區(qū)域。
基于傳統(tǒng)方法的研究,只是針對(duì)圖像特征層面的研究,不能很好地滿(mǎn)足實(shí)時(shí)性以及沒(méi)有較高的魯棒性。因此,近些年,許多學(xué)者開(kāi)始使用深度學(xué)習(xí)方法研究尾燈的檢測(cè)和識(shí)別。Wang等[18]利用卷積神經(jīng)網(wǎng)絡(luò)(CNN)和主動(dòng)輪廓模型對(duì)前方車(chē)輛進(jìn)行檢測(cè),分析了尾燈對(duì)的特點(diǎn),然后利用顏色空間轉(zhuǎn)換和位置相關(guān)原理對(duì)正確的尾燈對(duì)進(jìn)行分割。在光線不足的時(shí)候,該方法檢測(cè)效果較好,但是,當(dāng)光線強(qiáng)度很大時(shí),檢測(cè)識(shí)別效果降低,虛警概率增大。Lee等[19]提出了一個(gè)端到端的深度學(xué)習(xí)框架,從卷積神經(jīng)網(wǎng)絡(luò)開(kāi)始以提取空間特征,然后應(yīng)用長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)來(lái)學(xué)習(xí)時(shí)間依賴(lài)性。但是,該方法所研究的尾燈環(huán)境單一,僅僅是對(duì)車(chē)尾部的研究,并沒(méi)有考慮到具體的道路環(huán)境。Chen等[20]提出了一個(gè)使用對(duì)稱(chēng)的SRUF檢測(cè)尾燈框架,在不使用任何閾值的情況下從檢測(cè)到的車(chē)輛中隔離紅色成分以進(jìn)行后燈檢測(cè),所以即使在各種照明條件下,也可以準(zhǔn)確地分析各種尾燈及其狀態(tài)。Wang等[21-22]提出了一種新穎的兩階段方法來(lái)檢測(cè)車(chē)輛并實(shí)時(shí)從單個(gè)圖像識(shí)別信號(hào)燈。在大型數(shù)據(jù)庫(kù)上,通過(guò)多層感知神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)“燈光模式”(LP)。但是該方法僅僅對(duì)剎車(chē)燈的操作,并沒(méi)有對(duì)其他的尾燈類(lèi)型進(jìn)行學(xué)習(xí)。
為了構(gòu)建性能更佳的尾燈檢測(cè)框架,本文在原始YOLOv3網(wǎng)絡(luò)的基礎(chǔ)上,對(duì)網(wǎng)絡(luò)結(jié)構(gòu)和anchor值的獲取作了一定改進(jìn)。
本文的研究對(duì)象是車(chē)輛尾燈,通過(guò)觀察尾燈實(shí)驗(yàn)數(shù)據(jù)集可以得知,一張圖片中車(chē)輛尾燈個(gè)數(shù)可以有很多,但是單個(gè)尾燈所占圖片的比例很小,所以YOLOv3原有的特征提取結(jié)構(gòu)已經(jīng)不再適應(yīng)。另外由于本課題是單目標(biāo)檢測(cè),雖然YOLOv3引入殘差結(jié)構(gòu)使得訓(xùn)練難度降低,并且取消了池化層,但是對(duì)于單目標(biāo)檢測(cè)來(lái)說(shuō),原有網(wǎng)絡(luò)參數(shù)量較多,顯得過(guò)于復(fù)雜和冗余,這樣會(huì)導(dǎo)致訓(xùn)練復(fù)雜、數(shù)據(jù)量需求大以及降低檢測(cè)速度。
由于尾燈的尺寸較小和單目標(biāo)檢測(cè)的情況,本節(jié)對(duì)YOLOv3原先的特征提取網(wǎng)絡(luò)做出改進(jìn),改進(jìn)策略如下:
1)減少大型尺度的特征提?。何矡裟繕?biāo)小,大尺度特征提取顯然不是特別需要,所以刪除了大型尺度提取模塊,也就是刪除Darknet53網(wǎng)絡(luò)最后一個(gè)殘差單元。
2)增加小型尺度的卷積層和殘差塊的個(gè)數(shù):在小型尺度特征提取的模塊上,增加了殘差單元重復(fù)的次數(shù)。
3)減少主體網(wǎng)絡(luò)的層數(shù):原先的Darknet53網(wǎng)絡(luò)的主體網(wǎng)絡(luò)為 52層,經(jīng)過(guò)改進(jìn)之后的主體網(wǎng)絡(luò)為1+(1+2×2)+(1+8×2)+(1+8×2)+(1+4×2)=49層,減少了參數(shù)量。
4)張量改為18維:原先的YOLOv3的訓(xùn)練物體類(lèi)別為80,輸出的邊界框是一個(gè)四維向量(x,y,w,h),加上置信度一共有5個(gè)信息,而每個(gè)點(diǎn)能夠預(yù)測(cè)3個(gè)bounding box,所以輸出的張量大小為(80+5)×3=255。對(duì)于單目標(biāo)檢測(cè)而言,物體類(lèi)別為1,所以輸出張量大小應(yīng)為(1+5)×3=18。
改進(jìn)后的YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。重復(fù)殘差單元的個(gè)數(shù)由原先的5個(gè)變成了4個(gè),因?yàn)槲矡魴z測(cè)是小目標(biāo)檢測(cè),所以在改進(jìn)的過(guò)程中刪掉了大尺度特征提取殘差單元,并且改變了原先用52×52、26×26和13×13大小尺度劃分特征圖,改用104×104、52×52和26×26大小尺度劃分特征圖。同時(shí)增加了小尺度特征提取殘差單元的重復(fù)次數(shù),減少了中尺度特征提取殘差單元的重復(fù)次數(shù),由原先的1×、2×、8×、8×分別變成2×、8×、8×、4×。由于尾燈檢測(cè)是單目標(biāo)檢測(cè),所以YOLOv3的輸出模塊的張量由255維變成了18維。
圖1 改進(jìn)后的YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)
在Faster R-CNN中,錨點(diǎn)框(anchor boxes)的思想就已經(jīng)被提出來(lái)了,目的是通過(guò)選取初始候選框來(lái)提高網(wǎng)絡(luò)的精度和速度。YOLOv3延續(xù)了這種方法用來(lái)預(yù)測(cè)合適的候選區(qū)域邊界框,并且將anchor的個(gè)數(shù)增加到9個(gè)。比較合適的anchor大小是通過(guò)聚類(lèi)方法得到的,anchor最可能代表的是目標(biāo)的寬和高,因?yàn)樵谝粡垐D片中,車(chē)輛尾燈可以算是比較小的目標(biāo),當(dāng)然也需要比較小的anchor,這樣可以更加適應(yīng)實(shí)際問(wèn)題。YOLOv3原網(wǎng)絡(luò)采用的聚類(lèi)方法是K-means聚類(lèi)算法,為了獲得適合本課題研究使用的anchor值,本文對(duì)YOLOv3的聚類(lèi)方法做出改進(jìn)。采用K-means++聚類(lèi)算法并結(jié)合IOU作為距離衡量指標(biāo)。
K-means聚類(lèi)算法采用的是貪心算法的思想,并不一定能得到最優(yōu)解[23],K-means聚類(lèi)算法存在著缺陷:1)需要事先設(shè)定k值。在實(shí)際問(wèn)題中,人們并不知道目標(biāo)會(huì)被分為多少類(lèi),也就不能確定聚類(lèi)中心的個(gè)數(shù),從而會(huì)影響具體的實(shí)驗(yàn)效果。2)對(duì)初始聚類(lèi)中心的位置敏感:K-means的思想是隨機(jī)地在數(shù)據(jù)集中選擇k個(gè)初始點(diǎn),不同的初始點(diǎn)位置很可能會(huì)導(dǎo)致不同的聚類(lèi)結(jié)果。因此,本文使用K-means++聚類(lèi)方法來(lái)求anchor值。K-means++是對(duì)K-means初始點(diǎn)敏感的一種改進(jìn)算法,其選擇聚類(lèi)初始點(diǎn)的原則是:每個(gè)初始聚類(lèi)中心的相對(duì)位置要盡可能遠(yuǎn)一些。
通常的聚類(lèi)方法采用的是歐氏距離,對(duì)框的大小比較敏感,具體表現(xiàn)在大的框會(huì)比小的框產(chǎn)生更多的誤差,而本文所研究的車(chē)輛尾燈的目標(biāo)框大小不一,所以本文采用IOU值來(lái)度量距離,即anchor boxes和ground truth的重疊面積比值,這樣就可以避免anchor boxes尺寸不同帶來(lái)的誤差。每個(gè)數(shù)據(jù)點(diǎn)到聚類(lèi)中心的距離計(jì)算公式如式(1)所示:
d(box,centroid)=1-IOU(box,centroid)
(1)
其中,d(box,centroid) 是anchor box到聚類(lèi)中心的距離,希望距離越小越好,所以IOU值越大,距離越小。改寫(xiě)的K-means++算法流程如下:
Step1隨機(jī)選擇任意一個(gè)初始點(diǎn):
(xi,yi,wi,hi),i∈{1,2,…,N}
作為初始聚類(lèi)中心,這里的anchor boxes只包含框的寬和高(wi,hi)。
Step2對(duì)每一個(gè)數(shù)據(jù)點(diǎn)計(jì)算它與最近的聚類(lèi)中心的距離d(box,centroid)。將其分到d(box,centroid)最小的類(lèi)別中去。
d(box,centroid)=1-IOU([(xi,yi,wi,hi),(xi,yi,Wj,Hj)])
i∈{1,2,…,N},j∈{1,2,…,k}
Step3選擇一個(gè)新的樣本作為聚類(lèi)中心,選擇標(biāo)準(zhǔn)是:包含數(shù)據(jù)點(diǎn)最多的點(diǎn)意味著其很可能是一個(gè)類(lèi)別,所以被選作為新的聚類(lèi)中心的可能性較大。
Step4重復(fù)Step2和Step3,直至有k個(gè)聚類(lèi)中心被選出來(lái)。
Step5將被選出的k個(gè)聚類(lèi)中心作為K-means的k個(gè)初始聚類(lèi)中心,運(yùn)行K-means聚類(lèi)算法。
本實(shí)驗(yàn)的數(shù)據(jù)集來(lái)源于自動(dòng)駕駛場(chǎng)景下的BDD100K數(shù)據(jù)集,從中選取了1000張?jiān)紙D片,大小為1280×720。其中800張作為訓(xùn)練集,剩下的200張作為測(cè)試集。圖片中的尾燈種類(lèi)包含常見(jiàn)的制動(dòng)燈和轉(zhuǎn)向燈,制動(dòng)燈主要包括高位制動(dòng)燈、車(chē)尾兩側(cè)的制動(dòng)燈,顏色主要為紅色;轉(zhuǎn)向燈主要為黃色,位于車(chē)尾兩側(cè)。
損失函數(shù)是度量預(yù)測(cè)值和真實(shí)值之間誤差的標(biāo)準(zhǔn),在一定程度上可以衡量網(wǎng)絡(luò)的學(xué)習(xí)速度和模型檢測(cè)效果的優(yōu)劣。YOLOv3的損失函數(shù)是在YOLOv2上做了改動(dòng),主要是將分類(lèi)損失和置信度損失改為二分交叉熵,如式(2)所示。
(2)
本文實(shí)驗(yàn)環(huán)境為:CPU是Inter(R)Xeon(R)CPU E5-2630 v4@2.20 GHz, GPU為NVIDIA TITAN XP,操作系統(tǒng)為Ubuntul16.04,內(nèi)存12 GB,編程環(huán)境是Visual Studio 2015,編程語(yǔ)言為C++,OpenCV版本為3.40,CUDA版本為9.0,采用Darknet深度學(xué)習(xí)框架。
在訓(xùn)練之前,對(duì)Darknet深度學(xué)習(xí)框架的實(shí)驗(yàn)訓(xùn)練參數(shù)作了修改,具體如下:學(xué)習(xí)率lr為0.001,學(xué)習(xí)率衰減值為0.0005,Batch Size為16,最大迭代次數(shù)45000,IOU值設(shè)置為0.5。
改進(jìn)前后YOLOv3模型訓(xùn)練的loss曲線如圖2所示,從loss曲線可以看出,當(dāng)訓(xùn)練次數(shù)達(dá)到20000次左右,2種模型的loss值趨于穩(wěn)定,直至迭代45000次結(jié)束。YOLOv3模型的loss值最終下降到0.3左右,改進(jìn)的YOLOv3模型的loss值最終下降到0.18左右,由此說(shuō)明本文改進(jìn)的YOLOv3模型在訓(xùn)練集中的預(yù)測(cè)結(jié)果和真實(shí)結(jié)果更接近。
圖2 Loss收斂曲線
本文使用的性能評(píng)價(jià)指標(biāo)是mAP(平均準(zhǔn)確率均值)。假設(shè)將目標(biāo)分為2類(lèi),正例(positive)和負(fù)例(negtive),則:
TP(True positives):被正確地劃分為正例的樣本個(gè)數(shù),即實(shí)際為正例,且被劃分為正例的實(shí)例數(shù)。
FP(False positives):被錯(cuò)誤地劃分為正例的樣本個(gè)數(shù),即實(shí)際為負(fù)例,但被劃分為正例的實(shí)例數(shù)。
FN(Flase negatives):被錯(cuò)誤地劃分為負(fù)例的樣本個(gè)數(shù),即實(shí)際為正例,但被劃分為負(fù)例的實(shí)例數(shù)。
TN(True negatives):被正確地劃分為負(fù)例的樣本個(gè)數(shù),即實(shí)際為負(fù)例,且被劃分為負(fù)例的實(shí)例數(shù)。
P:準(zhǔn)確率(precision),R:召回率(recall)。公式(3)和公式(4)分別是準(zhǔn)確率、召回率的計(jì)算方式。
P=TP/(TP+FP)
(3)
R=TP/(TP+FN)
(4)
AP是平均準(zhǔn)確率,mAP是所有類(lèi)別的平均準(zhǔn)確率的均值,本課題實(shí)驗(yàn)檢測(cè)目標(biāo)只有一類(lèi)(尾燈),所以在本文中所使用mAP即是AP。
本文分別在YOLOv3以及改進(jìn)后的YOLOv3模型上訓(xùn)練測(cè)試,單張圖片在2種模型下的可視化檢測(cè)結(jié)果如圖3所示。其中圖3(a)和圖3(c)是在原始YOLOv3模型下的檢測(cè)結(jié)果,圖3(b)和圖3(d)是對(duì)應(yīng)圖片在改進(jìn)后YOLOv3模型下的檢測(cè)結(jié)果,圖中的陰影框?yàn)榕c真實(shí)框滿(mǎn)足匹配的目標(biāo)檢測(cè)框。比較圖3(a)和圖3(b)可以看出,原始的YOLOv3檢測(cè)模型可以檢測(cè)出部分車(chē)輛尾燈,但是對(duì)于遠(yuǎn)處的、微小的尾燈卻出現(xiàn)漏檢情況;改進(jìn)后的YOLOv3模型檢測(cè)尾燈位置比較準(zhǔn)確,遠(yuǎn)處的小目標(biāo)尾燈可以被檢測(cè)出來(lái),這是因?yàn)楦倪M(jìn)后的YOLOv3模型在小型尺度特征提取的模塊上,增加了殘差單元重復(fù)的次數(shù),所以對(duì)于很小的尾燈目標(biāo)檢測(cè)能力要優(yōu)于原始的YOLOv3模型。
圖3 2種模型下可視化檢測(cè)結(jié)果
圖4是YOLOv3和改進(jìn)后的YOLOv3模型的P-R曲線,P-R曲線就是精確率(precision)和召回率(recall)的曲線,以召回率為橫坐標(biāo),精確率為縱坐標(biāo)。由P-R曲線可知,改進(jìn)后的YOLOv3模型對(duì)于車(chē)輛尾燈的檢測(cè)性能有了明顯的提高。
圖4 YOLOv3模型改進(jìn)前后的P-R曲線
表1是改進(jìn)前后YOLOv3模型和當(dāng)前主流的目標(biāo)檢測(cè)框架在車(chē)輛尾燈檢測(cè)上的結(jié)果對(duì)比,包含mAP和單張圖片檢測(cè)速度指標(biāo)。由表1可知,F(xiàn)aster-RCNN[24]的檢測(cè)準(zhǔn)確率要低很多,檢測(cè)速度也相對(duì)較慢;R-FCN[25]的檢測(cè)率和檢測(cè)速度都有一定程度的提高;YOLOv3[26]和本文的YOLOv3檢測(cè)性能相當(dāng);另外,本文還在YOLOv3以后的版本YOLOv4模型上做了對(duì)比實(shí)驗(yàn),YOLOv4的mAP相對(duì)較高,達(dá)到85.18%,但是在單張圖片的檢測(cè)速度上存在不足,低于本文改進(jìn)的YOLOv3模型。測(cè)試集在本文YOLOv3模型上的mAP為79.63%,檢測(cè)時(shí)間為0.014 s;在改進(jìn)后的YOLOv3模型上的mAP為83.32%,提高了近4個(gè)百分點(diǎn),檢測(cè)時(shí)間為0.01 s。因?yàn)镵-means++是對(duì)K-means初始點(diǎn)敏感的一種改進(jìn)算法,其選擇聚類(lèi)初始點(diǎn)的原則是每個(gè)初始聚類(lèi)中心的相對(duì)位置應(yīng)盡可能遠(yuǎn)。另外,車(chē)輛尾燈檢測(cè)屬于小目標(biāo)檢測(cè),對(duì)于大尺度特征的提取不是必要的。所以本文使用K-means++聚類(lèi)函數(shù)獲取anchor以及刪除了Darknet53網(wǎng)絡(luò)大尺度特征提取并著重對(duì)小尺度特征提取的改進(jìn)使得mAP得到提高。改進(jìn)后的Darknet53只有49層,減少了參數(shù)量,優(yōu)化了模型復(fù)雜度,加快了模型的檢測(cè)速度。本文提出的改進(jìn)YOLOv3模型的檢測(cè)準(zhǔn)確率和檢測(cè)速度都要優(yōu)于前面幾種目標(biāo)檢測(cè)框架,說(shuō)明了本文的改進(jìn)具有一定的科學(xué)性和實(shí)際應(yīng)用價(jià)值。
表1 與其他檢測(cè)框架對(duì)比結(jié)果
本文所研究的問(wèn)題是車(chē)輛尾燈的檢測(cè),用到的網(wǎng)絡(luò)模型是YOLOv3。因?yàn)槲矡魴z測(cè)屬于小目標(biāo)檢測(cè),所以本文改進(jìn)了YOLOv3特征提取的結(jié)構(gòu),加強(qiáng)了對(duì)小型尺度特征提取的能力,減少了網(wǎng)絡(luò)參數(shù)量和優(yōu)化了模型復(fù)雜度。針對(duì)K-means聚類(lèi)算法存在著k值難確定以及對(duì)初始聚類(lèi)中心敏感的缺陷,本文提出了用K-means++作為YOLOv3模型中的聚類(lèi)算法的改進(jìn),同時(shí)使用IOU作為距離衡量指標(biāo)。
實(shí)驗(yàn)表明,改進(jìn)后的YOLOv3在檢測(cè)準(zhǔn)確率和檢測(cè)速度上都要優(yōu)于改進(jìn)前,對(duì)比其他目標(biāo)檢測(cè)框架,本文提出的改進(jìn)方案的尾燈檢測(cè)效果最佳,說(shuō)明了本文的改進(jìn)具有一定的科學(xué)性和實(shí)際應(yīng)用價(jià)值。本文改進(jìn)的YOLOv3模型的檢測(cè)時(shí)間為0.01 s,已經(jīng)達(dá)到車(chē)上的嵌入式系統(tǒng)的實(shí)時(shí)檢測(cè)需求,但是模型較大,暫不適合放到嵌入式系統(tǒng)中,后續(xù)工作考慮使用模型剪枝壓縮方法將其移植到嵌入式系統(tǒng)中,以滿(mǎn)足實(shí)際應(yīng)用。