8月底,伴隨著FSD beta 10.69版本的發(fā)布,特斯拉自動駕駛Autopilot研發(fā)總監(jiān)Ashok Elluswamy(艾什克·艾盧艾米,以下文章用第一人稱表述)公布了一段視頻,其中特別演示了一段智能電動車如何實(shí)時檢測車輛周圍的障礙物,并如何進(jìn)行自動避讓的影像。實(shí)際上,自動駕駛和避障、剎停,在國內(nèi)一直是車迷們熱議的話題,也是大家從油換電繞不開的關(guān)注點(diǎn)。
人們也許不知道,過去幾年生產(chǎn)的每一輛特斯拉,都帶有Autopilot基本功能。Autopilot基本功能允許車輛保持車道,跟隨前車,彎道減速,等等。除了Autopilot基本功能,電動車還配備了標(biāo)準(zhǔn)安全功能,這些功能,如緊急制動、緊急轉(zhuǎn)向,可以避免許多類型的碰撞。
目前大約有10萬輛特斯拉擁有完全自動駕駛FSD beta軟件,這是目前最先進(jìn)的自動駕駛軟件,它能夠處理從停車場到城市街道,再到高速公路的所有駕駛過程。這個軟件可以控制汽車在交通燈和停車標(biāo)志前停車,合理避讓橫穿的車輛,并執(zhí)行有交通燈保護(hù)和無保護(hù)的左轉(zhuǎn)和右轉(zhuǎn),繞過停放的汽車和其他障礙物。
比如這些在舊金山密集的街區(qū)里開車的視頻。你在視頻里看到的所有內(nèi)容,如道路邊界、車道線、車輛,包括它們的位置、方向和速度,都是在我們車載計算機(jī)上,接收8個120萬像素的攝像頭數(shù)據(jù),運(yùn)行算法和神經(jīng)網(wǎng)絡(luò)生成的。
電動車在數(shù)據(jù)生成過程中,沒有使用雷達(dá)、激光雷達(dá)、超聲波或其他傳感器。事實(shí)上,甚至沒有使用高清地圖。所有這些數(shù)據(jù),都是基于實(shí)時攝像機(jī)視頻流產(chǎn)生的輸出,而汽車的規(guī)劃技術(shù)棧只需要這些原始的實(shí)時輸入,就可以在如此復(fù)雜的場景中進(jìn)行導(dǎo)航
當(dāng)開始搭建高級的技術(shù)棧時,我們想用某種方法來表示一般障礙物,一開始使用的是圖像空間的分割方法,這幾乎是個標(biāo)準(zhǔn)方法。這里,圖像空間的每個像素,都被標(biāo)記為可駕駛或不可駕駛。然后,我們希望規(guī)劃技術(shù)??梢允褂眠@個信息來導(dǎo)航場景。
但這種方法有幾個問題。首先,這些關(guān)于某個像素是否可駕駛的預(yù)測是在圖像空間中完成的,基于圖像的UV值,或者說,某個像素是可駕駛的像素,還是不可駕駛。但為了讓汽車能夠在三維世界中導(dǎo)航,它需要在三維空間中進(jìn)行預(yù)測,這樣才能建立互動的物理模型,并處理駕駛?cè)蝿?wù)。
但在從圖像空間轉(zhuǎn)變到三維空間的過程中,如果采用這樣的方式,像素分割會在系統(tǒng)中產(chǎn)生不必要的瑕疵或不必要的雜訊。
對一般障礙物進(jìn)行建模的另一個方法,是使用密集的深度信息。在這個任務(wù)中,你可以以像素為基礎(chǔ),讓網(wǎng)絡(luò)預(yù)測深度,這樣每個像素都會產(chǎn)生某個深度值。
但是,盡管這些深度圖在顏色空間中進(jìn)行可視化時,看起來非常漂亮,但把射線反向投影計算得到三維點(diǎn),并可視化這些三維點(diǎn)云時,你就會發(fā)現(xiàn)隨著距離的增加,它們就變得不一致,而且數(shù)據(jù)很難被后續(xù)流程所使用。例如,局部的深度變得不一致,因此,墻就不直了,可能是彎彎扭扭的。
這些深度圖是基于每個攝像機(jī)的圖像平面生成的,很難生成一個汽車周圍統(tǒng)一的三維空間。
對于這個問題,我們的解決方案就是內(nèi)部所稱的占用網(wǎng)絡(luò)(Occupancy Network)。
另外,這種表示方式也不能提供場景完整的三維結(jié)構(gòu),因此很難推理出所有懸空的障礙物,或者墻壁,或者其他可以遮擋場景的物體
占用網(wǎng)絡(luò),是一種基于學(xué)習(xí)的三維重建的方法,在應(yīng)用層面,汽車接收所有8個攝像機(jī)流作為輸入,并生成一個車周圍空間體積化的占用值。汽車周圍的每一個位置,網(wǎng)絡(luò)都會生成是否被占用的結(jié)果。事實(shí)上,它生成了一個三維位置被占用或不被占用的概率值。
如我所說,它接收所有8個攝像頭作為輸入,并生成了一個單一的體積化的輸出。這個輸出的產(chǎn)生,并不是通過拼接各個獨(dú)立的預(yù)測結(jié)果完成的,而是網(wǎng)絡(luò)完成所有的內(nèi)部傳感器融合,并產(chǎn)生一個單一的一致的輸出空間。
這些網(wǎng)絡(luò)能生成靜態(tài)物體的占用值,比如墻壁和樹木之類的東西,也能生成移動物體的動態(tài)占用值,比如車輛(大多數(shù)情況下),但有時,也包括其他移動的障礙物,如道路上的碎片.由于輸出空間直接是在三維空間中,我們可以通過遮擋來進(jìn)行預(yù)測,你可以預(yù)測一條曲線的存在,盡管它可能暫時被汽車遮擋。
這個方法在內(nèi)存和計算方面都非常高效,盡管表面上看可能并非如此,因?yàn)樗闪嗣芗娜S的占用值,看起來可能體積過于龐大。但最終,在內(nèi)存和計算效率上,這是一種更優(yōu)的方法,因?yàn)樗逊直媛史峙湓谀切╆P(guān)鍵的地方。
密集的深度圖或圖像中的可駕駛空間,遠(yuǎn)處的分辨率非常低,而近處的分辨率非常非常高。但在占用網(wǎng)絡(luò)中,在與駕駛有關(guān)的所有體積中,分辨率幾乎都一致,這讓它變得極其高效。例如在我們的計算平臺上運(yùn)行的時間小于10毫秒,這使得網(wǎng)絡(luò)可以以100赫茲的速度運(yùn)行,比攝像機(jī)產(chǎn)生圖像的速度快得多。
這些攝像頭以每秒36幀的速度產(chǎn)生圖像流,協(xié)同全面覆蓋汽車周圍360度的空間。每輛車都內(nèi)置了144 TOPS(每秒萬億次操作)算力的計算平臺,用于運(yùn)行這些神經(jīng)網(wǎng)絡(luò)
當(dāng)我們開始這個項(xiàng)目的時候,最初的目標(biāo)是只處理靜態(tài)物體,如墻或樹。因?yàn)槲覀冇泻芏嗖煌纳窠?jīng)網(wǎng)絡(luò)在車內(nèi)運(yùn)行,處理不同類型的障礙物,我們并沒有繼續(xù)搭建一個主要處理移動物體的網(wǎng)絡(luò),如車輛、行人、自行車手等。
而這時網(wǎng)絡(luò)也生成了車輛的完整運(yùn)動學(xué)數(shù)據(jù),如速度、加速度、動力等。
當(dāng)時我們想,好的,這里不需要處理移動物體,只需要處理靜態(tài)物體,如樹、墻等。但事實(shí)證明,這是有問題的,比如有一輛皮卡車看起來像一個柵欄。
當(dāng)一輛車在高速公路上移動時,我們顯然知道,它是一個移動物體,它被計算機(jī)正確判斷為一輛卡車。但當(dāng)車輛在紅綠燈下停了好幾分鐘后,好吧,它看起來像個柵欄。但顯然,任何人都不想開車撞上這輛車,我們想要繞過它,或者適當(dāng)?shù)胤怕俣取?/p>
這顯然是一場不可能打贏的仗,我們也不想打這場仗,我們只想避開這些障礙物,既不撞到移動的,也不撞到靜止的障礙物,不撞到任何東西。我們解決這個問題的方法,是在同一個框架中同時生成移動和靜止的障礙物,這樣一來,就不會有什么東西在移動和靜止之間的縫隙中逃脫。
為了說明這一點(diǎn),舉一個假想的例子,如果一輛汽車擁有無限的動力,它在高速公路上全速行駛,時速比如65英里。然后就在撞車前,在距離撞車前幾厘米,它進(jìn)行了猛烈的剎車,使用了幾乎無限的制動力。顯然,它會在撞上障礙物的那一瞬間之前停下來。
這樣做,雖然說達(dá)成了安全的目標(biāo),但首先,這不現(xiàn)實(shí),因?yàn)闆]有一輛汽車有無限的制動力。即使它有無限的制動力,我們也不想不必要地加以使用。例如,對于我們的特斯拉來說,它有每平方秒10到11米的制動力,但我們也不希望在不必要的情況下使用這所有的制動力。
其次,汽車可以開得很慢,比如汽車以1~2英里的時速低速“蠕動”。它可以在任何時候剎車,可以非常容易地避免碰撞,但開這么慢就太煩人了。這就是為什么我說,要以安全、舒適和速度合理的方式進(jìn)行駕駛,駕駛員還需要一點(diǎn)點(diǎn)智慧。
對于行人,這可能會變得更加棘手。路邊的行人,可能被判斷為雕像,有些人還蹲著,因?yàn)樽藙?,汽車把他辨識成一堆垃圾