王 鋒
(長安大學 汽車學院,陜西 西安 710064)
伴隨著國內外高等科學技術的急速發展,無人駕駛及智能網聯汽車的發展也是日新月異。目前在發展無人駕駛過程中,尚有一些技術還在探索及發展中,導致部分技術仍不成熟[1]。如今的自動駕駛慢慢地延伸到智慧交通這個熱門領域中,從而發展的方向更加全面,其中環境的感知、行為的決策以及對車輛的運動控制主鍵是自動駕駛的三個主要研究任務。在智慧交通的發展中,行駛道路上的車輛檢測是比較重要的環節,該技術的大力發展到成熟會降低交通事故的發生率,以及提高車輛行駛的安全性和城市的車輛通行效率。但由于傳統的車輛目標的檢測及追蹤是通過人工提取車輛特征來實現的,這樣的工序就會導致檢測精度較低、數據應用規模不大且泛化能力較差,很難在復雜應用場景中達到快速準確檢測的效果,從而導致實時性不高[2]。
近年來,隨著深度學習在自動駕駛的目標識別領域取得重大突破,其中,以深度學習為基礎的車輛檢測算法也逐漸成為該領域的熱門話題。本文旨在克服傳統檢測中難以檢測的場景問題,同時也處理無人駕駛領域常見的不同天氣,光照變化較快,車輛目標不清晰等場景,故提出一種基于深度學習在無人駕駛和智能網聯汽車領域的多目標車輛檢車及追蹤方法,從而實現智能車輛高級輔助駕駛中多目標車輛的實時檢測及追蹤。
本文共分為4章,章節內容如下:
第1章,構建車輛數據集。由于通過攝像機拍攝的照片會產生畸變,故需要對其進行畸形矯正,再建立以UA-DETRAC格式的和自制的初始車輛數據集,接著對數據集進行標注和格式的歸一化處理,為后續的檢驗模型奠定基礎。
第2章,構建神經網絡模型。首先是通過K- means聚類算法獲取檢測圖像的先驗框,然后在以Darknet53的卷積YOLOv3為基礎加入空間金字塔池化結構(Spatial Pyra-mid Pooling, SPP)模塊,用以提高模型預測結果的精確度。最后通過預測模型的結果篩選以非極大值擬制算法為主的最終預測結果。
第3章,模型的測試與評定。根據之前構建的格式歸一化后的多目標車輛數據集,通過搭建的預測模型進行訓練,接著驗證,最后通過相應的查準率和查全率兩個指標來判斷模型對車輛目標檢測的準確性和健全性的好壞評價。
第4章,結論。基于深度學習為基礎的多目標車輛檢測神經網絡模型,它是可以在一定的距離范圍內基本都能準確地檢測出車輛。在不同的交通環境下能夠基本準確地檢測出行駛的多目標車輛,說明該模型具有良好的實時性、準確性、魯棒性和環境適應性。
在構建以機器視覺系統為基礎的圖像采集中,需要的圖像質量應該能夠確保機器視覺算法能夠快速、準確地提取出所需要的圖像信息,以便系統能夠做出相關的抉擇。然而想要實現這樣的準確推算、測量和提取,機器視覺系統就必須使用真實世界里的坐標系和相關的測量單位。這意味著,要事先得到像素與真實世界坐標系的映射關系,才能在后續過程中使用其進行計算。在進行該模型搭建的前期,需要使用攝像機進行攝像取照,為后續模型做基礎。眾所周知,攝像機的成像過程本質上就是攝像機坐標系和真實世界的坐標系之間的轉換。首先是將空間系中的散點通過“世界坐標系”轉換到新的“攝像機坐標系”中,然后通過光學元件將形成的投影轉化成平面圖像,最后再將平面上的圖像數據再轉換成圖像的像素坐標系中的坐標點。但是在轉換的過程中,由于光學元件的制造精度以及組裝的工藝精度的偏差會產生相應的畸變,從而導致圖像會發生部分失真的現象。
由于鏡頭的畸變分為徑向畸變和切向畸變兩類,為了綜合處理該鏡頭的畸變影響,本文采用相片變化的單應性變換方法。本文是采用棋盤格當作標定板來進行攝像機的標定和畸變矯正的處理。首先是找到圖片上畸變前后的點位置的對應關系,利用多個視場計算多個單應性矩陣的方法來求解攝像機內參數,可通過OpenCV工具庫的cv2.findChessBoardCorners()函數來完成,然后通過棋盤標定圖紙校正攝像機的畸變,輸入攝像機拍攝的完整棋盤格圖像和交點在橫縱向上的數量,再則選用10~20張從不同的角度拍攝的棋盤格圖片,將所有的交點檢測結果保存并進行畸變系數的計算,對攝像機拍攝到的實際路況進行畸變修正處理,最終再利用OpenCV工具庫的cv2.drawChessboardCorners()函數繪制標定結果,如圖1所示。

