深度探秘 从 Auto Labeler 挖掘 Tesla 全自动驾驶的工作机制
前段時間,Tesla負責全自動駕駛的大神Andrej Karpathy,發了一條推特,給大家展示了一個新的視覺感知項目——全景分割,這篇文章就借著這條推特和大家聊聊,Tesla全自動駕駛系統的一些工作細節,以及 Auto Labeler 自動標注系統是如何完成海量數據標記的?
Tesla自動駕駛的視覺感知系統主要依賴攝像頭,通過訓練神經網絡來對環境進行各種識別和判定。
使用的方法是機器學習中的監督學習,也就是先把攝像頭所拍到視頻中的行人和車輛等全都圈出來標記好,然后拿給神經網絡學習,神經網絡就會記住各種車輛和行人的特征,從而實現在行駛中進行識別的目的。
接下來咱們來看Andrej Karpathy大神的這條推特,這條推特有兩個部分,文字部分的大意就是Tesla的視覺團隊正在搞一個新的系統,不過還處于起步階段,未經雕琢,比較粗糙,暫時還不適合用在行車系統中,但是已經可以給自動標注系統使用了,而且使用了Tesla自家團隊整理的高質量視頻數據,所以產出的效果非常不錯,然后就是個視頻給大家看看效果。
全景分割
首先,這全景分割并不是一個固定的算法或是架構,而是對視覺感知中一類識別任務的統稱。
現階段的視覺感知,尤其是在自動駕駛這方面,主要關注的問題就是攝像頭都看到了什么?分別都在哪?
主流的解決方法呢叫Instance Segmentation,實例分割,效果呢大概是這樣的。
這個方法的邏輯十分簡單,就是先找出物體輪廓和大概的位置,然后對這個大概的區域中的每一個像素做分類,從而實現對物體的識別,準確描繪識別物體的所在。
不過這個方法主要針對的是外形相對固定,且可數的物體,比如行人、車輛,目標這一類的。對自動駕駛來說,在路面上很多所需要的識別都是外形不確定、不可數的視頻信息,比如路面、建筑物、天空之類,對這一類信息分析的方法,大多采用Semantic Segmentation,語義分割。
實例分割和語義分割,這兩種方法雖然相互關聯,但是做法和考察的方式卻很不同,所以一般把這兩個方法當做是獨立的任務分開處理,而將攝像頭所看到的所有信息,不管是車輛、行人、馬路、橋梁進行統一識別和分析的方法就是全景分割。
統一識別最明顯的好處就是避開了如何融合多系統所產生不同結果的問題。舉個簡單的例子,比如在行車時做實例分割的系統說:前面是行人,得剎車,而做語義分割的系統說:前面只有馬路,繼續開。你說信誰的?
其次,把多個系統整合成單一系統,有利于提高優化效率,同時降低在實際使用中的運算成本,而運算成本對現階段Tesla硬件3.0的自動駕駛電腦來說是尤為的重要。
算力利用率
一般在討論自動駕駛的時候,各家廠商都會對自己的硬件在算力方面著重的做宣傳,畢竟算力不但直觀好理解,而且也好比較。
比如說Tesla硬件3.0電腦上一塊兒NPU神經網絡芯片的算力在37萬億次每秒上下,而英偉達的Orin芯片,則可以達到每秒200萬億次的運算,200萬億次要比37萬億次高不少,所以從計算能力的角度上講,Orin芯片的算力比硬件3.0的NPU強不少。
不過單純的算力并不能評定系統的優劣,這個好比談論汽車的動力,無論發動機有多么強大的馬力,最終看的是有多少性能可以傳遞到輪胎上加以使用,也就是利用率的問題。
對于自動駕駛系統也是同理,算力的利用率比純粹的算力更為重要,而在解決這個問題上,各家方案的焦點主要都放在數據存儲機制和內存帶寬上去。
Tesla的方案只依賴攝像頭,需要處理的只是視頻信息,目前來看,八個攝像頭所采集的數據,在內存帶寬方面還不成問題,所以Tesla硬件3.0的重點也是優勢就在于其存儲機制上,準確的說,是Tesla在硬件3.0上采用大容量緩存,提高運算效率。
Tesla硬件3.0給每一塊兒神經網絡芯片都配備了32M的靜態內存,乍一聽這好像沒多少啊,不過靜態內存和我們一般所說的,動不動就幾個G的動態內存不是一回事兒。靜態內存一般作為處理器的緩存來使用,直接和處理器對話,速度飛快,不過成本也很高,尤其是集成成本,一般系統的緩存也就幾兆而已,所以Tesla 32M靜態內存的配置就顯得特別大手筆。
內存大的最直接好處就是可以一次加載更多的數據,但是Tesla還是要小心翼翼,春雨貴如油般的使用,之所以這么說,主要還是受限于神經網絡的工作模式。
簡單的講,在神經網絡工作時需要把參數都加載到內存中才能計算,一般來說神經網絡參數文件小的幾兆,大的幾十個G也常有。那么Tesla全自動駕駛架構中,提供完整視覺功能的HydraNet有多大呢?
在聊這個問題之前,先來簡單說說Tesla的神經網絡都需要經歷哪些步驟,才能從超級電腦所組成的訓練營中畢業,正式加載到車輛上來使用。
量化與剪枝
首先是量化,神經網絡的參數大多使用32位的浮點數及計算,這種浮點數描述精度雖然很高,但是計算起來費時費電,不適合直接用在車載系統上,于是就有了量化這個方法,把32位的浮點數用8位的整數單位來表示,這是一種映射的方法,來實現對參數體積的整體壓縮。
很多硬件的都為這個方法提供支持和低耗能的優化,不過付出的代價就是在精度上的降低,畢竟八位空間比32位縮小了四倍。
對于這一點,各家應對的方法也是八仙過海,各顯神通。Tesla目前的做法是使用QAT量化感知訓練,把量化直接加入到訓練過程中,來減小在精度上的損失。
Tesla下一步的目標,則是要使用自家推崇的新型存儲格式,針對實際使用的C float 8,8位可調節浮點數,和為了神經網絡訓練的c float 16,16位可調節浮點數,這兩個格式和Tesla的超級電腦Dojo道場系統有很密切的聯系,簡單的說,就是由軟件自動決定和調節參數的存儲格式,從而滿足不同神經網絡對參數的精準度和表述能力的不同需求。
除了量化還有剪枝,神經網絡參數并不是所有的都有用,剪枝呢就是把用不或者是對結果影響不大的部分直接剪掉來實現給參數減肥的目的。
在經歷的這些個步驟的折騰之后,我以為Tesla HydraNet的參數,說十幾個G有點兒扯,不過幾個G還是應該要有的,所以當得知HydraNet整個神經網絡的代碼加參數,只要一個G左右的時候,我是真心覺得Tesla的工程團隊牛啊。
然而盡管Tesla已經把HydraNet壓到1 G的尺寸,但還是沒有辦法一次完整的加載到硬件3.0的緩存中,這可咋整?
模型動態加載
動態加載! 就是把整個網絡和參數分割成一個個小模塊兒,需要用哪個就加載哪個,緩存里的模塊只要計算完成就馬上被清理掉,為下一個模塊騰地方,這個邏輯聽起來很簡單,但工程上的實踐絕非易事,尤其是以低延遲為限制條件的自動駕駛場景。
講想到這一步啊,我想大家也應該看出來了,任何可以加入Tesla自動駕駛系統的部件,都必須經過各種優化,并且在使用中嚴格的遵守各種規則,從而實現對系統資源利用的最大化。
Auto Labeler
也就是說,能在車載系統上使用的神經網絡都是經歷了千錘百練,并且在工程質量和系統成熟度方面都已經達到一定的高度,這也就回到了開頭Karpathy大神所說的:未經雕琢,還不適合在行車系統上使用。
說白了,就是這個做全景分割的系統,目前還做不到行車系統低運算成本、低延遲的要求,不過這并不是說這個系統沒用處,恰恰相反,這個全景分割的系統在成正果之前,可以先去給 Auto Labeler —— 自動標注系統幫幫忙。
自動標注系統本身的設計初衷,就是使用高精度的神經網絡來輔助 Tesla 的人工標注團隊進行視頻數據的標注和處理,對這些網絡的要求就是在視頻標記這個任務上實現接近人類甚至是超過人類的水平,所以是精度第一,體積和耗能都在其次。
按照AI Day上Tesla自己的說法,盡管 Tesla 最多時擁有上千人的標記團隊,但是仍然沒有辦法滿足對海量視頻數據進行標記的需求。
根據埃隆馬斯克機器制造機器的原則,Tesla很自然的做法,就是使用這千人標記團隊,整理標記出來的高質量數據,來訓練自動標注系統中各類使用了目前最新的研究和理論的神經網絡,再由這些網絡去處理Tesla從各位車主那兒收集到的海量視頻數據。
這自動標注系統就好比是Tesla制造出的數據生產線,Tesla只要維護和升級這生產線,高質量的標記數據要多少有多少,而且在這自動標記系統中,同一項標注工作可以同時使用不同的算法來完成,不同算法得到的結果直接進行對比,相互驗證,從而不停的迭代進化。
同時自動標注系統擁有一定在時間線上的優勢,可以實現對預測任務的自我驗證。咱們來舉個不太準確的例子,比如在一段30秒的視頻中,行人從左到右橫穿馬路,做運動預測的系統,就可以用前兩秒來學習和預測第三秒,而第三秒的視頻信息咱們已經有了,可以直接和系統做的預測做對比,預測錯了就打回去重新,預測對了就繼續,接著用第二和第三秒預測第四秒,周而復始地實現自己學習自己驗證的目的。
最后,總結一下,Tesla在視覺感知系統上所取得的成就可以說是突飛猛進,而感知系統上只依賴視覺系統的選擇,也使得Tesla在全自動駕駛的實現策略上和其他廠商形成了本質的區別,不只是不使用激光雷達這一類主動傳感器那么簡單。
總結
以上是生活随笔為你收集整理的深度探秘 从 Auto Labeler 挖掘 Tesla 全自动驾驶的工作机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度理解特斯拉自动驾驶解决方案 2:向量
- 下一篇: LeetCode Algorithm 6