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