我們可以創(chuàng)建一個能夠?qū)煌?biāo)志進(jìn)行分類的模型,并且讓模型自己學(xué)習(xí)識別這些交通標(biāo)志中最關(guān)鍵的特征。在這篇文章中,我將演示如何創(chuàng)建一個深度學(xué)習(xí)架構(gòu),這個架構(gòu)在交通標(biāo)志測試集上的識別準(zhǔn)確率達(dá)到了98%。
交通標(biāo)志是道路基礎(chǔ)設(shè)施的重要組成部分,它們?yōu)榈缆肥褂谜咛峁┝艘恍╆P(guān)鍵信息,并要求駕駛員及時調(diào)整駕駛行為,以確保遵守道路安全規(guī)定。如果沒有交通標(biāo)志,可能會發(fā)生更多的事故,因為司機無法獲知最高安全速度是多少,不了解道路狀況,比如急轉(zhuǎn)彎、學(xué)校路口等等?,F(xiàn)在,每年大約有130萬人死在道路上。如果沒有這些道路標(biāo)志,這個數(shù)字肯定會更高。
當(dāng)然,自動駕駛車輛也必須遵守交通法規(guī),因此需要_識別_和_理解_交通標(biāo)志。
從傳統(tǒng)上來說,可以使用標(biāo)準(zhǔn)的計算機視覺的方法來對交通標(biāo)志進(jìn)行檢測和分類,但同時也需要耗費相當(dāng)多的時間來手工處理圖像中的重要特征?,F(xiàn)在,我們引入深度學(xué)習(xí)技術(shù)來解決這個問題。我們可以創(chuàng)建一個能夠?qū)煌?biāo)志進(jìn)行分類的模型,并且讓模型自己學(xué)習(xí)識別這些交通標(biāo)志中最關(guān)鍵的特征。在這篇文章中,我將演示如何創(chuàng)建一個深度學(xué)習(xí)架構(gòu),這個架構(gòu)在交通標(biāo)志測試集上的識別準(zhǔn)確率達(dá)到了98%。
項目設(shè)置
數(shù)據(jù)集可分為訓(xùn)練集、測試集和驗證集,具有以下特點:
圖像為32(寬)×32(高)×3(RGB彩色通道)
訓(xùn)練集由34799張圖片組成
驗證集由4410個圖像組成
測試集由12630個圖像組成
共有43個種類(例如限速20公里/小時、禁止進(jìn)入、顛簸路等等)
此外,我們將使用Python 3.5與Tensorflow來編寫代碼。
圖像及其分布
你可以在下圖中看到數(shù)據(jù)集中的一些示例圖像,圖像的標(biāo)簽顯示在相應(yīng)行的上方。其中一些非常暗,稍后我們會調(diào)整它們的對比度。
訓(xùn)練集中各個種類圖像的數(shù)量明顯不平衡,如下圖所示。某些種類的圖片少于200張,而其他的則有2000多張。這意味著我們的模型可能會偏向于代表性過高的種類,特別是當(dāng)它的預(yù)測無法確定時。我們稍后會看到如何使用數(shù)據(jù)增強來緩解這個問題。
預(yù)處理步驟
我們首先要對圖像應(yīng)用兩個預(yù)處理步驟:
灰度化
把三通道的圖像轉(zhuǎn)換為單通道灰度圖像,如下圖所示。
歸一化
我們通過用數(shù)據(jù)集平均值減去每個圖像并除以其標(biāo)準(zhǔn)偏差來確定圖像數(shù)據(jù)集分布的中心。這有助于提高模型在處理圖像時的一致性。生成的圖像如下所示:
模型的架構(gòu)
交通標(biāo)志分類器架構(gòu)的靈感來自于Yann Le Cun的這篇論文。我們在他的基礎(chǔ)上做了一些調(diào)整,并創(chuàng)建了一個模塊化的代碼庫,它允許我們嘗試不同的過濾器大小、深度和卷積層的數(shù)量,以及完全連接層的維度。為了向Le Cun致敬,我們稱這樣的網(wǎng)絡(luò)為**_EdLeNet_** :)。
我們將主要嘗試5x5和3x3大小的過濾器(又名內(nèi)核),并且卷積層的深度從32開始。 EdLeNet的3x3架構(gòu)如下所示:
該網(wǎng)絡(luò)由3個卷積層組成,內(nèi)核大小為3x3,下一層的深度加倍,使用ReLU作為激活函數(shù),每一層的后面是最大2×2的池操作。最后3層完全連接,最后一層能產(chǎn)生43個結(jié)果(可能的標(biāo)簽總數(shù)),使用SoftMax作為激活函數(shù)。這個網(wǎng)絡(luò)使用附帶Adam優(yōu)化器的迷你批次隨機梯度下降算法進(jìn)行訓(xùn)練。我們編寫了高度模塊化的基礎(chǔ)代碼,這使得我們能夠_動態(tài)_創(chuàng)建模型,示例代碼片段如下:
ModelConfig包含了模型的相關(guān)信息,比如:
模型的函數(shù)(例如:EdLeNet)
模型的名稱
輸入的格式(例如:灰度等級為[32,32,1]),
卷積層的配置[過濾器大小、起始深度、層數(shù)],
完全連接層的大小(例如:[120,84])
種類的數(shù)量
dropout(丟棄)百分比值[p-conv,p-fc]
ModelExecutor負(fù)責(zé)_訓(xùn)練_、_評估_、_預(yù)測_,以及生成_激活_映射的可視化效果。
為了更好地隔離模型,并確保它們不是全部都在相同的Tensorflow圖下,我們使用下面這個比較有用的結(jié)構(gòu):
這樣,我們就能為_每個_模型創(chuàng)建單獨的圖,并確保沒有混入變量、占位符。這為我解決了很多麻煩。
我們實際上是以卷積深度為16開始的,但在深度為32的時候獲得了更好的結(jié)果并最終確定了這個值。我們還比較了彩色與灰度圖像、標(biāo)準(zhǔn)和歸一化的圖像,最后發(fā)現(xiàn)灰度圖往往優(yōu)于彩色圖。不幸的是,我們在3x3或5x5的模型上最高勉強達(dá)到了93%的測試準(zhǔn)確率,而后來一直沒有達(dá)到這個準(zhǔn)確率。你可以在下圖中看到針對不同模型配置的一些指標(biāo)圖。
在顏色歸一化圖像上的模型性能
在灰度歸一化圖像上的模型性能
Dropout(丟棄)算法
為了提高模型的可靠性,我們需要使用dropout算法,這個算法是指在深度學(xué)習(xí)網(wǎng)絡(luò)的訓(xùn)練過程中,對于神經(jīng)網(wǎng)絡(luò)單元,按照一定的概率將其暫時從網(wǎng)絡(luò)中丟棄。這樣可以防止模型過度擬合。Dropout算法最早是由深度學(xué)習(xí)領(lǐng)域的先驅(qū)Geoffrey Hinton提出來的。要更好地理解背后地動機,務(wù)必閱讀一下這篇論文。
在論文中,作者根據(jù)層類型的不同應(yīng)用不同概率值進(jìn)行丟棄。因此,我決定采用類似的方法,定義兩個級別的dropout,一個用于卷積層,另一個用于完全連接層:
此外,隨著進(jìn)入到更深層次的網(wǎng)絡(luò),作者逐漸開始采用更積極的dropout值。所以我也決定這樣:
這樣做的原因是,我們把網(wǎng)絡(luò)看作是一個漏斗,當(dāng)我們深入到層中時,希望逐漸收緊它:我們不想在開始的時候丟棄太多的信息,因為其中的一些相當(dāng)有價值。此外,在卷積層中應(yīng)用MaxPooling的時候,我們已經(jīng)失去了一些信息。
我們嘗試過不同的參數(shù),但最終結(jié)果是_p-conv = 0.75_和_p-fc = 0.5_,這使得我們可以使用3x3的模型在歸一化灰度圖上實現(xiàn)97.55%的測試集準(zhǔn)確率。有趣的是,我們在驗證集上的準(zhǔn)確率達(dá)到了98.3%以上:
引入dropout算法后,在灰度歸一化圖像上的模型性能
上面的圖表顯示,這個模型更為_平滑_。我們已經(jīng)在測試集上實現(xiàn)了準(zhǔn)確率超過93%這個目標(biāo)分?jǐn)?shù)。下面,我們將探索一些用于處理每一個點的技術(shù)。
直方圖均衡化
直方圖均衡化是一種計算機視覺技術(shù),用于增強圖像的對比度。由于一些圖像受到了低對比度(模糊、黑暗)的影響,因此我們將通過應(yīng)用OpenCV的對比度限制自適應(yīng)直方圖均衡來提高可視性。
我們再次嘗試了各種配置,并找到了最好的結(jié)果,**測試精度達(dá)到了97.75%**,在3x3的模型上使用以下dropout值:_p-conv = 0.6_,_p-fc = 0.5_。
盡管做了直方圖均衡化,但有些圖像仍然非常模糊,并且有些圖像似乎是失真的。在我們的測試集中沒有足夠的圖像示例來改進(jìn)模型的預(yù)測。另外,雖然97.75%的測試準(zhǔn)確率已經(jīng)相當(dāng)不錯,但我們還有另外一個殺手锏:數(shù)據(jù)增強。
數(shù)據(jù)增強
我們在早些時候曾經(jīng)發(fā)現(xiàn),43個種類的數(shù)據(jù)明顯不平衡。然而,它似乎并不是一個棘手的問題,因為即使這樣,我們也能夠達(dá)到非常高的準(zhǔn)確度。我們也注意到測試集中有一些圖像是失真的。因此,我們將使用數(shù)據(jù)增強技術(shù)來嘗試:
擴展數(shù)據(jù)集,并在不同的照明條件和方向上提供其他圖片
提高模型的通用性
提高測試和驗證的準(zhǔn)確性,特別是對失真的圖像
我們使用了一個名為imgaug的庫來創(chuàng)建擴展數(shù)據(jù)。我們主要應(yīng)用仿射變換來增強圖像。代碼如下:
雖然種類數(shù)量的不平衡可能會在模型中引入偏差,但我們決定在現(xiàn)階段不解決這個問題,因為這會導(dǎo)致數(shù)據(jù)集數(shù)量的增加,延長訓(xùn)練時間。相反,我們決定為每個種類增加10%的圖像。我們的新數(shù)據(jù)集如下。
圖像的分布當(dāng)然不會發(fā)生顯著的變化,但是我們確實對圖像應(yīng)用了灰度化、直方圖均衡化,以及歸一化等預(yù)處理步驟。我們訓(xùn)練2000次,附加dropout算法(_p-conv = 0.6_,_p-fc = 0.5_),并在測試集上達(dá)到**97.86%的準(zhǔn)確率:**
這是迄今為止最好的結(jié)果?。?!
但是,看看訓(xùn)練集上的損失指標(biāo),0.0521,我們很有可能還有一些改進(jìn)的空間。未來,我們將執(zhí)行更多的訓(xùn)練次數(shù),我們會報告最新成果的。
結(jié)論
本文探討了如何將深度學(xué)習(xí)應(yīng)用于分類交通標(biāo)志,其中包含了各種預(yù)處理和歸一化技術(shù),以及嘗試了不同的模型架構(gòu)。我們的模型在測試集上達(dá)到了接近98%的準(zhǔn)確率,在驗證集上達(dá)到了99%的準(zhǔn)確率。
評論
查看更多