劉 哲 朱東弼
(延邊大學,吉林 延吉 133002)
隨著科學技術的日益更新,家家戶戶的生活水平直線上升,私家車數量在不斷增加,因此智能交通系統的概念被提出。車輛檢測是智能交通系統的關鍵部分,對減少交通擁堵,減少交通事故的發生以及輔助駕駛應用都有著重要的意義。
車輛檢測方法一般可分為傳統的車輛檢測算法和基于深度學習的車輛檢測算法。傳統的目標檢測算法大多需要人工設計特征,精度差、模型魯棒性不強。近年來,計算機視覺領域主要采用的是深度學習理論,現有的目標檢測算法比較經典的主要分成兩類:一類是Two Stage算法,如R-CNN、Fast R-CNN、Faster R-CNN;另一類的目標檢測算法是One Stage,如YOLO系列,SSD算法。本文將對三種有代表性的車輛檢測算法Faster R-CNN算法、YOLOv3算法、SSD算法的特點進行分析。
2015年Faster R-CNN算法問世,該算法檢測框的生成使用了區域建議網絡(Region Proposal Network,RPN),新的RPN會更快更有效地生成ROI[1],讓目標檢測又向前邁進了一大步。Faster R-CNN由四部分組成,分別是特征提取網絡、RPN網絡、ROIpooling(池化)層、分類與回歸。特征提取網絡由卷積層、池化層、激活層構成,首先將車輛圖片輸入,會經過13個卷積層和激活層,使用的激活函數是Relu,同時會經過4個池化層,每一個池化層會把圖片變成原來的1/2,最后圖片就變成了原圖的1/16,這樣就提取出了車輛圖片的feature maps(特征),常用的特征提取網絡有ResNet、VGG等。這些feature maps分為兩個走向:第一個是直接映射至ROIpooling層,另一個則是通過RPN來生成候選區域。特征圖輸入至RPN中,為了集中特征信息首先進行3*3卷積。接下來同樣有兩個分支,一個分支我們手動定義一個base_anchor則會生成9個Anchor box,即特征圖上的每個像素點會有9個Anchor box,使用softmax對其篩選出含有車輛目標的[2]。去掉超過原圖邊界線上的Anchor box,設置合適的IOU閾值,對于范圍外的Anchor box也去掉,對剩下的檢測框進行標記。另一個分支,我們可以得到每個anchor的四個坐標信息:中心位置(x,y)、寬w、高h,將計算得出的anchor box與ground truth的坐標信息偏移量訓練學習,使用邊框回歸 (bounding box regression)方法對這四個坐標信息變化量進行回歸,可以從fg anchors得出proposal大致位置。接下來在Proposal層再次生成anchors,并對其使用bbox回歸,從而得到更加準確的proposals。ROIpooling層的輸入是之前得到的特征圖和proposals,將region proposal映射至特征圖中,在將這個區域劃分為7*7份,從而會有許多個固定長度的7*7feature map,這些固定長度的feature map是全連接層的輸入。最終利用全連接層和softmax對車輛種類識別,并回歸出準確的預測框得到位置。
Faster R-CNN檢測精度較高,魯棒性強,代碼開源,方便使用。但是網絡容易丟失原始圖像的空間結構信息,而且兩階段網絡的速度較慢,無法達到實時性的要求。
YOLOv3算法就是將一張車輛圖片分成s*s個網格,如果物體的中心點落在網格上,那么該網格就負責預測這個物體的bounding box,每次預測時會有坐標參數(x,y,w,h)和置信度[3],置信度可以用IOU計算,我們選擇IOU最大的作為車輛檢測輸出。YOLOv3使用Darknet53作為主干特征提取網絡,Darknet53里面含有殘差網絡Residual,容易優化,可以通過增加網絡深度來提高準確率。首先把圖片轉換成416*416尺寸,為了防止圖片失真可以加入灰度條,經過一個卷積層(卷積層都是正常的卷積、標準化、激活函數),然后通過五個殘差塊,殘差塊均由一個1*1卷積、一個3*3卷積、一個shortcut path組成,有效緩解了梯度消失問題,這五個殘差塊重復次數分別是1,2,8,8,4,使用殘差網絡來提取特征。在這五次下采樣過程中,圖片的寬高不斷被壓縮,通道數擴張,這樣就獲得了一堆的特征層。我們使用后三個特征層構建FPN特征金字塔來加強特征提取,后三個特征層分別是52*52(預測小物體)、26*26(預測中物體)、13*13(預測大物體)。將這三個特征層結果分別進行五次卷積,卷積出來的結果一個分支用來做分類回歸,另一個分支將結果卷積再進行上采樣與前一個特征層堆疊,再重復的進行五次卷積,接下來重復兩次上述步驟,我們就可以得到三個加強特征層。最后利用YoloHead對三個有效特征層進行預測,Yolo Head本質上是一次3*3卷積用來特征融合加上一次1*1卷積調整通道數。
YOLOv3算法將圖片端到端目標檢測,喪失了部分精度,難以檢測小目標,但是速度快,漏檢率低,對全局信息有較好表現。
SSD(Single-Shot MultiBox Detector)在2016年算法問世,不僅提升了識別速度,還提高了mAP值[4]。首先將車輛圖片統一成300*300輸入,SSD采用VGG16作為基礎網絡,并對VGG16做出了一些改進:全連接層(Fully Connected Layer)的6、7層分別轉換成3*3卷積層和1*1卷積層,同時采用Atrous Algorithm方法指數級增加感受野;去除全連接層8和Dropout層;池化層5由2*2-s2變成3*3-s1;增加4個卷積層。顯而易見,SSD算法網絡結構中應用多個卷積層,每一個卷積層都可以提取feature map,那么我們在這個過程中獲得多個不同大小的特征圖,即SSD可以多尺度地檢測車輛。在特征圖中選擇原卷積層Conv4_3,和新增卷積層7、8_2、9_2、10_2、11_2作為有效特征圖,尺寸分 別 為:(38,38)、(19,19)、(10,10)、(5,5)、(3,3)、(1,1)。但是設置先驗框(prior box)數目時這六個特征圖是不同的,先驗框是實際選用的默認框,prior box的設置包括尺度和長寬比的選擇,式(1)是生成默認框(default boxes)的公式。

