獨家專欄 | 如何利用深度學習搭建一個最簡單的無人駕駛係統
雷鋒網按:本文為雷鋒網獨家專欄,作者係佐思產研研究總監周彥武,雷鋒網(公眾號:雷鋒網)經授權發布。
國內最牛的無人駕駛廠家的運算平台是這樣的:
一個英特爾至強 E5 的 CPU,擁有 12 內核,30MB 的二級緩存,運算能力為 400GOPS/s,功率消耗為 400 瓦(應該是第一代至強 E5,目前 E5 最高功率消耗都不超過 180 瓦),八個英偉達的 K80 GPU,每一個 K80 的運算能力為 8TOPS/s,通過 PCI-E 連接,每一個 K80 的功率消耗為 300 瓦,合計是 2800 瓦的功率,取得 64.4 TOPS/s 的運算能力。
和 Waymo 的車一樣,需要一個備份係統,當然這個備份係統處於待機狀態,功耗可能不到 500 瓦,但是為了有足夠的冗餘,同時還要考慮到傳感器的功率消耗(傳感器功率一般都很低,即便是 Velodyne 的 HDL-64E,典型功耗僅 60 瓦),整體係統的功率設計為 5000 瓦,原車的電源係統當然不行,需要一個發電機,或者雙電瓶設計。這一套係統價格大約 3 萬美元。
這樣的設計隻能用於 Demo,量產自然不能是這樣。
FPGA、CPU 與 GPU
未來量產的無人駕駛運算平台可能會是什麼樣的?
可能是這樣的:未來汽車運算平台架構是一片 CPU 或者說 SoC, 對應大部分控製和運算量不大但邏輯關聯比較多的運算,一片 FPGA 或 GPU 做加速,對應運算量很大,但內部幾乎沒有邏輯關聯的運算,例如車輛識別算法,行人識別算法,車道線識別算法。
再加一片安全控製 MCU,通常是英飛淩的 Aurix 係列 MCU,使整體係統達到 ASIL D 級安全等級。即便是這樣的係統,其功耗最少也在 500 瓦以上。
以英特爾的 Go 最為典型(如上圖),Waymo 用 FCA 改造的無人車很有可能使用了類似的運算平台。
上圖為英偉達 Drive PX2
PX2 與英特爾 Go 基本上如出一轍,隻不過用 GPU 取代了 FPGA。FPGA 作為一種高性能、低功耗的可編程芯片,可以根據客戶定製來做針對性的算法設計。
所以在處理海量數據的時候,FPGA 相比於 CPU 和 GPU,優勢在於:FPGA 計算效率更高,FPGA 更接近 I/O。FPGA 不采用指令和軟件,是軟硬件合一的器件。
對 FPGA 進行編程要使用硬件描述語言,硬件描述語言描述的邏輯可以直接被編譯為晶體管電路的組合。所以 FPGA 實際上直接用晶體管電路實現用戶的算法,沒有通過指令係統的翻譯。
FPGA 是由查找表(LUT)和觸發器來構成,LUT 的物理結構就相當於一個 SRAM,運行狀態就像 ROM,通過輸入的值決定輸出的值。假設在 FPGA 中要實現一個 2 輸入的與門,那麼該與門的輸入輸出對應關係為:
既然有了此對應邏輯關係,那麼在 SRAM 對應的地址中隻需存儲相應的輸出數值,而輸入數值作為地址來查表即可得到正確的輸出值即可。
當輸入地址為 0,0 時,輸出 0 地址裏存儲的值 0,當輸入地址為 0,1 時,輸出 1 地址裏存儲的值 0,當輸入地址為 1,0 時,輸出 2 地址裏存儲的值 0,當輸入地址為 1,1 時,輸出 3 地址裏存儲的值 1。
某種意義上講,FPGA 是不計算的,它隻是個存儲器,對邏輯組合電路,先預先存儲不同輸入對應的輸出組合,然後根據輸入數據,選擇對應的輸出。這就決定了 FPGA 擁有無論倫比的速度和低功耗。但是 FPGA 沒有 CPU 和 GPU 的取指令和指令譯碼能力,這就注定無法單獨使用,通常會加一個 ARM 內核的 CPU 來處理比較簡單的指令,這樣的 FPGA 叫 SoC FPGA。
這樣一來,FPGA 的適用麵廣了,但是性能肯定要下降。盡管如此,還是比 CPU 和 GPU 的效率要高不少。
GPU 是 GPU 把晶體管更多用於計算單元,而不像 CPU 用於數據 Cache 和流程控製器。這樣的設計是因為並行計算時每個數據單元執行相同程序,不需要繁瑣的流程控製而更需要高計算能力,因此也不需要大的 cache 容量。
GPU 中一個邏輯控製單元對應多個計算單元,同時要想計算單元充分並行起來,邏輯控製必然不會太複雜,太複雜的邏輯控製無法發揮計算單元的並行度,例如過多的 if…else if…else if… 分支計算就無法提高計算單元的並行度,所以在 GPU 中邏輯控製單元也就不需要能夠快速處理複雜控製。
所以 GPU 適合空間域的數據處理,數據之間缺乏時間順序上的邏輯關聯,數據的獨立性強,圖像是最適合 GPU 處理的,FPGA 並不占優勢,而視頻之間的語義關聯則不適合 GPU,比如行人過馬路這個視頻,要根據前後視頻關聯來分析行人是要停下來還是加速通過,這種深度學習應用,FPGA 比 GPU 更合適。
而行人識別,車道線識別,GPU 更適合。同理,語音識別也是如此,要知道上下文語義關聯,FPGA 就比 GPU 更合適。
也就是說, FPGA 更適合 RNN 和 LSTM,GPU 更適合 CNN。LSTM 可以看成 RNN 的變種,比 RNN 多了 memory cell 和 forget gate,語音信號又是一種上下文相關的長時相關性時序信號,所以 LSTM 做語音識別精讀最高。微軟 IBM 阿裏采用的都是 LSTM。
LTSM 與無人駕駛
LSTM 和無人車有什麼聯係?這就是目前最火的深度學習與無人車的結合。傳統的無人車使用大量的傳感器和柵格法來做環境感知和決策,這種方法成本太高了。
於是就有人想出了利用深度學習來學習人類駕駛習慣的方法,隻用一個不到 10 美元的消費級攝像頭做傳感器,用深度學習代替柵格法,這就是百度所說的 Road Hackers。
Road Hackers 是百度的自動駕駛開放平台,是可在真實道路上實現端到端模式的高級自動駕駛模型。
Road Hackers 平台首期將開放 1 萬公裏自動駕駛訓練數據,並已具備提供海量中國路情駕駛數據開放,基於深度學習的自動駕駛算法演示,以及自動駕駛算法 Benchmark 評比等能力。
CES Asia 上的路測車輛采用 Road Hackers 平台技術,集成有全國首例基於單攝像頭的端到端深度學習自動駕駛解決方案。
紅色的線代表方向盤轉向的角度。綠色的線代表用算法預測出的司機對方向盤的轉動。從紅綠兩條線的趨勢可以看出,收斂的趨勢越來越明顯。以前隻是用了 CNN 的算法,造成對橫向控製(體現在方向盤轉動角度)的預測越來越好,但對縱向控製(體現在加減速)的預測做得不好。LSTM 就派上用場。
與百度類似,George Hotz 創辦的 Comma.ai 也使用了類似的方法,並且在 2016 年 8 月公布了源代碼,人人都可以下載研究。
簡單解釋一下 LSTM 的工作原理。LSTM 區別於 RNN 的地方,主要就在於它在算法中加入了一個判斷信息有用與否的」處理器「,這個處理器作用的結構被稱為 cell。
LSTM,所謂長短期記憶網絡,就是來區分哪些記憶要歸位長期記憶,哪些記憶隻需要短期儲存。
(LSTM 的內部處理器和三重門)
一個 cell 當中被放置了三扇門,分別叫做輸入門、遺忘門和輸出門。一個信息進入 LSTM 的網絡當中,可以根據規則來判斷是否有用。隻有符合算法認證的信息才會留下,不符的信息則通過遺忘門被遺忘。說起來無非就是一進二出的工作原理,卻可以在反複運算下解決神經網絡中長期存在的大問題。
目前已經證明,LSTM 是解決長序依賴問題的有效技術,並且這種技術的普適性非常高,導致帶來的可能性變化非常多。各研究者根據 LSTM 紛紛提出了自己的變量版本,這就讓 LSTM 可以處理千變萬化的垂直問題。這就像人類的學習過程,不斷地重複正確的選擇,直到形成牢固的記憶。
而 FPGA 實質上就是一種特殊的記憶體,所以 LSTM 更適合用 FPGA 來實現。
當然,這種隻靠一個攝像頭的無人駕駛顯然極不靠譜。
首先,光線對攝像頭影響太大,光線的變化是不可控的,是隨機的,永遠不會完全一致,這對本來就是黑盒的深度學習來說是個災難。
其次,目前大多是基於單目的深度學習,單目在目標距離判斷上是靠像素大小來估測的,無法得到深度信息,距離估測的準確性很低,尤其在高低起伏的路麵,例如重慶和貴陽的道路或立交橋,單目所估測的距離可能 50% 都是錯誤的。
再次,攝像頭的 FOV 與探測距離之間是矛盾的,FOV 越窄,距離就越遠,但是車輛周圍就會出現盲區,這是很容易出事故的,FOV 越寬,距離就越近,同時超過 70 度的廣角會出現失真。即使三目攝像頭也無法完全解決問題。
最後,低照度情況下肯定不能用。不過這是一種低成本的嚐試,仍然值得讚揚。這種方法可以做 L2 或 L3 級的無人駕駛。
本文作者:周彥武
本文轉自雷鋒網禁止二次轉載,原文鏈接
最後更新:2017-11-06 15:35:38