基于卷積神經(jīng)網(wǎng)絡(luò)的實景交通標(biāo)志識別
掃描二維碼
隨時隨地手機看文章
引 言
隨著計算機視覺技術(shù)的不斷發(fā)展與完善,人們開始著眼于將計算機視覺系統(tǒng)應(yīng)用于現(xiàn)實生活中,人臉識別技術(shù)在身份驗證方面達到了令人矚目的成就,而路標(biāo)識別則是自動駕駛的重中之重。自動駕駛的火熱反映出人們對其的迫切需求,而更多的矚目意味著更嚴(yán)苛的標(biāo)準(zhǔn),自動駕駛對路標(biāo)識別的要求不僅僅在準(zhǔn)確性方面,更多的是要求系統(tǒng)的處理速度是駕駛系統(tǒng)可以接受的,即要求識別過程盡可能的高效。相較于傳統(tǒng)的識別方法,使用卷積神經(jīng)網(wǎng)絡(luò)不僅可以達到更加令人滿意的準(zhǔn)確率,同時,算法的消耗時間也可以接受。
卷積神經(jīng)網(wǎng)絡(luò)經(jīng)過多年的積累和完善,已經(jīng)被廣泛應(yīng)用于圖片識別領(lǐng)域, 并且取得了顯著的成效。Lenet-5 可謂是最早的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),由LeCun 等人首先提出,他們最早將其應(yīng)用在文本識別領(lǐng)域,在 mnist 手寫數(shù)字?jǐn)?shù)據(jù)庫上, Lenet-5 的識別率可以達到 99.8%,這是使用傳統(tǒng)模式識別方法所不能比擬的。卷積神經(jīng)網(wǎng)絡(luò)的另一大優(yōu)勢在于,它可以將原始圖片直接輸入網(wǎng)絡(luò),自動訓(xùn)練特征,不同于很多傳統(tǒng)的模式識別方法,無需對圖片進行繁復(fù)的預(yù)處理工作或人為指定特征。
近期研究表明,識別的準(zhǔn)確率與神經(jīng)網(wǎng)絡(luò)的深度有很大關(guān)系,一般情況下,深層網(wǎng)絡(luò)相較于淺層都可以取得較高的準(zhǔn)確率。所以本文在傳統(tǒng)的Lenet-5上做了改進,通過增加它的層數(shù)來提升識別效果,并應(yīng)用于實景交通標(biāo)志的識別中。經(jīng)驗證,這些改進取得了不錯的效果。
1 實景交通標(biāo)志識別神經(jīng)網(wǎng)絡(luò)模型
傳統(tǒng)的Lenet-5 網(wǎng)絡(luò)一共包含 7 層,含有卷積、下采樣和池化三種操作。卷積層使用 5 5 的卷積核,卷積步長為1 ;池化層使用max-pooling,池化窗口大小 2 2,步長為 1。傳統(tǒng)網(wǎng)絡(luò)由于受到網(wǎng)絡(luò)層數(shù)的限制,導(dǎo)致識別率難以再提升,現(xiàn)做如下改進:
(1) 增加了網(wǎng)絡(luò)層數(shù),增加了兩個卷積層,并把卷積核大小改為 3 3;
(2) 在全連接層之后加入Dropout操作,以防止網(wǎng)絡(luò)訓(xùn)練過擬合;
(3) 使用Softmax層作為輸出層,將結(jié)果映射為概率的形式。
改進的網(wǎng)絡(luò)結(jié)構(gòu)見表 1 所列。
在該網(wǎng)絡(luò)模型中,使用了4 個卷積層,每一層的卷積核 大小均為 3×3,前兩個卷積層含有 64 個 FeatureMap,后兩個 卷積層含有 128 個 FeatureMap。每隔兩個卷積層會緊跟一個 池化層,池化窗口為 2×2,步長為 2。神經(jīng)網(wǎng)絡(luò)的末端是兩個 全連接層和一個 Softmax 層,全連接層的神經(jīng)元個數(shù)分別為 786 和 500,每個全連接層均采用 Dropout 操作,即隨機去掉 一些神經(jīng)元的連接,Dropout 概率取 0.5。
2 訓(xùn)練集
訓(xùn)練集包含 10 萬張訓(xùn)練圖片和 2萬張測試圖片,包含100種交通標(biāo)志分類,所以每個目標(biāo)分類對應(yīng) 1000張訓(xùn)練圖片和 200 張測試圖片。這些圖片是在不同時段選擇各種不同角度拍攝的實景圖片,更能真實反映實景圖識別中光照、天氣等復(fù)雜情況的影響。每張圖片都是 64 64 的RGB 三通道圖片。在訓(xùn)練網(wǎng)絡(luò)過程中,這些圖片不需做任何預(yù)處理,可直接輸入網(wǎng)絡(luò)進行訓(xùn)練。常見的交通標(biāo)志如圖 1 所示,交通標(biāo)志圖例如圖 2 所示。
3 深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程
一直以來深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練都被公認(rèn)為是一件很困難的事情,隨著網(wǎng)絡(luò)深度的增加,訓(xùn)練難度會越來越大。網(wǎng)絡(luò)權(quán)重的初始化不理想或者訓(xùn)練參數(shù)設(shè)置不合理,都會導(dǎo)致網(wǎng)絡(luò)訓(xùn)練過程中出現(xiàn)過擬合,進而致使訓(xùn)練失敗。因此,選擇一套好的訓(xùn)練方法十分必要??梢詫⑸窠?jīng)網(wǎng)絡(luò)看作一個關(guān)于輸入向量 x、權(quán)重 w 和偏執(zhí) b 的非線性函數(shù),用 F(x,w, b) 表示。使用交叉熵函數(shù)來計算網(wǎng)絡(luò)的輸出 F(x,w, b) 與真實標(biāo)簽 L(x) 的誤差值:
其中,n 表示訓(xùn)練樣本的個數(shù),x 表示某一個樣本,F(xiàn)(x,w, b) 表示該樣本經(jīng)過神經(jīng)網(wǎng)絡(luò)后的輸出,L(x) 表示該樣本的標(biāo)簽。 我們的優(yōu)化目標(biāo)是最小化該損失函數(shù) C(x, w, b)。
目前對于神經(jīng)網(wǎng)絡(luò)的訓(xùn)練均采用基于梯度的優(yōu)化算法, 這種算法分為以下兩步:
(2)利用梯度更新 w 和 b 的值,從而使 C(x, w, b)逐步趨于最小化。
反向傳播算法是一種利用誤差反向傳播來求取梯度的方法。當(dāng)網(wǎng)絡(luò)獲得一個輸入向量時,該向量會通過前向傳播經(jīng)過網(wǎng)絡(luò)的每一層,直到其到達輸出層。這時,輸出層會將當(dāng)前向量與期望輸出向量進行比對,并使用一個誤差函數(shù)以計算得到網(wǎng)絡(luò)中每層存在的誤差值。這些誤差將被反向傳播回網(wǎng)絡(luò)中的每一層,我們可以認(rèn)為這些誤差值便是該輸入向量對網(wǎng)絡(luò)的貢獻。反向傳播算法使用這些誤差值與相應(yīng)的權(quán)重值進行損失函數(shù)的梯度計算。當(dāng)梯度計算好之后,使用 伴隨沖量的隨機梯度下降算法 來優(yōu)化權(quán)重 w 和偏執(zhí) b :
其中, >0 是學(xué)習(xí)率,m∈[0, 1] 是沖量系數(shù),?wC x( , w b, ) 是損 失函數(shù) C 關(guān)于權(quán)重 w 的梯度。偏執(zhí) b 的更新和權(quán)重 w 的更新 類似,需要計算損失函數(shù) C 關(guān)于偏執(zhí) b 的梯度。
網(wǎng)絡(luò)中的權(quán)重 w 使用 Xavier 方法初始化,而偏執(zhí) b 則統(tǒng) 一初始化為 0。在訓(xùn)練過程中,將沖量系數(shù) m 設(shè)置為 0.9,學(xué) 習(xí)率 設(shè)置為 0.001,min-batch 設(shè)置為 100,經(jīng)歷一個 epoch 需要 1 000 次迭代。
4 實驗結(jié)果
在大約 60 個 epoch 之后,準(zhǔn)確率和誤差值基本收斂, 實驗結(jié)果如圖 3 和圖 4 所示。圖 3 中兩條曲線分別表示訓(xùn)練 數(shù)據(jù)和測試數(shù)據(jù)的準(zhǔn)確率,圖 4 表示訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)的 誤差值。由圖可以看到,隨著迭代次數(shù)的增加,識別率在逐 步增加,而誤差值在逐漸減小,最終的準(zhǔn)確率可以達到 85%。
