公開課精華 | 無人駕駛中感知的挑戰(zhàn)與嘗試
本文總結于深圳元戎啟行公司點云感知方向技術負責人鄒曉藝,在深藍學院的關于無人駕駛中感知的挑戰(zhàn)與嘗試的公開課演講內(nèi)容。
(全文約3500字)
主講人鄒曉藝來自深圳元戎啟行公司,曾在百度IDL和ADU部門工作過,是百度 apollo::lidar::cnnseg算法的作者,也是CSDN相關領域的博主。

公開課大綱
1. 無人駕駛中感知的簡介
2. 無人駕駛中感知的挑戰(zhàn)
3. 基于Deep learning的感知算法
4. 基于Physical的感知算法
5. 一些思考和一些open problems
1. 無人駕駛中感知的簡介
下圖是一個無人駕駛系統(tǒng)的流程框圖。

前端sensor獲取環(huán)境中的信息,送給感知模塊和定位模塊,感知模塊將輸出信息輸入到預測模塊,進行軌跡速度等預測,然后進行決策和汽車控制。無人駕駛的傳感器有多個sensor,如下圖是元戎啟行的汽車傳感器(車頂部分),中間有一個主雷達,兩邊有兩個盲區(qū)雷達,然后四周也有RGB普通的攝像頭。

在汽車行駛過程中,從傳感器中獲得的數(shù)據(jù)如下圖,下面的是激光雷達傳感器的數(shù)據(jù),上面是RGB攝像頭的數(shù)據(jù)。

無人駕駛中的感知部分功能有3D目標檢測、目標跟蹤、紅綠燈檢測、目標軌跡預測、車道線和車道線檢測等等模塊。
2. 無人駕駛中感知的挑戰(zhàn)
下圖是2D圖片和3D點云數(shù)據(jù)的不同點,2D圖片是有序規(guī)則的而3D點云是無序不規(guī)則的。

接下來,主講人舉了一些例子,展示無人駕駛中感知的困難所在。
第一點,感知場景是復雜的。如下圖,感知不僅要識別出常見的車輛、擁擠的行人、自行車等,也要識別出一些標志物、警示物、施工點和動物等等。

第二點,類內(nèi)差異大。如下圖,雖然都是貨車和摩托車,但是外觀差異很大。

第三點是,類間差異小。如下圖是三種激光雷達得到的不同車尾的數(shù)據(jù),由于缺少了紋理信息,貨車、公交車等車在激光雷達中看到的區(qū)別很小。

第四點,未定義的類別。如下圖,感知過程中會有一些諸如倒下的單車、輪胎、玩具等未定義的物體出現(xiàn)。

第五點,惡劣天氣影響,如下圖所示,這些天氣對激光雷達和RGB攝像頭的成像都會有較大影響。

第六點,噪聲。如下圖,在汽車行駛的過程中,不僅有傳感器的噪聲,也會有環(huán)境的噪聲,如路面濺起的水花,揚起的灰塵。

第七點,移動端實時性和功耗。無人駕駛的算法復雜,傳感器獲得的數(shù)據(jù)量多,但由于功耗限制,自動駕駛車載計算單元的算力是非常有限,同時無人駕駛需要滿足低延時的要求。所以要求感知模塊需要在這有限算力的基礎上對這些數(shù)據(jù)進行實時的處理。
3. 基于Deep learning的感知算法
接下來介紹基于Deep Learning的相關無人駕駛感知算法。分為兩個部分,一個部分是基于點云的3D目標檢測,另一個是基于圖像和點云的Fusion算法。
首先是基于點云的3D目標檢測。下圖是一幀點云,任務目標就是用長方體框檢測出點云中的目標(位置、大小、朝向和類別等等)。

激光雷達生成的點云是稀疏的,不規(guī)則的,無序的且缺少顏色信息。如下圖所示,左邊是汽車點云,右側是行人點云,可以發(fā)現(xiàn)距離越遠,點云越稀疏,這種隨著距離變化的稀疏性,也會帶來很大的挑戰(zhàn)。

http://www.robosense.cn/news/1574090713599
同時,在點云,同一個目標有可能是不完整的,如下圖所示。左圖中間靠前位置有一個貨車,點云只顯示了車頭和車尾,中間是斷裂的,右圖雖然把中間的貨物掃描到了,但是整體依舊是斷裂成了3部分,這種斷裂會影響到障礙物的檢測,從而影響下游的跟蹤等任務。

