王新雨 汪馳升,3* 舒齊奇 柯君卓 高 青
(1.深圳大學城市空間信息工程廣東省重點實驗室,廣東 深圳 518060;2.深圳大學海岸帶地理環(huán)境監(jiān)測自然資源部重點實驗室,廣東 深圳 518060;3.國土資源部城市土地資源監(jiān)測與仿真重點實驗室,廣東 深圳 518000;4.深圳市南山區(qū)教育科學研究中心,廣東 深圳 518000)
隨著社會的發(fā)展,行車記錄儀已經(jīng)得到了廣泛的應用。在交通管理規(guī)劃方面,行車記錄儀也起到了重要的作用,可以記錄駕駛全過程的視頻圖像和聲音,實現(xiàn)了車輛駕駛的實時視頻監(jiān)控、交通信息的采集和監(jiān)控錄像的回放,為交通安全和交通事故來提供證據(jù),提高了規(guī)范的駕駛行為和行車安全,在這一方面已經(jīng)有很多應用的說明[1-2]。自從2012年,AlexNet模型以絕對優(yōu)勢在Imagenet競賽中取得勝利,迅速蓋過了傳統(tǒng)目標檢測算法DPM (Deformable Part Model) 的風頭,計算機視覺開始轉向深度學習,此后深度學習在物體識別、檢測等方面取得了重大的突破性進展和很多的成果,就備受學者們的重視,已經(jīng)成為人工智能重點研究之一,各大科技公司也都投身于深度學習領域進行研發(fā)。
深度學習是一種利用深度神經(jīng)網(wǎng)絡框架的機器學習技術,其中卷積神經(jīng)網(wǎng)絡 (ConvNet) 是專門做圖像識別的深度神經(jīng)網(wǎng)絡,它是模仿大腦視覺皮質進行圖像處理和識別圖像的深度網(wǎng)絡,將人工設定特征提取轉變?yōu)樽詣由商卣魈崛∈蔷矸e神經(jīng)網(wǎng)絡的主要優(yōu)點,還具有局部連接和權值共享的特點,在目標檢測方面已經(jīng)遠遠超過傳統(tǒng)的檢測算法[3]。還有一個很重要的硬件因素就是GPU提供了強大的并行運算架構,訓練速度比CPU快數(shù)10倍[4]?;谝陨纤枷?,提出一種利用行車記錄儀記錄的運動車輛的周圍環(huán)境數(shù)據(jù)信息結合深度學習的目標檢測功能對道路的車輛進行檢測識別,然后得出行車過程中的道路上車的位置和數(shù)量??偠灾?,即將深度學習的目標檢測模型引入到行車記錄儀的監(jiān)控視頻中,給智能交通監(jiān)控、道路設計、交通管制和行車安全提供信息。
目標檢測是指在特定環(huán)境下找出目標進行檢測(where) 和識別 (what),基于深度學習的目標檢測發(fā)展起來后,其實效果也一直難以突破,一直到R-CNN (Regionbased Convolutional Neural Networks) 出現(xiàn)后,它是第一個真正可以工業(yè)級應用的解決方案,后來經(jīng)過不斷地改進卷積模型,讓大量的卷積層實現(xiàn)共享以提升效率,就出現(xiàn)了一系列的基于區(qū)域建議的方法:R-CNN 、SPP-net、Fast R-CNN、Ross B.Girshick[5]在2016年提出了新的Faster R-CNN,成為經(jīng)典的模型。基于區(qū)域建議的目標檢測算法發(fā)展過程如下:
R-CNN結構框架如圖1所示[6],R-CNN的區(qū)域建議采用的是選擇性搜索 (Selection Search) 代替?zhèn)鹘y(tǒng)的滑動窗口檢測方法,從原始圖片提取2 000個左右的候選框,再把所有候選框縮放到固定大小進行區(qū)域大小歸一化、用卷積神經(jīng)網(wǎng)絡對這些候選框進行提取特征,將提取到的特征送入到SVM分類器中進行識別,再用線性回歸來修正邊框位置與大小[3]。但存在很多缺點:重復計算導致計算量很大,分類回歸的SVM模型是線性模型無法將梯度向后傳播給卷積特征提取層、訓練分為多步,訓練的空間和時間代價都很高。
圖1 R-CNN框架
Fast R-CNN主要是解決了2 000候選框帶來的重復計算問題,卷積變成對整張的圖片進行,減少了很多的重復計算,其思想為使用一個簡化的SPP層,訓練和測試不再分為多步,不再需要額外的硬盤來存儲中間層的特征,梯度能夠通過RoI池化層直接傳播;此外,分類和回歸用Multi-task的方式一起進行,使用SVD分解全連接層的參數(shù)矩陣,壓縮為兩個規(guī)模小很多的全連接層[5]。Fast R-CNN比R-CNN的訓練速度快8.8倍,測試速度快213倍,比SPP-net訓練速度快2.6倍,測試速度快10倍左右。但是Fast R-CNN使用選擇性搜索來進行區(qū)域提名,速度依然不夠快[3]。
Faster R-CNN算法主要由兩大部分組成:RPN候選框提取部分和Fast R-CNN檢測部分[7]。在結構上已經(jīng)將特征抽取、區(qū)域建議、區(qū)域判定和回歸、分類都整合在了一個網(wǎng)絡中,使得網(wǎng)絡的綜合性有了較大的提高[8-10]。它的主要思想為拋棄了選擇性搜索,引入了RPN (Region Proposal Networks),從而讓特征區(qū)域建議圖、分類、回歸一起共享卷積特征,在檢測速度方面尤為明顯[7]。RPN的網(wǎng)絡結構如圖2所示[7],以一張任意大小的圖片為輸入,輸出一批矩形區(qū)域提名,使用的是滑動窗口加anchor的結合,每個區(qū)域對應一個目標分數(shù)和位置信息,且RPN網(wǎng)絡能和整個Fast R-CNN檢測網(wǎng)絡共享卷積層[7],使得區(qū)域建議階段在GPU上完成,且?guī)缀醪换ㄙM時,所以,F(xiàn)aster R-CNN 比Fast R-CNN 在速度和精確性上有明顯的提高,盡管在后來的發(fā)展中,SSD和YOLO這些模型能夠在檢測速度得到提升,但是它們的精度卻沒有能超越Faster R-CNN的,例如:Tensorflow 應用Inception ResNet打造的Faster R-CNN,是速度最慢,但卻最精準的模型[9-10]。
圖2 RPN結構
整個Faster R-CNN網(wǎng)絡的流程圖如圖3所示,分為4部分內容。
圖3 Faster R-CNN流程圖
(1) 先輸入一副任意大小的圖像,使用一系列的conv+relu+pooling層提取特征圖,被用于的RPN層的輸入和繼續(xù)向前傳播到特有卷積層得到高維特征圖用于全連接層。
(2) RPN網(wǎng)絡用第一步得到的特征圖進行兩部分的計算,分別為區(qū)域建議與區(qū)域得分,最后得到的區(qū)域建議用于下一步。
(3) ROI池化層是通過輸入的高維特征圖和區(qū)域建議提取一系列的特征區(qū)域建議圖 (proposal feature maps) 送入后續(xù)的全鏈接層進行目標識別。
(4) 最后是利用全連接層與分類層計算這一系列的特征區(qū)域建議圖通每個具體屬于那個類別,同時再次利用邊框回歸獲得每個目標的位置偏移量,從而獲得目標檢測框的精確位置。
最后,再由不同目標檢測方法的指標得出[3](見表1):在不在乎時間的前提下Faster R-CNN是準確率最高的,所以,本文使用Faster R-CNN算法。
我的第五次辭工申請終于獲準。離開大發(fā)廠時,我久久回眸。三步一嘆息,五步一回首,牽強的笑容牽動了幾滴清淚,在風中飄然落下。
表1 不同檢測方法的指標對比
本文使用matlab的深度學習工具Faster R-CNN實現(xiàn)進行車輛檢測,實驗環(huán)境:MATLAB R2018a (自帶深度學習工具);CPU:i7-8750HQ;顯卡:GTX1060;內存容量:8 G。
本文采集的數(shù)據(jù)是在白天的情況下,從行車記錄儀導出的100多個不同道路的行車視頻 (mp4) 文件,然后把視頻轉化為一幀幀的圖片 (jpg),每隔100幀提取一張的圖片,共1 500張,都是駕駛在城市道路,其中,小汽車數(shù)目居多,800張為訓練的圖片,100張為測試的圖片,600張為驗證圖片,用于標記的圖像樣本示例,如圖4所示。
使用了matlab自帶的trainingImageLabeler.m這個M文件來對圖片進行標注,圖片標記界面如圖5所示,全部標注好后導出一個table的data.mat文件,得到標注信息,如圖6所示,一共包含1 400張圖片的車輛數(shù)據(jù)集,每個圖片有1個或多個標記的車輛實例。
圖5 圖片標記界面
圖6 圖片標注信息
由于CNN檢測模型的訓練需要大量的標記好的圖片且訓練的時間太長,所以,本次實驗采用遷移學習,把訓練好的模型進行微調來進行目標檢測,因為是檢測車輛,所以只有有車和無車兩個類別,變成二分類問題[11],將全連接層改為2,然后再接上softmax和classification層,開始想使用ResNet50模型,但是在嘗試訓練過程中發(fā)現(xiàn)trainFasterRCNNObjectDetector這個函數(shù)不支持 DAG networks,像ResNet-50、 Inception-v3和 GoogLeNet這些模型就都不能用了。其實各網(wǎng)絡就是在卷積層提取特征時有細微差異,對于后面的RPN層、池化層、全連接層的分類和目標定位基本相同。后來選擇使用VGG16Net這個模型進行遷移學習,VGGNet網(wǎng)絡是從ImageNet 數(shù)據(jù)庫上的100萬多張圖像進行訓練的,可將圖像分類為1 000個對象類別,如鍵盤、鼠標、鉛筆和許多動物,因此,網(wǎng)絡為各種圖像學習了豐富的功能制圖表達,網(wǎng)絡共有41層,有16層可學權重,13層卷積層和3層完全連接層。在訓練過程中如果要使用GPU訓練需要 Parallel Computing Toolbox這個工具箱,在附加功能資源那里下載即可,還需要用到Computer Vision System Toolbox、Image Processing Toolbox和Deep Learning Toolbox這幾個工具箱。在訓練參數(shù)中:選擇了一個最小的16像素×16像素的窗口,網(wǎng)絡誤差算法使用的是動量隨機梯度下降算法,學習率設置的0.001,每次輸入的最小批次的大小是32,迭代次數(shù)20次,其余選項為默認[12-13]。訓練用trainFasterRCNNObjectDetector
這個函數(shù)訓練目標檢測器,在訓練過程中,從訓練圖像中處理多個圖像區(qū)域,每個圖像的圖像區(qū)域數(shù)由NumRegionsTo Sample控制,PositiveOverlapRange和NegativeOverlapRange名稱-值用于控制訓練的圖像區(qū)域,正面訓練樣品是那些與地面真相箱子重疊由0.6到1.0,由聯(lián)合度量的邊界框相交測量,負訓練樣本是重疊的0到0.3。
Faster RCNN訓練分為以下四個步驟:
第一步是單獨訓練RPN網(wǎng)絡,用預載入的模型來初始化。
用第一步的RPN 網(wǎng)絡提供的區(qū)域建議來單獨訓練Fast R-CNN目標檢測網(wǎng)絡。
用第二步訓練好的Fast R-CNN網(wǎng)絡的權重來重新訓練第一步的RPN模型,繼續(xù)訓練RPN。
用第三步訓練好的RPN網(wǎng)絡輸出的區(qū)域建議圖作為輸入,再次訓練Fast R-CNN,微調Fast R-CNN中的參數(shù),得到目標檢測模型。至此網(wǎng)絡訓練結束。
車輛檢測模型訓練好以后進行保存,把100張的測試數(shù)據(jù)集循環(huán)到檢測模型里進行檢測,從檢測的圖片可以得到前方車輛的個數(shù)、位置 (bboxes) 和得分 (scores),車輛檢測結果示例如圖7所示,只顯示檢測出的車輛得分 (scores) 0.9以上的圖片。
圖7 車輛檢測情況示例
matlab的計算機視覺工具箱提供了目標檢測器的評估功能,在這里用平均精度指標 (evaluate detection precision),Precision-recall曲線來驗證模型的準確率,評估結果如圖8所示,從評估結果來看,模型的平均精度達到0.92,滿足檢測的需求。
圖8 模型的評估結果
本次實驗結果的分析是在行車視頻中依次轉化的一幀幀圖片上面進行的,通過檢測出的車輛可以得出標記框(bboxes) 的信息,bboxes是一個N×4矩陣,用于表示對象的邊界框,前兩列x、y代表了邊界框的位置,后兩列為w、h代表邊界框的寬和高,w、h相乘得出標記框的像素面積,除了面積通過從bbxoes中的參數(shù)n可以得到檢測到的標記框的個數(shù)既車輛個數(shù),圖片的視野像素面積為圖片分辨率1 287×724=931 788,通過以上信息,本文進行以下分析。
在道路上交通量較小車速較快時,車頭間距較大,交通密度小,駕駛員可以自由選擇行駛車速,行車比較舒適;交通量較大車速較慢時,車頭間距縮小,密度加大,車輛行駛時相互制約,產(chǎn)生擁擠情況,行車過程中不再舒適。根據(jù)行車的舒適性這個概念,本文對于多個不同路段的視頻進行了檢測,計算出每幀圖片上檢測到所有車輛標記框的像素面積占視野面積的比例和車輛個數(shù),計算得出:當每幀圖片的面積比超過0.4這個臨界值時,車輛個數(shù)較多,密度較大,行車不再舒適。然后用百度地圖測出每個行車視頻中起點和終點的距離,得到的距離除以行車記錄儀記錄的時間求出行車速度,用行車速度進行驗證,判斷是否合理。以其中記錄深圳市的香梅路、南海大道、新洲路、安托山一路、僑香路、深南大道六條道路的行車視頻為例,每個行車視頻記錄時間為65 s,統(tǒng)計過程如表2所示。根據(jù)表2的驗證:面積比保持在0.4以下,車速較快,行車比較舒適。所以這個指標合理。我們可以根據(jù)這個指標測出每個路段的行車是否舒適,然后為道路的交通規(guī)劃和設計提供參考。
表2 面積比與行車速度的對比
目前常用的車間距離測量方法主要包括超聲波、雷達、激光等,這些測量手段基本都是成本比較高的,如果行車記錄儀可以測量輛車之間的距離,那么成本就會降低很多,也會非常的便捷[14]。 在道路行駛過程中為了保證車輛間的安全距離,駕駛員在駕駛過程中需要時刻注意周圍的車輛運動情況,以免發(fā)生追尾碰撞的問題。據(jù)網(wǎng)上調查,車輛追尾事故中80%是因為行駛時跟車太近引發(fā)的,據(jù)交警介紹,很多追尾事故是因為車速過快,未與前車保持安全距離引起的[15]。本文中每幀圖片上面標記框的面積大小代表了道路上的車輛和駕駛車輛之間的距離,距離近的標記框的像素面積較大,距離遠的標記框的像素面積較小,所以本文提出根據(jù)標記框的面積大小計算出道路上各個目標車輛與駕駛車輛之間的距離,顯示在行車記錄儀上,距離過近時給出警報,也可以給駕駛員的行車安全距離提供參考。由于本文是采集了前方車輛的數(shù)據(jù)和小汽車這類車型,所以只計算前車車距并且不適用于公交車和卡車等車型,測量方法借鑒[16]中的車距模型并修改得出:當相機焦距固定時,兩車之間的實際距離的平方與車輛在圖片中的標記框像素面積的乘積是個定值,如公式1所示。實驗先采集大量的數(shù)據(jù),實際測量兩車之間的距離和對應的標記框的像素面積的大小,代入公式1計算,然后統(tǒng)計得出大概的定值為18左右,再根據(jù)這個定值和標記框的像素面積求出前方車距。求出車間距離后,再用實際的距離做驗證,如表3所示,可以看出檢測距離和實際距離雖存在誤差,但是大概相符。車間距離和像素面積擬合的曲線如圖9所示,隨著車間距離的增加,檢測到的車輛標記框的像素面積在減小。所以,根據(jù)像素面積大小來大概判斷車間距離時可行的,可以為駕駛員提供參考。
式中:L—兩車的實際距離 (m) ;
S—標記框的像素面積 (10-5) ;
F—定值。
表3 實際距離與檢測距離的對比
圖9 像素面積大小和車間距離的關系
本次實驗是將深度學習的目標檢測功能引入到了行車記錄儀中,側重點是深度學習的應用上面,所以沒有對已有的算法進行改進和各類已有框架精度的比較。模型訓練算法為主要分析圖像區(qū)域的Faster R-CNN算法,標記的數(shù)據(jù)均來自白天,標記的車型比較全面,還需考慮夜晚的情況。實驗得出模型的檢測準確率為0.92,說明準確性較高,但是過小的目標車輛檢測不到,同時存在由于處理的數(shù)據(jù)量較多而不能實現(xiàn)實時檢測的要求,所以檢測算法有待優(yōu)化,接下來的工作打算用海量的無標注的行車視頻數(shù)據(jù)來訓練,從而達到實時檢測的要求。檢測出目標車輛后,根據(jù)檢測到的標記框獲得前方車輛的信息,提出行車舒適性和駕駛車與前方車輛的車距,本次實驗由于車型、角度、道路場景和計算方法的欠缺[16],所以提供的指標、參數(shù)存在一定的誤差,只供大概的參考,還需進行更詳細的工作,但是希望通過行車記錄儀得出的這些信息能給智能交通監(jiān)控、交通管理規(guī)劃設計和輔助駕駛提供幫助。