1. 程式人生 > >[work] DRL在自動駕駛中的應用

[work] DRL在自動駕駛中的應用

intro Nvidia在做自動駕駛的時候,思路和傳統思路果然有些差異。比如Google使用的是鐳射雷達+攝像頭+IMU+慣導系統+GPS等等。Nvidia做法是採取end2end的方法,就是直接從攝像頭的畫素->汽車的控制。就是把採集的圖片作為輸入,汽車的輪子的角度作為輸出。沒有了特徵提取,語義分析等等過程,直接指向最終要的輸出。這個思路很簡單,效果從視訊Nvidia自動駕駛視訊 上來看在雨天,雪天,無車道線環境下行駛還算是流暢。但是可以發現這裡的環境都是相對靜態環境,變數很小。如果是在城市中行駛,有紅綠燈、人群等等情況的時候,效果就不能保證了。

我覺得這個思路是比較新穎的,但是我覺得從安全性來看,以及面對更加複雜的狀況,以及更多的語義資訊需要加入其中,Nvidia做的顯然還有很遠的路要走。當然,Nvidia做這個對推廣其自家的Nvidia DevBox,Nvidia DRIVE PX有不小的推動作用。

我覺得在自動駕駛這個方面,使用深度增強學習可以有不錯的效果。然後再加上一些額外的硬體保障系統,加入地圖,IMU等等,那麼其效果或許可以媲美鐳射雷達吧。我感覺Nvidia的做法把自動駕駛弄得一下子不如以前那麼高大上了,看CMU和Standford在DARPA上的自動駕駛的車的論文就知道自動駕駛的坑很深。

其實Nvidia是使用CNN做的是車在路上走不撞車,之前為了實現這個,可能會進行車道線檢測、圖片分割、路徑規劃和控制。具體要往某個目的地走,它沒有涉及。

Implementation   以上這個系統叫做DAVE-2,DAVE其實是(DARPA Autonomous Vehicle的縮寫,無人車比賽最早就是DARPA搞出來的)。

整個系統採用的是三個攝像頭: 

圖片被送入CNN,然後計算可能的駕駛指令。然後把這個可能的指令和標記進行對比來更新CNN的權值(就是BP)。Nvidia使用的是Torch 7進行訓練。

那麼這裡有個trick,就是我們人類只輸入的是正確的樣本,那麼怎麼讓計算機面對錯誤的環境來做調整呢?很簡單的trick,在車上面再安裝兩個攝像頭,不過這兩個攝像頭的位置不在正中間,那麼這兩個攝像頭看到的樣本就是錯誤的。其他的偏移中間及旋轉則可以根據3d變化來模擬出來。那麼對應的偏移及旋轉的控制量也可以計算出來。這樣就有了一一對應的樣本了。那麼這裡我們也應該看到,輸出是很簡單的,就是汽車駕駛的輪子的角度。並沒有速度控制。這一定程度上大大簡化了訓練的要求。

當網路訓練好了以後,就是用中間的攝像頭的結果輸入到CNN進行計算輸出給汽車的命令。 

Data for Training 訓練資料一共有72個小時,每小時30f。包含了各種天氣和各種路況。這個資料集看來收集得還不錯。想要的同學點選這裡下載:資料下載

Network 訓練的網路的loss function是使用MSE。一共有9層,歸一化層+5層卷積+3層全連線。輸入的資料是YUV。 

在選取訓練資料的時候,會把有車道線的部分選上。然後每秒選擇10f,因為選太多會有很多重複。

對於車處於比較差的位置的時候,會人為地給它加入一些旋轉和偏移作為矯正。再做訓練。

Simulation 在真車上路之前需要進行軟體模擬。  整個模擬的框架如下: 

Test 測試方面,既有模擬器的測試和真車的測試兩部分。

Resource Nvidia的部落格: https://devblogs.nvidia.com/parallelforall/deep-learning-self-driving-cars/  論文: 論文下載  程式碼: 程式碼實現  別人的總結: http://blog.csdn.net/songrotek/article/details/51302515 ---------------------  作者:Snail_Walker  來源:CSDN  原文:https://blog.csdn.net/c602273091/article/details/53946217  版權宣告:本文為博主原創文章,轉載請附上博文連結!

之二:

前言 如果大家關注上個月Nvidia GTC,那麼大家應該會注意到Nvidia 老大黃仁勳介紹了他們自家的無人駕駛汽車,這個汽車的無人駕駛技術和以往的方法不一樣,完全採用神經網路。這個系統取名為DAVE。  NVIDIA GTC Self-Driving Car  上面的視訊需翻牆觀看。

很慶幸的是,就在上週,Nvidia發表了他們的文章來介紹這個工作:  http://arxiv.org/abs/1604.07316

雖然這個工作暫時和Reinforcement Learning沒有關係,但是相信他們會加上增強學習是這個無人車具備自主學習提升的能力。

Abstract 這個工作的思路可以說超級的簡單,就是使用人類的駕駛資料來訓練一個端到端的卷積神經網路CNN。輸入是車載攝像頭,輸出直接是汽車的控制資料。想來這個事情在以前恐怕是難以想象的,要知道當前最先進的自動駕駛系統依然是採用標誌識別,道路識別,行人車輛識別,路徑規劃。。。各種步驟來實現的。而現在這些通通不用,就給汽車一個影象,讓汽車根據影象做判斷。想想這是一個非常神奇的事情,雖然根據CNN的能力我們可以理解這是可以做到的。

那麼這件事大概當前也就Nvidia可以做,因為他們有最先進的硬體Nvidia DevBox,Nvidia DRIVE PX。

那麼通過訓練,他們在一定程度上取得了成功。結果很重要。訓練出來之後,這意味著在未來,隨著效能的提升,訓練的進一步強化,以及使用增強學習,未來的無人車將具備完全自己思考的能力。

DAVE-2 系統結構 這個系統叫做DAVE-2,DAVE其實是(DARPA Autonomous Vehicle的縮寫,無人車比賽最早就是DARPA搞出來的)。整個硬體系統如下: 

用三個攝像頭,通過NVIDIA DRIVE PX做輸入輸出。  軟體系統如下: 

那麼這裡有個trick,就是我們人類只輸入的是正確的樣本,那麼怎麼讓計算機面對錯誤的環境來做調整呢?很簡單的trick,在車上面再安裝兩個攝像頭,不過這兩個攝像頭的位置不在正中間,那麼這兩個攝像頭看到的樣本就是錯誤的。其他的偏移中間及旋轉則可以根據3d變化來模擬出來。那麼對應的偏移及旋轉的控制量也可以計算出來。這樣就有了一一對應的樣本了。

那麼這裡我們也應該看到,輸出是很簡單的,就是汽車駕駛的輪子的角度。並沒有速度控制。這一定程度上大大簡化了訓練的要求。

而對於訓練,那就是簡單的CNN-regression訓練。  訓練好之後,要forward就使用中間的攝像頭

訓練資料 72小時的人類資料。由於上面的多個攝像頭的資料,及科研進行3d變換得到的模擬資料,總的樣本將極其之大。

關於具體的網路結構還有訓練細節大家還是看原文比較好。基本上沒有大的trick。

小結 這個工作idea其實很簡單,關鍵是實現,完全是一個非常複雜的系統工程,需要一個大的團隊配合才能搞出來,和AlphaGo類似。這才是真正的智慧車啊。明年將舉行的Roborace想必將極大推進這方面的進展。 ---------------------  作者:songrotek  來源:CSDN  原文:https://blog.csdn.net/songrotek/article/details/51302515  版權宣告:本文為博主原創文章,轉載請附上博文連結!