現(xiàn)在的主流3D點云檢測的方法分為兩種,一種是基于Deep Learning的方法,其對噪聲較為魯棒,分割效果較好,但是解釋性較差。另一種是基于Physical的方法,即非機器學習的方法,可解釋性較好,但是對噪聲敏感,容易出現(xiàn)過分割和欠分割的問題。這兩種的方法在工程實踐中可以互相補足。

主講者認為對于Deep Learning的方法,由于深度學習特點在于如何建立分層結構,從而獲得越來越大的感受野和更高階的語義特征。而應用到點云上,其實就在于如何去找到點云中點與點中間的關系,從而從鄰域中建立起不同層級的感受野。
主講者以PointNet++的結構為例,采用這種層級的結構,以k近鄰或者球型領域的方法,提取鄰域感受野特征。
點云還可以轉換成不同輸入形式的數(shù)據(jù),除了直接以點集(采樣后)的形式表示,還可以以圖(graph)的形式表示,或者體素化,或者投影到鳥瞰圖(Bird’s Eye View)、環(huán)視圖(Range View)、極坐標圖。
其中點云的體素化可以使用傳統(tǒng)卷積算子(3D或者2D卷積)來處理,但是缺點是有一定的量化誤差,丟失了原始點云準確的幾何結構。不過體素化有另一個優(yōu)點是可以比較容易做多尺度,即每個體素格子的大小,決定了尺度的大小,而且點云特征和體素特征也可以通過操作進行相互轉化,如下圖所示》

接下來主講人介紹了幾個3D點云檢測的工作。
OpenPCDet:這是一個商湯科技開源的3D點云檢測庫,整合了多種3D點云檢測方法,基于PyTorch實現(xiàn)。
Apollo::lidar::cnnseg:這是主講人在百度的工作,網(wǎng)絡采用類U-NET網(wǎng)絡結構,將點云投影到俯視圖,進行特征提取來做檢測和實例分割。
PointPillar:提出了一種新穎的點云編碼器,將點云提取特征得到Pillar(柱子)形式的稀疏偽2D圖像,然后使用2D的卷積算子進行處理,使用2D的檢測方法(如SSD)做目標檢測。
HVNet:提出了一種新的基于點云的三維物體檢測的統(tǒng)一網(wǎng)絡:混合體素網(wǎng)絡(HVNet),通過在點級別上混合尺度體素特征編碼器(VFE)得到更好的體素特征編碼方法,從而在速度和精度上得到提升。
PV-RCNN:提出了結合體素化和點云兩種特征的新型網(wǎng)絡結構,采用multi-scale的方法獲得由voxel_based方法得到的高質量的proposals,然后再利用Point_based的方法獲得精細的局部信息,該方法在很多的benchmark上的表現(xiàn)都很不錯。
AFDet:提出了首個Anchor free、NMS free的3D點云目標檢測算法,在嵌入式系統(tǒng)上有著較好的應用價值。
Range Conditioned Dilated Convolutions:提出一個新的卷積層,這個卷積層有一個可以根據(jù)距離來調(diào)整dilation rate,適應不同的尺度,可以較好地解決距離遠近帶來的點云稀疏性不一致的問題。
對以上的方法做總結:點云特征、投影視圖特征、體素特征是可以互相補足的;特征的增強可以通過multi structure、multi scale、multi frames等方法來實現(xiàn)。
上述的算法都是基于點云的,接下來介紹一些基于圖像和點云的Fusion算法。
由于點云僅能得到物體的shape信息,但是物體的顏色和紋理特征也很重要,此時就需要去融合圖像的算法。一個有趣的地方是點云可以通過標定,投射到關聯(lián)的圖像上,如下圖所示。當然,這種投射不是一對一的,因此是需要做插值的,如雙線性插值。