圖1 棋盤格檢測
本文所建立的多目標車輛數據集主要采用兩部分來源的車輛數據,一部分是網上開源的車輛檢測數據集UA-DETRAC,主要包括北京和天津不同地方的不同場景,該圖像的錄幀率為25幀/s,每隔10幀取一張,共得到8200張;另一部分圖像數據集主要是選取自己在陜西省西安市南二環路段錄制的車輛數據視頻,每隔20幀抽取一張,共1100張。將這9300張圖片作為深度學習模型訓練和測試的多目標車輛數據集。本多目標車輛數據集會包括晴天場景、雨天場景、白天場景、黑夜場景、不同車型的場景和不同遮擋的場景等各種交通場景。
本方采用LabelImg的方法對多目標車輛數據集的車輛圖像群進行標注,然后將圖片中的多目標車輛框起來,并對車輛的類別進行標注,這里標注格式為car,接著保存標注好的內容,生成以可擴展標記語言(Extensible Markup Language, XML)格式存儲的標簽信息文件,如圖2(a)—圖2(c)所示。

圖2 xml文件內容
本文采用python腳本批量處理的方式將xml文件批量轉換為txt文件,并對里面的xmin、ymin、xmax和ymax進行歸一化處理。最終得到txt文件里的信息包括:車輛類別、x、y、框寬和框高,如圖3所示。將這些制作好的標簽文件按照8:1的比例通過python腳本進行處理生成train和valid兩個txt文件,分別當作為訓練集和測試集。最終制作好的多目標車輛數據集文件夾如圖4所示。在此文件夾里,主要是分為五個部分,其中Images文件夾是用來存儲該模型需要使用的全部多目標車輛數據集的圖像,Labels文件夾是用來存放在Images文件夾里每張圖像所對應并且被標注好的以txt格式存放的多目標車輛數據集的標簽信息內容,class.name文件是用來存儲汽車被標注的類別名,最后的train和valid文件夾是用來存儲每張圖像的存儲路徑信息,可以憑借該路徑信息找到相應的圖像。

圖3 txt文件信息

圖4 車輛數據集文件夾
YOLO(You Only Look Once)系列算法本質上屬于一階段(one stage)算法。不同于以往快速區域建議卷積神經網絡(Faster-Region proposals Convolutional Neural Networks, Faster-RCNN)等兩階段(two-stage)算法,one-stage算法通常推理速度較快,但是模型精度不高,不過模型精度在YOLOv3的提出之后有了很大提升。所以YOLOv3的精度可媲美那些不足1 fps的模型,同時自身可以達到30 fps甚至更快的速度。YOLO系列算法采用Darknet網絡作為特征提取網絡,YOLOv2以Darknet-19為基礎,Y-OLOv3是以Darknet-53為基礎,其中Darknet-19長得比較像視覺幾何群網絡(Visual Geometry Group network, VGGnet),Darknet-53是參考了殘差網絡(Residual Network, RN)后再大量使用殘差結構從而使網絡可以在53層卷積層下能夠正常學習,不會受到退化問題的影響。在YOLOv3架構中,Darknet-53舍棄了之前的池化層,并通過stride為2的卷積層實現池化層的功能。這一步的改變可為Darknet-53帶來速度與精度上的提升。
本文所使用的YOLOv3-SPP是在相對于普通版本的YOLOv3基礎上,在第五、六層卷積之間增加了一個超解(Ultralytics)版的SPP模塊,這個模塊主要是由不同的池化操作組成,如圖5所示。

