朱茂桃,張鴻翔,,方瑞華
(1.江蘇大學 汽車與交通工程學院,江蘇 鎮江 212013;2.上海干巷車鏡實業有限公司,上海 201518)
近年來,隨著人們對車輛安全性能的關注,高級輔助駕駛系統(ADAS)受到車企的廣泛關注。因此基于計算機視覺的車輛檢測算法具有重要價值。
傳統車輛檢測方法的步驟為:在給定的圖像上選取感興趣區域,根據特征算子(常用的有SIFT、HOG等)對感興趣區域提取特征[1-2],使用訓練的分類器進行分類[3-4]。MU K等[5]針對基于邊緣的車輛檢測方法容易受到噪聲和背景的干擾,導致檢測不準確的問題,提出了一種基于多尺度邊緣融合的車輛檢測方法;WU B F等[6]提出了一種實時的車道線檢測算法和基于模糊邏輯的車輛檢測算;KIM Z W[7]提出了基于概率特征分組的實時車輛檢測方法并將其運用于車輛跟蹤。但是傳統目標檢測存在兩個主要問題:(1)基于滑動窗口的區域選擇策略缺乏針對性,耗時長;(2)人工提取的特征沒有很好的泛化能力。
2012年開始,各種視覺任務都啟用了卷積神經網絡(CNN)來構建新的模型。CNN優于傳統算法的3個主要因素:(1)大規模的訓練數據;(2)網絡結構更加復雜、更深、參數更多;(3)GPU對計算的加速,使以往需要數周的訓練過程只需一天甚至數小時以內就可以完成。ADAS的視覺感知部分屬于計算機視覺的范疇,因此,很多傳統的車輛檢測算法正在被深度學習所取代。
本文根據RCNN系列深度學習檢測算法建立數據集,對Faster R-CNN算法調參,最后比較RCNN、SPPnet、Fast R-CNN和Faster R-CNN算法的檢測效果[8-11]。
針對卷積神經網絡的問題,GIRSHICK R提出了RCNN采用Selective Search方法,得到可能存在檢測目標的若干圖像局部區域[12],然后將這些區域分別輸入到CNN中得到區域特征,在特征圖上接分類器,判斷對應的區域是否屬于要檢測的目標,最后針對標定框進行回歸以修正預測框的位置。但RCNN存在著重復計算的問題。HE K將空間金字塔池化層引入CNN提出了SPPnet,降低了CNN網絡對輸入圖片尺寸的限制,提高了準確率。基于SPPnet的思路,GIRSHICK R又提出了Fast-RCNN,采用自適應尺度池化,將候選區域映射到CNN最后一個卷積層的特征圖上,只需要提取一次特征,從而提高了檢測速度。但Fast R-CNN存在提取候選區域耗時長的問題,因此GIRSHICK R等人提出了Faster R-CNN算法。
Faster R-CNN算法由兩大模塊組成:(1)RPN候選框提取模塊;(2)Fast R-CNN檢測模塊。其中,RPN用于提取候選框;Fast R-CNN基于RPN提取的proposal檢測并識別proposal中的目標。
與SPPNet和Fast R-CNN相比,Faster R-CNN采用CNN提取特征和候選區域,并將兩個網絡權值共享、聯合調優,實現了端到端的目標檢測,既解決了提取候選區域耗時長的問題,又保證了檢測的準確率。
2.1.1 CNN網絡架構選取
CNN網絡有兩個可選方案:(1)選擇經典的VGG16[13];(2)選擇ZFnet[14]。經過測試ZFnet精度為58.5%,VGG16精度為66%。VGG網絡的精度高,但計算量大。為了減少計算量,選用ZFnet。ZFnet是基于Alexnet的微調版本[15],其top-5錯誤率為11.2%。ZFnet使用ReLu作為激活函數,使用了交叉熵代價函數,通過使用較小的過濾器以保留更多的原始像素信息。
網絡結構如圖1所示。

圖1 ZFnet網絡結構
ZFnet特征提取部分包含了5個卷積層、2個全連接層,在ZFnet中第5個池化層包含256個通道,稱為特征圖,共有神經元個數為9 216(256×6×6),第6和第7全連接層的神經元個數都是4 096,通過這個網絡訓練完畢后,最后提取特征。
2.1.2 訓練RPN網絡
RPN原理如圖2所示。
實現方式:在最后一層卷積的特征圖上用一個3×3的滑窗生成一個長度為256(對應于ZFnet)維長度的全連接特征,然后在這個256維的特征后產生兩個分支的全連接層:(1)分類層用于判定該候選區域是前景還是背景;(2)回歸層用于預測候選區域的中心錨點對應的預測框坐標x,y和寬高w,h。采用滑動窗口的方式保證了分類層和回歸層關聯了最后一次卷積的全部特征圖。然后用分別為2×k和4×k個大小為1×1步長為1的卷積核實現上一層特征到分類層和回歸層的特征映射。

