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