特斯拉純視覺自動駕駛深度解讀!8個攝像頭背後隱藏的巨大工程,燒腦又窒息...論文級分析!

電子世界
60粉絲
123 次觀看·2022年10月31日
此前一期視頻,我們講解了FSD的硬件配置。不過那是蜻蜓點水。這一期視頻,我們從人工智能的角度研究下特斯拉是如何靠8個攝像頭實現全自動駕駛的。在8個攝像頭的背後,特斯拉的神經網絡是如何構建的?為甚麼,只有特斯拉能做到?
大家好,我是大劉
這一期視頻我們來講特斯拉自動駕駛的原理
我們從人工智能的角度來分析一下
它是如何靠8個攝像頭來實現全自動駕駛的
就在我準備錄製視頻的前一分鐘
突然看到特斯拉AI負責人Andrej Krapacic離職的消息
那麼這個人對於特斯拉AutoPilot的迭代
是起到了非常關鍵的作用
尤其是視覺方案這一塊做出了很大的貢獻
他據說是AI界知名華人科學家李飛飛的學生
而在特斯拉內部Andrej Krapacic也是馬斯克的一員愛將
這一期視頻我們來深入講解Andrej Krapacic的研究成果
我保證這是你看過的關於特斯拉FSD的最深度
最燒腦的解讀
有多麼燒腦呢
我自己寫的腳本回頭再看一遍
我都不知道我在說什麼
開個玩笑
其實特斯拉自動駕駛的核心是機器視覺問題
那麼對於從事AI NLP和CA方面研究的同學來說
這些內容都是家常便飯
不過我的視頻是做給普通觀衆看的
所以我就只好半門弄斧了
特斯拉目前的策略是隻靠八個攝像頭來實現全自動駕駛
這是非常有挑戰性的
這就相當於訓練機器可以像人腦一樣
通過不斷的學習來掌握駕駛技能
那麼問題是這真的可行嗎
至少目前來看馬斯克的魔法還沒有失效
那麼我們從四個關鍵詞來切入
這四個部分弄明白特斯拉FSD的深層原理
我們就能基本掌握
那麼目前來看還是一坨污水
別急 我們慢慢來
首先hydro net
這是特斯拉用來做目標識別的神經網絡架構的名字
它的基本結構是這樣的
從下往上分別是輸入的原始圖像
規格是1280×960 12bit加HDR
然後藍色方框內的是backbone骨幹網絡
那麼這一部分代碼主要是對圖像的特徵做初步的提取
那麼特斯拉的backbone用的是react net架構
這個是Facebook最早提出的一個卷積神經網絡架構
然後黃色方框內的neck
那麼這部分代碼可以理解爲對圖像特徵做進一步的分析
對於圖像細節和語義信息做進一步的提取
特斯拉用的是8FPM
那麼這個也是由Facebook提出的
然後紅色方框內的是head
那麼這一部分會從neck處分散出多個head
有點像九頭蛇
所以整個框架就叫做hydro net
那麼爲什麼會有多個head呢
因爲每一個head對應一個特定的任務
比如說有的head是做車輛檢測的
有的是做紅綠燈檢測的
有的是做車道線檢測的
那麼這個hydro net到底幹了件什麼事呢
它主要對攝像頭輸入的每一幀畫面
通過卷積運算提取出圖像特徵
卷積運算是通過卷積神經網絡實現的
在之前講NPU的視頻裏
我們簡單解釋過卷積運算處理圖片的原理
它是通過一個帶有權重信息的卷積核
按照一定的步長
在圖像上與對應的陣列的像素值
進行乘積雷達運算
運算的結果會讓原始圖片越來越小
像素越來越低
那麼照片的銳化處理就是這個原理
那麼在神經網絡的淺層
圖像分辨率很高
CNN可以掌握更多的細節特徵
那麼在深層網絡中分辨率不斷降低
但是語義特徵更加明顯
方便CNN掌握這到底是個什麼東西
這跟人類的認知是相反的
我們是傾向於高分辨率圖片
才能看清楚這是什麼
但是機器要一層層提取特徵
直至分辨率被卷積到最底層
才能充分理解這到底是個啥東西
一張圖片在輸入後
對於機器來說是存在很多維度的信息量的
在卷積過程中圖片的通道數量會大幅增加
簡單提一下通道的概念
我們都用過Photoshop
我們知道一個彩色圖片是有三個通道的
分別是RGB
那麼CNN在處理圖片時
分辨率降低的同時通道數量會增加
最開始就是這三個通道
但是隨着神經網絡下探
通道數量會不斷增加
這是因爲對於一張圖片
我們看一眼就知道里面是什麼
但是對於機器來說
它只是一堆像素而已
通道數量增加是因爲機器要提取的特徵不斷增多
每一個通道都對應一張特徵圖
比如從最初的三個通道增加到了256通道
那麼這就意味着機器從這張圖片中
提取出了256個特徵圖
這些特徵圖可能分別涵蓋了前方的車輛
一個垃圾桶
兩邊的樹木等等
所以在處理圖片時
圖片會在CNN的內部分辨率降低
特徵圖增加
機器對於圖片的語意理解更加深刻
這就是通過CNN來實現圖片中目標識別的基本原理
那麼我們剛纔所講的是單幀畫面
或者說一個固定視角的目標識別
而要實現全自動駕駛
你需要把車放進一個立體空間內
要把多個攝像頭的數據整合在一起纔行
這就意味着特斯拉要把八個攝像頭輸入的畫面
縫合成一個立體的畫面
那麼這個就是我們在特斯拉的中控屏上看到的3D街景
注意這個並不是說做360度環繞影像
而是把八個攝像頭觀察到的信息精確識別後
輸入出到一個車體座標系中
特斯拉把這個空間叫做vector space
一般是有三種方案
那麼一個是在各個攝像頭上分別做識別
然後投影到車體座標系
形成一個立體空間
那麼第二個是把所有攝像頭的畫面
先做變形和拼接到車體座標系
然後在拼接後的畫面上做目標識別
三是直接端到端處理
輸入多相機圖像
直接輸出帶有識別的車體座標系
那麼特斯拉直接選了第三種端到端處理
這其實是非常難的
一個難點在於把二維畫面中的圖像特徵
提取到三維空間中如何準確還原是個問題
另外一個難點是在於
在這個所謂的vector space中
如何進行數據標註
因爲特斯拉要對攝像頭看到的東西
實時進行標註
用遠程的超級計算機進行訓練
那麼針對二維轉三維
特斯拉用了一個在NLP領域
比較熱門的transformer機制
transformer可以理解爲是一種工具
它主要是在翻譯領域
在transformer中有三個參數
query,key和value
這三個概念其實是來自於推薦系統
比如說在電影推薦中
query相當於用戶對電影的喜好信息
比如說興趣 年齡 性別等
key是電影的類型
比如說是什麼劇種
導演風格 上映年代等等
而value就是那個最終等待推薦的電影
回到特斯拉這裏
transformer相當於是把二維畫面
翻譯成了一個三維畫面
更準確的說是一個試量空間
特斯拉先把所有攝像頭的畫面融合
進行格柵化
處理成bird's eye view
即鳥看視角
然後每一個像素點向transformer查詢
也就是query
比如說我是一個位於某某座標的黃色像素
那麼我在尋找符合這一特徵的數據
那麼你們八個攝像頭都看到了什麼
那麼這個時候
位於擋風玻璃後方的三個攝像頭就回應了
那麼符合這個特徵的點位是馬路牙子
那麼然後在vector space中
在那個位置就出現了馬路牙子
那麼通過這一方法
多機位的畫面就轉變爲了vector space
vector space被縫合好了以後
要實現自動駕駛的策略控制
我們還欠缺一個重要的維度
時間
因爲在實際駕駛中
周圍物體可能是處於運動狀態的
我們不但要識別這是一臺車
還要掌握它是否有前進的趨勢
是否停下來了
是否被暫時遮擋住了
不然的話你只知道單幀畫面的內容
如果沒有跟前後文關聯的話
那麼就沒法做到預判
因此特斯拉視頻處理的神經網絡架構中
增加了兩個模組
特徵序列模組和視頻模組
在這張圖中我們從下往上看
底部的是來自多個機位的原始圖像輸入後
通過圖像矯正進入卷跡網絡
提取出多尺度特徵
然後多個相機視角融合爲鳥看視角
進一步多機位的圖像特徵會進入到特徵序列
特徵序列會緩存過去時間內的一些特徵
而此時IMU的數據也被填入進來輔助記錄
然後是一個視頻模組
Video module
來臨時處理緩存的這些圖片
特徵序列可以由時間和空間驅動
那麼時間序列中每隔27毫秒就會曝射一次
空間序列中每隔一米的距離就會曝射一次
它們的作用是如果一個車被暫時遮擋住了
那麼時間序列中所記錄的緩存信息會告訴你
這裏剛剛是有一臺車的
所以當前畫面裏雖然沒有直接檢測到車
但是系統會知道這裏其實還是有一臺車的
這個是時間序列的作用
再一個例子是當你在左轉車道等待左轉時
那麼系統可能忘記自己要左轉
因爲路面的指示箭頭可能在你還沒有到達路口時
就已經被識別到了
所以需要空間序列來記憶剛剛的狀態
時間和空間兩個維度的信息
會被暫時緩存到這個特徵序列中
然後提交到視頻模組中進行處理
視頻模組所用的神經網絡並不是CNN
而是RNN循環神經網絡
它是帶有時間特徵的
用來處理序列數據的一種閉環的神經網絡
這種神經網絡看上去更接近人腦的記憶效應
所以RNN的特點就是具備記憶能力
那麼這個是特斯拉視覺神經網絡的一個完整的框架
從下往上五個部分
第一二部分是單攝像頭目標檢測
第三是多機位融合和vector space
第四是時空序列記憶
第五是子任務處理
所以特斯拉的視覺算法機制
一句話概括就是
單目標檢測後多機位融合形成實量空間
根據時空序列記憶來加強預判
然後把結果輸出給九頭蛇的頭部
用於每個單獨任務的處理
實現車體座標系下的目標檢測與行爲預測
那麼我們剛纔還提到一個難點
就是標註問題
vector space有了
空間中的各種物體是如何進行標註的呢
這裏就要講到Library
也就是標註
神經網絡首先要訓練
那麼訓練的時候
先要給它指明圖片上各個物體是什麼東西
很顯然訓練神經網絡所需要的數據量是非常大的
那麼這裏有兩個問題
一是數據是哪裏來的
二是誰來標註
第一個問題
特斯拉FSD的訓練數據
主要是來自於特斯拉的工程車輛以及客戶的車輛
而且它有一個影子模式
就是系統會記錄在當前場景人類駕駛員的角色
從而進一步訓練機器的識別和角色能力
第二個問題是誰來標註
早前特斯拉有一個1000人的團隊
是專門來進行人工標註的
那麼後來特斯拉訓練了一個單獨的神經網絡模型
來進行自動標註
要知道特斯拉是直接在vector space下進行標註的
而這裏的訓練數據就不是一張張圖片了
而是clip
一個clip大約是45秒到一分鐘左右的視頻畫面
同時匹配了RMU慣性測量單元的數據
GPS的數據以及里程記的數據等等
這些數據被直接發送到特斯拉的dojo超級計算機中
通過AI算法來自動進行標註
然後用來訓練相應的神經網絡
特斯拉的強大之處在於
對於某個地點比如說一個十字路口
可能經常會有特斯拉經過
那麼就可以獲得源源不斷的該路口的視頻畫面
這些畫面會進一步來優化標註的結果
因爲有時候一個大畫面中
這個路燈可能會被一輛大卡車擋住了
那麼在另一輛車的畫面中
這個路燈是沒有被遮擋的
再比如對於一個特殊場景
比如說大雨或者大雪天氣中
由於前方大卡車濺起了很多水霧
因此視野變差
對於這樣的場景
特斯拉用來做自動標註的服務器
會從車隊陣列中查詢類似的場景
然後輸送到神經網絡用於訓練
進一步加強該場景的識別能力
但是我們剛剛所講的這些
還缺少一個非常關鍵的因素
那就是深度信息
depth
目前可以確認在特斯拉的車載軟件中
有一個專門的感知像素深度的
神經網絡在暗中運行
此前一個黑客曾經破解了自己的特斯拉
然後拉取出了這樣一段視頻
這個是有160乘以120像素的畫面
是真實包含深度信息的畫面
可以看到特斯拉已經具備
從純視覺來預測像素深度的能力
我們知道激光雷達之所以受歡迎
是因爲它可以直接獲取周圍環境的
深度信息
也就是車輛距離各個物體的距離
那麼我們是否可以依靠攝像頭
來讀取深度信息呢
答案是肯定的
我們知道通過雙目立體攝像頭
來判讀深度信息是相對比較容易的
因爲雙目攝像機有很多種幾何約束
比如說焦距
攝像頭的光芯距離等等
那麼通過極限約束
是可以求出攝像機距離物體的大概距離的
但是如何利用單目攝像機來實現深度預測呢
如果不考慮神經網絡的話
那麼這個從純粹的光學角度是基本上不可能的
而特斯拉採取的思路是模擬人眼的視覺感知能力
因爲我們生活在三維世界中
大腦經過大量的訓練後
當你看到一張二維的照片時
也能判讀出照片中的透視關係和三維感受
即便把一隻眼睛閉上
那麼僅靠另外一隻眼睛
也能分辨出一張圖片中的立體感
人腦的這種深度感知能力看似是與生俱來的
但是實際上是被訓練出來的
那麼機器是否可以重複這樣的步驟呢
答案是可以的
特斯拉的前AI主管Andrej Kvasin
曾經在AID上簡短介紹過像素級別的深度感知
但是沒有詳細解釋
從他身後的這張PPT上
我們看到了一個概念圖
那麼我也找到了這個概念圖的出處
是一篇來自伯克利加州分校和谷歌的聯合論文
這篇論文主要講的是
無監督的深度學習和針尖運動算法
研究團隊設計了一種神經網絡架構
可以在無監督的前提下實現對於像素的深度感知
那麼在這裏說一下什麼叫無監督
Unsupervised
神經網絡的訓練可以分爲有監督和無監督兩種
在自動駕駛場景中
有監督意味着我們需要採集真實世界的數據
比如說真實的深度信息
Ground Truth Data
那麼這個可能就要依靠激光雷達來實現
然後神經網絡模型在訓練時候
是以這個真實的模板作爲標準答案來訓練的
無監督就意味着沒有真實物理世界的深度數據
因爲這樣的採集成本實在是太大了
而且環境在變化中
你不可能頻繁採集這些數據
所以來自全世界的研究團隊都在着重功課
如何讓算法實現自監督
也就是Self Supervision
那麼這篇論文的算法框架
主要是分爲兩個CNN之路
一個是深度估計CNN
一個是未知估計CNN
前者用來計算像素深度
後者用來計算攝像機位置的變化
它的訓練方式是針對時刻t捕捉到的畫面進行深度估計
然後把t時刻t加1和t減1時刻的三幅圖片
輸入到未知CNN中
由這個CNN估算出t減1到t
t到t加1的參數轉移矩陣
重構出t減1和t加1
然後利用這兩個時刻的原圖來作爲監督進行訓練
那麼這種深度估計的訓練是利用了針尖運動來實現的
但問題是這個深度估計CNN是如何來預測深度的呢
這一點特斯拉的PPT是沒有介紹的
但是我們剛纔所講的這篇論文
它的深度估計CNN用的是一個叫做dispnet架構
於是我又找到了它對應引用的這個論文
從這篇論文中我得到了一個信息
那就是提出dispnet團隊是基於flownet去延伸的
而flownet是用光流估計的
對應的技術理念是光流法
是利用圖像序列中像素在時間域上的變化
以及與相鄰針之間的相關性
來找到上一針跟當前針之間存在的對應關係
從而計算相鄰針之間物體運動信息這種方法
dispnet團隊通過CNN在flownet基礎上拓展了視差估計和場景流估計
而其中深度估計網絡主要是通過視差預測得出的
論文團隊採用了雙目影像來訓練dispnet
通過輸出視差來求深度
因爲視差跟深度是互爲倒數的
那麼可以預測
特斯拉的深度估計應該用的就是類似於dispnet這樣的結構
但是通過未知CNN來做到無監督訓練
這裏我們再解釋一遍
首先是通過深度估計CNN得出T時刻的深度圖
然後基於這個深度圖去合成T時刻之前和之後的圖
再拿這兩個時刻真正的原圖來做對比來實現訓練
雖然dispnet是基於雙目訓練提出的
但是它也被拿來做無監督的單目訓練
當然了
這個地方也是我個人比較困惑的一個點
因爲dispnet的名字就意味着它是視差網絡disparity
爲什麼特斯拉的單目方案中會用到dispnet
那麼關於這個問題
我也問過前面提到的那個黑客
他的回覆是
特斯拉可能是利用前置主攝像頭加兩側的餘影鏡頭進行訓練
因爲在八個攝像頭中
有一組是位於一子板兩側的
還有一組是位於B柱兩側的
正好可以形成視差
就更有利於深度信息的判斷
那麼關於這一點
我也希望從事CV的同學來給我們上一課
那麼以上所說就是特斯拉深度感知的基本原理
當然了
我們也看到特斯拉的神經網絡框架中
有很多東西都是業界的主流方案
很多都是來自於Facebook
Google的研究成果
這些公司纔是AI領域真正的頂樑柱
但是特斯拉把不同的機制進行了優化組合
它最大的優勢還是在於擁有大量的訓練數據
因爲目前autopilot已經擁有了超過30億英里的駕駛數據
用戶的車輛就是它的訓練數據採集車
純視覺方案的根本完全不在於攝像頭的像素
而在於神經網絡的機制和訓練
研究FSD的算法加固後
我發現特斯拉做自動駕駛就跟最初做電池組一樣
依然是延續了馬斯克的第一性原理
儘量的簡單
儘量的實用
不被現有的框架所束縛
OK關於特斯拉自動駕駛
我們先說到這裏
那麼有哪裏說的不對的話
請批評指正
我是大劉
我們下一期再見
