車道線檢測、跟蹤的項目,主要是通過設(shè)置ROI(感興趣區(qū)域)、調(diào)試算法閾值,通過人為設(shè)定規(guī)則的方式實現(xiàn)車道線檢測。隨著人工智能技術(shù)的發(fā)展,近幾年在圖像處理領(lǐng)域越來越多地采用深度學(xué)習(xí)的方式進(jìn)行圖像中物體的識別。使用深度學(xué)習(xí)的方法識別圖像,不僅性能更為魯棒,而且相比于設(shè)定規(guī)則的方式,識別率更高。
正文
先通過一張簡單的圖,認(rèn)識工智能、機器學(xué)習(xí)和深度學(xué)習(xí)的關(guān)系。由圖可以看出深度學(xué)習(xí)是機器學(xué)習(xí)的一個分支,機器學(xué)習(xí)又是人工智能的一個分支。
人工智能最早可以追溯到上個世紀(jì)五十年代,受制于當(dāng)時的計算能力,人工智能技術(shù)并沒有得到很好地發(fā)展;直到上世紀(jì)八十年代,計算機算力的大幅提高,人工智能才得以蓬勃發(fā)展,繼而衍生出了機器學(xué)習(xí)技術(shù),機器學(xué)習(xí)的出現(xiàn),幫助人類解決了很多諸如垃圾郵件分類、房價估計等簡單問題,也輔助解決圖像識別等復(fù)雜問題,但準(zhǔn)確度未能達(dá)到預(yù)期。直到深度學(xué)習(xí)(通過的神經(jīng)網(wǎng)絡(luò)進(jìn)行機器學(xué)習(xí))技術(shù)的出現(xiàn)以及并行計算技術(shù)的加持,使得圖像識別等復(fù)雜問題的準(zhǔn)確度得到了大幅提升,一舉超越了人類識別的水平。越來越多的科學(xué)工作者、工程人員和資本投入到了深度學(xué)習(xí)領(lǐng)域。
人工智能主要是為了解決預(yù)測(回歸)和分類兩大問題。在生活中,預(yù)測的例子有很多,比如根據(jù)房屋面積等信息預(yù)測房屋的價格,或是根據(jù)前幾年的銷售額,預(yù)測今年的銷售額等。分類的問題也有很多,比如判定股票的漲跌,圖像中的物體(比如手寫數(shù)字、字母)的識別等。
認(rèn)識神經(jīng)網(wǎng)絡(luò)
提到神經(jīng)網(wǎng)絡(luò)時,我們總會看到如下由圓圈和線組成的網(wǎng)絡(luò),下面說一下這樣繪制的原因。
人類的神經(jīng)元通過多個樹突接收數(shù)據(jù),經(jīng)過處理后,將信號通過軸突發(fā)出,與上述結(jié)構(gòu)十分相似,因此我們搭建的網(wǎng)絡(luò)圖也被稱為神經(jīng)網(wǎng)絡(luò)。
圖片出處:優(yōu)達(dá)學(xué)城(Udacity)無人駕駛工程師學(xué)位
通過一個房價計算的例子,解釋一下這里的圓圈和線段。
在一個地區(qū),決定一個房子最直接因素就是房子的面積,面積越大,房子的價格就越高。
即房屋價格 = 房屋面積*每平方米房價。我們用兩個圓圈和一條線段可將這個關(guān)系表示為:
這是房屋價格最簡單的計算方法。
但是房屋價格還受到其他因素的影響,比如是是否裝修、家具等。
引入裝修和家具的支出,得房屋價格 = 房屋面積*每平方米房價 + 裝修面積 * 每平方米裝修 + 家具支出 * 1。最終的房屋價格組成的圖應(yīng)該如下所示:
這就組成了一個預(yù)測房屋價格的基本網(wǎng)絡(luò)。在這個網(wǎng)絡(luò)中房屋面積、裝修面積、家具支出是這個網(wǎng)絡(luò)的輸入,房價/平米、裝修/平米為這個網(wǎng)絡(luò)的參數(shù),線段代表的是這個參數(shù)的乘法運算,房屋價格為這個網(wǎng)絡(luò)的輸出。
我們將上面的網(wǎng)絡(luò)圖做一個抽象表達(dá),使其能夠應(yīng)用于除房價預(yù)測外的更多場景。如下所示:
對于這個簡單的網(wǎng)絡(luò)而言,x1、x2、b被稱作這個網(wǎng)絡(luò)的輸入,位于這一層的數(shù)據(jù)被稱為輸入層(Input Layer);w1、w2被稱作這個網(wǎng)絡(luò)的參數(shù);線段為參數(shù)的運算規(guī)則,這里既可以是四則運算,也可是復(fù)雜的函數(shù)運算;output為這個網(wǎng)絡(luò)的輸出,位于這一層數(shù)據(jù)被稱為輸出層(Output Layer)。
房價預(yù)測問題相對直觀、簡單,不需要太過復(fù)雜的網(wǎng)絡(luò)即可實現(xiàn)??梢坏┟鎸?fù)雜的問題(如圖像識別)時,無法通過簡單的線性網(wǎng)絡(luò)描述清楚,需要引入更多的參數(shù)和更為復(fù)雜的計算(比如sigmoid、relu等函數(shù))。就出現(xiàn)了這種需要包含隱藏層(hidden layers)的網(wǎng)絡(luò)。當(dāng)網(wǎng)絡(luò)越大時,整個網(wǎng)絡(luò)所包含的參數(shù)就越多,網(wǎng)絡(luò)也越復(fù)雜。網(wǎng)絡(luò)越復(fù)雜,神經(jīng)網(wǎng)絡(luò)中的參數(shù)越難解釋其作用,這就是深度神經(jīng)網(wǎng)絡(luò)被稱為“黑盒”的原因。
神經(jīng)網(wǎng)絡(luò)的參數(shù)
房價計算的神經(jīng)網(wǎng)絡(luò)搭建好后,我們就可以通過向網(wǎng)絡(luò)中輸入房屋面積、裝修面積、家具支出等信息,得到房屋的價格了。當(dāng)網(wǎng)絡(luò)的參數(shù)(房價/平米、裝修/平米)越準(zhǔn)確時,使用該模型預(yù)測得到的輸出(房屋價格)也將越準(zhǔn)確。因此合理的參數(shù)設(shè)置,決定著一個神經(jīng)網(wǎng)絡(luò)的好壞。
在深度學(xué)習(xí)技術(shù)普及前,神經(jīng)網(wǎng)絡(luò)的參數(shù),是根據(jù)開發(fā)者的經(jīng)驗設(shè)置的。再通過真實的數(shù)據(jù),帶入驗證,不斷微調(diào),使網(wǎng)絡(luò)預(yù)測出的值盡可能接近真實值,進(jìn)而得到越來越準(zhǔn)確的參數(shù)。這種人為設(shè)置參數(shù)的行為在淺層的神經(jīng)網(wǎng)絡(luò)中尚可行得通,一旦網(wǎng)絡(luò)參數(shù)達(dá)到千甚至上萬級別時,這種方法變得不再可行。
為解決深層神經(jīng)網(wǎng)絡(luò)的參數(shù)調(diào)試方法,深度學(xué)習(xí)領(lǐng)域的專家提出了反向傳播(Back propagation)理論。
數(shù)據(jù)由輸入層傳入,再經(jīng)過隱藏層的一系列計算得到結(jié)果,并由輸出層傳出的這個過程被稱為前向傳播(Forward propagation)。反向傳播的思路與前面提到的人為設(shè)置參數(shù)的方法類似,也是通過對比網(wǎng)絡(luò)預(yù)測值與真實值之間的差異,進(jìn)而微調(diào)網(wǎng)絡(luò)。
不過反向傳播的做法與人為設(shè)置參數(shù)有所不同,它需要計算預(yù)測值和真實的損失函數(shù)L,損失函數(shù)可以理解為預(yù)測值和真實值之間的差值,差值越大,損失函數(shù)越大。
完成預(yù)測值與真值的損失函數(shù)計算后,通過求取前向傳播參數(shù)的偏導(dǎo)的方法,將損失函數(shù)對參數(shù)的偏導(dǎo)傳遞到前一層網(wǎng)絡(luò),利用這個偏導(dǎo)與一個系數(shù)(學(xué)習(xí)率)的乘積更新網(wǎng)絡(luò)中的參數(shù)。隨后繼續(xù)傳播到更上一層的網(wǎng)絡(luò),直到網(wǎng)絡(luò)中所有的參數(shù)都被更新。
每有一組數(shù)據(jù),就可以利用反向傳播的方法進(jìn)行一次參數(shù)的更新,這就是深度學(xué)習(xí)網(wǎng)絡(luò)會隨著訓(xùn)練數(shù)據(jù)量的增大,變得越來越準(zhǔn)確的原因。
反向傳播的理論在優(yōu)達(dá)學(xué)城(Udacity)無人駕駛工程師學(xué)位的深度學(xué)習(xí)基礎(chǔ)課程中做了詳細(xì)的介紹,也可以參考CSDN的文章《一文弄懂神經(jīng)網(wǎng)絡(luò)中的反向傳播法》,該文使用了一個簡單的網(wǎng)絡(luò)一步步闡述了反向傳播的過程,淺顯易懂。
訓(xùn)練集、驗證集、測試集
在前面的介紹中,我一直使用數(shù)據(jù)一詞來表達(dá)神經(jīng)網(wǎng)絡(luò)的輸入。實際上這些數(shù)據(jù)在神經(jīng)網(wǎng)絡(luò)的不同階段有不同的稱呼。他們分別是訓(xùn)練集(Training Set)、驗證集(alidation Set)和測試集(Test Set)。
訓(xùn)練集和驗證集是在神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練階段使用的數(shù)據(jù),而測試集是在神經(jīng)網(wǎng)絡(luò)模型完成訓(xùn)練后,用于評估模型時所使用的數(shù)據(jù)。做一個簡單的比喻,訓(xùn)練集就是的學(xué)生的課本,學(xué)生需要根據(jù)課本來學(xué)習(xí)知識(訓(xùn)練模型);驗證集就是課后習(xí)題,學(xué)生通過課后習(xí)題來判斷自己是否掌握了課本上的知識;測試集就是期末考試(評估模型),期末考試的題一般是課本和課后習(xí)題中沒有,但是十分類似的題。
一個學(xué)生的成績好不好,看下他期末考的好不好就知道了。一個神經(jīng)網(wǎng)絡(luò)模型好不好,看看它在測試集中的表現(xiàn)就知道了。
深度學(xué)習(xí)領(lǐng)域比較出名的數(shù)據(jù)集當(dāng)屬MNIST手寫體數(shù)字?jǐn)?shù)據(jù)集了,它包含了60000個訓(xùn)練樣本和10000個測試樣本。部分樣本如下所示:
使用Google推出的深度學(xué)習(xí)框架TensorFlow,能夠直接獲取MNIST手寫體數(shù)字?jǐn)?shù)據(jù)集,代碼如下:
代碼中的train_features和test_features分別為訓(xùn)練集和測試集,即為手寫字體數(shù)字的圖片集合;train_labels和test_labels分別是訓(xùn)練集和測試集的圖像所對應(yīng)的標(biāo)簽,即0-9的數(shù)字集合。
MNIST數(shù)據(jù)集未提供驗證集,工程上一般會從訓(xùn)練集中取出15%~20%的數(shù)據(jù)作為驗證集,余下的80%~85%的數(shù)據(jù)作為訓(xùn)練集,用于完成訓(xùn)練過程。
使用LeNet-5做交通標(biāo)志牌分類
了解以上內(nèi)容后,就能大致理解神經(jīng)網(wǎng)絡(luò)的工作原理了。再補充一下TensorFlow的語法知識、看幾個TensorFlow的例子,就可以自己動手搭建神經(jīng)網(wǎng)絡(luò)了。
如果面對復(fù)雜的圖像處理問題,需要使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)。卷積神經(jīng)網(wǎng)絡(luò)是由卷積神經(jīng)網(wǎng)絡(luò)之父Yann Lecun在貝爾實驗室工作期間,為解決手寫數(shù)字識別而提出的。卷積是一個特殊的函數(shù),其在神經(jīng)網(wǎng)絡(luò)中的定位與四則遠(yuǎn)算或某些特殊函數(shù)的地位沒有區(qū)別。
下面我們通過導(dǎo)入交通標(biāo)志牌的訓(xùn)練集,使用卷積神經(jīng)網(wǎng)絡(luò)之父Yann Lecun提出的LeNet模型,訓(xùn)練一個能識別交通標(biāo)志的神經(jīng)網(wǎng)絡(luò)。
首先導(dǎo)入交通標(biāo)志牌的數(shù)據(jù)。優(yōu)達(dá)學(xué)城(Udacity)無人駕駛工程師學(xué)位為我們提供了34799張圖組成的數(shù)據(jù)集、4410張圖組成的驗證集和12630張圖組成的測試。這些數(shù)據(jù)集一共包含了43種不同的標(biāo)志牌,比如限速、轉(zhuǎn)向、停車標(biāo)志牌。部分訓(xùn)練集的樣本如下圖所示:
由于LeNet-5默認(rèn)需要輸入尺寸為(32 x 32 x 1)的單通道的圖像,因此我將訓(xùn)練集、驗證集和測試集都進(jìn)行灰度、縮放和歸一化處理。處理后的部分樣本如下:
LeNet-5是一個不太復(fù)雜的卷積神經(jīng)網(wǎng)絡(luò),下圖顯示了其結(jié)構(gòu)。網(wǎng)絡(luò)輸入的是單通道的二維圖像,先經(jīng)過兩次卷積層到池化層,再經(jīng)過全連接層,最后使用softmax分類作為輸出層。
圖片出處:優(yōu)達(dá)學(xué)城(Udacity)無人駕駛工程師學(xué)位
有關(guān)LeNet-5模型更詳細(xì)介紹可以搜索文章《網(wǎng)絡(luò)解析(一):LeNet-5詳解》
在訓(xùn)練時會出現(xiàn)一個問題:訓(xùn)練集的準(zhǔn)確率很高,但是驗證集的準(zhǔn)確率上不去。這表明模型訓(xùn)練時過擬合了,導(dǎo)致驗證集只能達(dá)到89%左右的識別率,而課程的要求是達(dá)到93%以上。
為了解決模型過擬合導(dǎo)致的模型準(zhǔn)確率低的問題,我做了兩件事:
使用imgaug庫做數(shù)據(jù)增廣
使用imgaug庫能夠通過很簡單的代碼完成圖像的翻轉(zhuǎn)、平移、旋轉(zhuǎn)、縮放、仿射變換、加噪聲、修改顏色通道等功能。以實現(xiàn)數(shù)據(jù)庫的增廣,達(dá)到豐富訓(xùn)練集的目的。下圖是imgaug庫對同一張圖片實現(xiàn)的數(shù)據(jù)增廣的效果。
圖片出處:https://github.com/aleju/imgaug
我對交通標(biāo)志牌訓(xùn)練集添加隨機噪聲、修改對比度和橫向翻轉(zhuǎn)操作,完成了數(shù)據(jù)集增廣。
在LeNet-5模型的全連接層后加入了Dropout函數(shù)
在LeNet-5網(wǎng)絡(luò)中加入Dropout函數(shù),能夠讓網(wǎng)絡(luò)不會太依賴某些參數(shù),因為這些參數(shù)隨時可能被丟棄掉。在訓(xùn)練時,網(wǎng)絡(luò)會被迫地學(xué)習(xí)一切的冗余表示,以確保至少將某些重要信息保存下來。當(dāng)網(wǎng)絡(luò)中的某個參數(shù)被丟棄時,還有其他參數(shù)能夠完成相同的工作,這就是Dropout的功能。
在網(wǎng)絡(luò)中加入Dropout函數(shù)的方式可以使得網(wǎng)絡(luò)更加穩(wěn)固,并能防止過擬合。
應(yīng)用數(shù)據(jù)增廣和Dropout函數(shù)后,重新訓(xùn)練即可使模型在測試集中的準(zhǔn)確率超過93%,達(dá)到要求。
結(jié)語
以上就是《深度學(xué)習(xí)入門之交通標(biāo)志分類》的全部內(nèi)容。文中的部分源碼、圖片和數(shù)據(jù)集來自優(yōu)達(dá)學(xué)城(Udacity)無人駕駛工程師學(xué)位的第三個項目。
在這次分享中,我介紹了深度學(xué)習(xí)中所涉及的有關(guān)神經(jīng)網(wǎng)絡(luò)的理論知識。包括神經(jīng)網(wǎng)絡(luò)中的參數(shù),反向傳播原理,訓(xùn)練集、驗證集和測試集的區(qū)別。在正文的最后介紹了如何利用LeNet-5網(wǎng)絡(luò)實現(xiàn)交通標(biāo)志牌的分類工作,當(dāng)分類效果不理想時,分析原因并提供了解決方案。
在無人駕駛領(lǐng)域,深度學(xué)習(xí)除了用于識別圖像中的物體外,還在激光點云分類障礙物、障礙物的軌跡預(yù)測、端到端的運動控制等領(lǐng)域得到了廣泛應(yīng)用。為現(xiàn)階段無人駕駛技術(shù)的發(fā)展提供了巨大的幫助。掌握深度學(xué)習(xí)的理論知識和應(yīng)用方法能夠幫助我們解決無人駕駛領(lǐng)域很多棘手的問題。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4777瀏覽量
100977 -
人工智能
+關(guān)注
關(guān)注
1793文章
47535瀏覽量
239368 -
無人駕駛
+關(guān)注
關(guān)注
98文章
4083瀏覽量
120735 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5511瀏覽量
121362
原文標(biāo)題:無人駕駛技術(shù)入門——初識深度學(xué)習(xí)之交通標(biāo)志分類
文章出處:【微信號:IV_Technology,微信公眾號:智車科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論