當前位置:
首頁 > 新聞 > 專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

機器之心專欄

作者:楊付收


本文作者為雪湖科技創始合伙人楊付收,文章主要討論了自動駕駛最主要的感知部分:機器視覺,以攝像頭為主的計算機視覺解決方案,為汽車加上「眼睛」,從而有效識別周邊環境及物體屬性。

萬馬嘶鳴風雲際,感知為王路先行

當今的自動駕駛行業是一個百舸爭流的局面,總體來看,還是西方引導東方的探索摸索,以 google 為主的以激光雷達為主的流派和以 Tesla 為主的機器視覺流派引導了整個市場。從發展趨勢來看,兩種方法正在進一步融合,最終會各取優勢而相互補充發展。對整個自動駕駛領域,其核心技術是個擬人化的實現過程,即:感知->認知->決策->控制->執行五部分。感知,是所有智能體所要擁有的基本屬性,自動駕駛要解決的第一個問題,就是汽車的感知系統,AI 演算法的核心就是要解決感知問題。汽車的感知系統是多種感測器融合的系統。

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 1 自動駕駛技術框架圖 來源:億歐智庫

如上圖所示,多感測器融合共同組成自動駕駛的感知層已經成為行業共識,這是一個複雜的技術體系,本文主要討論最主要的感知部分:機器視覺,以攝像頭為主的計算機視覺解決方案,為汽車加上「眼睛」,能有效識別周邊環境及物體屬性。隨著 AI 演算法的蓬勃發展, 機器視覺由基於規則向基於 CNN 神經網路轉變。

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 2 汽車感測器示意圖 來源:億歐智庫

國內的主要發展方向集中在視覺上的突破,一種原因是激光雷達和毫米波雷達被國外幾個大公司控制,核心技術短期內難以突破,成本居高不下。而做機器視覺, 則成本低廉,且容易上手,國內攝像頭的供應鏈很完善,所以在這種情況下,國內廠商更傾向於 CNN 網路的機器視覺能做更多的事情,其實這種選擇是正確的,國內廠商突破的最好的一個點就是視覺突破,視覺方案相對成熟和完善,可以利用國內的一些特點,找到差異化競爭的突破口,快速形成優勢,再逐步迭代更新技術。如開車時任意變道的行為,這個國外的汽車檢測方式是等尾部進入車道內再進行檢測,這明顯不符合國情,所以演算法本土化,解決國人開車遇到的問題,就是差異化競爭,這也更需要對演算法有自己的把控能力。

車載系統對 CNN 網路的目標檢測識別的要求是很高的,而且越高越好,這不僅僅是為了檢測車道和障礙物,還會在自動駕駛中的另一個必不可少的條件:高精度地圖上有巨大的利用空間。因為傳統的地圖模式無法滿足自動駕駛的需求,它需要更多的維度信息,更新更及時,精度達到厘米級。精度要想達到厘米級,僅僅依靠衛星是遠遠不夠的,目前兩個解決方案,一個是 RTK 方案,即在地面上建立大量的基準站,由基準站來彌補 GNSS 定位的不足,這個方案精準,但卻很貴。另外一個方案就是先將地圖上的多維度信息保存到資料庫,然後通過車載上的多感測器(攝像頭,雷達)所獲取到的特徵信息和資料庫進行匹配,從而修正和彌補定位的精度問題,毫無疑問,這個方案更加實用和快速部署。國內地圖公司更傾向於用這種方式,這就更加要求攝像頭檢測物體特徵精準度的問題了。

由演算法的精度問題,不得不提演算法的實現晶元方案,現在的精度最好的演算法還是基於 CNN 的 AI 演算法模型,CNN 演算法要求的計算量是很大的,目前很多廠商都是直接用 nvidia 的 TX2 做為運算主要載體,在 TX2 上運行對 GPU 友好的演算法,這裡其實有個誤區,當演算法對 GPU 不友好時,就直接宣判了該演算法的死刑,這樣操作是不合理的,GPU 成了前進路上的一個拐杖,拐杖用的多了就產生了依賴性,反而喪失了發現更多空間的創造性,我們用兩條腿走路,還是要回歸到問題的本質,根據問題的具體需求來尋求最優的解決方案。自動駕駛車載系統的基本要求低延時低功耗 以及演算法的複雜性和多變性,決定了用 FPGA 做車載加速方案是一個理想的選擇。用 FPGA 做加速方案的另外一個不可忽視的好處是:成本可以做的很低。

