深度理解特斯拉自动驾驶解决方案 2:向量空间
從理論到現實,分析特斯拉全自動駕駛的演變
這是我深入了解特斯拉FSD系列的第二篇文章。
在前一篇文章中,我們討論了特斯拉神經網絡HydraNet的架構。目前HydraNet只能處理來自單個攝像機的輸入。
向量空間
當特斯拉的AI團隊致力于FSD時,他們很快發現這是不夠的。他們需要更多的攝像機,感知系統的預測結果必須轉化為三維空間,這也是Plan & Control系統的基礎。特斯拉將這種3D空間稱為“向量空間”。將車輛及其所在空間的位置、速度、車道、標志、信號燈、周圍物體等信息數字化,并在該空間中可視化。
入住率追蹤
他們用c++開發了一個名為“入住率跟蹤”的系統。該系統從圖像中拼接出路緣檢測,跨越攝像機場景、攝像機邊界和時間。但是這個設計有兩個問題:
問題1:跨攝像機融合和跟蹤器很難明確寫入。調整占用跟蹤器及其所有超參數是極其復雜的。手工調優c++程序對每個程序員來說都是一場噩夢。
問題2:圖像空間不是正確的輸出空間。你應該在向量空間中而不是在圖像空間中進行預測。
如上所述,采用逐相機檢測然后融合的方法,問題是每個相機都有很好的預測結果,但將它們拋到向量空間后,精度損失嚴重。(見上圖底部投影中的紅藍線)。這樣做的根本原因是,你需要有一個非常精確的每像素深度來做這個投影。要在如此微小的圖像中精確地預測深度是非常困難的。
在圖像空間(逐鏡頭檢測然后融合)中,無法解決以下兩種場景:
對這兩種情況的預測都非常糟糕。如果處理不當,它們甚至會導致致命的交通事故。
現在是改變設計理念的時候了:“我們想把所有的圖像同時輸入到一個單一的神經網絡中,然后直接輸出到向量空間中。”我很欽佩特斯拉的AI團隊,他們能想出這樣一個簡單而優雅的解決方案。也許這正是埃隆·馬斯克倡導的第一原則思想的結果。
一般來說,特斯拉人工智能團隊想要布局一個神經網絡,如上圖右側所示。它對每一個具有主干的圖像進行處理,并將其從圖像空間特征重新表示為向量特征,最后進入頭部解碼。
這里有兩個難點:
特斯拉的人工智能團隊使用的是鳥瞰圖(BEW)預測,而不是圖像空間預測。例如,在上圖中,輸出空間中的一個黃色像素來自于特斯拉前面的三個攝像頭(主前向攝像頭、窄前向攝像頭、寬前向攝像頭)檢測到的道路邊緣的投影。這種投影取決于路面的幾何形狀,如果感興趣的點被遮擋,您可能想要查看其他地方。對于這個組件,實際上很難得到正確的和固定的轉換。
為了解決這個問題,特斯拉人工智能團隊使用了一個Transformer來代表這個空間,這個Transformer使用了多頭自我注意,并將其隔開。
Transformer
這個Transformer不是動畫片《變形金剛》里的機器人。這是近年來最受關注的深度學習模型。它在谷歌論文《Attention Is All You Need》中首次被提到,主要用于自然語言處理(NLP)領域。
Transformer的核心是注意力機制。BERT、GPT和其他模型都基于Transformer。這些以注意機制為核心的模型廣泛應用于自然語言處理、CV、人工智能等任務中。
通常,Transformer有一個編碼器-解碼器結構。編碼器/解碼器由一組相同的層組成。每個編碼器層主要包括多頭注意層和前饋層;每個解碼器層包含兩個多頭注意層和一個前饋層。
注意函數可以描述為將查詢和一組鍵值對映射到輸出,其中查詢、鍵、值和輸出都是向量。輸出是作為值的加權和計算的,其中分配給每個值的權重是通過查詢與相應鍵的兼容性函數計算的。
注意有很多種類型:軟注意、硬注意、自我注意、點積注意、單一注意、多頭注意。本文的注意機制是由多個點積注意組成的。
回到特斯拉案例
從圖像空間到向量空間,我們可以類比從一種語言到另一種語言的翻譯過程。如上所示,由于Transformer在自然語言翻譯方面有如此優異的性能,我們是否可以用它來將Image Space“翻譯”為Vector Space?
如何訓練這個Transformer?
結合Andrej的講解和Transform Paper,下圖是我對這種Transformer培訓過程的理解。
Image-to-BEV Transformer的訓練過程如下:
推理
在特斯拉的實踐中,如上面的例子所示,使用Transformer將Image Space轉換為Vector Space的過程可以簡單總結為以下步驟:
您可以這樣理解它:首先,您問Transformer網絡,我是輸出空間(向量空間)中這個位置的一個像素(黃色點)。我正在尋找這種類型的特征。你(8個攝像機)看到了什么?此時,有三個攝像頭響應這個位置是道路邊緣。經過更多的處理,最后,在向量空間中輸出該位置的道路邊緣。
初始向量空間柵格上的每個像素都是這樣處理的,所有轉換后的像素構成一個完整的向量空間謎題。
特斯拉的AI團隊已經證明了這種轉變是非常有效的。
虛擬攝像頭
因為特斯拉的8相機的參數是不同的:焦距,視角,景深,安裝位置是不同的,同一對象在不同的相機是不一樣的,這樣的數據不能直接用于訓練,在訓練之前,我們需要規范8相機成一個合成虛擬攝像機。
他們在圖像校正層的正上方插入一個新層,這是相機校準的功能,它將所有的圖像轉換成一個虛擬的普通相機。經過校正變換后,之前模糊的圖像會變得清晰。這大大提高了性能。
比較
面的圖片是一些結果,直接來自神經網絡的預測有明顯的改進。這是一個多攝像機網絡直接在向量空間預測。多攝像頭網絡的另一個好處是,它改善了目標檢測,特別是當你只看到一輛車的一小部分,或者在一個狹小的空間里,汽車跨越攝像頭的邊界。
視頻神經網絡體系結構
上面我們得到了一個基于矢量空間的多攝像頭網絡解決方案,但為了實現最終的自動駕駛,我們需要在網絡中添加另一個維度:時間。
在自動駕駛中,除了檢測車輛、信號燈、道路邊緣、標志和其他物體外,我們還需要預測:這輛車是否停在那里,它是否在移動,移動速度有多快,即使暫時被遮擋,它是否仍然在那里。有時候,我們也需要記住開車的情況。
因此,特斯拉的人工智能團隊試圖在神經網絡架構中插入兩個模塊:一個是特征隊列模塊,它將隨著時間的推移緩存一些特征,另一個是視頻模塊,它將暫時融合這些信息。除了來自8個攝像機的信息外,它們還將運動學、慣性測量單元(IMU)輸入網絡。運動學信息基本上是速度和加速度。從這里我們可以看到這個版本的特斯拉AI只使用了8個攝像頭和IMU。
特征隊列
如上所示,它是Feature Queue的布局。基本上有三種隊列:自我運動學、多凸輪特性和位置編碼。它被連接、編碼并存儲在一個特征隊列中,并將被視頻所消耗。正如我們所知,隊列的操作使其成為先進先出(FIFO)的數據結構。在特斯拉的AI案例中,隊列的彈出和推送機制非常重要。特別是什么時候將數據推入特征隊列?
有兩種隊列推送機制:基于時間的隊列(內存時間序列上的信息)和基于空間的隊列(內存空間上的信息)。
基于時間的隊列
如上圖所示,自我車來到十字路口,前面的交通開始過馬路,它會暫時阻塞前面的一些車。我的車在這個十字路口停了一會兒,等著輪到我們。
那時,我們需要某種基于時間的隊列,例如,我們每27毫秒輸入一個特性到隊列中。(每幀采樣,特斯拉相機參數為1280x960@36Hz,每幀間隔為1/36 = 0.0277秒= 27毫秒)。如果一輛汽車暫時被遮擋,神經網絡有能力及時查看和引用記憶。即使這個東西現在看起來是被遮擋的,在之前的特征中有它的記錄,神經網絡仍然可以使用它來進行檢測。
基于空間的隊列
如上圖所示,你試圖預測你在轉彎車道上,而你旁邊的車道是直的。那時,真的有必要了解線路標記和標志(車道幾何,左轉標志)。有時候,它們發生在很久以前,如果你只有一個基于時間的隊列,你可能會在等待紅燈的時候忘記這些特征。因此,特斯拉的人工智能團隊使用了一種基于空間的隊列,每當汽車行駛一定距離(每1米)時,就會推送隊列。
因此,特斯拉AI團隊有一個基于時間的隊列和一個基于空間的隊列來緩存功能,并繼續進入視頻模塊。
視頻模塊
對于視頻模塊,有很多可能的方法來融合這些信息:3d卷積、Transformer、Axial Transformers、循環神經網絡和空間RNN。在其中,特斯拉AI團隊實際上也非常喜歡空間循環神經網絡(Spatial RNN)。
RNN & LSTM & GRU
在介紹空間RNN之前,我們首先了解了循環神經網絡(RNN)、長短期記憶(LSTM)和門控循環單元(GRU)。
遞歸神經網絡(RNN)是一種處理順序數據的神經網絡。主要用于自然語言處理(NLP)。RNN是一種具有環狀結構的神經網絡。
雖然RNN使網絡有記憶,但它只有短期記憶,不能記住“遠距離”的信息。因為長時記憶需要RNN使用更多的RNN單元,這會導致梯度消失問題,使其不能有長時記憶。
門控循環單元(Gated Recurrent Unit, GRU)是對RNN隱藏層的修改,使其在捕獲遠程連接時表現得更好,并在很大程度上幫助解決漸變消失問題。
另一種可以同時擁有長期和短期記憶的記憶單元是LSTM,也就是長短期記憶。它甚至比GRU更強大。
GRU和LSTM都是RNN的變體。它們都有門控機制,而GRU可以看作是LSTM的簡化版本。
有關RNN的更多詳細信息,請閱讀文章:理解LSTM網絡。
空間RNN
回到特斯拉AI日,因為網絡也需要有長期記憶,所以需要使用rnn。從上面的截圖中,我們可以看到Spatial RNN的單元看起來像使用了GRU單元結構。
為什么特斯拉使用GRU而不是LSTM?
我想對于LSTM來說,GRU的參數更少,收斂速度更快,所以實際上花費的時間更少,計算能力也更低。而這部分需要在板載芯片上快速完成,計算能力有限。因此,在這個階段,特斯拉AI團隊選擇了一個相對簡單的GRU,而不是一個LSTM或更復雜的結構。
具體來說,在特斯拉的自動駕駛結構中,我們是在二維平面上駕駛。Telsa AI團隊實際上將隱藏狀態組織成一個二維格子。當汽車在周圍行駛時,網絡只更新汽車附近的部分以及汽車可見的位置。他們使用運動學來整合汽車在隱藏特征網格中的位置并且只在我們附近的點更新RNN。
如圖所示,每個格子都有一個RNN網絡,紅色矩形表示自我車,白色矩形表示自我車周圍一定范圍內的特征。當自我車從A位置移動到B位置時,特征框也隨之移動。此時,我們只需要更新feature框所覆蓋的黃色框中的rnn。
Spatial RNN的實際性能很好,見下圖。
這個例子顯示了不同的通道在空間RNN的隱藏狀態。在這15個通道中,你可以看到道路的中心、邊緣、線條、路面等等。
這是一個例子,我們在看這個RNN的隱藏狀態,這些是隱藏狀態下的不同通道,所以你可以看到,這是優化和訓練這個神經網絡之后,你可以看到一些通道跟蹤道路的不同方面,比如道路的中心,邊緣,線條,路面等等。
這個例子顯示了不同交叉口的不同遍歷前10個處于隱藏狀態的通道的平均值。因為RNN一直在跟蹤任何時間點發生的事情。神經網絡有能力選擇性地讀寫這些記憶。例如,如果有一輛車就在我們旁邊,并且阻塞了道路的某些部分,網絡有能力不寫入這些位置。當汽車離開,我們有一個很好的視野,RNN肯定想要寫關于空間中有什么信息。這樣您可以看到關于駕駛的特征信息是完整的,不會因為臨時遮擋而導致信息丟失,從而導致錯誤的操作。
這顯示了使用Spatial RNN的單個片段的幾個預測,單個遍歷。但這里可能會有很多次旅行基本上是很多車,很多片段可以合作來構建這個地圖,基本上是一個有效的高清地圖。這個映射將在后面的自動標記部分中使用。
空間RNN的好處:
在這個例子中,有兩輛車(從屏幕頂部),其中一輛車將從屏幕右側駛過,并短暫遮擋它們。屏幕中間底部的紅色方塊是自我車。有單幀預測(橙色)和視頻預測(藍色)。當兩者都在觀測范圍內時,預測結果大致相同。當它們被遮擋時,單幀網絡會降低檢測,但視頻模塊會記住它們。當它們只是部分被遮擋時,單幀網絡會做出非常可怕的預測(紅色圓圈內不穩定的橙色塊)。
空間RNN在估計深度特別是速度方面有顯著的改進。在“移除雷達”項目中,雷達深度和速度顯示為綠色,單幀表現為橙色,視頻模塊表現為藍色。我們看到深度的質量更高,速度也更高。視頻模塊實際上就在雷達信號的上方。
我們也看到了這個項目的最終結果。從2021年5月開始,為北美市場生產的Model 3和Model Y將不再配備雷達。
特斯拉視覺網絡最終結構
這個特斯拉視覺模塊干凈而優雅,整個建筑呈現出一種工程美學。
目前,大多數電動汽車制造商的視覺系統還處于特斯拉架構的第一和第二階段。
特斯拉視覺方案下一階段計劃
特斯拉視覺方案技術棧
從上圖的特斯拉技術棧來看,特斯拉使用的模型是一些處理對象檢測領域的常用模型,如RNN、LSTM、Transformer、ResNet、RegNet、BiFPN、YOLO等,但特斯拉AI Team對這些模型有更深入的了解。他們融合多種模型和深入挖掘模型潛力的能力讓我這個普通的人工智能工程師感到驚訝。
當我們還在討論論文中出現的有趣的新模型時,特斯拉的工程師已經在他們的任務中實現和使用了這些模型,并將它們融合到他們的神經網絡架構中。
特斯拉AI日的感受
特斯拉成功的要素:
在接下來的特斯拉人工智能日系列中,我們將討論:計劃與控制、自動標注、模擬、縮放數據生成、人工智能編譯與調度、工具與評估等。
總結
以上是生活随笔為你收集整理的深度理解特斯拉自动驾驶解决方案 2:向量空间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019年第十届蓝桥杯 - 省赛 - C
- 下一篇: 深度探秘 从 Auto Labeler