Warning!遠距離LiDAR感知

2024.02.02

本文經自動駕駛之心公眾號授權轉載,轉載請洽出處。

一、引言

去年開了圖森ai day之後,一直想以文字形式總結一下這幾年在遠距離感知方面所做的工作,正好最近有時間了,就想寫一篇文章記錄一下這幾年的研究歷程。本文所提到的內容都在圖森ai day影片[0]和公開發表的論文中,不涉及具體的工程細節等技術秘密。

眾所周知,圖森是做卡車自動駕駛的,而卡車不論是剎車距離還是變換車道時間都遠比轎車要長,所以如果說圖森有什麼與其他自動駕駛公司不同的獨門技術,遠距離感知必然是其中之一。我在圖森負責LiDAR感知這一塊,就專門聊一聊使用LiDAR進行遠距離感知的相關內容。

剛加入公司時,主流的LiDAR感知一般是BEV方案。不過此BEV不是大家熟悉的那個BEV,特斯拉的那個BEV感知我個人認為應該叫作“多視角相機在BEV空間下的融合技術”,而這裡的LiDAR BEV是指將LiDAR點雲投影到BEV空間下,接著接2D卷積+2D檢測頭進行目標檢測的方案。我能查到最早關於BEV方案的記錄是在百度發表在CVPR17的論文MV3D[1],後續的大部分工作,包括我所了解的大部分公司實際使用的方案,最後都要投影到BEV空間進行檢測,大致也都可以歸在BEV方案之中。

圖片MV3D[1]所使用的BEV視角特徵

BEV方案的一大優點是可以直接套用成熟的2D偵測器,但也有一個很致命的缺點:它限制住了感知範圍。從上圖可以看到,因為要套2D偵測器,它必須形成一個2D的feature map,此時就必須為它設定一個距離閾值,而在上圖範圍之外其實也還是有LiDAR點的,只是被這個截斷操作給丟棄了。那可不可以把這個距離門檻拉大,直到包包住所有點呢?硬要這麼做也不是不行,只是LiDAR在掃描模式、反射強度(隨距離呈4次方衰減)、遮擋等問題作用下,遠處的點雲是非常少的,這麼做很不划算。

BEV方案的這個問題在學術界並沒有引起關注,這主要是資料集的問題,主流資料集的標註範圍通常只有不到80m(nuScenes 50m、KITTI 70m,Waymo 80m),在這個距離下BEV feature map並不需要很大。但工業界使用的中距離LiDAR普遍已經可以做到200m的掃描範圍,而近幾年也有幾款遠距離LiDAR問世,它們可以做到500m的掃描範圍。注意到feature map的面積和計算量是隨距離呈二次方增長的,在BEV方案下,200m的計算量幾乎都無法承受,更不用說500m了。

公開資料集中雷射雷達的掃描範圍。 KITTI(紅點, 70m) vs. Argoverse 2 (藍點, 200m)

在認識到BEV方案的限制之後,我們進行了多年的研究,最終才找到了可行的替代方案。研究過程並非一帆風順,經歷了很多次挫折,論文和報告中一般都只會講成功而不會說失敗,但失敗的經驗也是彌足珍貴的,所以博客反而成了更好的媒介,下面就按時間軸依序講述一下。

二、Point-based方案

CVPR19上,港中文發表了一篇Point-based檢測器PointRCNN[2],它是直接在點雲上進行計算的,點雲掃到哪它算到哪,沒有拍BEV的過程,所以這類point -based方案理論上是可以做到遠距離感知的。

但我們試下來發現了一個問題,KITTI一幀的點雲數量可以降採樣到1.6萬個點來檢測而不怎麼掉點,但我們的LiDAR組合一幀有10多萬個點,如果降採樣10倍顯然檢測精度會大幅受影響。而如果不降採樣的話,在PointRCNN的backbone中甚至有O(n^2)的操作,導致它雖然不拍bev,但計算量仍然無法承受。這些比較耗時的op主要是因為點雲本身的無序性,導致不論是降採樣還是檢索鄰域,都必須遍歷所有的點。由於涉及的op較多且都是沒有經過優化的標準op,短期內感覺也沒有能優化到實時的希望,所以這條路線就放棄了。

不過這段研究也沒有浪費,雖然backbone計算量過大,但它的二階段因為只在前景上進行,所以計算量還是比較小的。把PointRCNN的二階段直接套用在BEV方案的一階段偵測器之後,偵測框的準確度會有比較大的提升。在應用過程中我們也發現了它的一個小問題,解決之後總結發表成了一篇文章[3]發表在了CVPR21上,大家也可以到這篇博客上看看:

王峰:LiDAR R-CNN:快速、通用的二階段3D偵測器

三、Range-View方案

在Point-based方案嘗試失敗之後,我們將目光轉向了Range View,當年的LiDAR都是機械旋轉式的,例如64線雷射雷達就會掃描出64行具有不同俯仰角的點雲,例如每行都掃描到2048點的話,就可以形成一張64*2048的range image。

圖片RV、BEV、PV的對比

在Range View下,點雲不再是稀疏的形式而是緻密地排列在一起,遠距離的目標在range image上只是比較小,但並不會被丟掉,所以理論上也是能檢測到的。

可能是因為與圖像更相似,對於RV的研究其實比BEV還早,我能找到的最早記錄也是來自於百度的論文[4],百度真的是自動駕駛的黃埔軍校啊,不論是RV還是BEV的最早應用都來自於百度。

於是當時我就隨手試了一把,結果跟BEV方法相比,RV的AP狂掉30-40點...我發現其實在2d的range image上檢測得還可以,但輸出出來的3d框效果就非常差了。當時分析RV的特性,感覺它具備影像的所有缺點:物體尺度不統一、前背景特徵混雜、遠距離目標特徵不明顯,但又不具備影像語意特徵豐富的優勢,所以當時對這個方案比較悲觀。

