長篇自動駕駛技術綜述論文(下)
三維目標檢測
鑒於經濟性,可用性和研究的廣泛性,幾乎所有的算法都使用相機作為主要的感知方式。把相機應用在ADS中,限制條件除了前面討論到的光照等因素外,還有一個問題就是目標檢測是在圖像空間的,忽略了場景的尺度信息。而當需要進行避障等動態駕駛任務時,我們需要將二維圖像映射到三維空間來獲得三維的信息。實際上利用單個相機來估計深度也是可行的[30],當然利用立體相機或者多相機的系統更具魯棒性。從二維到三維的映射必然需要解決一個圖像匹配問題,這給已經夠復雜的感知過程又增加了大量的計算處理成本。
所以我們換一種思路,是否可以直接在三維進行目標檢測。我們知道3D雷達收集的數據是三維的,從本質上已經解決了尺度問題,而且3D雷達不依賴於光照條件,不容易受到惡劣天氣的影響。3D雷達收集的是場景表面的稀疏3D點,這些點很難用於對象檢測和分類,分割反而相對容易。傳統方法使用基於歐式距離的聚類(Euclidean clustering)或者區域生長(region-growing)算法[31]來將點划分為不同對象。結合一些濾波技術,比如地面濾波(ground filtering)[32]或者基於地圖(map-based filtering)的濾波[33],可以使該方法更具魯棒性。下圖我們展示了一個從原始點雲輸入中獲取聚類對象的例子。
與基於圖像的方法發展趨勢一樣,機器學習最近也取代了傳統3D檢測方法,而且這種方法還特別適用於RGB-D數據。RGB-D產生的數據與點雲類似,不過包含顏色信息,由於范圍比較有限而且可靠性不高,尚未應用於ADS系統。[34]利用3D占據柵格(occupancy grid)表示的方法完成了RGB-D數據的對象檢測。此后不久,類似的方法被應用於激光雷達創建的點雲。受基於圖像的方法的啟發,盡管計算開銷很大,但仍然使用了3D CNN。VoxelNet[35]首次給出了令人信服的點雲上三維邊界框估計的結果。SECOND[36]利用激光雷達數據的自然稀疏性,改進了這些工作的准確性和計算效率。最近提出的幾種算法比較如下表所示:
數據集是KITTI[42],結果以中等類別精度排序,算法中只使用點雲數據。
基於激光雷達的感知的另一個選擇是點雲數據的二維投影。點雲數據在2D中有兩種主要表示形式,一種是深度圖,主要是受通過深度估計執行3D對象檢測[37]和在RGB-D數據上進行操作方法的啟發。VeloFCN網絡[38]提出使用單通道深度圖像作為淺層單級卷積神經網絡的輸入,生成3D車輛候選,許多其他算法也都采用了這種方法。深度圖的另一個用途是用於激光雷達點的語義分類(semantic classification)[39]。
另一種2D投影是指對鳥瞰圖(bird’s eye view,BV)的投影,該方式越來越受歡迎。不過鳥瞰圖僅有單純的2D離散信息,因此如果激光雷達點的值僅有高度變化的話,在2D中必定會互相遮擋。MV3D算法[40]使用相機圖像,深度圖像以及多通道BV圖像(這里不同通道對應不同的高度),來最小化這種遮擋。一些工作重復使用基於相機的算法,並訓練了有效的網絡來在2D BV圖像上進行3D對象檢測[41]。這些算法都是在KITTI數據集和nuScenes[43]數據集上進行測試的。2D的方法計算成本要比3D小得多,而且利用稀疏性改進這些工作的准確性和效率之后[36],這些方法可以迅速接近ADS系統所需的精度。
目標跟蹤
對於復雜和高速情況下的自動駕駛,僅僅估計位置是不夠的,為了避免碰撞,還需要估計動態目標的航向和速度,以便應用運動模型跟蹤目標並預測目標未來的運動軌跡。同樣的,一般都通過多個相機,激光雷達或者雷達來獲取傳感器信息,且未來更好地應對不同傳感器的局限性和不確定性,通常采用傳感器融合的策略進行跟蹤。
常用目標跟蹤算法依賴於簡單的數據關聯技術和傳統的過濾方法。當在三維空間中以高幀速率跟蹤對象時,最近鄰方法通常足以建立對象之間的關聯。基於圖像的方法一般需要建立一些外觀模型,例如使用顏色直方圖,梯度或者其他特征(如KLT)等來評估相似度[44]。基於點雲的方法也使用一些相似性度量,例如點密度,Hausdorff距離[45]。由於總是可能出現關聯錯誤的情況,因此經常使用多假設跟蹤(multiple hypothesis tracking)算法[46],這確保了跟蹤算法可以從任一時間內的不良數據關聯中回復。一般我們都是在每幀中使用占據地圖(occupancy maps),然后在幀之間進行數據關聯,尤其是在使用多個傳感器時。為了獲得平滑的動態特性,采用傳統的Bayes濾波器對檢測結果進行濾波。
對於簡單的線性模型,Kalman濾波一般是足夠的,而擴展Kalman濾波器(EKF)和無跡Kalman濾波器(UKF)可用於處理非線性動態模型。我們實現了一個基本的基於粒子濾波的目標跟蹤算法,利用相機和3D激光雷達來跟蹤行人,結果如下(白色的表示軌跡)。
為了使跟蹤更具魯棒性,經常會用到被跟蹤對象的物理模型。在這種情況下,首先使用諸如粒子濾波器之類的非參數化方法,之后利用一些物理參數(如大小)來進行動態跟蹤[47]。更為復雜的濾波方法,如raoblockwelled粒子濾波器,被用於跟蹤L型車輛模型的動態變量和車輛幾何變量(dynamic variables and vehicle geometry variables)[48]。針對車輛和行人,現在有各種各樣的模型,甚至一些模型可以推廣到任何動態對象。此外,深度學習也開始被應用於跟蹤問題,尤其是對圖像領域。[49]通過基於CNN的方法實現了單目圖像的實時跟蹤。利用多任務網絡來估計物體動力學的方法也在涌現[50],這進一步表明了能夠處理多種感知任務的廣義網絡可能是ADS感知的未來。
道路和車道線檢測
前面介紹的邊界框估計方法對於某些感興趣的對象十分有用,但對於一些連續曲面(如道路)則不適用。可行駛曲面的確定是ADS的關鍵,所以把該問題從檢測問題中單獨出來作為一個子類研究。從理論上講,利用語義分割可以解決該問題。一個簡單的做法是從車輛自身來確定可駕駛區域,將道路分為若干個車道,並確立主車道,該技術被應用在許多ADAS中,如車道偏離警告,車道保持和自適應巡航控制[51]。更有挑戰性的任務就是怎么確定其他車道和對應的方向,並在此基礎之上理解更復雜的語義,比如轉向和合並[52]。上述具體不同的任務對ADS的探測距離和可靠性要求各不相同,但是自動駕駛需要對道路結構有一個完整的語義理解以及長距離探測多條車道的能力。
前面提到的數據預處理(包括圖像和點雲)的方法,在道路處理中也同樣適用,比如歸一化照明條件(normalize lighting conditions),濾波,顏色,強度,梯度信息統計等。另外,利用道路的均勻性和邊緣的突變(elevation gap at the edge )我們可以使用區域生長方法(region growing)[53]。也有一些基於機器學習的方法,包括將地圖與數據融合[54]或者完全基於外觀的分割[55]。一旦曲面被估計出來之后,就可以利用一些模型擬合來保證道路和車道的連續性,包括參數化模型(比如直線、曲線)和非參數化模型的幾何擬合。[56]提出了一個集成了拓撲元素(如車道分割與合並)的模型,還可以結合車輛動力學和動態信息,利用濾波算法獲得更平滑的結果。
目前道路和車道線檢測已經有許多方法,並且有些已經集成到了ADAS系統中,但是大多數方法仍然依賴於各種假設與限制,能夠處理復雜道路拓撲的真正的通用系統尚未開發出來。通過對拓撲結構進行編碼來獲得標准化的道路圖並結合新興的基於機器學習的道路與車道線分類方法,也許會形成一個魯棒的可應用於自動駕駛的系統。
評估( ASSESSMENT)
一個魯棒的ADS系統應該能夠不斷地評估當前狀況的總體風險水平並預測周圍駕駛員和行人的意圖,缺乏敏銳的評估機制可能會導致事故。本節主要討論以下三類評估:總體風險和不確定性評估,人類駕駛行為評估和駕駛風格識別。
總體風險和不確定性評估
總體評估可以理解為去量化駕駛場景的不確定性和風險水平,目的是為了提高ADS的安全性。[57]提出了一種利用貝葉斯方法來量化深度神經網絡的不確定性。[3]設計了一個貝葉斯深度學習體系結構,並在一個模擬場景中展示了它相對於傳統方法的優勢。這種方法的總體邏輯是每個模塊在系統中的傳遞與輸入都服從概率分布,而不是一個精確的結果。
另一種方法就是單獨評估駕駛場景下的風險水平,可以理解為前者是從系統內部評估,后者是從系統外部評估。[58]將傳感器數據輸入到一個風險推理框架中,利用隱馬爾科夫模型(Hidden Markov Models ,HMMs)和語言模型檢測不安全的車道變更事件。[59]引入了一個深度時空網絡來推斷駕駛場景的總體風險水平,也可以利用來評估車道變更的風險水平。下圖是一個示例,代表兩種圖像序列下的風險評估結果
周圍駕駛行為評估
實際環境中的自動駕駛決策還有周圍駕駛員的意圖與行為相關。目前該技術在ADS領域尚不常見。[60]用隱馬爾可夫模型(HMM)對目標車輛的未來行為進行了預測,通過學習人類駕駛特征,將預測時間范圍延長了56%。這里主要是利用了預定義的移動行為來標記觀測值,然后再使用HMM以數據位中心學習每種類型的特征。除此之外,還有一些其他的方法,比如貝葉斯網絡分類器,混合高斯模型和隱馬爾科夫模型相結合[61],支持向量機等。這一類評估的主要問題在於觀測時間短,實時計算量要求高,大多數情況下,ADS只能觀測周圍車輛幾秒鍾,因此不能使用需要較長觀察周期的復雜模型。
駕駛風格識別
人和機器最大的不同在於人是有情緒的,有些駕駛員比較激進,有些比較穩重。2016年,谷歌的自動駕駛汽車在換道時和迎面而來的巴士相撞,原因就是自動駕駛汽車以為巴士會減速,而巴士司機卻加速了。如果能事先知道司機的駕駛風格,並結合進行預測,這場事故也許是可以避免的。當然,駕駛風格目前還沒有一個准確的定義,因此分類的依據也有很多種,比如油耗,均速,跟車行為等。一般來說,對駕駛風格的分類大多是將其分為若干類,對應於不同的離散值,但是也有連續型的駕駛風格分類算法,比如[62]將其描述為介於-1到+1之間的值。
同樣,也有一些基於機器學習的方法。[63]采用主成分分析法( Principal component analysis, PCA),以無監督的方式檢測出5個不同的駕駛類別。[64]使用了基於GMM的駕駛員模型來識別單個駕駛員的行為,主要研究了跟車行為和踏板操作(pedal operation)。[^65]使用詞袋(Bag-of-words)和K均值聚類來表示個體的駕駛特征。[^66]使用了一個自編碼網絡(autoencoder network)來提取基於道路類型的駕駛特征。類似的還有將駕駛行為編碼到3通道RGB空間中,利用一個深度稀疏的自編碼器(deep sparse autoencoder)來可視化各個駕駛風格[67]。將駕駛風格識別成功應用到真實的ADS系統的目前還沒有相關報道,但是這些研究可能是未來ADS發展的一個方向。
規划與決策
全局規划
全局規划是比較成熟的一個研究領域,幾乎所有車都已經配備了導航系統,利用GPS和離線地圖能夠輕易規划全局路徑。全局路徑規划可以分為以下四種:目標導向(goal-directed),基於分割( separator-based),分級規划( hierarchical)和有界跳躍(bounded-hop)。目標導向最常見,比如Djikstra和A*,已經廣泛應用於各個領域。基於分割的邏輯有點像路由算法,刪去一些邊或者頂點,計算每個子區域間的最短路徑,這種方法可以有效加快計算速度。
基於分級的技術利用了道路的層次邏輯,比如道路有國道省道鄉道等,對於路線的查詢,層次結構的重要性應該隨着距離的增長而增加。有界跳躍是一種典型的空間換時間做法,很明顯,計算一對頂點間的所有可能路徑是不切實際的,事先保存若干選定頂點之間的距離和路徑並在導航中使用才是一種合理的做法,對於路徑規划的查詢可以利用標簽集線器(hub labeling)[68]來加快查詢速度。當然,這些方法並不互斥,互相組合的方法也很常見。[69]將分割法與有界跳躍法相結合,提出了Transit Node Routing with Arc Flags(TNR + AF)算法。
局部規划
局部規划實際可以理解為為了實現全局規划來找到一條足夠優化且能避開障礙物的軌跡。同樣可以分為四類:基於圖搜索(graph-based planners),基於采樣( sampling-based planners),曲線插值( interpolating curve planners)和數值優化( numerical optimization)方法。當然,后續還有一些基於深度學習的方法。基於圖搜索的方法基本和基於圖的全局規划差不多,Dijkstra和A*以及其改進算法依然是最常見的方法。基於圖搜索常見的做法都是將地圖離散成狀態格,這種做法在高維的情況下會產生指數爆炸。因此就有了基於采樣的方法,最常見的基於采樣的方法是概率圖(PRM)和快速隨機搜索樹(RRT)。
這類方法的缺陷主要是不穩定,在某些特定環境下可能要很長時間才能收斂。曲線插值是在一系列已知點上擬合一條可行的軌跡曲線,常見的曲線有回旋線,多項式曲線,貝塞爾曲線等,這種方法的避障策略一般是插入新的無碰撞的軌跡,如果偏離了初始軌跡,則避開障礙之后再返回初始軌跡。這種方法生成的軌跡較光滑,計算量也比較大,但是在實際ADS中,軌跡光滑一般意味着對乘客比較友好。
數值優化一般可以用來改善已有的軌跡,比如[^70]利用非線性數值函數(numeric non-linear functions )來優化A*得到的軌跡,[71]利用牛頓法解決了勢場法(Potential Field Method,PFM)的固有震盪問題。
隨着人工智能的火熱,一些基於深度學習和強化學習方法的規划策略也開始涌現出來。[72]利用三維全卷積神經網絡(Fully convolutional 3D neural networks)從激光雷達等輸入設備獲取點雲並生成未來的軌跡。[73]利用深度強化學習在仿真環境下實現了交叉路口的安全路徑規划。基於深度學習的缺陷前面已經提到過了,缺乏硬編碼的安全措施,除此之外還有泛化能力問題,數據來源問題等,但總的來說,這一類方法應該是未來的趨勢之一。
人機交互
車輛一般通過人機模塊(HMI)與駕駛員或乘客交互。互動的強度取決於自動化程度,傳統的L0的車需要持續的用戶操作輸入,而理論上L5級別的車僅需要在行程開始的時候給予一個輸入即可。根據目的不同大致可以把交互任務分為兩類:首要任務(與駕駛相關)和次要任務,理論上講,次要任務的交互輸入更期望是非視覺選項,因為視覺在駕駛任務中是不可替代的,需要視覺的次要任務界面會影響首要任務,從而影響駕駛的可靠性[72]。一個可替代的方案就是聽覺用戶界面(Auditory User Interfaces ,AUI),聽覺不需要刻意集中注意力於某個界面之上。音頻交互的主要挑戰是自動語音識別(automatic speech recognition, ASR)。ASR算是一個比較成熟的領域,但是在車輛領域還有一些挑戰,比如一些不可控的噪聲(駕駛噪聲,風聲,道路噪聲等)。
除此之外,如何與ADS實現對話也是一個尚未解決的挑戰。人機交互最大的挑戰應該是出現在L3和L4,這兩個階段需要人和ADS互相理解對方的意圖來實現手動和自動的切換。在監控自動駕駛時,駕駛員會表現出較低的主觀認知欲望,盡管可以通過一些基於頭部和眼睛追蹤的攝像機來識別駕駛員的活動,並使用視覺和聽覺來提示駕駛員做好切換准備,但目前主要是在模擬環境下實現[73],在真實環境中能夠高效切換的系統目前還未出現。這是一個懸而未決的問題,未來的研究應着重於提供更好的方法來告知駕駛員以簡化過渡過程。
數據集和開源工具
數據集對於研究人員和開發人員來說至關重要,因為大多數算法和工具在上路之前都必須經過測試和訓練。通常的做法是將傳感器數據輸入到一系列具有不同目標的算法中,並在標注過的數據集上測試和驗證這些算法。有些算法的測試是相互關聯的,有些則是單獨的。CV領域已經有很多專門用於目標檢測和跟蹤的標注數據集,而對於端到端系統,還需要額外的車輛信號,主要包括轉向和徑向控制信號。
隨着學習方法的出現,支持它們的訓練數據集也隨之出現。從2005年一直增長到2012年,PASCAL VOC數據集是第一個包含大量ADS相關數據的數據集之一。但是這些數據通常以單個對象為特征,不能代表駕駛場景中遇到的情況。2012年,KITTI Vision Benchmark通過提供大量的標記駕駛場景彌補了這一缺陷,直到現在它仍然是自動駕駛中使用最廣泛的數據集之一。當然,從數量上來說,它遠遠比不上ImageNet和COCO這樣的通用圖像數據庫。
通用數據庫在訓練某一特定模塊是有用的,但是由於缺少前后關聯信息(the adequate context),不足以用來測試ADS的能力。加州大學伯克利分校DeepDrive是一個帶有注釋圖像數據的最新數據集。牛津的RobotCar在英國使用六個攝像頭、激光雷達、GPS和慣性導航系統收集了超過1000公里的駕駛數據,不過這些數據沒有標注。還有一些其他的數據集可以見下表。
開源框架和模擬器
常見的ADS開源框架包括:Autoware、Apollo、Nvidia DriveWorks和openpilot等。常見的模擬器包括CARLA、TORCS、Gazebo 、SUMO等。CARLA可以模仿各種城市場景包括碰撞場景,TORCS是一個賽車仿真模擬器,Gazebo 是一個常見的機器人模擬器,SUMO可以模擬車流量。
總結
這篇文章概述了在ADS中現有的一些系統及關鍵的創新。目前來看,自動駕駛在很多方面都存在着明顯的缺陷。無論是模塊化還是端到端系統,不同的模型都存在着各自的缺陷。具體到算法,建圖,定位,感知等方面,仍然缺乏准確性和效率,對不理想的路況或者天氣的魯棒性也仍有待提高。V2X仍然處於起步階段,由於所需的基礎設施比較復雜,基於雲的集中式信息管理也尚未實現。人機交互的研究還比較少,存在着許多問題。