特斯拉是一家很開放的車企。
所謂開放,指的是馬斯克年初那一句「特斯拉愿意開放并共享自己的所有專利」,還有在 GitHub 上公開了自家車機操作系統(tǒng)的底層代碼,以及在全球最大的軟件 BUG 討論社區(qū) Bugcrowd 里面發(fā)下英雄帖,廣邀全球黑客黑自家系統(tǒng)。
近日,特斯拉再一次將自家 Autopilot 的秘密向世界公開。特斯拉AI部門高級主管 Andrej Karpathy 近日出席了一個有關(guān)深度學習的會議——PyTorch Developer Conference 2019,并且進行了一段時長 11 分鐘的演講,主題就是 Autopilot 如何在計算機視覺深度學習中應(yīng)用 PyTorch。
眾所周知,特斯拉堅決不支持汽車界普遍力撐的激光雷達方案,而是堅持走純視覺識別路線,Andrej Karpathy 這次演講,等于用一種硬核的方式,再一次向世界宣戰(zhàn)。
我們將這次演講的精華部分摘錄下來,并以盡量簡練的語言解釋,于是就有了今天的文章。
-
什么是 PyTorch?
電動星球注:BSD License 最早在1988 年由加州大學伯克利分校起草,是目前給予使用者最高自由的開源協(xié)議,使用者基本上可以「為所欲為」地修改源代碼,并且將代碼打包成專有軟件。
至于 PyTorch,則是 Torch 使用 Python 語言編寫的版本。
Torch 的底層是由 C 語言和 Lua 語言編寫的,C 語言作為底層,而 Lua 語言作為深度學習庫,兩種語言都非常優(yōu)秀,實際上目前仍然有很多大型企業(yè)采用 Torch 進行深度學習,比如上文提到的幾家。
2017 年 1 月, PyTorch 正式在 GitHub 上發(fā)布,號稱擁有更高的編譯和運行效率,而實際上它也做到了——靠的就是 Python 語言。
一句話總結(jié)一下 1989 年出生的 Python:常被戲稱為「膠水語言」,因為 Python 能夠基于其他語言的各種模塊結(jié)合到一起。根據(jù)權(quán)威數(shù)據(jù)挖掘網(wǎng)站 KDnuggets 的調(diào)查,Python 已經(jīng)成為最受 AI 從業(yè)者歡迎的語言。基于 Python 語言的 PyTorch 框架,也同樣獲得了眾多企業(yè)和研究者的青睞。單說自動駕駛方面,除了特斯拉,Uber 也和斯坦福大學基于 PyTorch 研發(fā)出開源概率編程語言 Pyro。除此以外,F(xiàn)acebook、英偉達、美國艾倫人工智能研究所也都走在了 PyTorch 應(yīng)用的前頭。
-
特斯拉如何利用 PyTorch?
Andrej Karpathy 在演講的開場這樣說:「由于我們沒有采用激光雷達,也沒有采用高精度地圖,所以 Autopilot 的一切功能,都依賴于來自車身四周 8 個攝像頭提供原始圖像之后,再進行的計算機視覺運算。」
他隨后給出了一張流程圖,里面是 Autopilot 工作的所有流程,有趣的是,Andrej Karpathy將這一套流程稱為「Operation Vacation(操作假期)」,他說「因為現(xiàn)階段我的團隊已經(jīng)可以在椅子上葛優(yōu)癱,然后數(shù)據(jù)就會從特斯拉的車子上傳過來,在神經(jīng)網(wǎng)絡(luò)模型上自己不斷循環(huán)運行」:
特斯拉AI部門令人艷羨的「假期」里面,「PyTorch Distributed Training」占了單獨的一個部分——但憑什么呢?
先上結(jié)論:特斯拉利用 PyTorch 框架效率更高的特點,不斷將 Autopilot 軟件的并行學習性能進一步提升。以上圖為例,在以上的典型場景內(nèi),Autopilot 需要同時處理 10 個不同類別的任務(wù)——而道路場景是極其復雜的,也就是說,Autopilot 時刻面臨著數(shù)十個任務(wù)并行處理的挑戰(zhàn)。Andrej Karpathy 的原話是「almost 100 tasks(幾乎同時處理 100 個任務(wù))」。
為了有效處理將近 100 個并行任務(wù),特斯拉采用了「類 ResNet-50」的骨干網(wǎng)絡(luò)。那什么是 ResNet-50?
隨著深度學習研究的不斷發(fā)展,深度學習神經(jīng)網(wǎng)絡(luò)也在不斷加深,而隨著網(wǎng)絡(luò)深度的上升,訓練準確度也會隨之下降,ResNet 就是因此而生,它的中文名叫做深度殘差網(wǎng)絡(luò)。ResNet 有多個不同版本,包括 ResNet30/50/101 等,主要區(qū)分度在于 Layer 卷積層和 Block 區(qū)塊數(shù)量上,這里就不展開了(畢竟是個汽車公眾號…)。
然而,即使采用了更高效的網(wǎng)絡(luò),Andrej Karpathy 依然表示「我們無法讓每一個任務(wù)都享有單獨的神經(jīng)網(wǎng)絡(luò)運算,因為同時處理的任務(wù)數(shù)實在太多,我們只能把一些運算分攤到共享骨干網(wǎng)絡(luò)上」。Andrej Karpathy將分攤到共享骨干網(wǎng)絡(luò)上的任務(wù)稱作「Hydra Nets(Hydra 意為九頭蛇)」,中二之余又不失準確。比如說下圖高速公路上行駛時的物體識別:
還有 Smart Summon 模式下道路邊緣的識別與確定:
Andrej Karpathy 將這種類型的計算稱為「在圖像中進行預(yù)測,以空間和時間為維度將這些圖像有選擇性地部分刪除,同時通過圖像拼接和變換,以此讓車輛明白現(xiàn)在所處的位置」:另一個依賴 PyTorch 提升運行效率的,叫做 Recurrent Tasks。
Recurrent Tasks 是來自于 RNN 的運算任務(wù),中文名有兩個,有的翻譯成循環(huán)神經(jīng)網(wǎng)絡(luò),更主流的譯法是遞歸神經(jīng)網(wǎng)絡(luò),因為 RNN 有兩個算法變體——一種是時間遞歸神經(jīng)網(wǎng)絡(luò)(recurrent neural network),另一種是結(jié)構(gòu)遞歸神經(jīng)網(wǎng)絡(luò)(recursive neural network),兩者的縮寫都是 RNN。
RNN 聽起來雖然很陽春白雪,但它已經(jīng)在實際應(yīng)用中為我們默默服務(wù)了很久——機器翻譯、語音識別、生物研究中的 DNA 序列分析,都應(yīng)用了 RNN 運算。而在自動駕駛中,RNN 通常被應(yīng)用在前方道路預(yù)測中。
Andrej Karpathy 舉了以上的場景做例子,解釋 Recurrent Tasks 提升效率之后,對 Road Layout Prediction(道路層預(yù)測)的重要性:
「我們給每臺攝像頭都配備了相應(yīng)的 Hydra Nets,但很多時候你需要同時采集多個攝像頭的數(shù)據(jù),然后再進行運算。比如說在過一個三岔路口的時候,我們有三個攝像頭同時為這個場景的深度學習運算輸入圖像數(shù)據(jù)。此時的神經(jīng)網(wǎng)絡(luò)預(yù)測就不再只是單純的圖像識別,而是基于總-分結(jié)構(gòu)的復合運算?!?
談到這個場景的時候,Andrej Karpathy 順便以此為例子,對Hydra Nets給出了進一步的解釋:
「我們?yōu)樗械挠嬎闳蝿?wù)準備了 8 個 HydraNets,當然所有 Hydra Nets 的運算任務(wù)都可以進一步進入 RNN 做遞歸運算。然后我們可以按照這樣的總-分結(jié)構(gòu)做輸出。也就是說,Autopilot 軟件里面有一個大型的單一計算網(wǎng)絡(luò),然后每一個任務(wù)都可以分采樣這個計算網(wǎng)絡(luò)(接收到的圖像)的一小部分,然后訓練那一小部分的神經(jīng)網(wǎng)絡(luò)?!?
「比如說,我們可以單獨訓練攝像頭的障礙物探測功能,或者是色彩深度網(wǎng)絡(luò),又或者是道路布局網(wǎng)絡(luò)。所有單一任務(wù)都分采樣了圖像數(shù)據(jù)的一小部分,然后單獨訓練那一部分(的神經(jīng)網(wǎng)絡(luò))」。
接下來,Andrej Karpathy 用了一張圖展示了 Autopilot 軟件需要處理的圖像數(shù)據(jù)量:
乍眼一看,這張圖里面只有兩個數(shù)字是可以望文生義的:代表原因的8個攝像頭和代表結(jié)果的 4096 幅圖像。而其中的過程則相當復雜。
Time steps 和 Batch size 需要一起講,沒有寫中文是因為現(xiàn)在的深度學習界依然沒有給它們一個比較信達雅的官方翻譯。其中 Batch size 代表了在深度學習網(wǎng)絡(luò)中單一批次的數(shù)據(jù)數(shù)量,比如我們往一個 RNN 里面輸入 100 條數(shù)據(jù),分成 10 個 Batch,那 Batch size 就是 10。
至于 Time steps 則是預(yù)測最終值需要的最大「步數(shù)」,比如說 Autopilot 軟件的 Time steps 是 16,也就是說每次會生成 x0-x15,一共 16 組數(shù)據(jù),最終預(yù)測結(jié)果——每次,指的就是圖中每一個「Forward pass」。
目前深度學習最熱門的硬件是 GPU,Andrej Karpathy 則用了一張圖來描述 Autopilot 神經(jīng)網(wǎng)絡(luò)對于 GPU 運算的要求有多高:
在圖中顯示的 70000 GPU Hours,表示Autopilot深度計算網(wǎng)絡(luò)如果用單一GPU運算需要用到 7 萬小時——Andrej Karpathy 的原話是「如果你用一組 8 個 GPU 去訓練 Autopilot 的深度運算網(wǎng)絡(luò),你得花一年」——當然他沒說用作對比的是什么 GPU。
最后,Andrej Karpathy 例牌吹了一波自家的 FSD 芯片,特斯拉的 11 分鐘炫技至此全部結(jié)束——但這一次的 PPT 和 4 月份發(fā)布時有所不同,硬件 3.0 的工作功耗不再用250W/英里這樣的單位定義,而是換算過來更低的「Sub 100W(低于 100W)」——至于是不是特斯拉式神優(yōu)化,我們只能等 FSD 芯片大規(guī)模裝機之后才能知道了。
-
結(jié)語
今天 Andrej Karpathy 的演講,雖然不太準確,但我們可以嘗試用一句話概括——特斯拉很希望把你的車變成一個人。
今年 4 月份 FSD 芯片發(fā)布的時候,Andrej Karpathy 說過一句話,宣布了特斯拉與激光雷達徹底絕緣:「你會開車是因為你的眼睛看到了路況,而不是你的眼睛發(fā)射出激光」。今天,Andrej Karpathy 也說了「我們不用高精度地圖」。
于是,一輛逐步走向自動駕駛的特斯拉,在行為模式上會變得越來越像人——用眼睛收集圖像數(shù)據(jù),然后用大腦判斷自身所處環(huán)境,指揮四肢做出行動。
特斯拉的邏輯似乎更接近人類本能,但卻是汽車界實打?qū)嵉纳贁?shù)派。傳統(tǒng)汽車界,包括造車新勢力,都對激光雷達和高精度地圖抱有更高的信心。
蟹老板上周體驗小鵬 P7的時候說過這么一段話:
「超視距+實時在線,這是我們認為小鵬 P7 在自動駕駛方案上與特斯拉最大的不同。某種程度上,你可以將特斯拉看成桌面端或者單機的,將小鵬 P7 看成是移動端或者聯(lián)網(wǎng)的?!?
特斯拉已經(jīng)在純視覺方案這條路上越走越遠,但馬斯克真的是對的嗎?他能以一己之力對抗全世界嗎?你們的意見又是什么?(完)來源:第一電動網(wǎng)