搭建自動駕駛汽車(1)-複製人的駕駛行為

搭建自動駕駛汽車(1)-複製人的駕駛行為

[源自Medium]

本文我們將介紹用卷積神經網絡(Convolution Neural Networks,CNNs)複製人的駕駛行為的方法,CNN作為計算機視覺中最應用最廣泛的技術,也可以解決無人駕駛中遇到的"我的前面到底直行道路還是轉彎道路的問題"。

簡介

本項目主要介紹如何應用深度學習原理有效地教汽車在模擬器中自主駕駛。模擬器包括訓練和自主(測試)模式。在訓練模式中,你需要用你的駕駛技能在賽道上駕駛汽車,並收集訓練你的網絡(CNN)所需的數據。網絡從你的駕駛行為中學習,即何時轉向和何時前進。在完成學習/訓練之後,我們需要將模型保存在一個文件中,模擬器將使用該文件在自主模式下測試自動駕駛。

我對這個項目的解決方案受到了LeNet、Nvidia和COMMA.AI深入學習行為克隆架構的影響。我還使用Keras深度學習庫,它使用TysFROW作為後端,來創建我的模型。

推導模型架構的總體策略是保持汽車在道路中心行駛。

我的第一步是使用類似於LeNET體系結構的卷積神經網絡模型。我認為這個模型可能是合適的,因為它是一個強大的和第一個成功的圖像識別模型。

實現方案

這個項目的解決方案受到了LeNet、Nvidia和comma.ai深度學習行為克隆架構的影響,使用Keras深度學習庫創建自動駕駛的模型。

自動駕駛模型架構的總體策略是保持汽車在道路中心行駛。

第一步是使用類似於LeNET體系結構的卷積神經網絡模型。我認為這個模型可能是合適的,因為它是一個強大的和第一個成功的圖像識別模型。

為了測量模型工作的好壞,我將圖像和轉向角度數據分割成訓練集和驗證集。我發現,我的第一個模型在訓練集上具有高的均方誤差(MSE)。為了減少MSE,我輸入圖像做了歸一化處理,經過5個階段的疊代訓練,MSE較低,但結果仍不理想。

然後我嘗試了Nvidia結構。在這個架構中,我裁剪並縮小了輸入圖像使模型能夠更快地學習。但是在這個體系結構中,我在訓練集上得到了一個低的MSE,但是在驗證集上得到了高的MSE。這代表著該模型過於擬合。因此,為了克服過度擬合,我通過去除一些卷積層和完全連接的層來修改模型。經過3個階段的訓練和改進,最終得到0.0146%的訓練損失和0.0117%的驗證損失。

創建訓練集和驗證集

為了捕獲好的駕駛行為數據集,我先沿著lane的中心線採集了兩圈數據,下圖是車道中心線採集的圖像。

也可以解決無人駕駛中遇到的"我的前面到底直行道路還是轉彎道路的問題"。

然後我在模擬器上試用模型來檢驗賽車在跑道上行駛的效果,有幾處車輛從軌道上掉下來,為了改善這些情況下的駕駛行為,我通過翻轉中心相機拍攝的圖像來增強數據,在訓練集中添加從左右相機拍攝的圖像,並對轉向角進行校正+-0.20度的矯正。

另外,我記錄了一些從道路的左側和右側恢復到中心的車輛圖像,這樣車輛就能夠在急轉彎時保持在道路的中間。

Ns)複製人的駕駛行為的方法,CNN作為計算機視覺中最應用最廣泛的技術,

在收集完成之後,我有25712個數據點。然後通過將配色方案從BGR轉換為RGB(因為cv2讀取的圖像格式是BGR,而模擬器使用RGB格式的圖像)來預處理這些數據。然後我裁剪並重新縮放圖像以獲得最終圖像形狀為32X80X3。這有助於更快地訓練我的模型。

最後,我隨機地將數據集洗牌,並將20%的數據放入驗證集,並將其放在訓練集中。

然後,我用這個訓練數據來訓練模型。驗證集有助於確定模型是否已過擬合或者欠擬合。理想的是三代以後,模型開始在0.014%訓練損失附近振盪。此外,我使用Adam優化器,所以手動訓練學習率是不必要的。

最終的模型結構

最終的模型由兩個卷積神經網絡層組成,每個濾波器的大小分別為5x5,深度分別為24和32。在兩個卷積層之後,我也做了MaxPooling。該模型包括引入非線性的RELU激活函數,並在模型中使用Keras Lambda層對數據進行歸一化。該模型將最後卷積層的輸出平坦化,然後通過大小為32、16和1的3個密集層分別將輸出平坦化。

積神經網絡(ConvolutionNeuralNetworks,CN

  • Convolution Layer 1: 5x5 with 24 filters
  • Convolution Layer 2: 5x5 with 32 filters
  • Fully Connected Layer 1
  • Fully Connected Layer 2
  • Fully Connected Layer 3
  • Output Layer

儘量減少模型的過擬合

模型包含了兩個dropout層來減少過擬合。該模型在不同的數據集上進行訓練和驗證以確保模型不過度擬合。我使用sklearn庫將數據集分成兩部分,一部分用於訓練,另一部分用於驗證。最後通過模擬器驗證確保車輛應保持在軌道上。

模型參數調整

該模型使用Adam optimizer,因此學習速率不需要手動調節。

結果

在幾個晚上沒有任何進展之後,令人驚喜的結果出現了。下面是測試的模型結果。我很驚訝賽車在軌道上行駛得有多好,它成功地從一些危急情況中恢復過來,儘管在訓練期間沒有進行過這些動作。

[源自Medium]本文我們將介紹用卷

在每一幀中模擬器在後端將中心相機圖像發送到模型以獲得實時轉向角。

Github項目地址:https://github.com/asuri2/CarND-Behavioral-Cloning-P3

聲明:文章觀點僅代表作者本人,PTTZH僅提供信息發布平台存儲空間服務。
喔!快樂的時光竟然這麼快就過⋯
繼續其他精彩內容吧!
more