自動駕駛的技術架構和生態發展
本文來自作者 劉盼 在 GitChat 上的分享
我們先以汽車在現代科技領域的演進來開始這次的 chat,最早的就是電動汽車,其中的代表無疑是特斯拉,相信大家對電動車還是比較熟悉的,這裡就不展開說明了。
最近很火的共享車,以滴滴來講,據滴滴官方報道平台用戶3億,車主1500萬,日均訂單有1400萬,從1400萬的數據來看訂單數已經超過美團,大眾點評。
在中國互聯網界僅次於阿里巴巴和京東,要知道滴滴是個非常年輕的公司,但是這1400萬的日均訂單也只佔整個出行市場的1%,可見整個出行市場的天花板還遠遠望不到頭。
接下來就是車聯網領域,車聯網是個很廣義的概念,涉及面很廣,確切來講屬於物聯網的一個終端。
下面以一張圖來了解車聯網涉及到的方方面面。
下面進入這次 chat 的主題,自動駕駛,目前市場上的自動駕駛公司我個人認為可以分為以下幾類:
google,uber
volvo audi
drive.ai comma.ai
delphi bosch
第一類就是谷歌旗下子公司 waymo,和 uber 收購的 otto,這也是互聯網行業進軍的代表,但是這兩家公司可是死對頭,關於 uber/otto 侵權 waymo 的激光雷達技術鬧的不可開交。
第二類是傳統汽車廠商比如 volvo,audi 都是在很早就對自動駕駛領域展開研究。
第三類是一些小型創業公司,其中的代表是吳恩達老婆的 drive.ai 和神奇小子 geohot 的 comma.ai。相信很多人對 geohot 並不陌生,沒錯,他就是17歲破解 iphone,21歲引發黑客大戰的神奇小子。
他自稱打造了一套1000美元的自動駕駛套件 comma one,現已開源,感興趣的朋友可以去學習,地址是https://github.com/commaai/openpilot。
第四類是 delphi,bosch 這樣的 tiger 1 廠商。這些公司都在為自動駕駛的那一天添磚加瓦,可是這些科技巨頭和汽車巨頭為什麼都不約而同的選擇自動駕駛呢,我想可以從以下幾點總結一下。
目前每年全球有130萬人死於車禍,損失 $518B,相關於很多國家1-2%的 GDP,自動駕駛可以很大效率的減少車禍,拯救生命。
除了在安全方面對人類有很大幫助,在時間利用上也可以解放人類在汽車上的使用時間,從而提高人類「壽命」,據報道平均每人每日在汽車上花費時間101分鐘,從駕駛中解放的時間如果去做其他的事情,可以提高20%的 GDP。
此外據報道目前汽車90%的時間是閑置停在停車場的,如果汽車可以自己開的話,那汽車本身就可以共享,利用共享的商業模式讓汽車時時刻刻都跑在路上,對於生命時間的延續和土地資源的解放都是毋庸置疑的。
現在我們知道自動駕駛會給人類帶來前所未有的必要性和價值,那麼什麼才是自動駕駛呢,網路上關於自動駕駛的定義千奇百怪。
這裡我以我的理解統一定義一下,自動駕駛是根據汽車依靠人工智慧、視覺計算、雷達、監控裝置和全球定位系統協同合作,讓電腦可以在沒有任何人類主動的操作下,自動安全地操作機動車輛。
根據這個定義,其實自動駕駛其實已經有了一定程度的實際應用。判斷自動駕駛的核心就在於主動式的操作,而根據其主動介入的程度,自動駕駛可以分為下列幾個階段。
SAE(美國汽車工程師協會)和 NHTSA(美國高速公路安全局)將自動駕駛技術進行了分級。這裡我們用一張圖來概括一下:
Level 0 就是我們目前看到的大部分汽車。
Level 1 實際上是 ADAS 階段,駕駛員輔助系統能為駕駛員在駕駛時提供必要的信息採集,在關鍵時候,給予清晰的、精確的警告,相關技術有:車道偏離警告(LDW),正面碰撞警告(FCW)和盲點報警系統。。
Level 2 就是半自動駕駛,駕駛員在得到警告後,仍然沒能做出相應措施時,半自動系統能讓在汽車自動做出相應反應。
相關技術有:緊急自動剎車(AEB),緊急車道輔助(ELA),就像 tesla autopilot,不僅車速幫你控制,方向盤也幫你控制,從技術上來看特茲拉已經做到很成熟。
Level 3 場所的高度自動駕駛。該系統能在駕駛員監控的情況下,讓汽車提供長時間或短時間的自動控制行駛,比如在商場,學校,小區里,這個實際上在歐洲搞了很多年了,很多地方可以看到這種 shuttles。
Level 4-5 完全自動駕駛,在無需駕駛員監控的情況下,汽車可以完全實現自動駕駛,意味著駕駛員可以在車上從事其他活動,如上網辦公、娛樂或者休息。
自動駕駛汽車技術的基本模塊:
Perception (other objects around the car)
Localization (GPS local landmarks IMU)
Decision (path, speed and other behavior planning)
Control (Drive by wire steering wheel,throttle & brake…)
其中感知和決策模塊是目前自動駕駛領域兩大流派的主要區別。這裡我們簡單做個區分:
第一個流派就是基本上所有的公司,包括百度的兩個部門、Google、特斯拉都在做這件事情,就是基於規則的自動駕駛。基於規則很簡單,就是把我們的自動駕駛分為很多場景。
比如高速公路,普通的道路,城市的道路,然後又分為很多的情景,包括類似於天氣,包括像停車這樣一些事情,遇到什麼情況該怎麼做這樣一個事情。這叫基於規則的一種自動駕駛,簡單的。
另外一種是端到端的自動駕駛,端到端大家不用管這邊如何描述,其實蠻簡單,你可以把自己想像成一個老司機,你會開車,但可能開了十萬公里,你的車依然不知道你的駕駛行為和駕駛習慣是什麼。
我們在想,是不是有一個人他能在你的車後面,它可以是一個機器人,它在不斷的學習你的開車習慣,有一天在你累的時候它可以幫助你去開車,而且是以你的習慣去開車,這種方法就是 End to End(端到端 )。
端到端可以認為是黑箱子,我們只關心輸入和輸出,不關心裏面到底是不是能做決策。
端到端的出現大大降低了自動駕駛的門檻,使互聯網科技公司有機會和汽車巨頭在自動駕駛領域一決高下,下面我們簡單看下NVIDIA端到端的深度學習,可以參考 NVIDIA 論文。
圖中顯示了一個簡化的 DAVE-2 訓練數據採集系統方框圖。三架攝像機安裝在數據採集汽車的擋風玻璃後面,而來自攝像機的時間戳視頻是與人類駕駛員的轉向角度同時被捕獲的。
轉向命令是通過進入車輛的控制器區域網路(Controller Area Network / CAN)匯流排得到。
為了使我們的系統獨立於汽車的外形,我們將轉向命令表示為 1/r,其中 r 代表每米的轉彎半徑。我們使用 1/r 而不是 r 以防止直線駕駛時的奇點(直線行駛的轉彎半徑為無窮大)。
1/r 從左轉彎(負值)轉變到右轉彎(正值)時平滑地通過零點。
訓練數據包含視頻採樣得到的單一圖像,搭配相應的轉向命令(1/r)。只有來自人類駕駛員的數據是不足以用來訓練的;網路還必須學習如何從任何錯誤中恢復,否則該汽車就將慢慢偏移道路。
因此訓練數據還擴充了額外的圖像,這些圖像顯示了遠離車道中心的偏離程度以及不同道路方向上的轉動。
兩個特定偏離中心的變化圖像可由左右兩個攝像機捕獲。攝像機和所有轉動之間的額外偏移是通過最近的攝像機的圖像的視角變換(viewpoint transformation)進行模擬的。
精確的視角變換需要 3D 場景知識,而我們沒有這些知識,因此只能做近似變換——假設水平線以下的所有點都在平地上,而水平線以上的所有點在無限遠。
這種方法在平面地形上產生的效果很好,但對於一個更完整的渲染,它還引入了地表以上物體的畸變,比如汽車、電線杆、樹木和建築物。幸運的是,這些畸變不會給網路訓練帶來大問題。
變換後的圖像的轉向標籤會在兩秒內被迅速調整到正確駕駛汽車時回到的期望位置和方向。
下圖顯示了我們的訓練系統框圖。圖像被送入一個卷積神經網路,然後計算一個被推薦的轉向命令。
這個被推薦的轉向命令會與該圖像的期望命令相比較,卷積神經網路的權重就會被調整以使其實際輸出更接近期望輸出。權重調整是使用Torch 7 機器學習包中所實現的反向傳播完成的。
一旦訓練完成,網路就能夠從單中心攝像機(single center camera)的視頻圖像中生成轉向命令。下圖展示了這個配置。
這裡不做深層次的講解,感興趣的小夥伴我們下一次可以開個專題來chat。下面展示下百度是如何利用這項技術進行自動駕駛的。
其中左側道路和右上方方向盤表示橫向曲率計算,紅色代表真實值,綠色代表演算法推算值;右下方折線圖表示縱向加速度計算,紅色代表真實值,綠色代表演算法推算值。
在講解感知模塊之前先了解下車上需要裝的sensor模塊有哪些:
接下來進入第一個模塊,感知(Perception):
感知是最基礎的部分,沒有對車輛周圍三維環境的定量感知,就有如人沒有了眼睛,無人駕駛的決策系統就無法正常工作。
為了安全與準確的感知,無人駕駛系統使用了多種感測器,其中可視為廣義「視覺」的有超聲波雷達、毫米波雷達、激光雷達(LiDAR)和攝像頭等。
超聲波雷達由於反應速度和解析度的問題主要用於倒車雷達,毫米波雷達和激光雷達承擔了主要的中長距測距和環境感知,而攝像頭主要用於交通信號燈和其他物體的識別。
通過採集大量的感測器數據(激光雷達,毫米波雷達,超聲波雷達,攝像頭雷達等)來感知汽車周圍的環境狀況,認知周圍的世界,也這是自動駕駛的基礎。首先,要驗證一個方案是否可行,我們需要一個標準的測試方法。
現在很多公司都在做自己的數據採集,前段時間百度公開的阿波羅計劃也是出於開源數據採集的生態發展。這裡將介紹由德國卡爾斯魯厄技術研究院(KIT)和豐田芝加哥技術研究院(TTIC)共同開發的 KITTI 數據集。
在有了標準的數據集之後,研究人員可以開發基於視覺的無人駕駛感知演算法,並使用數據集對演算法進行驗證。
KITTI 數據集是由 KIT 和 TTIC 在2012年開始的一個合作項目,網站在 http://www.cvlibs.net/datasets/kitti/,這個項目的主要目的是建立一個具有挑戰性的、來自真實世界的測試集。他們使用的數據採集車配備了:
一對140萬像素的彩色攝像頭Point Grey Flea2(FL2-14S3C-C),採集頻率10赫茲。
一對140萬像素的黑白攝像頭Point Grey Flea2(FL2-14S3M-C),採集頻率10赫茲。
一個激光雷達Velodne HDL-64E。
一個GPS/IMU定位系統OXTSRT 3003。
下面講一下多個測試任務的數據集:
三維物體檢測數據集:手工標註,包含轎車、廂車、卡車、行人、自行車者、電車等類別,用三維框標註物體的大小和朝向,有多種遮擋情況,並且一張圖片通常有多個物體實例。
物體追蹤數據集:手工標註,包含21個訓練序列和29個測試序列,主要追蹤目標類型是行人和轎車。
路面和車道檢測數據集:手工標註,包含未標明車道、標明雙向單車道和標明雙向多車道三種情況,289張訓練圖片和290張測試圖片,ground truth包括路面(所有車道)和自車道。
這裡以 CNN 為例作為計算機視覺不可避免的成為無人駕駛感知中雙目感知和物體檢測的重要應用。
卷積神經網路(Convolutional Neural Network,CNN)是一種適合使用在連續值輸入信號上的深度神經網路,比如聲音、圖像和視頻。
它的歷史可以回溯到1968年,Hubel 和 Wiesel 在動物視覺皮層細胞中發現的對輸入圖案的方向選擇性和平移不變性,這個工作為他們贏得了諾貝爾獎。
時間推進到上世紀80年代,隨著神經網路研究的深入,研究人員發現對圖片輸入做卷積操作和生物視覺中的神經元接受局部 receptive field 內的輸入有相似性,那麼在神經網路中加上卷積操作也就成了自然的事情。
當前的 CNN 相比通常的深度神經網路(DNN),特點主要包括:
一個高層的神經元只接受某些低層神經元的輸入,這些低層神經元處於二維空間中的一個鄰域,通常是一個矩形。這個特點受到生物神經網路中receptive field的概念啟發。
同一層中不同神經元的輸入權重共享,這個特點可以認為是利用了視覺輸入中的平移不變性,不光大幅度減少了CNN模型的參數數量,還加快了訓練速度。
由於CNN在神經網路的結構上針對視覺輸入本身特點做的特定設計,所以它是計算機視覺領域使用深度神經網路的不二選擇。
在2012年,CNN 一舉打破了 ImageNet 這個圖像識別競賽的世界紀錄之後,計算機視覺領域發生了天翻地覆的變化,各種視覺任務都放棄了傳統方法,啟用了 CNN 來構建新的模型。
無人駕駛的感知部分作為計算機視覺的領域範圍,也不可避免地成為 CNN 發揮作用的舞台。
定位(Localization):
定位主要通過粒子濾波進行。所謂粒子濾波就是指:通過尋找一組在狀態空間中傳播的隨機樣本來近似表示概率密度函數,用樣本均值代替積分運算,進而獲得系統狀態的最小方差估計的過程,這些樣本被形象地稱為「粒子」,故而叫粒子濾波。
比較常見的(如在Sebastian Thrun的經典無人車論文中)是粒子濾波維護一個姿態向量(x, y, yaw),默認roll/pitch相對足夠准,運動預測可以從IMU中取得加速度和角速度。
粒子濾波需要注意樣本貧化和其他可能的災難定位錯誤(catastrophic error),一小部分粒子可以持續從現在 GPS 的位置估計中獲得。對樣本數量的自適應控制也需要根據實際情況有效調整。
因為已經有了高精度 LiDAR 點雲地圖,所以很自然地就可以用實時點雲數據和已經建好的地圖進行匹配。
而3D點雲匹配必然要說到 Iterative Closest Point (ICP),ICP 的目標是在給出兩組點雲的情況下,假設場景不變,算出這兩組點雲之間的 pose。
最早的 ICP 原理,就是第一組點雲的每個點在第二組點雲里找到一個最近的匹配,之後通過所有的匹配來計算均方誤差(MSE),進而調整估計的pose,這樣進行多次迭代,最終算出兩組點雲的相對 pose。
因此,預先有地圖的情況下,用實時的點雲加上一個大概 pose猜測就可以精準算出無人車的當前 pose,且時間相鄰的兩幀點雲也可以算出一個相對 pose。
GPS 是基於地球中央子午線與赤道交點的投影為原點坐標系的地理地圖,其表示格式為二維坐標點格式,誤差在10米左右,這種誤差對於自動駕駛是遠遠不夠的。
高精度地圖是一種以地理位置為參考的道路路網拓撲地圖,該拓撲地圖不僅能夠描述車道路段建的關係,同時還能夠描述車道數量,車道寬度,固定障礙位置等多維屬性;
另外還有一種動態高精度地圖,實際上是一種具有超強動態感知能力的感測器,可通過雲端向智能車實時下發目標路段的道路信息(道路幾何信息,擁堵信息,施工信息等)及障礙物信息(位置,速度,類型等,需具備數據採集及傳輸能力)。
決策(Decision)
左下角是 camera 識別到的圖像,根據理解汽車所在的位置,周圍的環境(紅色框線)通過決策模塊會匹配出一條正確的軌跡(綠色框線)。
目前有的決策是基於 rule-based 的演算法,有的是基於大數據的 DL 的端到端方案,這些方案在實際駕駛的突發事件中是很難精確到的,但是這塊都是未知領域,相信在探索的過程中會有新的發展。
決策在整個無人車決策規劃控制軟體系統中扮演著「副駕駛」的角色。
這個層面彙集了所有重要的車輛周邊信息,不僅包括了無人車本身的當前位置、速度、朝向以及所處車道,還收集了無人車一定距離以內所有重要的感知相關的障礙物信息以及預測軌跡。
行為決策層需要解決的問題,就是在知曉這些信息的基礎上,決定無人車的行駛策略。
所有的路由尋徑結果:比如無人車為了達到目的地,需要進入的車道是什麼(target lane)。
無人車的當前自身狀態:車的位置速度朝向,以及當前主車所在的車道。
無人車的歷史信息:在上一個行為決策(Behavioral Decision)周期,無人車所做出的決策是什麼?是跟車,停車,轉彎或者是換道?
無人車周邊的障礙物信息:無人車周邊一定距離範圍內的所有障礙物信息。例如周邊的車輛所在的車道,鄰近的路口有哪些車輛,它們的速度位置如何?以及在一個較短的時間內它們的意圖和預測的軌跡。周邊是否有自行車或者行人,以及他們的位置速度軌跡等;
當地的交通規則:例如道路限速,是否可以紅燈右拐等等。
自動駕駛的行為決策模塊, 就是要在上述所有信息的基礎上,做出如何行駛的決策。可以看出,無人車的行為決策模塊是一個信息匯聚的地方。
由於需要考慮如此多種不同類型的信息以及受到非常本地化的交規限制,行為決策問題往往很難用一個單純的數學模型來進解決。
往往更適合行為決策模塊的解決方法,是利用一些軟體工程的先進觀念來設計一些規則引擎系統。
例如在 DARPA 無人車競賽中,Stanford 的無人車系統「Junior」利用一系列 cost 設計和有限狀態機(Finite State Machine)來設計無人車的軌跡和操控指令。
在近來的無人車規劃控制相關工作中,基於馬爾可夫決策過程(Markov Decision Process)的模型也開始被越來越多得應用到無人車行為層面的決策演算法實現當中。
簡而言之,行為決策層面需要結合路由尋徑的意圖,周邊物體和交通規則,輸出宏觀的行為層面決策指令供下游的動作規劃模塊去更具體地執行。其具體的指令集合設計則需要和下游的動作規劃模塊達成一致。
控制(Control)
這個模塊是傳統汽車廠商和tier1非常擅長的領域,目前面臨的挑戰可能是如何把機械的主動運行轉為在不同電平條件下的運行,這裡不進行展開。
自動駕駛的產業發展和創業機會:
理想來說,無人駕駛的產業發展應該分為三個階段:
第一階段,感知系統的發展,主要包括各類感測器的融合使用及感知決策系統的準確度提升,實現輔助信息的交互及部分自動駕駛功能。
第二階段,支持演算法以及決策的晶元成熟,包括演算法及晶元設計的發展,實現協同決策及自動駕駛。
第三階段,車聯網的發展,實現高精度地圖及實時路況信息的更新及通過深度學習實現協同感知。
隨著自動駕駛的這股風,一時間國內的自動駕駛創業公司呈現勢如破竹式的發展。
在眼花繚亂的創業公司中基本可以分為以下幾點:
自動駕駛演算法創業,這種類型的公司當屬2015年創業的 Drive.ai,該公司主要集中研發如何將深度學習演算法應用到無人駕駛汽車技術中。Drive.ai 近日宣布通用汽車公司前副董事長 Steve Girsky 已加入該公司董事會。
硬體相關的創業機會,例如激光雷達,固態激光雷達,需要演算法落地到實際車上,上車經驗非常重要,智行者走的是這條路;
還有一些像地平線旨在做IC平台的公司,得數據者得天下,於是乎百度開源了阿波羅計劃,目前對自動駕駛的預判是在2025年落地,所以目前做特定市場的自動駕駛產品還是比較現實的創業路線。
推薦閱讀: