特斯拉Autopilot如何單挑全世界?

特斯拉Autopilot如何單挑全世界?

特斯拉是一家很開放的車企。

所謂開放,指的是馬斯克年初那一句「特斯拉願意開放並共享自己的所有專利」,還有在 GitHub 上公開了自家車機操作系統的底層代碼,以及在全球最大的軟件 BUG 討論社區 Bugcrowd 裡面發下英雄帖,廣邀全球黑客黑自家系統。

特斯拉Autopilot如何单挑全世界?

近日,特斯拉再一次將自家 Autopilot 的秘密向世界公開。特斯拉AI部門高級主管 Andrej Karpathy 近日出席了一個有關深度學習的會議——PyTorch Developer Conference 2019,並且進行了一段時長 11 分鐘的演講,主題就是 Autopilot 如何在計算機視覺深度學習中應用 PyTorch。

特斯拉Autopilot如何单挑全世界?

眾所周知,特斯拉堅決不支持汽車界普遍力撐的激光雷達方案,而是堅持走純視覺識別路線,Andrej Karpathy 這次演講,等於用一種硬核的方式,再一次向世界宣戰。

我們將這次演講的精華部分摘錄下來,並以儘量簡練的語言解釋,於是就有了今天的文章。

  • 什麼是 PyTorch?

要討論 Andrej Karpathy 在這個視頻裡面說了什麼,我們先來搞清楚一個概念——PyTorch。

PyTorch 的「祖先」叫做 Torch(意思為火炬),Torch 是一個基於 BSD License 的開源機器學習框架,最早的 Torch 版本於 2002 年發佈,主要應用於圖像和視頻類的深度學習,目前谷歌、Facebook、Twitter 都應用了 Torch 的分支版本。

特斯拉Autopilot如何单挑全世界?

電動星球注:BSD License 最早在1988 年由加州大學伯克利分校起草,是目前給予使用者最高自由的開源協議,使用者基本上可以「為所欲為」地修改源代碼,並且將代碼打包成專有軟件。

至於 PyTorch,則是 Torch 使用 Python 語言編寫的版本。

Torch 的底層是由 C 語言和 Lua 語言編寫的,C 語言作為底層,而 Lua 語言作為深度學習庫,兩種語言都非常優秀,實際上目前仍然有很多大型企業採用 Torch 進行深度學習,比如上文提到的幾家。

2017 年 1 月, PyTorch 正式在 GitHub 上發佈,號稱擁有更高的編譯和運行效率,而實際上它也做到了——靠的就是 Python 語言。

一句話總結一下 1989 年出生的 Python:常被戲稱為「膠水語言」,因為 Python 能夠基於其他語言的各種模塊結合到一起。根據權威數據挖掘網站 KDnuggets 的調查,Python 已經成為最受 AI 從業者歡迎的語言。

特斯拉Autopilot如何单挑全世界?

基於 Python 語言的 PyTorch 框架,也同樣獲得了眾多企業和研究者的青睞。單說自動駕駛方面,除了特斯拉,Uber 也和斯坦福大學基於 PyTorch 研發出開源概率編程語言 Pyro。除此以外,Facebook、英偉達、美國艾倫人工智能研究所也都走在了 PyTorch 應用的前頭。

特斯拉Autopilot如何单挑全世界?
  • 特斯拉如何利用 PyTorch?

Andrej Karpathy 在演講的開場這樣說:「由於我們沒有采用激光雷達,也沒有采用高精度地圖,所以 Autopilot 的一切功能,都依賴於來自車身四周 8 個攝像頭提供原始圖像之後,再進行的計算機視覺運算。」

他隨後給出了一張流程圖,裡面是 Autopilot 工作的所有流程,有趣的是,Andrej Karpathy將這一套流程稱為「Operation Vacation(操作假期)」,他說「因為現階段我的團隊已經可以在椅子上葛優癱,然後數據就會從特斯拉的車子上傳過來,在神經網絡模型上自己不斷循環運行」:

