NVIDIA End-to-End 自動駕駛深度學習演算法
博文:End-to-End Deep Learning for Self-Driving Cars
論文:End-to-End Deep Learning for Self-Driving Cars
前言:在2016年8月份,英偉達發表了一個End-to-End 自動駕駛深度學習演算法。這個演算法使用卷積神經網路(CNNs)將汽車前攝像頭拍攝的圖片,對應到無人駕駛車的行駛方向上。因為是純卷積神經網路,不論是普通道路還是高速路,不論有道路標線還是沒有道路標線,這套演算法都適用。在上周,我也使用TensorFlow在一個汽車駕駛模擬器里復現了這個演算法,演算法確實非常優秀,識別率非常的高,我會在下一篇文章分享如何用TF重複這個演算法,並在模擬器里自動開車。本文將重點解讀這個演算法的設計思想。
使用卷積神經網路處理視覺數據
通常,設計一個基於圖像的無人駕駛車演算法,需要利用諸如opencv之類的工具,對圖像進行預處理,如識別道路標識,識別道路標線及方向,確定汽車在道路上的位置,如下圖所示:
這個處理過程需要大量的時間來測試和編寫代碼。
然而,卷積神經網路(CNNs)徹底改變了計算模式識別過程。在廣泛使用CNNs之前,大多數模式識別任務是使用類似上文所說的人工編寫的特徵提取加分類器實現的。 CNNs的重大突破是可以從訓練實例中可以自動學習特徵。
當應用於圖像識別任務時,CNNs方法特彆強大,因為卷積運算能夠捕獲圖像的2D特徵。通過使用卷積內核掃描整個圖像,相對於總操作數來說,只需要學習較少的參數。
雖然使用CNN學習已經商用了二十多年,但由於兩個重要的發展,近年來才出現了爆炸式增長。首先,大容量儲存變得廉價,諸如ImageNet大規模視覺識別挑戰(ILSVRC)等大標籤數據集現在可廣泛用於訓練和驗證。第二,CNNs學習演算法在大規模並行圖形處理單元(GPU)上實現,高性能圖形處理器也變得相對廉價,這兩個領域的發展極大地加速了CNNs的學習和推理能力。
網路架構
這個架構通過訓練權重來最小化網路輸出的方向角度與真人駕駛時的汽車方向角度的均方誤差。
卷積神經網路架構. 這個網路有大約 2700萬個連接和25萬個參數。
網路的第一層執行圖像歸一化。標準化器是硬編碼的,在學習過程中沒有調整。在網路中執行歸一化允許通過網路架構改變歸一化方案,並通過GPU處理加速。
卷積層被設計用來執行特徵提取。通過總結一系列的實驗得出的經驗,卷積層的配置被調整為,前三層中採用2×2步長,5×5內核的卷積層,在後兩層中採用以及3×3為內核大小的無步長卷積層,即strides=1,之後跟隨五個卷積層與三個全鏈接層,最終輸出轉彎角度。
全鏈接層被設計為用作轉向的控制器,但是通過端對端的系統訓練,NVIDIA提到他們注意到不可能完全分割網路中的特徵提取器部分與控制器部分。
訓練細節
訓練一個神經網路的第一步是選擇需要使用的幀。由於訓練的目的是使無人車準確的行駛在道路上,所以訓練數據也需要選擇汽車在正確駕駛的時候產生的數據。同時,採用一個較低的採樣率,如10FPS,因為過高的採樣率會導致數據的重複。為了消除直線駕駛的偏差,訓練數據應該包括較高比例的彎曲道路。
增加額外數據
選擇好訓練數據後,還需要添加人為的轉向,來指導訓練網路如何從不正常的駕駛位置恢復,如一不小心開出道路了如何開回去。這些人為的擾動應該隨機根據正太分布來選擇。數據分布應該具有零均值,同時標準偏差是人類標準的兩倍。需要同時注意,就如之前所說的一樣,人為的增加數據也會增加一些不必要的數據。
推薦閱讀:
※深入淺出Tensorflow(四):卷積神經網路
※利用TensorFlow搞定知乎驗證碼之《讓你找中文倒轉漢字》
※深入淺出Tensorflow(五):循環神經網路簡介
※cs20si:tensorflow for research 學習筆記2
TAG:TensorFlow | 无人驾驶车 | 人工智能 |