圖5 SPP模塊
在以往的YOLO系列的網絡架構中,都是采用卷積神經網絡(Convolutional Neural Networks, CNN)網格架構,在最后的分類層通常是采用全連接組成,但是全連接有個明顯的局限性,就是它的特征數是固定不變的,這也就導致了圖像在輸入網格的時候,圖像的幾何尺寸是保持不變的,但是在實際的運用過程中,圖像的大小都是多種多樣的。假如輸入的圖像尺寸不能滿足全連接的要求,就不能完成接下來的前向運算。故為了得到固定尺寸的圖像,就必須對圖像進行剪裁或拉伸變形等操作,但是這樣的后果就會導致圖像的失真,最終影響模型的精度。為了克服之前的缺陷,希望圖像在輸入的時候保持之前的幾何尺寸,就在YOLOv3的基礎上加入了SPP模塊,從而可以有效地保留圖像的原尺寸,避免之前的剪裁,變形及拉伸等操作帶來的圖像失真影響,也同時解決了卷積神經網絡對圖像重復特征提取的問題。
具體就是SPP模塊將特征層分別通過一個池化核大小為5 mm×5 mm、9 mm×9 mm、13 mm× 13 mm的最大池化層,然后在通道方向通過連接(concat)功能拼接再做進一步融合,這樣能夠在一定程度上解決目標多尺度問題。如圖6所示。

圖6 SPP的功能
本神經網絡架構是采用K-means聚類算法為基礎通過自主學習獲取圖像的先驗框。K-means算法又被稱為K均值算法,K代表的是聚類中K個聚類中心點,means代表的是每一個聚類中心數據值的均值會作為該聚類中心的點的中心,即是每一個類的中心對該聚類中心進行描述。其聚類算法的思想主要是先從樣本點里隨機選取K個樣本點作為聚類中心點,然后計算所有除了聚類中心的樣本點到這些聚類中心點的幾何距離。對于每一個數據樣本,將其劃分到距離最近的聚類中心點中,然后不斷迭代,新的樣本點然后又劃分到新的聚類中心點里[3]。最后使用K-means聚類算法可以初步得到先驗框的幾何尺寸和大小。
本模型構建了一種基于Darknet53的卷積且以SPP模塊為衍生的神經網絡架構,如圖7所示。這種網絡構架主要是由一系列的3x3和1x1的卷積層組成的,并且在每個卷積層的后面會有一個批標準化(Batch Nor-malization, BN)層和有一個負反饋修正線性單元(Leaky Rectified Linear Unit, LeakyReLU)層。在大矩形框內的模塊是Residual層,它是神經網絡架構的殘差模塊,借鑒Resnet的思想,是被用來防止梯度的損失。所以它只是用來求差,不會進行任何其他的操作,這樣就可以保證輸入值和輸出值保持不變。在每個Residual層的后面會使用一個步長為2的3x3的卷積層來進行降解采樣壓縮,總共進行五次這類操作,也就是相當于進行了5次的縮放過程,也就是特征圖的長寬的尺寸會變成為原來的1/32,假如輸入的圖像尺寸是416 mm×416 mm,那么最后輸出的尺寸就是13 mm×13 mm。虛線框下面的部分就是三個不同尺寸的輸出分支[4]。在經過5次的縮放過程后,會得到5種不同的圖像尺寸大小的特征圖,他們分別是208 mm×208 mm,104 mm×104 mm,52 mm×52 mm,26 mm×26 mm,13 mm×13 mm,如圖7(a)—圖7(c)所示。由于前面兩個的特征圖提取到的信息不是很精確,一般會舍去,然后選擇后三個特征圖作為預測圖像的主要預測目標。它們就會分別成為小尺寸、中尺寸和大尺寸的預測框圖,用來檢驗具有不同尺寸變化的目標的位置信息、車輛類別信息和置信度信息。

圖7 YOLOv3-SPP部分網絡架構
以YOLOv3-SPP搭建的神經網絡模型,采用部分圖像增強的功能,它會將多張圖片拼接在一起輸入給網絡進行訓練,以此就可以實現圖像數據的多樣性,進而增加數據目標的個數。以及BN能一次性統計多張圖片的參數,實現拼接。同時BN層要求batchsize盡可能大一些,所求出來的均值方差就會盡可能的接近數據集,產生的效果就會更好。
由上述神經網絡框架的輸出可以得到三個不同的預測結果,但每一個預測s結果實際都是一個偏移量offset[5]。又因offset 由模型輸出的四種類型數據組成,它們分別為tx,ty,tw,th。其與實際框的關系如圖8所示。

圖8 邊框預測示意圖
在該預測示意圖中,cx和cy它們分別表示中心點所在的單元格左上頂點的坐標;pw和ph分別表示先驗框的寬和高;tx,ty,tw,th分別表示網絡輸出的預測值;σ(tx)和σ(ty)表示網絡輸出值tx和ty經過 sigmoid函數歸一化后得到的偏移量;bx,by,bw,bh則是預測框的坐標。根據圖8的表示可以得出預測框的實際坐標與網絡輸出預測值之間的轉換關系如下所示:
經過上面公式的轉化及運算,就可以得出網格訓練后輸出的四個預測值,然后再對由K-means聚類算法確定的先驗框進行歸一化處理就會得到預測框的位置信息,從而在原有的基礎上提高神經網絡預測目標的精度和穩定性。
非極大值抑制算法(Non-maximum Suppres- sion, NMS)的本質就是搜索數據局部的最大值,然后抑制那些非極大值的元素數據值,從而就可以找到局部的最優解[6]。非極大值抑制算法的算法流程圖如圖9所示。