所以機器視覺的好的方案已經不單單是好的演算法,而是一個在合理的硬體成本里得到一個最優演算法的求解問題。由演算法來保證識別精度,由硬體來保證演算法的實現速度,由成本來保證兩者都需要性價比最優的搭配,這才是正確的解決思路。當然,想同時實現上述幾點,並非易事。路,要一步一步的走,坑,要一個一個的趟,我們上述的問題一個一個的分析。

演算法同源不同行,孰高孰低檢測忙

在整個 AI 演算法的大環境下,車載視覺系統的演算法也是基於 CNN 的分割演算法,這就引出目前主要的兩個演算法 Faster RCNN 系列和 yolo 系列,兩者各有千秋,前者精度更准,後者速度更快。前者是 two-stage 的方案,即先用最好的網路來找出特徵值,然後再調整框來檢測目標。後者是 one-stage 的方案,即找特徵值和畫框在一個網路里完成。

通俗的理解,Faster RCNN 更符合人類「強強聯合」的概念,即:找出目前性能最好的網路,然後再組裝成一起,產生更優的效果,它是基於多網路融合的方案,所以它的特點就很明確:算的准,但是算的慢。yolo 的誕生,恰恰是解決了這個問題,yolo 的最大的特點就是快到沒朋友,但在精度方面卻遜色於 Faster RCNN。

數據對比:

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 3 Faster R-CNN 是精度最高的 來源:網路

COCO 數據集上,前 10 名中有 9 項都是來自於 Faster R-CNN 的變體。

這兩種方法都有很多變體,one-stage 的方法在精度上不斷想與 two-stage 的方法抗衡,two-stage 不斷的在加快計算速度,但在數據集上的結論以及越來越快的 Faster R-CNN 變體的可以說明,Faster R-CNN 的 檢測精度始終保持領先。但在速度上,yolo 是遙遙領先的。

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 4 yolo 的速度是最快的 來源:網路

正是 Yolo 在速度上明顯提高,YOLO 的確受到車載系統的青睞,Yolo 真的是車載系統的首選嗎?答案未必,正如上文所述,Faster RCNN 的精度是最好的,如果能將其速度也提上去,豈不是更好的選擇。

為此,我們先分析下 Faster RCNN 精度高的原因:

首先,前景背景分離的區別。Faster RCNN 是有前景背景分離的。這會要求在訓練該網路時需要進行正負樣本都要訓練,也就是說正確的範疇我要負責,錯誤的範疇我也要負責。這會大大減少誤檢率的概率,所以 Faster RCNN 的查全率(recall)會特別的高。

而 yolo 則沒有這樣的演算法結構,它只有正樣本訓練,不會區分前景和背景的區別。其實這一點是對自動駕駛不太友好的,例如之前 Tesla 的自動駕駛事故就是因為檢測演算法沒有區分前景和背景,將迎面開來的白色卡車和背景中的白雲混為一體,從而導致事故發生。

其次,畫框方式的區別。Faster RCNN 和畫框的方式和 yolo 是不一樣的,yolo 是將框的問題作為一個聚類問題解決,由演算法去自適應物體形狀。而 Faster RCNN 是按照一定規則的框去逼近物體形狀。如下圖所示,9 個矩形共有 3 種形狀,長寬比為大約為(1:2,1:1,2:1)三種,通過 anchors 就引入了檢測中常用到的多尺度方法。

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 5 框的類型 來源:網路

這種人為定義的框的結構更能精準的標定物體,當然,任何優勢都是有代價的。Faster RCNN 為每一個點都配備這 9 種 anchors 作為初始的檢測框,所以在原始圖上,anchors 的個數特別多,然後讓 cnn 來判斷哪些是有目標的前景,哪些是沒有目標的背景,然後再對目標 anchors 進行排序和 NMS(非最大值抑制),即能得到最好的效果。能量是守恆的,當獲得優勢 A 時,並將付出 B 的代價,關鍵看代價是什麼。feature map 每個點設置 9 個 Anchor,所以他的 anchor 是很多的,如下圖所示(網路截圖):

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 6 anchor 的框圖 來源:網路

當然,好處也是很明顯的,舉個例子,如下圖:

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 7 框的平移轉換示意圖 來源:網路

每個 Anchor 的平移量和變換尺度,顯然即可用來修正 Anchor 位置了。紅色為提取的 foreground anchors,即便紅色的框被分類器識別為飛機,但是由於紅色的框定位不準,這張圖相當於沒有正確的檢測出飛機,每個 Anchor 的平移量和變換尺度,即可用來修正 Anchor 位置了,表現結果即是由只標出主體的紅框轉換為標記更準的綠框,顯然,綠框的精度更准。

相對來說,Yolo 系列不區分前景和背景,畫框的方式也是做一個回歸的問題,這會對密集的目標的畫框方式導致不準,yolo 會把密集的目標會畫成一個框。

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 8 yolo 密集目標檢測 來源:雪湖實測

除了精度高之外,能做多網融合是 Faster RCNN 的另外一個很重要的特點。特別對於車載系統,由於現實的複製性和應用的廣泛性,經常會需要添加不同的網路和良好的性能,如增加車道檢測等,可以將不同的網路通過 interp(雙線性插值)層來進行實現不同網路之間的平滑過渡。

利用這個特點,我們可以做很多啟發性的探索,前面提到,多感測器融合來構建自動駕駛的感知層是行業共識,如激光雷達在自動駕駛中是個很核心的感測器,有沒有將激光雷達和視覺同時融合到一個網路中的方案呢?有人提出這樣的方案,如下:

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 9 用 FasterRCNN 來融合激光雷達和視覺演算法 來源:網路

上圖的方案,總體上沿用了 Faster RCNN 的檢測框架,但是在輸入、proposal 的形式以及 Faster RCNN 網路上做了較大的改動,以實現視覺與激光點雲的信息融合。

這個網路給了我們很大的啟示,多感測器融合方案框架是自動駕駛的必備技能,我們必然要考慮不同的感測器的特性和適應該感測器的演算法結構,然後將多種演算法結構融合到一個演算法框架中來,而 Faster RCNN 網路本身就是基於多網路融合的方案製成的,所以用 Faster RCNN 來做車載系統有其兼容多感測器方案的巨大優勢。

既然 Faster RCNN 這麼多的好處,為什麼用的人少呢?主要原因就是算的慢,如下圖所示

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 10 FasterRCNN 在 TX2 上的運行結果 來源:雪湖實測

由上面圖表可以看出,Faster RCNN 在 TX2 的運行結果是非常慢的。演算法慢,便無解了嗎?未必。因為這裡所謂的慢,是針對 GPU 而言的,是因為演算法對 GPU 不友好導致的結果,而對 GPU 不友好,未必對其他異構計算平台不友好,事實證明,這恰恰是 FPGA 的優勢所在。

安能得來偷天技?兼顧精度與速度

在 GPU 運行慢的網路,可以在 FPGA 上進行加速實現。而要想提高速度,就要對網路進行具體分析,是哪些層運算速度慢以及慢的原因在哪裡?

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 11 Faster RCNN 的框架圖 來源:網路

如上圖所示,前半部分是基礎網路來提取特徵值,後半部分在畫框,RPN 網路負責前景背景分離,排序演算法負責篩選,最後全連接輸出結果。

總體運行結果,進一步分析每層的耗時:

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 12 Faster RCNN 在 gpu 中每層的耗時 來源:雪湖實測

關鍵層 interp 層的分析:

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 13 Interp 層分析 來源:雪湖實測

通過圖 12 的分析結果我們得出結論,耗時最長的都集中在了 proposal(排序)及以後的層(FC 層)。通過圖 13 Interp 層(雙線性插值)的分析,我們也得出結論,GPU 對 Interp 層的加速有限,速度沒有 CPU 的運算快。通過這些數據的分析,我們就能很明白的知道 GPU 的優勢和劣勢在哪裡,GPU 的優勢在於能重複數據切片,在運算 cnn 圖片時它是有優勢的,因為圖片可以分成不同的 tile 片,然後 GPU 會對每個 tile 進行並行計算,當演算法並不能很好的完成切片動作時,GPU 便沒有什麼實質的優勢,從上圖可以看出,proposal 和 FC6 都很耗時,proposal 層就是在排序,排序對 GPU 是不友好的。Interp 層也是不好切片操作的,所以 proposal 模塊及以後耗時比較大。

知道了相應的數據和原理,在 FPGA 上就能很好解決這些問題,對 FPGA 來說,FPGA 是可編程的,是可以將整個演算法一分為二的,在 proposal 之前是一部分,在 proposal 之後是一部分,兩者在全流水運算後是一個並行的狀態。這樣用並行的計算來抵消後面的耗時時間,就能大大的縮小計算時延。

針對 Interp 層,FPGA 可以將相應放大的係數存入 BRAM 中,這樣的時間更短,是 CPU 的 3 倍左右的速度。Interp 層的意義是很大的,因為前面我們分析過,自動駕駛的感知層很適合做多網路融合的方案,而 Interp 層正式這些網路結合的連接層,經過大量實驗證明,用 Interp 做解析度的上下採樣切換,能最大的保留原始圖片的特徵信息,從而使多個網路間能夠平滑過渡。這也就意味著多網路融合的方案更適合用 FPGA 來實現。

除了前面的優化方法之外,我們還可以考慮層合併,切割 featuremap,權重共享,減少 IO 讀寫時間等方式來進行進一步的優化。另外一個不得不提到優化方向就是量化成 8bit 數據進行計算,這樣 FPGA 中的 DSP 每次都能運算兩個數,這就可以使用性價比更高的 FPGA 晶元上進行運算,從而得到更高的收益。雪湖科技就是這樣做的。

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 14 雪湖科技開發的 Faster RCNN 的性能參數

當然,並非說 yolo 演算法沒有優勢,雪湖也對 yolo 系列做了 FPGA 加速的方案。

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 15 雪湖開發的 yolov3-tiny 的性能參數

雪湖做的工作只是說明用什麼樣的演算法應該根據真實情況而定,而不單單是看 GPU 的運算指標,FPGA 有很多很驚艷的東西,它的潛力一直擺在那裡,只是尚未被挖掘出來,雪湖在 FPGA 領域深耕多年,能把 FPGA 的潛力充分挖掘,只要能做到這一點,出來的結果就足夠驚艷。

風景莫道塞外好, 江南深處藏雪湖

開發 FPGA 是有難度的,要對 FPGA 的邏輯實現和演算法優化有很深的理解之外,

沒有一支精幹的團隊,沒有一個好的驗證平台,沒有強有力的 EDA 開發工具,

將這麼複雜的演算法要在一個資源有限的 FPGA 晶元上實現並達到很高的吞吐量,難度是可想而知的。

雪湖科技在這方面下足了功夫,十年磨一劍,打造出一套完全自主產權的完整的先進的工具系統,同時,針對 CNN 的 AI 演算法這塊,專門打磨出一套完整的開發/驗證系統。

專欄 | 當Faster RCNN遇到FPGA,自動駕駛開始飛了

圖 16 雪湖 CNN 演算法實現框架圖 來源:雪湖科技

如上圖所示,我們將所有的計算模塊都進行封裝,並通過不同的 command 來執行不同的運算元操作,最終會加快 CNN 演算法的實現和落地。

參考文章:

AI 演算法在 FPGA 晶元上還有這種操作?

將 AI 演算法快速落地,是雪湖的優勢所在。雪湖,以算力為根本,為加速而存在,不止步於自動駕駛,不畏懼於技術變遷。以擁有完全自主產權的核心技術為榮,以創新和拼搏為榮。在 FPGA 晶元加速計算領域 (包括但不限於 AI 演算法) 絕對是一道亮麗的風景線,正所謂:風景莫道塞外好,江南深處藏雪湖 !

作者簡介:楊付收,雪湖科技創始合伙人,一個在硬體圈裡努力寫詩的軟體程序猿。專註在晶元演算法相關領域十多年,曾就職於中興,華為,展訊等知名晶元公司。白天代碼幾千行,晚上咖啡伴夢香。每天也就一件事,處理bug一籮筐。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

決戰紫禁之巔之深度學習框架篇:Keras VS PyTorch
MIT發明10美元AI觸覺手套:既能識別物體,又能稱重,論文已上Nature

TAG:機器之心 |