黎 洲 黃妙華
1.武漢理工大學現代汽車零部件技術湖北省重點實驗室,武漢,430070
2.汽車零部件技術湖北省協同創新中心,武漢,430070
3.武漢理工大學汽車工程學院,武漢,430070
面對居高不下的交通事故率,良好的輔助駕駛系統成為一種日益迫切的需要。如果汽車本身能夠檢測到周圍環境中的車輛,通過合理的控制策略,就能提前提醒駕駛員注意危險車輛甚至自行采取緊急措施。行車記錄儀的普遍使用,使得在汽車上實現基于機器視覺的車輛目標檢測成為了可能。本文基于車載視頻進行車輛目標的檢測。
傳統的車輛目標檢測方法一般是分區域選擇、候選區域特征提取、分類器分類三步完成。KACHACH等[1]通過提取滑動窗口內方向梯度直方圖(histogram of gradient,HOG)特征,并用線性支持向量機(support vector machine,SVM)來進行車輛的檢測。FELZENSZWALB等[2-3]提出了一種多尺度可變形部件模型(deformable parts model,DPM)來進行包括汽車在內的目標檢測。傳統的車輛檢測方法雖能較為準確地檢測出車輛,但區域選擇時經常發生窗口冗余,整個過程復雜度高,提取出合理的特征難度較大。
文獻[4]的發表,拉開了基于深度學習目標檢測算法的序幕。R-CNN[5]算法是深度學習目標檢測領域的新秀,該算法在生成候選區域過程中采用選擇性搜索(selective search)[6]方法,為后來出現 的 SPP-net[7]、Fast R-CNN[8]、Faster RCNN[9]、R-FCN[10]開創了一種基于候選區域的深度學習目標檢測的思路。
REDMON等[11]提出了基于回歸思想的深度學習目標檢測算法YOLO,極大地提高了目標檢測速度。但初始版本的YOLO算法由于在網格劃分以及預測邊框數量的選取方面不太成熟,出現了定位不精準等問題。SSD[12]、YOLO_v2[13]等算法在YOLO算法的基礎上進行改進,使得檢測效果有了進一步提升。
許多學者針對YOLO_v2算法進行了研究。ZHANG等[14]運用YOLO_v2算法進行了中文交通標志的實時檢測研究,JO等[15]運用YOLO_v2算法進行了多目標的實時跟蹤研究,SEO[16]運用YOLO_v2算法和無人機對高速公路上的車輛進行了實時檢測研究,魏湧明等[17]運用YOLO_v2算法對航拍圖像進行了目標定位研究。
筆者在進行車輛檢測時發現,傳統的車輛檢測算法僅能識別出車輛及該車輛在圖片中的位置,這種單一的檢測結果無法獲取足夠的有用信息,無法知道被檢測車輛的運動趨勢及距離,對周圍車輛的預警效果差,難以對自身車輛進行合理的控制。為了解決上述問題,本文在YOLO_v2算法基礎上改進網絡結構模型,優化模型關鍵參數,使其能夠對采集到的車載視頻信息進行多維度的判斷。
本文設計的實時車輛檢測模型架構見圖1。定義滿足車輛實時檢測的網絡結構,并在VOC2007數據集中篩選出包含汽車的數據集作為訓練樣本,再將獲得的汽車數據集輸入到網絡模型中進行訓練,最終對訓練收斂的網絡模型進行性能測試。

圖1 YOLO_v2車輛實時檢測模型架構Fig.1 YOLO_v2 vehicle real-time detection model architecture
YOLO_v2是在YOLO_v1的基礎上采用一系列優化方法得到的。YOLO_v1的網絡結構由卷積層、池化層和全連接層組成[18],在YOLO_v2中,為獲得更多空間信息,全連接層被移除并使用錨點框[9]來預測邊框。
基于YOLO_v2的車輛實時檢測網絡結構見圖2。首先將輸入圖片歸一化為長寬均為416像素、3通道的標準輸入圖片,此時具有416×416×3個數值,經過13層卷積和4次池化將圖片轉換為26像素、26像素和512通道的特征圖。隨后從2個方向處理特征圖:第1個方向是將26×26×512個數值按照一定規律重新組合成13像素、13像素和2 048通道的特征圖,第2個方向是經過1層池化和7層卷積將特征圖轉換為13像素、13像素和1 024通道的特征圖。再將2個方向處理的結果進行融合,得到13像素、13像素和3 072通道的特征圖。最后經過2層卷積得到最終的特征圖。

