Categories
程式開發

用PyTorch單挑全世界,特斯拉是如何實現自動駕駛的?


概要

  • 特斯拉的工程師們正致力於開發一種發展自動駕駛技術的方法,這種方法能夠真正適應數據的擴展,而不用因為數據規模擴展而增加工程師的人力。
  • 工程師們還在試圖盡可能有效地利用打標工人。這意味著要將數十億英里駕駛過程中出現的計算機視覺錯誤樣本都積累起來。
  • 人類輸入是一種信號源。人類行為能夠告訴機器哪些地方做錯了,在一些場景下還能夠告訴機器怎樣做是對的。
  • 不管特斯拉是否會在全自動駕駛技術領域取得成功,但有一點是肯定的,特斯拉會在城市環境中部署半自動駕駛汽車。

Andrej Karpathy是特斯拉(TSLA,https://seekingalpha.com/symbol/TSLA)的AI高級總監,他最近發表了一次演講(https://youtu.be/oBklltKXtDE),在演講中,他半開玩笑地揭開了“運營假期”的神秘面紗。這裡面的想法是將特斯拉的機器學習流水線自動化,這樣所有的工程師就可以度假去啦,而特斯拉的半自動駕駛功能將會自動地繼續完善。特斯拉汽車將繼續自動上傳數據,手動標註數據的工人將繼續在必要的地方對數據打標,神經網絡將自動地在新數據上進行訓練,然後,改進的網絡就會被部署到汽車上了。這個過程一直往復循環。

讓工程師們去度假只是開玩笑的說法啦,因為總會有事情要做的,創新的腳步絕不會停止。而且,即使整個過程可以完全自動化,明智的做法也是讓人們監視這套機制,看看是否如預期那樣運轉。但是,重點在於自動駕駛(Autopilot)、召喚(Summon)以及其他概念功能的改進都是以自動化方式為主。軟件開發傳統上是工程師的工作。 “運營假期”的目標是讓特斯拉的工程師更像是工廠裡的工程師。工廠投入運行之前,這些工程師用很長的時間來做大量準備工作。一旦工廠運轉起來,就需要大量的非工程師人員來保持其運行。目前仍然需要工程師們來檢查機器,並在出現問題時修復系統或者做出改進。但總的來說,工廠的運轉是獨立於工程師的工作的。相比之下,傳統的軟件開發流程更像是工程師們親自來打造產品。

用PyTorch單挑全世界,特斯拉是如何實現自動駕駛的? 1

來自Andrej Karpathy的演講ppt,它展示了特斯拉的機器學習流程。

特斯拉是想打造一種實現自動化目標的方法,這種方法能夠適應不斷擴增的數據規模,因為特斯拉擁有全球最大規模的車輛網絡來收集數據,這些車輛上配置了傳感器和計算機,並且都連入了互聯網。這種方法最大的瓶頸就在於支付給標註工人的薪水。在計算機視覺任務中,特斯拉需要不斷地把新產生的、手動打標過的照相機數據添加到訓練集裡,這樣才能不斷增加算法能力,但這種方式難以適應不斷擴增的可收集數據規模,而只能應付這些數據的一個子集,這個子集規模對應於特斯拉能夠承受的打標成本。特斯拉也許可以收集1萬億張交通燈照片,但是卻支付不起同樣規模的打標(指將照片中的交通燈標註為紅、綠或黃三種顏色)費用。

對於需要手動打標的任務,特斯拉採用的方法不允許純粹地增加標註數據的數量,而是通過獲取更高質量的數據來加速機器學習過程。最有價值的訓練數據樣本是現有的神經網絡模型不能正確預測的樣本。也許,這個模型錯誤預測了物體的類別、誤報了一個並不存在的物體,或者漏檢了照片上拍到的物體。通過“運營假期”所代表的自動化過程,特斯拉比起其競爭對手來說,能夠更多地捕捉到這類有價值的數據樣本。

想像一輛特斯拉汽車在自動駕駛導航(屬於其自動駕駛技術的一個版本,能夠讓特斯拉汽車自動切換車道)模式下沿著高速公路行駛。這輛特斯拉自動發起了車道切換程序,但沒有註意到相鄰車道上來了一輛皮卡。特斯拉汽車裡的司機趕緊打了方向盤,退出了自動駕駛模式,取消了車道切換過程。這次人工干預會觸發一次快照,快照可能包含一段短視頻剪輯,這段視頻剪輯將由特斯拉汽車的8個照相機、雷達數據、GPS數據等組合得到。特斯拉的手動標註人員會審查這段視頻剪輯,他們會看到特斯拉的神經網絡沒有檢測到這兩皮卡,標註人員就會在這兩卡車周圍畫一個3D方框,標上“輕型卡車”,然後把標註好的視頻剪輯發送到特斯拉總部,包含在訓練數據集裡。

現在想像一輛特斯拉在完全由人類司機控制的情況下沿著高速公路行駛。突然,特斯拉前面的一輛小型貨車司機猛踩了剎車,相應地,特斯拉司機也猛踩了剎車。特斯拉汽車上的計算機自動駕駛軟件其實是在默默運行著的,它安靜地“觀察”著人類司機的行車軌跡,每時每刻都會估算自動駕駛模型會採用同樣行車軌蹟的可能性。在這種情況下,自動駕駛軟件沒能夠檢測到這輛小型貨車。在這個自動駕駛軟件看來,這位人類司機在空曠的高速公路上猛踩剎車只是很隨機的一種行為。於是,它會給這位司機的行車軌跡賦予一個較低的概率;也就是說,自動駕駛軟件對這位司機的行為感到“驚訝”。人類司機行車軌跡和機器生成的行車軌蹟之間的這種“驚訝”或者說“分歧”,會觸發一次快照,然後會上傳到特斯拉的數據標註人員那裡。 (我理解這就是特斯拉“影子模式”的工作方式。)

關於自動駕駛的一件可怕的事情是,當模型錯誤率變得更低時,你需要更多的錯誤數據樣本加入訓練才能讓錯誤率繼續減半。隨著你的系統產生的錯誤越來越少,維持系統改良速率所需的錯誤樣本卻是越來越多。你需要的錯誤樣本越多,它們就越難收集全。假設Waymo已經將嚴重的計算機視覺錯誤(例如:導致汽車異常行為的錯誤,這類異常行為是能被安全駕駛員確認的)降低到了每1萬英里1個錯誤。 (這不是一個真實的數據,只是為了說明問題而虛構的例子。)由於Waymo每月大約行駛100萬英里,所以每月只會產生100個嚴重的計算機視覺錯誤樣本。給這些錯誤樣本打標現在是沒問題的,但是要找到它們卻是很費勁的。作為對比,我們看下,如果Waymo每月行駛10億英里,那每月就會產生10萬個錯誤樣本。通過這個方式,蒐集起來的錯誤樣本數量是隨行駛的里程數增加而增加的。

自從2018年11月發布自動駕駛導航以來的12個月內,自動駕駛導航模式下的特斯拉汽車已經行駛了10億英里。平均下來每月行駛8300萬英里。以後,這個月度數據還會繼續增長,因為過去12個月裡,具有自動駕駛導航功能的特斯拉汽車幾乎增長了一倍,所以在接下來的12個月裡,這個月度數據很可能會增加50%(假設特斯拉目前的生產速度至少不會下降)。帶有自動駕駛2.0及以上版本(https://lexfridman.com/tesla-autopilot-miles-and-vehicles/)硬件的特斯拉車輛目前總共有大約65萬輛。假設平均行駛里程數和美國人的均值(https://www.fhwa.dot.gov/ohim/onh00/bar8.htm)保持一致,總共的行駛里程數(包括完全由人類司機駕駛以及自動駕駛的里程數)大約是每月7.25億英里。兩種行駛模式都給“運營假期”提供了數據,就像以上解釋的那樣。自動駕駛模式下,人類干預標誌著機器產生了錯誤或者​​人類司機認為這種情況對自動駕駛來說太難了。在手動駕駛模式下,人類和自動駕駛的“分歧”也標誌著機器錯誤。

到目前為止,我只討論了人類打標人員在“運營假期”循環流程裡的情況。如果我們從流程裡不僅移除了工程師,還移除了打標人員會怎樣呢?把這整個處理流程都交給機器會怎樣呢?

機器學習裡令人驚訝的一個發現是,如果你使用了標註質量很差的數據訓練時,有時候你可以獲得和標註質量很好的數據訓練同樣的結果,只要你使用的質量較差的數據量是標註質量較好數據的1000倍。 Facebook發現(https://engineering.fb.com/ml-applications/advancing-state-of-the-art-image-recognition-with-deep-learning-on-hashtags/)Instagram的標籤(通常與其對應圖片的實際內容僅有微弱的聯繫)可以用來訓練神經網絡,這樣訓練出來的模型能夠精確地給物體分類。這裡的訣竅是,Facebook使用了10億張Instagram帶有標籤的圖片,幾乎實現了和100萬手動標註的圖片同樣的精確度。 Facebook還發現了(https://ai.facebook.com/blog/billion-scale-semi-supervised-learning/),如果你結合兩種圖片,相比於單獨訓練其中任意一種,都能實現更高的精確度。

特斯拉有著65萬人類司機,這是大量低質量標註數據的來源。在所謂的弱監督方式中(和完全監督方式相對,後者意味著標註人員會以手動的方式精心標註圖片),我上面描述的標記數據的操作(用於後續做手動打標),可以被看做是低質量的打標。如果自動駕駛軟件本來檢測到某處有障礙物,可是人類司機卻行駛到了那裡,那麼這個地方就會被自動標記為無障礙物。相反,如果自動駕駛軟件檢測到某處十分空曠,可是人類司機卻在開到它旁邊時停了下來,那這個地方就會被自動標記為有障礙物。這是一種混亂的方式,但這個方式可以用豐富的免費的標籤來補充稀缺的、昂貴的標籤。 (想了解關於這個方式的更多內容,可以閱讀這裡的研究論文,https://arxiv.org/pdf/1610.01238.pdf

特斯拉的自動駕駛崗位(https://web.archive.org/web/20190209090339/https://www.tesla.com/careers/job/autopilot-internship-co-opsummer2019-37950?redirect=no)長期以來一直要求候選人“能夠設計出一些方法,這些方法除了能夠使用豐富多樣的標註數據外,還能使用大量輕標註的數據。”在特斯拉的Autonomy Day發布會(https://youtu.be/Ucp0TTmvqOE)上,Karpathy描述了一種和我之前描述的類似的方法。通過人類駕駛標記的視頻剪輯,特斯拉訓練了一個神經網絡,用來感知和推斷前方道路的曲線和坡度(視頻可點擊:https://youtu.be/v5l-jPsAK7k)。

弱監督學習方法是真正適應數據擴增需求的方法,限制不再是人力成本(包括工程師人力成本和標註人員人力成本),而是道路里程數,通過互聯網傳輸的數據包以及特斯拉總部大量的GPU。機器學習過程就真的只是一台複雜的機器了,它自行運轉,這台機器的零部件能夠運轉多快,機器學習就能運行多快。而較緩慢的部分則是開發這個流程,和採取辦法讓它正常運轉起來的這段時間。

相比於計算機視覺,“運營假期”能夠更加容易地做出預測。當需要預測車輛和行人軌跡時,這裡有豐富的免費的高質量標籤:即未來。自動駕駛軟件會觀察一輛車目前的軌跡,在5秒之後,這輛車會用這5秒內實際走過的軌跡對這段觀察進行打標。如果你預測了一位行人要走到哪裡去,這位行人馬上就會向你展示你的預測精確度如何。於是,系統能夠自動發現錯誤,錯誤樣本也能通過正確的未來軌跡被自動標註。這是絕妙的理想場景。人力不再是束縛,資金不再是束縛;只有車輛和計算機才可能成為束縛。

路徑規劃也是一個理想的場景。可以運用同樣的原理,但是側重點不一樣。規劃器試圖決定汽車應當採取什麼行為。汽車觀察到的是完整的駕駛場景,由8個環繞的照相機和前置雷達捕捉信息。在手動模式下,神經網絡預測特斯拉的人類司機會做什麼,如果它預測錯了,就會自動標記這個錯誤(同樣的,這是我所理解的“影子模式”)。司機通過他們的行為給觀察到的駕駛場景進行了標註。除了是在人類司機干預的情況下標記錯誤樣本,自動駕駛模式和手動模式的原理是相同的。這個方式即所謂的模仿學習,最近被DeepMind團隊用於訓練神經網絡(https://twitter.com/OriolVinyalsML/status/1189619408894717953?s=20),這個網絡可以玩《星際爭霸》,而且比70%以上(https://www.rankedftw.com/stats/leagues/1v1/#v=2&r=-2&sx=a)的人類玩家都玩得更好。 Waymo(https://link.medium.com/4gThWBM4v1)也在挖掘模仿學習的潛力,自動駕駛汽車初創公司Aurora(https://slideslive.com/38917949/the-promise-and-challenge-of-ml-in-selfdriving?locale=cs)也很喜歡這類方法。 (但是,Waymo和Aurora不像特斯拉這樣有著65萬規模的人類司機,這些司機能夠提供大量的訓練數據)

所以總結起來,我認為“運營假期”有四大支撐優勢:

  • 自動標記計算機視覺錯誤,它們稍後會被上傳並且被手動標註(完全監督學習)。當人類司機退出自動駕駛模式,或者在手動模式下,自動駕駛規劃器與人類駕駛的行車軌跡出現“分歧”(或者令人“驚訝”的情況)時,都會將其標註為錯誤。
  • 使用從人類司機行為中獲取的低質量標籤,實現照相機數據的自動標註(計算機視覺的弱監督學習)。當計算機視覺神經網絡和人類司機產生“分歧”時(這個分歧也導致了自動駕駛生成了不同於人類司機使用的行車軌跡),訓練樣本會被上傳。
  • 針對預測的自動標註。未來事件能夠標註過去的事件,並能顯示預測的錯誤。
  • 針對規劃的自動標註。人類駕駛行為提供了標籤。當自動駕駛還在激活狀態時,如果人類干預了,或者在人類和自動駕駛規劃者之間產生了“分歧”,就會認為出現了錯誤。

預測和規劃是通過計算機視覺方法來追踪物體軌跡並觀察行駛場景的。計算機視覺錯誤可能會引起預測和規劃失效。所以,為了使其他部分實現最優運轉,必須修復計算機視覺錯誤。

反過來說,預測或規劃錯誤可能會觸發視頻剪輯的上傳,即便沒有產生任何計算機視覺錯誤。這類沒有正確標記的視頻剪輯會增加人類手動審查的工作量。因此,減少預測或規劃方面的錯誤能夠節省標註人員的時間,好讓他們聚焦在計算機視覺方法產生的錯誤上。通過改進視頻自動標記的精確度,可以幫助加快計算機視覺功能的進展速度。

特斯拉開發的方法正在盡可能地實現在數據規模擴增時,對人力擴增的需求減到最少,他們的工程師也因此站在了大規模自動駕駛機器學習的最前沿。自動的錯誤標記可以提升標註人員的標註效率。模仿學習的使用減少了工程師投入到路徑規划算法上的工作量;與其費力地手動編碼每一種駕駛行為,還不如讓算法從數據中自動學習這些行為。考慮到特斯拉汽車每月7.25億英里的駕駛里程,自動駕駛領域裡還沒有先例能用來判斷特斯拉的方式會有怎樣的效率。

一些懷疑論者認為完全解決計算機視覺問題是不可能的(https://tinyurl.com/zooxctotesla)。也許是這樣吧。但除非它真的發生了,否則我們無法確定。

開發一個每100英里就失效一次然後需要人類干預的2級(http://cyberlaw.stanford.edu/files/blogimages/LevelsofDrivingAutomation.png)自動駕駛系統, 要遠比開發一個每100萬英里才失效一次的4級或5級自動駕駛系統容易得多。即使特斯拉離全自動駕駛的目標還很遠,但幾乎可以肯定的是,特斯拉將會開發出能夠在城市街道上行駛的2級自動駕駛系統。在對未來的展望中,揮之不去的主要問題是,隨著機器錯誤發生得越來越少,司機是會仍然保持警惕並在必要時干預自動駕駛機器呢,還是會被引入一種錯誤的安全感呢。特斯拉可能需要實施司機監控系統,確保司機隨時集中註意力。朝向司機安放的照相機和已有的方向盤扭矩傳感器,這兩者的組合可能會比單獨使用扭矩傳感器更加有效。

對特斯拉來說,超級樂觀的前景是它最終開發出來了全自動駕駛系統,部署了機器人出租車。在這樣的局面下,特斯拉的市場份額即使不能十倍(https://raw.githubusercontent.com/ARKInvest/ARK-Invest-Tesla-Valuation-Model/master/Tesla%20Valuation%20for%20Github_5.27.19_v3.5.xlsx)地增加,也可以大致增加兩倍或者三倍(https://www.cnbc.com/2019/09/27/waymo-valuation-cut-40percent-by-morgan-stanley-to-105-billion.html)。稍溫和的樂觀局面會是特斯拉為城市駕駛發布了2級系統,特斯拉也非常棒地賣出了更多汽車和更多的“全自動駕駛”附加組件單元。銷售增長和汽車毛利率是投資者密切觀察的兩項關鍵指標;特斯拉的城市2級系統能夠給這兩項指標都帶來超預期的貢獻。 (Andrej Karpathy的演講視頻請點擊:https://youtu.be/oBklltKXtDE,視頻中他描述了“運營假期”)

利益相關:我/我們是TSLA長期合作夥伴。我自己創作了這篇文章,本文表達了我的個人觀點。我們沒有因此接受任何經濟酬勞(除了來自Seeking Alpha的稿費)。我與文中提及了股票的所有這些公司都沒有業務關係。

原文鏈接
Tesla: ‘Operation Vacation’