其中,m:特征圖個數;sk,prior box大小相對于圖片的比例;smin和smax,比例的最小值與最大值每個特征圖有6個先驗框{1,2,3,1/2,1/3,1'},但Conv4_3、Conv10_2、Conv11_2層只用{1,2,1/2,1'}這4個prior box。SSD算法不需要全連接層,直接使用這些不同的特征圖來進行檢測,會同時有兩個3*3卷積,第一個用來檢測車輛類別,以及先驗框是否含有物體,第二個用來回歸預測框的坐標信息(中心位置、寬、高)。SSD算法一共可以預測8 732個邊界框,可以說是非常密集,不過計算量也變得極其龐大,因此采用非極大值抑制(NMS)方法設置合適的閾值,來去除掉一些重疊的Default boxes,最后對剩下的prior box檢測,即可通過他們得出車輛類別和位置信息。
SSD算法在特征圖上進行了大量采樣,有效避免了漏檢,提高車輛檢測精度,分類回歸同時進行,大大提高了速度,但是需要設計者手工依靠經驗來設置default boxes的初始值,增加了工作量,而且不能很好識別檢測出小目標,對大目標檢測效果較好。
隨著深度學習算法的不斷發展,深度學習在智能交通系統領域有著越來越廣泛的應用。通過上述分析可知基于深度學習的三種經典的車輛檢測算法——Faster R-CNN算法、YOLOv3算法、SSD算法,各有千秋,在選擇網絡的時候可以根據不同的應用場景和實際需求來實現。