圖2 RPN原理圖
圖中的anchor字面上可以理解為錨點,位于之前提到的n×n的滑窗中心處。對于每個滑窗可以同時預測k個區域。k個區域即k個預測窗口,每一個預測窗口又可以用一個比例,一個高寬比和滑窗中的錨點唯一確定。用3種比例和3種高寬比確定出當前錨點位置處對應的9個預測窗口,即k=9。
Anchor正負樣本標定規則如下:
①對每個標定框,與其重疊比例最大的anchor記為正樣本(保證每個標定框至少對應一個正樣本anchor);
②對①剩余的anchor,如果其與某個標定區域重疊比例大于0.7,記為正樣本(每個標定框可能會對應多個正樣本anchor,但每個正樣本anchor只可能對應一個標定框);如果其與任意一個標定框的重疊比例都小于0.3,記為負樣本;
③對①、②剩余的anchor,棄去不用;
④跨越圖像邊界的anchor,棄去不用。
2.1.3 定義損失函數
分類損失:每個anchor后面接有一個二分類softmax,得到anchors的分類概率。其公式如下:
(1)

回歸損失:在每個anchor后接上一個回歸函數,計算預測窗口與標定窗口之間的損失。其公式如下:
(2)


(1)預測框,即RPN網絡預測出區域的中心位置坐標和寬高;
(2)錨點預測窗口:9個錨點對應9個不同比例和高寬比的預測窗口,每個預測窗口都有一個中心點位置坐標和寬高;
(3)目標位置:標定框也對應一個中心點位置坐標和寬高。
(4)
(5)
式中:(x,y)—預測框的中心坐標;(w,h)—預測框的寬高;(xa,ya)—錨點預測窗口的中心坐標;(wa,ha)—錨點預測窗口的寬高;(x*,y*)—標定框的中心坐標;(w*,h*)—標定框的寬高。
定義損失函數:RPN的損失函數是由分類損失和回歸損失按一定比重組成。RPN總損失函數為:
(6)
式中:λ—比例系數。
2.1.4 RPN和CNN參數共享和聯合調優
因為分別訓練RPN和Fast R-CNN兩種不同任務的網絡模型,會導致無法共享網絡權重,需要采用交替訓練方法:
(1)用ImageNet模型初始化,獨立訓練一個RPN網絡;
(2)仍然用ImageNet模型初始化,但是使用上一步RPN網絡產生的區域作為輸入,訓練一個Fast R-CNN網絡,至此,兩個網絡每一層的參數完全不共享;
(3)使用第二步的Fast R-CNN網絡參數初始化一個新的RPN網絡,但是把RPN、Fast-RCNN共享的那些卷積層的學習率設置為0,也就是不更新,僅僅更新RPN特有的那些網絡層,重新訓練,此時,兩個網絡已經共享了所有公共的卷積層;
(4)仍然固定共享的那些網絡層,把Fast R-CNN特有的網絡層也加入進來,形成一個聯合網絡,繼續訓練,微調Fast R-CNN特有的網絡層,此時,該網絡已經實現了內部預測區域并實現檢測的功能。
Faster R-CNN運用同一個ZFnet網絡將分離的RPN定位和CNN分類進行結合,從而實現了端到端的目標檢測。實現步驟為:
(1)給定輸入圖像,經過卷積操作得到最后一層的卷積特征圖;
(2)使用滑動窗口對特征圖進行卷積,在最后一層卷積層上得到候選區域;
(3)對(2)得到的候選區域進行非最大值抑制(NMS[16]),得到評分前300的候選區域;
(4)在提取的特征向量后面接分類層和回歸層分別計算分類評分和邊框回歸評分。
本文采用Faster R-CNN算法對車輛進行檢測。
數據集由采集的路況圖片數據組成,包含了4個季節各種天氣狀況下的圖片。原始影像大小為1 280像素×720像素。
該試驗的訓練集由行車過程中采集的車輛正樣本與負樣本各4 000張,共8 000張組成;驗證集由正負樣本各1 000張,共2 000張組成;測試集由正負樣本各1 000張,共2 000張組成。其中驗證集是用于調參,測試集用于檢驗算法的好壞。
本研究使用LabelImg分別對訓練集、驗證集和測試集圖片上的車輛進行統一的標注,標注界面如圖3所示。