特斯拉Autopilot如何单挑全世界?

特斯拉AI部門令人豔羨的「假期」裡面,「PyTorch Distributed Training」佔了單獨的一個部分——但憑什麼呢?

先上結論:特斯拉利用 PyTorch 框架效率更高的特點,不斷將 Autopilot 軟件的並行學習性能進一步提升。

特斯拉Autopilot如何单挑全世界?

以上圖為例,在以上的典型場景內,Autopilot 需要同時處理 10 個不同類別的任務——而道路場景是極其複雜的,也就是說,Autopilot 時刻面臨著數十個任務並行處理的挑戰。Andrej Karpathy 的原話是「almost 100 tasks(幾乎同時處理 100 個任務)」。

特斯拉Autopilot如何单挑全世界?

為了有效處理將近 100 個並行任務,特斯拉採用了「類 ResNet-50」的骨幹網絡。那什麼是 ResNet-50?

隨著深度學習研究的不斷髮展,深度學習神經網絡也在不斷加深,而隨著網絡深度的上升,訓練準確度也會隨之下降,ResNet 就是因此而生,它的中文名叫做深度殘差網絡。ResNet 有多個不同版本,包括 ResNet30/50/101 等,主要區分度在於 Layer 卷積層和 Block 區塊數量上,這裡就不展開了(畢竟是個汽車公眾號…)。

然而,即使採用了更高效的網絡,Andrej Karpathy 依然表示「我們無法讓每一個任務都享有單獨的神經網絡運算,因為同時處理的任務數實在太多,我們只能把一些運算分攤到共享骨幹網絡上」。

Andrej Karpathy將分攤到共享骨幹網絡上的任務稱作「Hydra Nets(Hydra 意為九頭蛇)」,中二之餘又不失準確。比如說下圖高速公路上行駛時的物體識別:

特斯拉Autopilot如何单挑全世界?

還有 Smart Summon 模式下道路邊緣的識別與確定:

特斯拉Autopilot如何单挑全世界?

Andrej Karpathy 將這種類型的計算稱為「在圖像中進行預測,以空間和時間為維度將這些圖像有選擇性地部分刪除,同時通過圖像拼接和變換,以此讓車輛明白現在所處的位置」:

另一個依賴 PyTorch 提升運行效率的,叫做 Recurrent Tasks。

特斯拉Autopilot如何单挑全世界?

Recurrent Tasks 是來自於 RNN 的運算任務,中文名有兩個,有的翻譯成循環神經網絡,更主流的譯法是遞歸神經網絡,因為 RNN 有兩個算法變體——一種是時間遞歸神經網絡(recurrent neural network),另一種是結構遞歸神經網絡(recursive neural network),兩者的縮寫都是 RNN。

RNN 聽起來雖然很陽春白雪,但它已經在實際應用中為我們默默服務了很久——機器翻譯、語音識別、生物研究中的 DNA 序列分析,都應用了 RNN 運算。而在自動駕駛中,RNN 通常被應用在前方道路預測中。

特斯拉Autopilot如何单挑全世界?

Andrej Karpathy 舉了以上的場景做例子,解釋 Recurrent Tasks 提升效率之後,對 Road Layout Prediction(道路層預測)的重要性:

「我們給每臺攝像頭都配備了相應的 Hydra Nets,但很多時候你需要同時採集多個攝像頭的數據,然後再進行運算。比如說在過一個三岔路口的時候,我們有三個攝像頭同時為這個場景的深度學習運算輸入圖像數據。此時的神經網絡預測就不再只是單純的圖像識別,而是基於總-分結構的複合運算。」

談到這個場景的時候,Andrej Karpathy 順便以此為例子,對Hydra Nets給出了進一步的解釋:

特斯拉Autopilot如何单挑全世界?

