朱茂桃,張鴻翔,,方瑞華
(1.江蘇大學(xué) 汽車與交通工程學(xué)院,江蘇 鎮(zhèn)江 212013;2.上海干巷車鏡實業(yè)有限公司,上海 201518)
近年來,隨著人們對車輛安全性能的關(guān)注,高級輔助駕駛系統(tǒng)(ADAS)受到車企的廣泛關(guān)注。因此基于計算機視覺的車輛檢測算法具有重要價值。
傳統(tǒng)車輛檢測方法的步驟為:在給定的圖像上選取感興趣區(qū)域,根據(jù)特征算子(常用的有SIFT、HOG等)對感興趣區(qū)域提取特征[1-2],使用訓(xùn)練的分類器進行分類[3-4]。MU K等[5]針對基于邊緣的車輛檢測方法容易受到噪聲和背景的干擾,導(dǎo)致檢測不準(zhǔn)確的問題,提出了一種基于多尺度邊緣融合的車輛檢測方法;WU B F等[6]提出了一種實時的車道線檢測算法和基于模糊邏輯的車輛檢測算;KIM Z W[7]提出了基于概率特征分組的實時車輛檢測方法并將其運用于車輛跟蹤。但是傳統(tǒng)目標(biāo)檢測存在兩個主要問題:(1)基于滑動窗口的區(qū)域選擇策略缺乏針對性,耗時長;(2)人工提取的特征沒有很好的泛化能力。
2012年開始,各種視覺任務(wù)都啟用了卷積神經(jīng)網(wǎng)絡(luò)(CNN)來構(gòu)建新的模型。CNN優(yōu)于傳統(tǒng)算法的3個主要因素:(1)大規(guī)模的訓(xùn)練數(shù)據(jù);(2)網(wǎng)絡(luò)結(jié)構(gòu)更加復(fù)雜、更深、參數(shù)更多;(3)GPU對計算的加速,使以往需要數(shù)周的訓(xùn)練過程只需一天甚至數(shù)小時以內(nèi)就可以完成。ADAS的視覺感知部分屬于計算機視覺的范疇,因此,很多傳統(tǒng)的車輛檢測算法正在被深度學(xué)習(xí)所取代。
本文根據(jù)RCNN系列深度學(xué)習(xí)檢測算法建立數(shù)據(jù)集,對Faster R-CNN算法調(diào)參,最后比較RCNN、SPPnet、Fast R-CNN和Faster R-CNN算法的檢測效果[8-11]。
針對卷積神經(jīng)網(wǎng)絡(luò)的問題,GIRSHICK R提出了RCNN采用Selective Search方法,得到可能存在檢測目標(biāo)的若干圖像局部區(qū)域[12],然后將這些區(qū)域分別輸入到CNN中得到區(qū)域特征,在特征圖上接分類器,判斷對應(yīng)的區(qū)域是否屬于要檢測的目標(biāo),最后針對標(biāo)定框進行回歸以修正預(yù)測框的位置。但RCNN存在著重復(fù)計算的問題。HE K將空間金字塔池化層引入CNN提出了SPPnet,降低了CNN網(wǎng)絡(luò)對輸入圖片尺寸的限制,提高了準(zhǔn)確率?;赟PPnet的思路,GIRSHICK R又提出了Fast-RCNN,采用自適應(yīng)尺度池化,將候選區(qū)域映射到CNN最后一個卷積層的特征圖上,只需要提取一次特征,從而提高了檢測速度。但Fast R-CNN存在提取候選區(qū)域耗時長的問題,因此GIRSHICK R等人提出了Faster R-CNN算法。
Faster R-CNN算法由兩大模塊組成:(1)RPN候選框提取模塊;(2)Fast R-CNN檢測模塊。其中,RPN用于提取候選框;Fast R-CNN基于RPN提取的proposal檢測并識別proposal中的目標(biāo)。
與SPPNet和Fast R-CNN相比,F(xiàn)aster R-CNN采用CNN提取特征和候選區(qū)域,并將兩個網(wǎng)絡(luò)權(quán)值共享、聯(lián)合調(diào)優(yōu),實現(xiàn)了端到端的目標(biāo)檢測,既解決了提取候選區(qū)域耗時長的問題,又保證了檢測的準(zhǔn)確率。
2.1.1 CNN網(wǎng)絡(luò)架構(gòu)選取
CNN網(wǎng)絡(luò)有兩個可選方案:(1)選擇經(jīng)典的VGG16[13];(2)選擇ZFnet[14]。經(jīng)過測試ZFnet精度為58.5%,VGG16精度為66%。VGG網(wǎng)絡(luò)的精度高,但計算量大。為了減少計算量,選用ZFnet。ZFnet是基于Alexnet的微調(diào)版本[15],其top-5錯誤率為11.2%。ZFnet使用ReLu作為激活函數(shù),使用了交叉熵代價函數(shù),通過使用較小的過濾器以保留更多的原始像素信息。
網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 ZFnet網(wǎng)絡(luò)結(jié)構(gòu)
ZFnet特征提取部分包含了5個卷積層、2個全連接層,在ZFnet中第5個池化層包含256個通道,稱為特征圖,共有神經(jīng)元個數(shù)為9 216(256×6×6),第6和第7全連接層的神經(jīng)元個數(shù)都是4 096,通過這個網(wǎng)絡(luò)訓(xùn)練完畢后,最后提取特征。
2.1.2 訓(xùn)練RPN網(wǎng)絡(luò)
RPN原理如圖2所示。
實現(xiàn)方式:在最后一層卷積的特征圖上用一個3×3的滑窗生成一個長度為256(對應(yīng)于ZFnet)維長度的全連接特征,然后在這個256維的特征后產(chǎn)生兩個分支的全連接層:(1)分類層用于判定該候選區(qū)域是前景還是背景;(2)回歸層用于預(yù)測候選區(qū)域的中心錨點對應(yīng)的預(yù)測框坐標(biāo)x,y和寬高w,h。采用滑動窗口的方式保證了分類層和回歸層關(guān)聯(lián)了最后一次卷積的全部特征圖。然后用分別為2×k和4×k個大小為1×1步長為1的卷積核實現(xiàn)上一層特征到分類層和回歸層的特征映射。
圖2 RPN原理圖
圖中的anchor字面上可以理解為錨點,位于之前提到的n×n的滑窗中心處。對于每個滑窗可以同時預(yù)測k個區(qū)域。k個區(qū)域即k個預(yù)測窗口,每一個預(yù)測窗口又可以用一個比例,一個高寬比和滑窗中的錨點唯一確定。用3種比例和3種高寬比確定出當(dāng)前錨點位置處對應(yīng)的9個預(yù)測窗口,即k=9。
Anchor正負樣本標(biāo)定規(guī)則如下:
①對每個標(biāo)定框,與其重疊比例最大的anchor記為正樣本(保證每個標(biāo)定框至少對應(yīng)一個正樣本anchor);
②對①剩余的anchor,如果其與某個標(biāo)定區(qū)域重疊比例大于0.7,記為正樣本(每個標(biāo)定框可能會對應(yīng)多個正樣本anchor,但每個正樣本anchor只可能對應(yīng)一個標(biāo)定框);如果其與任意一個標(biāo)定框的重疊比例都小于0.3,記為負樣本;
③對①、②剩余的anchor,棄去不用;
④跨越圖像邊界的anchor,棄去不用。
2.1.3 定義損失函數(shù)
分類損失:每個anchor后面接有一個二分類softmax,得到anchors的分類概率。其公式如下:
(1)
回歸損失:在每個anchor后接上一個回歸函數(shù),計算預(yù)測窗口與標(biāo)定窗口之間的損失。其公式如下:
(2)
(1)預(yù)測框,即RPN網(wǎng)絡(luò)預(yù)測出區(qū)域的中心位置坐標(biāo)和寬高;
(2)錨點預(yù)測窗口:9個錨點對應(yīng)9個不同比例和高寬比的預(yù)測窗口,每個預(yù)測窗口都有一個中心點位置坐標(biāo)和寬高;
(3)目標(biāo)位置:標(biāo)定框也對應(yīng)一個中心點位置坐標(biāo)和寬高。
(4)
(5)
式中:(x,y)—預(yù)測框的中心坐標(biāo);(w,h)—預(yù)測框的寬高;(xa,ya)—錨點預(yù)測窗口的中心坐標(biāo);(wa,ha)—錨點預(yù)測窗口的寬高;(x*,y*)—標(biāo)定框的中心坐標(biāo);(w*,h*)—標(biāo)定框的寬高。
定義損失函數(shù):RPN的損失函數(shù)是由分類損失和回歸損失按一定比重組成。RPN總損失函數(shù)為:
(6)
式中:λ—比例系數(shù)。
2.1.4 RPN和CNN參數(shù)共享和聯(lián)合調(diào)優(yōu)
因為分別訓(xùn)練RPN和Fast R-CNN兩種不同任務(wù)的網(wǎng)絡(luò)模型,會導(dǎo)致無法共享網(wǎng)絡(luò)權(quán)重,需要采用交替訓(xùn)練方法:
(1)用ImageNet模型初始化,獨立訓(xùn)練一個RPN網(wǎng)絡(luò);
(2)仍然用ImageNet模型初始化,但是使用上一步RPN網(wǎng)絡(luò)產(chǎn)生的區(qū)域作為輸入,訓(xùn)練一個Fast R-CNN網(wǎng)絡(luò),至此,兩個網(wǎng)絡(luò)每一層的參數(shù)完全不共享;
(3)使用第二步的Fast R-CNN網(wǎng)絡(luò)參數(shù)初始化一個新的RPN網(wǎng)絡(luò),但是把RPN、Fast-RCNN共享的那些卷積層的學(xué)習(xí)率設(shè)置為0,也就是不更新,僅僅更新RPN特有的那些網(wǎng)絡(luò)層,重新訓(xùn)練,此時,兩個網(wǎng)絡(luò)已經(jīng)共享了所有公共的卷積層;
(4)仍然固定共享的那些網(wǎng)絡(luò)層,把Fast R-CNN特有的網(wǎng)絡(luò)層也加入進來,形成一個聯(lián)合網(wǎng)絡(luò),繼續(xù)訓(xùn)練,微調(diào)Fast R-CNN特有的網(wǎng)絡(luò)層,此時,該網(wǎng)絡(luò)已經(jīng)實現(xiàn)了內(nèi)部預(yù)測區(qū)域并實現(xiàn)檢測的功能。
Faster R-CNN運用同一個ZFnet網(wǎng)絡(luò)將分離的RPN定位和CNN分類進行結(jié)合,從而實現(xiàn)了端到端的目標(biāo)檢測。實現(xiàn)步驟為:
(1)給定輸入圖像,經(jīng)過卷積操作得到最后一層的卷積特征圖;
(2)使用滑動窗口對特征圖進行卷積,在最后一層卷積層上得到候選區(qū)域;
(3)對(2)得到的候選區(qū)域進行非最大值抑制(NMS[16]),得到評分前300的候選區(qū)域;
(4)在提取的特征向量后面接分類層和回歸層分別計算分類評分和邊框回歸評分。
本文采用Faster R-CNN算法對車輛進行檢測。
數(shù)據(jù)集由采集的路況圖片數(shù)據(jù)組成,包含了4個季節(jié)各種天氣狀況下的圖片。原始影像大小為1 280像素×720像素。
該試驗的訓(xùn)練集由行車過程中采集的車輛正樣本與負樣本各4 000張,共8 000張組成;驗證集由正負樣本各1 000張,共2 000張組成;測試集由正負樣本各1 000張,共2 000張組成。其中驗證集是用于調(diào)參,測試集用于檢驗算法的好壞。
本研究使用LabelImg分別對訓(xùn)練集、驗證集和測試集圖片上的車輛進行統(tǒng)一的標(biāo)注,標(biāo)注界面如圖3所示。
圖3 圖片標(biāo)定示例
為了改善圖像數(shù)據(jù),本研究進行數(shù)據(jù)增強。對圖像進行3種不同的隨機變換:隨機裁剪、隨機翻轉(zhuǎn)、隨機顏色失真。
本次試驗中,采用查準(zhǔn)率、查全率計算出平均準(zhǔn)確率來進行評價:
(7)
(8)
(9)
式中:TP—正確的正例;FP—錯誤的正例;FN—錯誤的反例;Pre—查準(zhǔn)率;Rec—查全率;mAP—平均準(zhǔn)確率。
在測試階段,當(dāng)預(yù)測框與標(biāo)定框重疊面積達到標(biāo)記外圍框的90%以上時,視為檢測成功。
本文使用Tensorflow深度學(xué)習(xí)框架實現(xiàn)Faster R-CNN算法。首先使用3.2節(jié)創(chuàng)建的數(shù)據(jù)訓(xùn)練集和驗證集對模型進行調(diào)參,然后通過控制變量法對Faster R-CNN的參數(shù)進行優(yōu)化,研究其對mAP的影響,最后使用測試集對RCNN、SPPnet、Faster R-CNN與Faster R-CNN算法進行測試和對比。實驗用計算機CPU為Intel E5-2620 V3,GPU為GeFore GTX 1080ti,軟件環(huán)境為Python3.6。
Faster-RCNN算法需要設(shè)置一些超參數(shù)來對mAP進行調(diào)優(yōu):dropout值、批處理(batch size)、NMS前后候選區(qū)域個數(shù)。試驗結(jié)果如表(1~3)所示。
Dropout在模型訓(xùn)練時隨機讓網(wǎng)絡(luò)中某些隱含層節(jié)點的權(quán)重不產(chǎn)生作用,是用來防止過擬合的一個參數(shù)。Dropout值對mAP的影響與數(shù)據(jù)集大小相關(guān),調(diào)試Dropout值使mAP最大。表1說明:在將Dropout的值從20%提高到80%的過程中,當(dāng)Dropout值取60%時,mAP取最大值0.835。
表2說明:當(dāng)候選區(qū)域數(shù)量減少時,mAP也逐漸減少。這是因為NMS是用來選取候選區(qū)域里分數(shù)最高,并且抑制那些分數(shù)低的窗口。如果候選區(qū)域數(shù)目減少,經(jīng)NMS后,由于取樣少,將導(dǎo)致預(yù)測框不能很好地框出圖中車輛位置,從而導(dǎo)致mAP下降。但如果候選區(qū)域數(shù)量過多,會導(dǎo)致計算量很大,故一般取2 000個NMS前候選區(qū)域(300個NMS后候選區(qū)域個數(shù))為宜。
表1 Dropout值對mAP影響
表2 不同NMS數(shù)目對mAP影響
表3 不同的batch size對mAP影響
NMS前后預(yù)測框的對比如圖4所示。
圖4 NMS前后預(yù)測框?qū)Ρ葓D
本研究保持Dropout值和候選區(qū)域個數(shù)不變,研究batch size與mAP之間的關(guān)系。表3說明:當(dāng)batch size減少時,mAP也逐漸減小。這是因為采用batch是梯度下降算法和隨機梯度下降的折中方案。batch size越大越接近梯度下降算法,mAP越高,但計算耗時長,極端的,當(dāng)batch為整個訓(xùn)練集時,采用batch等價于梯度下降算法;batch size越小越接近隨機梯度下降,mAP越低,但計算速度快,當(dāng)batch size為1時,采用batch等價于隨機梯度下降算法[17]。綜合考慮這兩方面因素,取區(qū)域提議階段batch size為100,檢測階段batch size為50。
本研究分別使用RCNN、SPPnet、Fast R-CNN和Faster R-CNN等4種算法對車輛進行檢測,4種算法在測試集上的正確率和召回率如圖5所示??梢钥闯觯夯赗CNN檢測算法的正確率得到提高。從RCNN到SPPnet解決了不同尺寸輸入圖片轉(zhuǎn)化成相同尺度向量的問題,從SPPnet到Fast R-CNN節(jié)省了對整張圖片進行CNN特征提取的操作,從Fast R-CNN到Faster R-CNN提出了RPN,并將RPN和Fast R-CNN共享網(wǎng)絡(luò),進一步提高了準(zhǔn)確率。
圖5 4種算法的檢測精度對比圖
筆者采用同一臺服務(wù)器對本文所有試驗測試,測試集圖片大小為1 280像素×720像素。表4說明RCNN、SPPnet和Fast R-CNN都采用Selective Search方法提取候選區(qū)域耗時長;Faster R-CNN在Fast R-CNN基礎(chǔ)上采用卷積特征與RPN共享的方法,使得檢測時間縮短到了69 ms左右。
實驗結(jié)果表明:基于深度學(xué)習(xí)的Faster R-CNN算法可以滿足車輛檢測的實時性要求。
表4 4種算法的檢測速度對比圖
本研究針對車輛檢測對于高實時性和高準(zhǔn)確率的要求,分析了RCNN系列深度學(xué)習(xí)算法在車輛檢測領(lǐng)域的有效性。結(jié)果表明:基于Faster R-CNN的車輛檢測算法可以達到每張69 ms的識別速度和91.3%的準(zhǔn)確率,提高了實時檢測車輛的效果。