圖3 圖片標定示例
為了改善圖像數據,本研究進行數據增強。對圖像進行3種不同的隨機變換:隨機裁剪、隨機翻轉、隨機顏色失真。
本次試驗中,采用查準率、查全率計算出平均準確率來進行評價:
(7)
(8)
(9)
式中:TP—正確的正例;FP—錯誤的正例;FN—錯誤的反例;Pre—查準率;Rec—查全率;mAP—平均準確率。
在測試階段,當預測框與標定框重疊面積達到標記外圍框的90%以上時,視為檢測成功。
本文使用Tensorflow深度學習框架實現Faster R-CNN算法。首先使用3.2節創建的數據訓練集和驗證集對模型進行調參,然后通過控制變量法對Faster R-CNN的參數進行優化,研究其對mAP的影響,最后使用測試集對RCNN、SPPnet、Faster R-CNN與Faster R-CNN算法進行測試和對比。實驗用計算機CPU為Intel E5-2620 V3,GPU為GeFore GTX 1080ti,軟件環境為Python3.6。
Faster-RCNN算法需要設置一些超參數來對mAP進行調優:dropout值、批處理(batch size)、NMS前后候選區域個數。試驗結果如表(1~3)所示。
Dropout在模型訓練時隨機讓網絡中某些隱含層節點的權重不產生作用,是用來防止過擬合的一個參數。Dropout值對mAP的影響與數據集大小相關,調試Dropout值使mAP最大。表1說明:在將Dropout的值從20%提高到80%的過程中,當Dropout值取60%時,mAP取最大值0.835。
表2說明:當候選區域數量減少時,mAP也逐漸減少。這是因為NMS是用來選取候選區域里分數最高,并且抑制那些分數低的窗口。如果候選區域數目減少,經NMS后,由于取樣少,將導致預測框不能很好地框出圖中車輛位置,從而導致mAP下降。但如果候選區域數量過多,會導致計算量很大,故一般取2 000個NMS前候選區域(300個NMS后候選區域個數)為宜。

表1 Dropout值對mAP影響

表2 不同NMS數目對mAP影響

表3 不同的batch size對mAP影響
NMS前后預測框的對比如圖4所示。

圖4 NMS前后預測框對比圖
本研究保持Dropout值和候選區域個數不變,研究batch size與mAP之間的關系。表3說明:當batch size減少時,mAP也逐漸減小。這是因為采用batch是梯度下降算法和隨機梯度下降的折中方案。batch size越大越接近梯度下降算法,mAP越高,但計算耗時長,極端的,當batch為整個訓練集時,采用batch等價于梯度下降算法;batch size越小越接近隨機梯度下降,mAP越低,但計算速度快,當batch size為1時,采用batch等價于隨機梯度下降算法[17]。綜合考慮這兩方面因素,取區域提議階段batch size為100,檢測階段batch size為50。
本研究分別使用RCNN、SPPnet、Fast R-CNN和Faster R-CNN等4種算法對車輛進行檢測,4種算法在測試集上的正確率和召回率如圖5所示。可以看出:基于RCNN檢測算法的正確率得到提高。從RCNN到SPPnet解決了不同尺寸輸入圖片轉化成相同尺度向量的問題,從SPPnet到Fast R-CNN節省了對整張圖片進行CNN特征提取的操作,從Fast R-CNN到Faster R-CNN提出了RPN,并將RPN和Fast R-CNN共享網絡,進一步提高了準確率。

圖5 4種算法的檢測精度對比圖
筆者采用同一臺服務器對本文所有試驗測試,測試集圖片大小為1 280像素×720像素。表4說明RCNN、SPPnet和Fast R-CNN都采用Selective Search方法提取候選區域耗時長;Faster R-CNN在Fast R-CNN基礎上采用卷積特征與RPN共享的方法,使得檢測時間縮短到了69 ms左右。
實驗結果表明:基于深度學習的Faster R-CNN算法可以滿足車輛檢測的實時性要求。

表4 4種算法的檢測速度對比圖
本研究針對車輛檢測對于高實時性和高準確率的要求,分析了RCNN系列深度學習算法在車輛檢測領域的有效性。結果表明:基于Faster R-CNN的車輛檢測算法可以達到每張69 ms的識別速度和91.3%的準確率,提高了實時檢測車輛的效果。