天天看點

獨家專欄 | 如何利用深度學習搭建一個最簡單的無人駕駛系統

雷鋒網按:本文為雷鋒網獨家專欄,作者系佐思産研研究總監周彥武,雷鋒網(公衆号:雷鋒網)經授權釋出。

國内最牛的無人駕駛廠家的運算平台是這樣的:

一個英特爾至強

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,量産自然不能是這樣。

未來量産的無人駕駛運算平台可能會是什麼樣的?

可能是這樣的:未來汽車運算平台架構是一片 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。

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 級的無人駕駛。

本文作者:周彥武

繼續閱讀