圖像和點云的Fusion有兩種方式,一種是Result-level fusion,一種是Feature-level fusion。
前者是每個sensor自己處理自己的數(shù)據(jù),在結果上做fusion,好處是其中一個sensor出故障了,不會導致整個系統(tǒng)掛掉,比較好做傳感器冗余,缺點是不能很好融合不同sensor的特征,性能受限于單個傳感器的性能上限。
后者是直接在特征上做融合,能提供互補的信息,值得注意的是,這種方法需要做的一點是如何融合各個sensor的優(yōu)勢特征,去除每個sensor的劣勢特征(如圖像容易受光照影響,點云容易受雨霧天氣影響)。
接下來主講人介紹了幾個圖像和點云的Fusion的工作。
MV3D:提出了一個多視角(Multi-View)的3D物體識別網(wǎng)絡(MV3D),采用多模態(tài)的數(shù)據(jù)作為輸入和預測3D空間的目標。從點云里面提特征出proposal,再在每個view上的特征提取關于proposal的特征,做檢測。
sensor fusion for join 3d object detection and semantic segmentation:將點云特征和圖像特征,在特征級別拼接到一起,然后使用LaserNet做檢測和分割。
PointPainting:將圖像的語義分割信息通過lidar信息和image信息的變換矩陣融合到點云上,再做檢測。
SemanticVoxels:同樣是將圖像的語義信息融合到點云里,在通過融合pillar和voxel的特征做檢測。
EPNet:網(wǎng)絡分為點云特征分支和圖像特征分支,在兩個分支的不同的level上,做了二者的特征融合,融合的過程中添加了attention模塊。
MVAF-Net:在不同的view的特征上,做attention,并且在attention模塊也添加監(jiān)督信息。
總結以上方法:fusion方法雖然很重要,但是在benchmark上提升并不明顯;還有一個問題是,目前似乎比較少研發(fā)去探索,某個sensor丟失信息了,是否會導致融合的模型出現(xiàn)意想不到的結果。
4. 基于Physical的感知算法
雖然基于非深度學習的方法有很多問題(對噪聲敏感等),但是為什么還要繼續(xù)使用它呢?
比如在實際路測中,總會遇到深度學習算法中沒有定義的物體,或者數(shù)據(jù)量很少(長尾分布)的物體;或者有的物體并不適合用bbox來描述從而不適用于檢測任務,在這些情況,傳統(tǒng)方法更合適。
傳統(tǒng)方法怎么做呢?簡單來說就是“你看到啥就是啥,別撞上就行”,就是認為點云有的東西,實際物理世界中是存在的,不能碰撞的。方法就是去除地面,進行聚類。關鍵在于如何讓算法更穩(wěn)定和更高效。
然而基于Physical的感知算法,也有一些問題。同一個物體在不同幀間的聚類是不穩(wěn)定的,也因此不容易預測物體的運動速度;有的物體,例如揚起的灰塵,并不會影響駕駛,但是容易被識別成障礙物,因此需要增加一些去噪(灰塵等)的方法。
主講人還提到使用全景分割的方法,將整個感知系統(tǒng),置于一個網(wǎng)絡中,采用multi-task的方法去做檢測。同時也需要融合更多的時序上的信息來做檢測。
5. 一些思考和一些open problems
主講人講了自己的一些關于無人駕駛的思考和一些open problems。
1. 學術界和工業(yè)界是有一定的鴻溝的。在benchmark上的效果有時候并不一定能反應路測的效果。
例如有綠化帶隔離的對向車道的物體在路測中并不需要特別高的精度,但是在benchmark上是一視同仁的,在benchmark上提升了好幾個點的算法,在路測中對接管率而言也許并沒有帶來多大的效果提升。
還有就是有些非常影響駕駛的障礙物,不一定能在benchmark的幾個點的提升中反應出來。這些鴻溝激勵著我們?nèi)ニ伎既绾沃贫ㄒ粋€更符合現(xiàn)實無人駕駛場景的評價準則,包括檢測、跟蹤、速度預測、推理速度等評價準則。
2. 算法模型的泛化性很重要,因為現(xiàn)實數(shù)據(jù)是無法窮舉,遇到一些檢測失敗的例子,也不容易分析和去做修正,畢竟模型是不易解釋的,只能不斷增加數(shù)據(jù)。
但越到后面,幾個點的性能提升需要的數(shù)據(jù)可能是指數(shù)級的,這是需要大量成本的,但似乎人的學習是沒這么低效的,人往往從少量的樣本就可以學習非常高層的語義,從而具有非常大的泛化性。
這也是整個機器學習鄰域需要研究的點。另外,不可解釋性也會使得模型更容易受到攻擊。而且增加數(shù)據(jù)訓練是否修復了當下cases,但也影響了之前的cases。
3. 軌跡預測的groud truth有一些是不確定的,如在離轉彎口還有一定距離的時候,真實場景中,人類也不知道前車是否轉彎等等這種情況,拿這些groud truth去訓練網(wǎng)絡,網(wǎng)絡也會很困惑。
無人駕駛是一項很有挑戰(zhàn)性很有趣的工作,希望有更多的朋友加入這個行業(yè),共同推動這個行業(yè)的發(fā)展。

感謝雍洋同學對本次公開課內(nèi)容的整理,同時感謝元戎啟行的審核。