張成標,童寶宏,程 進,張炳力,張 潤
1.安徽工業(yè)大學 機械工程學院,安徽 馬鞍山 243002
2.合肥工業(yè)大學 汽車與交通工程學院,合肥 230009
智能交通系統(tǒng)(Intelligent Traffic System,ITS)是未來檢測城市交通違章的有效手段,智能交通系統(tǒng)將先進的信息技術、數(shù)據(jù)通信技術、傳感器技術、電子控制技術以及計算機技術有效地綜合運用于整個交通管理體系[1-2]。車輛檢測利用傳感器技術與計算機技術是智能交通系統(tǒng)數(shù)據(jù)前端采集的一個重要環(huán)節(jié)。智能交通系統(tǒng)中的車輛檢測需要結(jié)合攝像頭、激光雷達、毫米波雷達等設備,而強大的視覺識別系統(tǒng)可以一定程度上替代昂貴的激光雷達與毫米波雷達的作用,降低檢測系統(tǒng)的成本[3-5]。目前基于視覺的車輛檢測主要是利用卷積神經(jīng)網(wǎng)絡對圖像中車輛與車牌進行識別,并將檢測的車牌圖片提取出來傳輸?shù)結(jié)olo_v2-tiny 卷積神經(jīng)網(wǎng)絡進行識別[6-7]。
近年來隨著計算機視覺在車輛檢測的興起,基于卷積神經(jīng)網(wǎng)絡的車輛檢測也成為主流方法。目前主流的卷積神經(jīng)網(wǎng)絡主要有R-CNN、Fast R-CNN、Faster R-CNN、Yolo 等[7-8]。傳統(tǒng)的計算機視覺方法常用精心設計的手工特征(如SIFT、HOG)描述圖像,而深度學習的方法則倡導習得特征[8-13]。從圖像分類任務的經(jīng)驗來看,CNN網(wǎng)絡自動習得的特征取得的效果已經(jīng)超出了手工設計的特征,發(fā)揮卷積網(wǎng)絡學習高質(zhì)量特征的能力。R-CNN的想法直接明了,即將檢測任務轉(zhuǎn)化為區(qū)域上的分類任務,是深度學習方法在檢測任務上的試水[14]。之后Fast R-CNN 用RPN 網(wǎng)絡完成了檢測任務的“深度化”,使用滑動窗口生成anchor box使得Faster R-CNN可以在單個GPU 上的速度提升到5 f/s[15]。由于對實時性的要求越來越高,Yolo 也應運而生,Yolo 的誕生標志著單階段方法的開始。它將檢測任務表述成一個統(tǒng)一的、端到端的回歸問題,只處理一次圖片同時得到位置和分類,大大提高了檢測實時性[16-18]。
目前傳統(tǒng)的違章檢測基于多傳感器融合或人工識別篩選圖像,增加了成本與人工的投入。本文將改進的Yolo_v2卷積神經(jīng)網(wǎng)絡模型與車牌識別系統(tǒng)集成進ROS(Robot Operating System)系統(tǒng),并與QT-Creator 可視化界面進行交互,做到實時對道路上違章車輛進行檢測。
Yolo_v2是基于回歸的目標檢測方法,Yolo_v2借鑒了Yolo_v1以及SSD的網(wǎng)絡結(jié)構。由于Yolo_v2將候選框提取、特征提取、目標分類、目標定位統(tǒng)一于同一個卷積神經(jīng)網(wǎng)絡中,Yolo_v2 不僅訓練過程中能夠?qū)崿F(xiàn)端到端的優(yōu)化,而且檢測過程耗時少,能夠滿足實時處理需求。Yolo_v2 相較于Yolo_v3 網(wǎng)絡結(jié)構簡單,并且在NVIDIA Jetson TX2開發(fā)板上的實時性好,檢測速率可以達到30 f/s。
Yolo_v2 網(wǎng)絡包含了19 個卷積層和5 個最大池化層。為了壓縮特征的同時增加網(wǎng)絡深度,在3×3的卷積核之間加入1×1的卷積核,每次池化操作后將通道數(shù)翻倍。在每一層網(wǎng)絡前先對輸入的圖像數(shù)據(jù)進行批量歸一化操作,可以有效提高準確率(mAP)以及顯著改善收斂性,防止過擬合。
Yolo_v2 相對于Yolo 有效地提高了準確率(mAP)以及檢測速率(FPS),但檢測經(jīng)常會出現(xiàn)漏檢、誤檢的情況。針對此問題,在Yolo_v2 的基礎上增加殘差網(wǎng)絡結(jié)構來提升對小目標車輛的檢測精度,同時增加一個不同尺度的Yolo層對圖像中的目標進行多尺度預測[19-22]。因為增加了殘差結(jié)構與多尺度預測,Yolo_v2 網(wǎng)絡結(jié)構變得厚重,對采集的路況視頻檢測速率只有16 f/s,因此在不降低準確率的情況下,將原19 層卷積層縮減為14層,并每隔3層添加殘差網(wǎng)絡層,精簡后的Yolo_v2結(jié)構如表1所示。
表1 改進Yolo_v2的網(wǎng)絡結(jié)構
本文中搭建的卷積神經(jīng)網(wǎng)絡是基于Yolo_v2的網(wǎng)絡結(jié)構。為了使卷積神經(jīng)網(wǎng)絡加快收斂保留了Yolo_v2的池化層,極大地縮減了參數(shù)數(shù)量,并添加Yolo_v3的殘差網(wǎng)絡結(jié)構來提高檢測精度。為了降低卷積過程的計算量,將兩個3×3的卷積層替換為兩個1×1卷積層與一個3×3的卷積層,如圖1所示。圖1左圖中是兩個3×3×256的卷積,參數(shù)數(shù)目為:3×3×256×256×2=1 179 648,右圖是第一個卷積層將256 通道降到了64 通道,最后通過1×1卷積層進行恢復,整體的參數(shù)數(shù)目為:1×1×256×64+3×3×64×64+1×1×64×256=69 632。新的殘差結(jié)構的參數(shù)數(shù)量比原殘差結(jié)構的參數(shù)數(shù)量減少了16.94 倍,這使得訓練速度得到加快[23-25]。添加改進后的殘差網(wǎng)絡,在隨著訓練時網(wǎng)絡深度的加深,訓練錯誤大大小于普通網(wǎng)絡訓練時出現(xiàn)的錯誤,錯誤減少的同時準確率也相對應提高了。
圖1 改進殘差結(jié)構對比圖
卷積神經(jīng)網(wǎng)絡中較深層特征有很大的感受野以及豐富的語義信息。深層特征對于物體姿態(tài)、遮擋和局部變形等變化具有魯棒性,但由于分辨率的降低導致幾何細節(jié)信息丟失。相反淺層特征有很小的感受野和豐富的幾何細節(jié)信息,但分辨率較高,語義信息匱乏。在卷積神經(jīng)網(wǎng)絡中,物體的語義信息可以在不同層出現(xiàn)。對于小物體而言,淺層特征包含一些細節(jié)信息,隨著層數(shù)加深,所提取特征的幾何細節(jié)信息可能完全消失,所以通過深層特征檢測小物體就變得很困難,而對于大物體而言,它語義信息將出現(xiàn)在較深層特征中。如圖2 所示,在一張圖像中有完整的車輛、被遮擋的車輛以及小目標車輛,為了使圖像中的車輛都能被標記,在Yolo_v2的基礎上添加一個Yolo層來進行多尺度預測,從而提取更全面的信息,既有全局的整體信息又有局部的詳細信息,同時對小目標車輛也有很高的檢測準確率,如圖3所示[22,26-28]。
圖2 被遮擋車輛示意圖
圖3 多尺度層結(jié)構圖
激活函數(shù)是深度神經(jīng)網(wǎng)絡結(jié)構的核心所在,目前常見的激活函數(shù)主要有sigmoid 系的sigmoid、tanh 函數(shù),Relu系的Relu、Lrelu函數(shù)等。但sigmoid系的函數(shù)在后向傳遞過程中會出現(xiàn)了梯度消失問題,極大地降低訓練速度[29-31]。
Relu函數(shù)能夠有效緩解梯度消失問題,顯著提升了深度神經(jīng)網(wǎng)絡的性能。Elu激活函數(shù)是為解決Relu激活函數(shù)存在的問題而提出,Elu既涵蓋了Relu的優(yōu)點,又避免了Dead relu(未被激活神經(jīng)元)問題且輸出的均值接近0[32-34]。
基于Elu 激活函數(shù)設計激活函數(shù)Kelu(函數(shù)圖如圖4 所示),Kelu 激活函數(shù)包含了Elu 激活函數(shù)的優(yōu)點,Kelu 激活函數(shù)的處處可微保證了在優(yōu)化中梯度的可計算性,Kelu 激活函數(shù)不僅滿足處處可微,且在梯度變化的平滑性也優(yōu)于Elu 激活函數(shù)(如圖5 所示),這使得所有輸入的數(shù)據(jù)都會得到優(yōu)化。并且Kelu 激活函數(shù)在x> 0 的正半軸隨著x的增大f′(x)無限接近于1,不存在梯度爆炸現(xiàn)象,在x<0 的負半軸保留了一些負軸的值,使得負軸信息不會全部丟失,正負信息的值與激活函數(shù)相應橫坐標下縱坐標的值根據(jù)函數(shù)公式進行運算,使Kelu激活函數(shù)的輸出均值是接近于零的。Kelu激活函數(shù)公式如公式(1)所示:
圖4 Kelu激活函數(shù)圖
圖5 Elu激活函數(shù)圖
Kelu激活函數(shù)的導數(shù)公式如公式(2)所示:
由Elu 激活函數(shù)求導公式可得在x=0 點處1 ≠α,左右導數(shù)不同,從而導致Elu激活函數(shù)在x=0 不平滑,也導致在x=0 處附近部分參數(shù)的不可計算,從而丟失少部分數(shù)據(jù)。
Elu激活函數(shù)公式如公式(3)所示:
對f(x)求導如公式(4)所示:
由于改進后的Kelu 激活函數(shù)在x>0 正半軸為指數(shù)運算,計算機對指數(shù)運算的時間要明顯大于非指數(shù)運算。所以Kelu激活函數(shù)在卷積神經(jīng)網(wǎng)絡檢測中實時性要低于其他激活函數(shù),但是應用于交通違章檢測并不需要過高的實時性,達到每秒3幀的傳輸速率就可以精確地監(jiān)測違章。
在保證檢測速率的情況下,Kelu激活函數(shù)在檢測精度的表現(xiàn)都優(yōu)于Elu、Leaky-relu等激活函數(shù)。
本文檢測違章車輛是需要對道路上的不同形態(tài)的車輛進行分類檢測,如圖6所示。車輛的形態(tài)分為側(cè)前方(Side Front)、側(cè)后方(Side Behind)、正前方(Front)、正后方(Behind)、正側(cè)方(Side)五種類型。為了增加卷積神經(jīng)網(wǎng)絡的泛化性,制作數(shù)據(jù)集的圖像來源于KITTI數(shù)據(jù)集、剪輯后的視頻圖像的車輛圖片,利用Labelimg軟件對圖片進行標注歸類制作成數(shù)據(jù)集[35-37]。同時為了降低誤檢率,提高其背景區(qū)分能力,應保證有適量的負樣本集,負樣本集是照片中不存在目標車輛的背景圖片,所以在數(shù)據(jù)集中通過添加負樣本圖像來制作負樣本集。為了增強網(wǎng)絡模型的泛化能力,防止訓練的網(wǎng)絡過擬合(Over-fitting),將圖像樣本作為訓練數(shù)據(jù)輸入到網(wǎng)絡前,通過隨機旋轉(zhuǎn)、平移圖像以及改變圖像的飽和度、曝光和色調(diào)的方式,對訓練集中的圖像實現(xiàn)擴增,這樣不僅能得到更多的樣本,還能增強網(wǎng)絡模型對新數(shù)據(jù)樣本的判斷能力[35-37]。
圖6 車輛形態(tài)分類圖
在前節(jié)通過車輛形態(tài)識別出違章車輛的基礎上,需要對違章車輛進行車牌提取。由于完整車牌數(shù)據(jù)集與被分割后的車牌數(shù)據(jù)集是分開進行訓練,得到的是不同的權重文件,所以車牌數(shù)據(jù)集主要分為兩類,分別是車牌完整數(shù)據(jù)集與車牌字符分割后的單個字符數(shù)據(jù)集[35-37]。完整的車牌圖像(如圖7所示)是車輛圖像經(jīng)過卷積神經(jīng)網(wǎng)絡檢測后被提取發(fā)送給車牌識別系統(tǒng)。完整車牌進行字符分割后將七個單個字符圖片(如圖8所示)依次傳輸?shù)結(jié)olo_v2-tiny卷積神經(jīng)網(wǎng)絡進行識別。
圖7 完整車牌數(shù)據(jù)集
本文實驗環(huán)境如表2所示。
圖8 單個字符數(shù)據(jù)集
表2 實驗環(huán)境
選擇平均準確率(mAP)、召回率(recall)、神經(jīng)網(wǎng)絡每秒檢測幀數(shù)(FPS)以及反映網(wǎng)絡收斂的Loss 曲線作為卷積神經(jīng)網(wǎng)絡模型優(yōu)劣的評價指標。
首先選取原Yolo_v2 網(wǎng)絡作為基本框架,分別選取Leaky、Relu、Elu 激活函數(shù)對自制車輛多方位數(shù)據(jù)集進行訓練,利用訓練的權重在測試集進行批量檢測,通過得到的評價指標來選取適合的激活函數(shù);其次對Yolo_v2卷積神經(jīng)網(wǎng)絡進行改進,分別添加了殘差網(wǎng)絡結(jié)構與多尺度層,將選取的最優(yōu)激活函數(shù)搭載到改進好的卷積神經(jīng)網(wǎng)絡中對網(wǎng)絡進行訓練,利用訓練權重在測試集測試得到相關評價指標,如表3所示。
表3 不同激活函數(shù)訓練后的評價指標
利用改進的Yolo_v2 卷積神經(jīng)網(wǎng)絡搭載Kelu 激活函數(shù)對訓練集進行訓練得到權重,利用所得的權重在測試集上進行測試得到相關評價指標;最后將三組測試后評價指標進行對比。
(1)訓練數(shù)據(jù)集時生成的loss值可以反映模型收斂的穩(wěn)定性,原Yolo_v2 網(wǎng)絡結(jié)構三組激活函數(shù)下loss 值對比如圖9。
圖9 不同激活函數(shù)下的loss變化值
在原Yolo_v2網(wǎng)絡為框架下,利用Leaky激活函數(shù)、Relu激活函數(shù)、Elu激活函數(shù)訓練得到loss值。對比圖9由收斂速度及收斂穩(wěn)定性可以看出搭載Elu激活函數(shù)的卷積神經(jīng)網(wǎng)絡更加適用于多方位車輛的檢測。
(2)訓練改進的Yolo_v2 網(wǎng)絡搭載Elu 激活函數(shù)與Kelu激活函數(shù)下評價指標對比如表4所示。
表4 改進后網(wǎng)絡不同激活函數(shù)訓練后評價指標
在改進的Yolo_v2 網(wǎng)絡結(jié)構下,Kelu 激活函數(shù)和Elu 激活函數(shù)下的 loss 值如圖10、11 所示。Kelu 激活函數(shù)的loss值在訓練1 000次后就降到1以下,收斂速度高于Elu 激活函數(shù);對比圖10 與圖11 可得,在收斂過程中Kelu激活函數(shù)下的loss值收斂平滑,出現(xiàn)噪點的數(shù)量遠遠低于Elu激活函數(shù)下的loss值的噪點數(shù)量。
圖10 Kelu激活函數(shù)下loss變化值
圖11 Elu激活函數(shù)下loss變化值
本文的基于改進Yolo_v2的車輛多方位識別方法可識別車輛的多種形態(tài),在一定程度上替代了激光雷達與毫米波雷達的作用。本文將識別多方位車輛方法應用在檢測交通違章上。
改進后的神經(jīng)網(wǎng)絡算法封裝于ROS 軟件平臺中,并與QT 可視化界面建立通信,方便顯示檢測信息。將檢測系統(tǒng)硬件固定在高度一定的支架上,并將支架擺放在禁止車輛掉頭(轉(zhuǎn)向)的路口來檢測車輛違章,如圖12所示。
圖12 虛擬檢測示意圖
由圖13所示通過攝像頭將路況視頻通過ROS節(jié)點將視頻每秒3幀以圖片的形式發(fā)送給改進的Yolo_v2網(wǎng)絡,檢測之后利用ROS節(jié)點將車輛方位的類別信息、準確率及檢測圖片通過節(jié)點發(fā)布給QT 可視化界面。在ROS下的QT程序包中定義節(jié)點接受卷積神經(jīng)網(wǎng)絡發(fā)布的檢測信息,若檢測到車輛的正側(cè)身(Side)與側(cè)前身(Side Front),則判定車輛違章。如果違章,則判定違章的按鈕變紅(如圖13(b)所示),并且在檢測到車牌后將車牌圖片提取出通過字符分割后通過卷積神經(jīng)網(wǎng)絡檢測車牌,將檢測到的車牌號顯示在QT界面上,同時發(fā)布提取的車牌圖片(如圖13(b)所示)。
圖13 違章系統(tǒng)顯示平臺
根據(jù)實車實驗結(jié)果分析,改進的Yolo_v2 卷積神經(jīng)網(wǎng)絡及設計的Kelu激活函數(shù)對多方位車輛的檢測準確率優(yōu)于原Yolo_v2卷積神經(jīng)網(wǎng)絡。
本文從車輛多方位識別的角度出發(fā),對現(xiàn)有的Yolo_v2 卷積神經(jīng)網(wǎng)絡進行改進,分別在原Yolo_v2 網(wǎng)絡的基礎上增加了殘差網(wǎng)絡結(jié)構和多尺度層,并且在Elu 激活函數(shù)的基礎上設計了Kelu 激活函數(shù)。實驗結(jié)果表明在改進了網(wǎng)絡結(jié)構和激活函數(shù)后,新的網(wǎng)絡可以更加精確且高效地識別道路上的多方位車輛,并驗證了本文所設計的方法可用于違規(guī)掉頭車輛違章檢測中。
在下一步研究中,將本文所研究的基于改進的Yolo_v2卷積神經(jīng)網(wǎng)絡車輛多方位識別方法應用于更多的道路違章監(jiān)測和車聯(lián)網(wǎng)應用。