「我們為所有的計算任務準備了 8 個 HydraNets,當然所有 Hydra Nets 的運算任務都可以進一步進入 RNN 做遞歸運算。然後我們可以按照這樣的總-分結構做輸出。也就是說,Autopilot 軟件裡面有一個大型的單一計算網絡,然後每一個任務都可以分採樣這個計算網絡(接收到的圖像)的一小部分,然後訓練那一小部分的神經網絡。」

「比如說,我們可以單獨訓練攝像頭的障礙物探測功能,或者是色彩深度網絡,又或者是道路佈局網絡。所有單一任務都分採樣了圖像數據的一小部分,然後單獨訓練那一部分(的神經網絡)」。

接下來,Andrej Karpathy 用了一張圖展示了 Autopilot 軟件需要處理的圖像數據量:

特斯拉Autopilot如何单挑全世界?

乍眼一看,這張圖裡面只有兩個數字是可以望文生義的:代表原因的8個攝像頭和代表結果的 4096 幅圖像。而其中的過程則相當複雜。

Time steps 和 Batch size 需要一起講,沒有寫中文是因為現在的深度學習界依然沒有給它們一個比較信達雅的官方翻譯。其中 Batch size 代表了在深度學習網絡中單一批次的數據數量,比如我們往一個 RNN 裡面輸入 100 條數據,分成 10 個 Batch,那 Batch size 就是 10。

至於 Time steps 則是預測最終值需要的最大「步數」,比如說 Autopilot 軟件的 Time steps 是 16,也就是說每次會生成 x0-x15,一共 16 組數據,最終預測結果——每次,指的就是圖中每一個「Forward pass」。

目前深度學習最熱門的硬件是 GPU,Andrej Karpathy 則用了一張圖來描述 Autopilot 神經網絡對於 GPU 運算的要求有多高:

特斯拉Autopilot如何单挑全世界?

在圖中顯示的 70000 GPU Hours,表示Autopilot深度計算網絡如果用單一GPU運算需要用到 7 萬小時——Andrej Karpathy 的原話是「如果你用一組 8 個 GPU 去訓練 Autopilot 的深度運算網絡,你得花一年」——當然他沒說用作對比的是什麼 GPU。

最後,Andrej Karpathy 例牌吹了一波自家的 FSD 芯片,特斯拉的 11 分鐘炫技至此全部結束——但這一次的 PPT 和 4 月份發佈時有所不同,硬件 3.0 的工作功耗不再用250W/英里這樣的單位定義,而是換算過來更低的「Sub 100W(低於 100W)」——至於是不是特斯拉式神優化,我們只能等 FSD 芯片大規模裝機之後才能知道了。

特斯拉Autopilot如何单挑全世界?
  • 結語

今天 Andrej Karpathy 的演講,雖然不太準確,但我們可以嘗試用一句話概括——特斯拉很希望把你的車變成一個人。

今年 4 月份 FSD 芯片發佈的時候,Andrej Karpathy 說過一句話,宣佈了特斯拉與激光雷達徹底絕緣:「你會開車是因為你的眼睛看到了路況,而不是你的眼睛發射出激光」。今天,Andrej Karpathy 也說了「我們不用高精度地圖」。

於是,一輛逐步走向自動駕駛的特斯拉,在行為模式上會變得越來越像人——用眼睛收集圖像數據,然後用大腦判斷自身所處環境,指揮四肢做出行動。

特斯拉的邏輯似乎更接近人類本能,但卻是汽車界實打實的少數派。傳統汽車界,包括造車新勢力,都對激光雷達和高精度地圖抱有更高的信心。

蟹老闆上週體驗小鵬 P7的時候說過這麼一段話:

「超視距+實時在線,這是我們認為小鵬 P7 在自動駕駛方案上與特斯拉最大的不同。某種程度上,你可以將特斯拉看成桌面端或者單機的,將小鵬 P7 看成是移動端或者聯網的。」

特斯拉已經在純視覺方案這條路上越走越遠,但馬斯克真的是對的嗎?他能以一己之力對抗全世界嗎?你們的意見又是什麼?(完)

本文地址:https://www.d1ev.com/kol/103446


分享到:


相關文章: