2021年5月,馬斯克宣佈Autopilot的視覺系統現在已經足夠強大,可以在沒有毫米波雷達的情況下單獨使用。緊接著特斯拉官網做出更新,在其車輛的感測器介紹頁面也取消了毫米波雷達的圖示。
根據 Karpathy——CV界華人大佬的Fei-Fei Li的學生Andrej Karpathy博士的說法,相機比雷達好100倍,所以雷達不會給融合帶來太多影響,有時雷達甚至會使情況變得更糟。
2021年8月特斯拉的Day上,Karpathy博士對Autopilot的視覺方案做了詳細的講解。其核心模板叫HydraNet,內部細節設計非常具有啟發性,下面一起來看看。
要理解這個方案,首先需明確一下Autopilot視覺系統的輸入和輸出。
圖1,Tesla視覺感知系統的輸入和輸出
Autopilot的視覺系統的感測器由環繞車身的8個攝像頭組成,分別為前視3目:負責近、中遠3種不同距離和視角的感知;側後方2目,側前方2目,以及後方1目,完整覆蓋360度場景,每個攝像頭採集解析度為1280 × 960、12Bit、 36Hz的RAW格式影象,對車身周邊環境的探測距離最遠可達250m。
攝像頭收集的視覺資訊經過一系列神經網路模型的處理,最終直接輸出用於規劃和智駕系統3D場景下的 “Vector Space”。
圖2 Tesla車載相機佈置方式
Tesla的自動駕駛感知演算法經過了多個版本迭代,應用到了近期的FSD中。我們首先介紹一下最初的HydraNet。
HydraNet
HydraNet以解析度為1280×960、12-Bit、36Hz的RAW格式影象作為輸入,採用RegNet作為Backbone,並使用BiFPN構建多尺度feature map,然後再在此基礎上新增task specific的Heads。
圖3 HydraNet模型結構
熟悉目標檢測或是車道線檢測的讀者會發現,初代HydraNet的各部分都比較普通,共享Backbone和BiFPN可以在很大程度上節省在部署時的算力需求,也算是業界比較常見的。
但是,Tesla卻把這樣的結構玩出了花來,主要帶來以下三點好處:
1、預測非常高效:共享特徵避免了大量重複的計算;
2、解耦每個子任務:每個子任務可在backbone的基礎上進行fine-tuning,或是修改,而不影響其他子任務。
3、加速:訓練過程中可將feature快取,這樣fine-tuning時可以只使用快取的feature來fine-tune模型的head,而無需重複計算。
從上述可以看出,HydraNet的實際訓練流程為先端到端的訓練整個模型,然後使用快取的feature分別訓練每個子任務,再端到端地訓練整個模型,以此迴圈迭代。
就這樣,一個普通的模型就被Tesla挖掘到了極致,模型訓練中一切可以共享的都進行共享,減少不必要的計算開銷。
同時我們也容易發現,該模型如果僅使用單相機影象作為輸入,會有很大盲區,只能用於很簡單的輔助駕駛任務,例如車道保持等,並且這還需要藉助其他感測器(超聲波雷達、毫米波雷達等)來降低風險。
更復雜的自動駕駛任務(城市輔助、自主變道等)需要多相機的影象作為感知系統的輸入,同時感知系統的預測結果需要轉換到三維空間中的車體座標系下,才能輸入到規劃和控制系統用以規劃駕駛行為。
相比單相機,多相機輸入不是簡單的針對多個相機的影象輸入分別預測,然後投影到車體座標系下就可以,而需整合多個相機的感知結果,再投影到車體座標系。這是一個很複雜的工程問題。
針對這一問題,Tesla給出了一個很好的解決方案。
進化一:多相機輸入
我們知道不能簡單的單獨使用每個相機影象的感知結果來進行車輛的規劃控制,要精確的知道每個交通參與者的位置,道路的走向,需要車體座標下的感知結果。要達到這種效果有以下三種可能的方案:
方案1:在各相機上分別做感知任務,然後投影到車體座標系下進行整合;
方案2:將多個相機的影象直接變換和拼接到車體座標系下,再在拼接後的影象上做感知任務;
方案3:直接端到端處理,輸入多相機影象,輸出車體座標下的感知結果;
對於方案1,實踐發現效果不理想。比如圖4,影象空間顯示很好的車道線檢測結果,投影到車體座標之後,就變得不太能用。
原因在於這種實現方式需要精確到畫素級別的預測, 才能夠比較準確地將結果投影到車體座標,而這一要求過於嚴苛。
圖4 影象空間下很好的車道線結果在Vector Space下不太理想
另外在多相機的目標檢測中,會遇到一些問題,當一個目標同時出現在多個相機視野時,投影到車體座標後會出現重影。此外,對於一些比較大的目標,一個相機的視野不足以囊括整個目標,每個相機都只能捕捉到區域性,整合這些相機的感知結果就會變成非常困難。
對於方案2,影象完美拼接本就是一件非常困難的事情,同時拼接還受到路平面、遮擋的影響。
於是Tesla最終選擇了方案3。方案3會面臨兩個問題,一個是如何將影象空間的特徵轉換到車體座標,另一個是如何獲得車體座標下的標註資料。下面主要討論第一個問題。
關於將影象空間的到車體座標的特徵轉換,Tesla使用一個Multi-Head Attention的transformer,來表示這個轉換空間,而將每個相機的影象轉換為key和value。
這是一個很精妙的方案,完美地運用了Transformer的特點,將每個相機對應的影象特徵轉換為Key和value,然後訓練模型以查表的方式自行檢索需要的特徵用於預測。
這樣的設計的好處是,無需顯式地在特徵空間上做一系列幾何變換,也不受路平面等因素影響,很順暢的將輸入資訊過渡到了車體座標。
圖5 使用Transformer整合多相機資訊
加入這一最佳化後,車道線識別更加準確清晰,目標檢測的結果更加穩定,同時不再有重影,效果如圖6所示。
圖6 使用Transformer整合多目資訊後,感知效果明顯提升
進化二:時間和空間資訊
經上述最佳化後,感知模組雖然可以在多相機輸入的情況下得到車體座標準確且穩定的預測結果,但是是針對單幀的處理,沒有時序資訊。
而在自動駕駛場景中,需要對交通參與者的行為進行預判,同時視覺上的遮擋等情況需要結合多幀資訊進行處理,因此需要考慮時序資訊。
為了解決此問題,Tesla在網路中添加了特徵佇列模組用於快取時序上的特徵,以及影片模組用來融合時序上的資訊。此外,還給模型加入了IMU等模組帶來的執行學資訊,比如車速和加速度。
經上述處理後,在Heads中進行解碼得到最終的輸出。
特徵佇列模組
特徵佇列模組將時序上多個相機的特徵,運動學的特徵,以及特徵的position encoding concat到一起,處理後的特徵將輸入至影片模組,如圖7所示。
圖7 在模型中加入特徵佇列,影片模組,以及運動資訊作為進一步最佳化
特徵佇列模組按照佇列的資料結構組織特徵序列,其可分為時間特徵佇列和空間特徵佇列,如圖8所示。
圖8 特徵佇列
時序特徵佇列:每隔27ms將一個新的特徵加入佇列。時序特徵佇列可以穩定感知結果的輸出,比如運動過程中發生的目標遮擋,模型可以找到目標被遮擋前的特徵來預測感知結果。
空間特徵佇列:每前進1m將一個新的特徵加入佇列。主要用於需要長時間靜止等待的場景,比如等紅綠燈之類。因為在該狀態下一段時間後,之前的時序特徵佇列中的特徵會因出隊而丟失。因此需要用空間特徵佇列來記住一段距離之前路面的資訊,包括箭頭、路邊標牌等交通標誌資訊。
上述的特徵隊模組僅用於增加時序資訊,而影片模組主要用來整合這些時序資訊。Tesla採用RNN結構來作為影片模組,並將其命名為空間RNN模組,如圖9所示。
圖9 空間RNN作為影片模組
因為車輛在二維平面上前進,所以可以將隱狀態組織成一個2D的網格。當車輛前進時,只更新網格上車輛附近可見的部分,同時使用車輛運動學狀態以及隱特徵(hidden features) 更新車輛位置。
在這裡,Tesla相當於採用了一個2D的feature map作為區域性地圖,在車輛前進過程中,不斷根據運動學狀態以及感知結果更新這個地圖,避免因為視角和遮擋帶來的不可見問題。同時在此基礎上,可以新增一個Head用來預測車道線,交通標誌等,以構建高精地圖。
透過視覺化該RNN的feature,可以更加明確該RNN具體做了什麼:不同channel分別關注了道路邊界線、車道中心線、車道線、路面等等,如圖10所示。
圖10 空間RNN學到的特徵視覺化
添加了影片模組後,能夠提升感知系統對於時序遮擋的魯棒性,以及對於距離和目標移動速度估計的準確性,如圖11所示。
圖11 加入影片模組可以改善對目標距離和運動速度的估計,綠線為鐳射雷達的GT,黃線和藍線分別為加入影片模組前後模型的預測值
最終的模型
在初版HydraNet的基礎上,使用Transformer整合了多個相機的特徵,使用Feature Queue維護一個時序特徵佇列和空間特徵佇列,並且使用Video Module對特徵佇列的資訊進行整合,最終接上HydraNet各個視覺任務的Head輸出各個感知任務。
圖13 最終完整的模型結構以及對應感知結果
圖12 最新HydraNet模型結構
最新的HydraNet模型如圖13所示,簡單展示了影象提取、多相機影象融合、時間融合,以及最後拆分為不同的HEAD。
整個感知系統使用一個模型進行整合,融合了多個相機時序上和空間上的資訊,最終直接輸出所有需要的感知結果,一氣呵成,非常乾淨和優雅,可以當做教科書一般。
讚歎該系統的精妙之外,也可以看到Tesla團隊強大的工程能力,背後強大的算力和資料標註系統是支援這一切的前提,當然,那啥,本質上還是有錢啦……
此外,該系統也並不是最終版的自動駕駛感知系統,還會一直不斷迭代升級,國內的同行們要加油了!!