圖9 NMS算法流程圖
綜上可知,非極大值抑制算法的目的就是消除冗余的數據點框,從而來確定最佳的目標物體的檢測位置。在進行目標的檢測過程中,只會取最接近真實值的預測框作為表示符合特征圖的檢測窗口。所以非極大值擬制示意圖如圖10所示。

圖10 NMS車輛檢測示意圖
基于YOLOv3-SPP的多目標車輛檢測神經網絡模型是在Pytorch深度學習框架下完成的,使用深度學習里的training-Opyions容器指定網絡的訓練參數,將預處理后的驗證數據設置為一個后續方便使用的變量名:“ValidationData”,同時設置一個臨時位置用來訓練目標檢測器的變量名:“CheckpointPath”,這樣能夠保證在訓練過程中及時保存訓練的結果。
本文是基于YOLOv3-SPP為網絡構架的多目標車輛檢測模型。本神經網絡模型首先是通過查準率(Precision)、查全率(Recall)和F1值來評價模型檢測車輛的性能[7]。由于本文的算法只是對車輛進行檢測,因此分類目標就只有兩類:車和非車,也就是正樣(Right)和反樣(Wrong)。因此,可以得到4種不同的檢測結果,如表1所示。

表1 車輛檢測結果分類表
TR(True-Right):實際為正樣且被預測為正樣,即正確地將正樣判定為正樣的樣本數。
FR(False-Right):實際為反樣但被預測為正樣,錯誤地將反樣判定為正樣的樣本數。
TW(True-Wrong):實際為正樣且被預測為反樣,即正確地將正樣判定為反樣的樣本數。
FW(False-Wrong):實際為反樣但被預測為反樣,即錯誤地將反樣判定為反樣的樣本數。
通過上面四個數值就可以得到查準率和查全率的計算公式如下:
查準率表示能夠準確檢測出車輛目標的數量占被檢測的車輛總目標數量的比值,查全率則表示能夠準確檢測出車輛目標的數量占整個車輛目標數目的比值,它們分別作為該神經網絡檢測模型對車輛目標檢測的準確性和健全性的好壞評價。它們都可以成為評價預測模型性能指標,并且查準率和查全率數值越高越好。但有時候這兩個指標會相互影響,呈現負相關,不太好評價模型的性能。因此,為了兼顧查準率和查全率,我們使用 F1值進行綜合評價,F1值越高,模型的檢測性能就越好。通過大量的實例驗證,可以得出最終模型訓練過程的Precision和Recall結果如圖11所示,該模型的平均查準率為86%,查全率為95.4%,則表明模型的檢測性能很好。使用訓練好的車輛檢測模型在驗證集上進行測試,經過多次迭代可以得到模型的收斂情況如圖12所示,另外通過對檢測時間進行統計計算,檢測速度可以達到45 fps,說明實時性也較好。

圖11 PR曲線

圖12 多目標車輛檢測模型的收斂情況
基于深度學習為基礎的多目標車輛檢測神經網絡模型,可以在一定的距離范圍內基本都能準確地檢測出車輛。從圖13(a)—圖13(d)和圖14(a)—圖14(d)可以看出,本文基于YOLOv3 SPP構建的多目標車輛檢測及追蹤神經網絡模型能夠優于傳統的檢測車輛目標方法或者簡單的多目標車輛檢測神經網絡模型,在它們的基礎上該模型可以在夜晚場景、白天場景、雨天場景、晴天場景、遮擋場景等不同的復雜場景下都能基本,準確地檢測出行駛的多目標車輛,整體的檢測精度相對于傳統的說明該模型具有良好的實時性、準確性、魯棒性和環境適應性。綜上所述,本文搭建的車輛檢測神經網絡模型在一定的距離范圍內基本都能準確的檢測出車輛,并且能夠適用在不同的場景下,魯棒性較強,可以應用在智能汽車的車輛檢測中。

圖13 UA-DETRAC數據集的車輛檢測結果


圖14 自采數據集的車輛檢測結果