因為正式員工畢竟還是要做落地的工作,對於這種探索性問題還是交給實習生比較好。後來招了兩位實習生一起來研究這個問題,在公開資料集上一試,果然也是掉了30個點...還好兩位實習生比較給力,透過一系列的努力,還有參考其他論文修正了一些細節之後,將點數刷到了跟主流BEV方法差不多的水平,最終論文發表在了ICCV21上[5]。

雖然點數刷上來了,但問題並沒有被徹底解決,當時lidar需要多幀融合來提高信噪比的做法已經成為共識,遠距離目標因為點數少,更加需要疊幀來增加信息量。在BEV方案裡,多幀融合非常簡單,直接在輸入點雲上加上一個時間戳然後多幀疊加起來,整個網路都不用改動就可以漲點,但在RV下變換了很多花樣都沒有得到類似的效果。

而且在這個時候,LiDAR從硬體的技術方案上也從機械旋轉式走向了固態/半固態的方式,大部分固態/半固態的LiDAR不再能夠形成range image,強行構造range image會損失訊息,所以這條路徑最終也是被放棄了。

四、Sparse Voxel方案

先前說過Point-based方案的問題在於點雲不規整的排列使得降採樣和鄰域檢索等問題需要遍歷所有點雲導致計算量過高,而BEV方案下資料規整了但又有太多空白區域導致計算量過高。這兩者結合一下,在有點的地方進行voxelization使其變得規整,而沒點的地方不進行表達來防止無效計算似乎也是一條可行的路徑,這也就是sparse voxel方案。

因為SECOND[6]的作者髕岩加入了圖森,所以我們在早期就曾經嘗試過sparse conv的backbone,但因為spconv並不是一個標準的op,自己實現出來的spconv仍然過慢,不足以實時進行檢測,有時甚至慢於dense conv,所以就暫時擱置了。

後來第一款能掃描500m的LiDAR:Livox Tele15到貨,遠距離LiDAR感知演算法迫在眉睫,嘗試了一下BEV的方案實在是代價太高,就又把spconv的方案拿出來試了一下,因為Tele15的fov比較窄,而且在遠處的點雲也非常稀疏,所以spconv勉強是可以做到即時的。

但不拍bev的話,檢測頭這塊就不能用2D檢測中比較成熟的anchor或者center assign了,這主要是因為lidar掃描的是物體的表面,中心位置並不一定有點(如下圖所示),沒有點自然也無法assign上前景目標。其實我們在內部嘗試了很多種assign方式,這裡就不細講公司實際使用的方式了,實習生在之後也嘗試了一種assign方案發表在了NIPS2022上[7],可以看看他寫的解讀:

明月不諳離苦:全稀疏的3D物件偵測器

但如果要把這個演算法應用在向前500m,向後和左右各150m的LiDAR組合下,還是力有不逮捕。剛好實習生之前追熱度曾經也藉鑒Swin Transformer的思想做過一篇Sparse Transformer的文章[8],也是費了好大的功夫從掉20多個點一點點刷起來(感謝實習生帶飛,tql ),當時覺得Transformer的方法還是很適合不規律的點雲資料的,所以在公司資料集上也試了一下。

可惜的是,這個方法在公司資料集上一直刷不過BEV類方法,差了接近5個點的樣子,現在回想起來可能還是有一些trick或者訓練技巧沒有掌握,按理說Transformer的表達能力是不弱於conv的,但後來也並沒有再繼續嘗試。不過這個時候已經對assign方式進行了優化降低了很多計算量,所以就想再嘗試一把spconv,結果令人驚訝的是,直接把Transformer替換為spconv就可以做到近距離與BEV類方法的精度相當,同時還能偵測遠距離目標的效果了。

也是在這個時候,髕岩同學做出了第二版spconv[9],速度有了大幅提升,所以計算延遲不再是瓶頸,終於遠距離的LiDAR感知掃清了所有障礙,能夠在車上即時地跑起來了。

後來我們更新了LiDAR排列方式,將掃描範圍提升到了向前500m,向後300m,向左向右各150m,這套演算法也運作良好,相信隨著未來算力的不斷提升,計算延遲會越來越不成問題。

下面展示一下最終的遠距離偵測效果,大家也可以看看圖森ai day的影片的01:08:30左右的位置看一下動態的偵測效果:

雖然是最終的融合結果,但因為這天起霧影像能見度很低,所以結果基本上都來自於LiDAR感知。

五、後記

從point-based方法,到range image方法,再到基於sparse voxel的Transformer和sparse conv方法,遠距離感知的探索不能說是一帆風順,簡直就是滿路荊棘。最後其實也是隨著算力的不斷提升加上許多同事的不斷努力才做到了今天這一步。在此感謝圖森首席科學家王乃岩和圖森的各位同事、實習生們,這裡面大部分的idea和工程實現都不是我做出來的,很慚愧,更多地是起到了承上啟下的作用。

很久不寫這麼長的文章了,寫得跟個流水帳似的而沒有形成一個動聽的故事。近年來,堅持做L4的同行越來越少,L2的同行們也逐漸轉向純視覺的研究,LiDAR感知肉眼可見地逐步被邊緣化,雖然我仍然堅信多一種直接測距的傳感器是更好的選擇,但業內人士似乎越來越不這麼認為。看著新鮮血液們的履歷上越來越多的BEV、Occupancy,不知道LiDAR感知還能再撐多久,我又能撐多久,寫這麼一篇文章也是起到一個紀念作用吧。

深夜涕零,不知所云,見諒。