近日,特斯拉CEO馬斯克閃電訪華,引發一片猜測。針對業內關注的FSD(Full-Self Driving,全自動駕駛)何時會在國內落地,4月29日特斯拉中國方面核實,“目前具體時間不好說,但預估是快了。”
本文將從人工智慧的角度,告訴大家特斯拉如何透過8個攝影機實現全自動駕駛,全視覺的解決方案挑戰是及其大的,類似於訓練機器像人腦一樣透過不斷學習來掌握自動駕駛的技能,以下我將分四個面向來做最為燒腦和深度的解讀。
1. HydraNet神經網路架構
HydraNet主要針對相機輸入的每個畫面,進行卷積計算,擷取影像特徵。卷積運算是透過一個帶有權重資訊的捲積核,按照一定的步長,在影像上與對應的陣列像素值進行卷累積加運算。運算的結果是原始圖片越來越小,像素也越來越低。隨著這個過程,影像的給與特徵更加明顯,就能方便掌握圖片中到底是什麼物體。這個和我們人類的認知恰恰相反,人類傾向高解析度圖片,才能看出圖中是什麼物體。但是及其要一層層提取特徵,直到分辨率被捲積到最底層,才能充分識別圖像中的物體,因為對於機器來說,一張圖片只是一堆像素的組合而已,機器通過不斷的捲積,從一張圖片上形成上百個特徵圖,這些特徵圖分別代表如前方的車輛、某處的垃圾桶和行人等。
HydraNet就是特斯拉用來做目標辨識的神經網路架構名字。它的基本架構如下圖2所示。從下往上分別是輸入的原始影像,規格是1280*960 12bit+HDR,接下來藍色方框是backbone骨幹網絡,這一部分程式碼主要針對影像特徵進行初步擷取。特斯拉的backbone用的是RegNet架構,這個其實是來自facebook最早提出的捲積神經網路架構。接下來黃色框裡面的Neck,這部分程式碼可以理解為對影像特徵做進一步分析,提取影像細節和語意資訊。最後紅色方框的是head,這裡面的多個head,對應不同的任務,例如有的做車輛自身檢測,有的做交通信號燈檢測,還有的做車道檢測等等。這整個框架就是HydraNet架構。
2.Vector Space的3D街景
以上我們講的是單一影像,而要實現全自動駕駛,就需要把車輛放置在一個立體空間。特斯拉需要把8個攝影機的資料整合,這就是我們常常在中控台看到的3D街景,這個不同於我們常常理解的環繞影像,而是需要把8個攝影機擷取到的資料輸出到車體座標系,這個空間就叫做Vector Space。
一般來說實作Vector Space有三種方案。一是各個攝影機分別識別,然後投影到車體座標系;第二種方案是所有攝影機的畫面先做拼接,然後在拼接的畫面上做目標識別;第三種方案是直接端到端處理,輸入多相機影像,直接輸出帶有辨識的車體座標系,特斯拉運用的是第三種方案。這其實是最困難的一種方案,首先的困難是需要把二維畫面中的影像特徵提取到三維空間中,如何準確還原是一個很大的困難。另外,在這個所謂的Vector Space中,如何進行資料標註。因為特斯拉要對攝影機看到的東西,即時進行標註,用於遠端的超級電腦進行訓練。
針對二維轉三維,特斯拉用了一個在NLP領域比較熱門的transformer機制。這個transformer可以理解為一種工具,他主要用在翻譯領域。在transformer中有三個參數query、key和value。這三個概念來自推薦系統,例如在電影推薦中,query相當於用戶的喜好訊息,例如興趣和性別等,key是電影的類型,value就是哪個等待推薦的電影。 transformer相當於把二維畫面翻譯成立體畫面。特斯拉先把所有相機的畫面融合進行格柵化,處理成bird eye view鳥瞰圖,然後每個像素點向transformer查詢,也就是query.比如說,我是一個位於某某坐標的黃色像素,我在尋找符合這項特徵的數據,那麼你們8個攝影機都看到了什麼?那麼此時位於擋風玻璃後方的三個攝影機就會回應說,這個特徵是馬路牙子。然後在Vector Space中,在對應位置就會出現馬路牙子。透過這個方法,多機位畫面就會轉變為Vector Space。
Vector Space被縫合好了之後,要實現自動駕駛我們還欠缺一個重要的維度:時間。因為在實際駕駛狀態,周圍的一切都是處於運動狀態,我們不但要知道他是什麼,還要了解他的運動趨勢,是否被暫時遮擋了?否則車輛沒有辦法做到預判。因此特斯拉在視訊處理的網路架構中,增加了兩個模組,分別是特徵序列模組和視訊模組。正如我們前面所述,特斯拉將來自多個機位的原始影像,透過影像矯正進入卷積網絡,提取多尺度特徵,然後多個相機視角融合為鳥瞰視圖。進一步多機位影像特徵會進入特徵序列,而特徵序列會快取過去一段時間內的特徵。而此時IMU的資料也會被填入進來輔助記錄,然後是一個視訊組Video module來暫時處理這些快取圖片。特徵序列可以由時間和空間驅動。從時間維度上,每個27毫秒就會push一次訊息,空間序列中每隔1公尺就會push一次。他們的作用是如果一輛車被暫時遮擋,時間序列中所記錄的緩存信息,會告訴車輛這個位置剛剛是有一輛車的,所以儘管當前畫面沒有直接檢測到一輛車,但是系統仍然會知道這裡實際上是有一輛車的,這就是時間序列的作用。時間和空間兩個維度的信息,會被暫時緩存到特徵序列,並提交到視頻模組進行處理,視頻模組採用的是循環神經網絡,它是帶有時間屬性的,這種神經網絡十分接近人腦的記憶效應。
因此特斯拉視覺神經網路的完整架構,一共分為5個部分,第一二部分是單鏡頭目標偵測,第三是多機位融合與Vector Space(類似3D街景),第四是時空序列記憶,第五是子任務處理。因此特斯拉的視覺演算法機制,總的來說就是單目標偵測後,多機位融合形成向量空間,根據時空序列來加強預判,然後把結果輸出用於單獨任務處理,實現車體座標系下的目標檢測和行為預測。
3.Labeling標註物體
Vector space有了空間中的各種物件之後,是如何進行標註的呢?這裡就要講到labeling,也就是標註。神經網路首先要訓練,那麼訓練的時候先要給他指明圖片上各個物體是什麼東西。很顯然訓練神經網路所需的資料量是非常大的。特斯拉FSD的訓練資料主要是來自於特斯拉的工程車輛以及客戶的車輛。而且它有一個影子模式,就是系統會記錄在當前場景人類駕駛員的決策,從而進一步訓練機器的辨識和決策能力。
早前特斯拉有1,000人的團隊是專門來進行人工標註的。後來特斯拉訓練了一個單獨的神經網路模型來進行自動標註。要知道特斯拉是直接在Vector space下進行標註的。而這裡的訓練資料就不是一張張圖片了而是clip。一個clip大約是45秒到1分鐘左右的視訊畫面,同時匹配了IMU慣性測量單元的數據、GPS的數據以及里程等數據,這些數據被直接發送到特斯拉的超級計算器中,透過AI演算法自動進行標註。然後用來訓練對應的神經網路。特斯拉的強大之處在於對於某個地點,比如說一個十字路口,可能經常會有特斯拉經過,那麼就可以獲得源源不斷的該路口的視訊畫面。這些畫面,會進一步來優化標註的結果。因為有時候一個大畫面中這個路燈可能會被一輛大卡車擋住了,那麼在另一輛車的畫面中這個路燈是沒有被遮擋的。再說大雨或大雪天氣中,由於前方大卡車呢濺起了很多水霧,因此視野變差,對於這樣的場景,特斯拉用來做自動標註的伺服器會從車隊陣列中查詢類似的場景,然後輸送到神經網路用於訓練,進一步加強該場景的識別。
4.Depth深度距離資訊學習
目前可以確認在特斯拉的車載軟體中有一個專門感知像素深度的神經網在暗中運行,特斯拉已經具備從純視覺來預測像素深度距離的能力。
我們知道光達之所以受歡迎,就是因為它可以直接取得周圍環境的深度資訊也就是車輛距離各個物體的距離。我們是可以依靠攝影機來讀取深度資訊的。透過雙眼立體攝影機來判讀深度資訊是相對比較容易的,因為雙眼攝影機有很多種幾何約束,比如說焦距、攝影機的光芯距離等等,透過這些約束是可以求出攝影機距離物體的大概距離的。但是利用單眼攝影機來實現深度預測是基本上不可能的。
特斯拉採取的想法是模擬人眼的視覺感知能力。因為我們生活在三維世界大腦經過大量的訓練後,當你看到一張二維的照片時也能判斷出照片中的透視關係和三維感受。即便把一隻眼睛閉上也能分辨出一張圖片中的立體感。人腦的這種深度感知能力並不是與生俱來的,實際上是被訓練出來的。根據特斯拉的前AI主管Andrej Karpathy的介紹,提到了一篇來自伯克利加州分校和谷歌的聯合論文《Unsupervised learning of depth and ego motion from video 》。以下針對這篇論文的核心思想進行解釋。
這篇論文主要講的是無監督的深度學習和幀間運動。演算法研究團隊設計了一種神經網路架構可以在無監督的前提下實現對於像素的深度感知。所謂有監督神經網路訓練,實際上就是我們常說的使用光達所收集到的真實資料進行訓練,但是這種方案採集成本高昂,而且環境是隨時變化的,採集難度很高。
而特斯拉採用的是無監督神經網路訓練。無監督就意味著沒有真實物理世界的深度資料。那麼前面那篇論文的演算法架構主要是分成兩個,一個是深度估計CNN,一個是位姿估計CNN。前者用來計算像素深度,後者用來計算攝影機位置的變化。它的訓練方式是針對時刻t捕捉到的畫面進行深度估計,然後把t時刻、t-1和t+1時刻的三幅圖片輸入到位姿CNN中,由這個CNN估算出t-1到t,以及t到t+1的參數轉移矩陣,重構出t-1和t+1,然後利用這兩個時刻的原圖作為監督來訓練。
這種深度估計的訓練是利用了幀間運動來實現的,用的是一個叫做DispNET的架構。關於這部分原理也可以參考論文《A Large Dataset to Train Convolutional Networks for Disparity, Optical Flow, and Scene Flow Estimation 》。 DispNET是基於flow net去延伸的,而flow net是用光流估計的,對應的技術概念是光流法。是利用影像序列中像素在時間域上的變化,以及與相鄰幀之間的相關性來找到上一幀跟當前幀之間存在的對應關係,從而計算相鄰幀之間物體運動資訊。這種方法拓展了視差估計和場景流估計。
特斯拉是利用前置主鏡頭,加上兩側的魚眼鏡頭進行訓練。這兩組攝影機剛好可以形成視覺差,就更有利於深度資訊的判斷。
5.最後
特斯拉的神經網路框架中有很多東西都是業界的主流方案,主要來自於Facebook和Google的研究成果,這些公司才是真正掌握AI領域的黑科技。
特斯拉最大的優勢就是整合和擁有大量的訓練資料。目前Auto Pilot已經擁有了超過30億英里的駕駛數據,使用者的車輛就是他的訓練資料收集車。
純視覺方案的根本完全不在於攝影機的像素,而在於神經網路的機制和訓練研究。特斯拉自動駕駛就跟最初做電池組一樣,依然是延續了馬斯克的第一原理,盡量的簡單和盡量的實用,不被現有的框架所束縛。
最後身為一個普通打工者,我也是期待特斯拉的FSD全自動駕駛能夠早日落地中國。(小明懂點車)