圖2 基于YOLO_v2的車輛實時檢測網絡結構Fig.2 Real-time detection network structure of vehicle based on YOLO_v2
YOLO_v2車輛目標實時檢測基本流程如下:
(1)將待測圖像輸入檢測模型,得到13像素、13像素和30通道的特征圖;
(2)13個像素與13個像素形成了169個網格,對于每個網格,都預測5個邊框,每個邊框中包括6維信息(包括4維坐標信息、1維邊框置信度和1維是否為汽車的類別信息),總共形成1個30維的向量,即為最終得到的30個通道;
(3)將上一步預測出的13×13×5個目標邊框,先根據閾值消除概率小的目標邊框,再用非極大值抑制(non-maximum suppression,NMS)[19]去除冗余窗口。
其中,邊框置信度代表了該邊框中含有車輛類別的置信度和邊框預測準確度兩重信息,其計算表達式為

式中,Pr(Object)表示是否有汽車落入相應的單元格中,有汽車則取1,無汽車則取0;IOUtruthpred為預測框和標記框的交并除,表示重合度大小;Detection為系統預測出來的邊框;GroundTruth為原圖中標記的邊框。
在整個檢測流程中不難發現,YOLO_v2算法不再需要基于候選區域尋找目標,可直接采用回歸的思想就完成了位置與類別的判斷。正是由于YOLO_v2算法將汽車的檢測轉化為一個回歸問題,才使得檢測速度大大提升,從而使得該算法能夠輕易滿足實時性要求。
在訓練過程中,采用小批量隨機梯度下降法,每36個樣本更新一次權重參數。電腦內存為8G,為防止內存不夠,多次實驗后最終決定將36個樣本分割成6個大小為6的子樣本來進行訓練,迭代次數為32 000。采用動量系數使訓練過程加速收斂。為防止過擬合,設置權重衰減系數,并采用數據增廣方法進行處理(包括隨機裁剪、旋轉,調整飽和度、色調、曝光度等)。通過該方法增大了訓練集的樣本容量,并提高了模型的泛化能力。學習率的選取采用多分布方法,具體訓練參數見表1。

表1 訓練參數Tab.1 Training parameters
為保證該模型對不同尺寸的圖像具有良好的魯棒性,采用了多尺度訓練方法[13],在訓練過程中,每隔幾輪便隨機選擇一種新的輸入圖像尺寸來進行訓練,該方法使得模型對不同分辨率下汽車的檢測精確度均保持在較高水平。
主要硬件配置為①處理器:Intel(R)Core(TM)i7-6800K CPU@3.40GHz;②GPU卡:NVIDA GeForce GTX 1060 3GB;③內存:8G。
YOLO_v2算法的程序設計語言為C++語言,整個開發環境為Windows7 X64+VS2013+CUDA 8.0+CUDNN 5.1。通過NVIDIA公司的基于并行編程模型和指令集架構的通用計算架構CUDA,配合應用基于深度神經網絡的GPU加速庫CUDNN,對數據進行快速訓練及實時性驗證。
在本文中,目標檢測只需要判斷檢測到的目標是否為汽車,是一個二分類問題,故本文最終目的是:能夠檢測到驗證集中所有的汽車,且沒有將其他目標檢測成汽車。為了較為正確地評價本文模型的效果,在此先作True Car、True N-car、False Car、False N-car 4種定義。①True Car:目標為汽車,且被系統正確地檢測成了汽車;②True N-car:目標不為汽車,且系統沒有將其誤檢測為汽車;③False Car:目標不為汽車,但被系統錯誤地檢測成了汽車(誤檢);④False N-car:目標為汽車,但系統沒有將其檢測為汽車(漏檢)。
在評價過程中一般采用精確度和召回率來評價算法性能的優劣。精確度指的是被正確檢測出的汽車占檢測出的汽車的比例,其計算表達式為

召回率指的是被正確檢測出的汽車占驗證集中所有汽車的比例,其計算表達式為

將訓練集里面的1 000組信息導入模型,在GPU加速情況下經過約21 h的訓練,獲取了迭代32 000次之后的參數權重,得到了YOLO_v2車輛目標檢測模型。用驗證集中的284組信息進行驗證,并與另外2種經典的目標檢測算法進行對比,結果見表2。

表2 實驗結果Tab.2 The results of the experiment
Faster R-CNN是R-CNN系列算法不斷優化的結果,目前是該系列算法中效果最好的算法,具有很強的代表性;DPM算法作為機器學習檢測算法的頂峰,也具有很強的代表性。本文將YOLO_v2車輛目標檢測算法與這2種算法進行對比,發現3種算法的精確度均較高,均有較好的檢測效果;在召回率方面,YOLO_v2車輛目標檢測算法的優勢比較明顯,達到了97.42%;在實時性方面,YOLO_v2車輛目標檢測算法的每秒檢測幀數遠大于Faster R-CNN算法和DPM算法的每秒檢測幀數。實驗結果充分表明了YOLO_v2車輛目標檢測模型在驗證集上具有良好的檢測效果,且每秒檢測幀數為40,滿足了實時性要求。YOLO_v2車輛目標檢測模型的部分檢測效果圖見圖3。

圖3 YOLO_v2檢測效果圖Fig.3 Detection results of YOLO_v2
從圖3中可以看出,雖然YOLO_v2檢測效果好,但存在一些傳統車輛檢測算法共有的問題。由圖3a~圖3c可以看出,傳統的YOLO_v2車輛檢測算法僅能識別出車輛及該車輛在圖片中的位置,這種單一的檢測結果無法獲取足夠的有用信息,無法知道被檢測車輛相對于攝像頭的方位及被檢測車輛的運動趨勢;由圖3d可以看出,當圖片中有多輛汽車時,無法知道哪輛被檢測車輛對自身車輛的行駛有潛在威脅,對周圍車輛的預警效果差,難以對自身車輛進行合理的控制。
本文根據被檢測車輛相對于攝像頭的空間位置及姿態,將檢測到的車輛劃分為車輛后部、車輛前部、車輛側部。按照同車道車輛與異車道車輛2種情況進行具體的定義:
(1)同車道車輛方位分類定義。對于與自身車輛同向行駛的車輛(圖4a),以正前方向左右30°范圍為標準,定義為車輛后部;對于與自身車輛相向行駛的車輛(圖4b),以正前方向左右30°范圍為標準,定義為車輛前部;其他姿態的車輛定義為車輛側部(圖4c)。

圖4 同車道車輛方位定義圖Fig.4 Same-lane vehicle orientation diagram
(2)異車道車輛方位分類定義。對于與自身車輛同向行駛的車輛(圖5a),以攝像頭采集到的圖像中顯示的被檢測車輛是否有后輪為臨界位置,若能觀察到后輪,則定義為車輛后部,否則定義為車輛側部;對于與自身車輛相向行駛的車輛(圖5b),以攝像頭采集到的圖像中顯示的被檢測車輛是否有前輪為臨界位置,若能觀察到前輪,則定義為車輛前部,否則定義為車輛側部。

圖5 異車道車輛方位定義圖Fig.5 Side-lane vehicle orientation diagram
從圖3d中可以發現,距離攝像頭不同距離的被檢測車輛在圖片中的位置有差異。以被檢測車輛邊框的下邊框為標準,可以發現被檢測車輛越靠近攝像頭,下邊框在圖片中的位置越接近下方。基于此特征,本文可以對被檢測車輛的距離進行估計。
先在圖片中確定自身車輛的運動趨勢區域,并根據行駛到該區域所需時間的長短劃分為3級預警:1級預警為淺度提醒,告知系統前方區域有車輛;2級預警為中度提醒,提醒車輛減速防碰撞;3級預警為深度提醒,執行減速停車行為,具體示意圖見圖6。然后判斷被檢測車輛的下邊框是否在未來運動趨勢區域內,若在,則進一步判斷在哪一個安全等級的區域內,再根據被檢測車輛相對于攝像頭的方位,綜合給出自身車輛的控制策略。

圖6 車輛預警示意圖Fig.6 Vehicle warning diagram
完成改進的YOLO_v2車輛實時檢測模型之后,將采集到的視頻輸入該模型進行檢測,本文視頻取自“上汽杯”汽車軟件挑戰賽復賽視頻,將視頻導入該模型后,部分檢測效果圖見圖7。

圖7 車載視頻檢測效果圖Fig.7 Detection results of vehicle video
從圖7的測試結果中發現,該改進模型對道路上車輛的檢測效果整體較好,在能準確檢測到車輛的基礎上,進一步判斷了被檢測車輛相對于自身車輛的位置及危險程度,達到了周圍車輛實時檢測及實時預警的目的。
結果表明,基于改進YOLO_v2算法的車輛實時檢測模型在訓練樣本充足、迭代次數多的情況下,能夠取得很好的效果,可以結合方位信息和預警信息來控制自身車輛運動,最終達到自動駕駛的目標,該改進模型可以很好地應用到車載攝像頭領域進行周圍車輛的檢測及預警。
本文應用YOLO_v2算法實現了車載視頻中的車輛檢測,解決了以往算法中目標檢測實時性不足的問題。并針對傳統車輛檢測的局限性改進了YOLO_v2算法,將傳統的單維度檢測拓展為多維度檢測,給基于機器視覺的車輛實時檢測提供了研究方向。通過本文的研究,發現該改進模型可以很好地應用于車載攝像頭領域中。筆者接下來將結合車載攝像頭、毫米波雷達和激光雷達信息,對多傳感器信息進行融合,并把基于視覺的方位信息和預警信息作為一種輔助距離估計方式,提高整車感知系統的穩定性。