一文讀懂基于 LiDAR 點(diǎn)云的 3D 物體檢測算法
?雖然業(yè)界有很多的爭論,但是 LiDAR 在目前的 L3/L4 級自動(dòng)駕駛系統(tǒng)中依然是不可或缺的傳感器,因?yàn)樗梢蕴峁┏砻艿?3D 點(diǎn)云,非常精確的測量物體在 3D 空間中的位置和形狀,而這是攝像頭和毫米波雷達(dá)很難做到的。那么相應(yīng)的,基于 LiDAR 點(diǎn)云的感知算法也就成為了近年來自動(dòng)駕駛研發(fā)的重點(diǎn)之一。與圖像的感知算法類似,LiDAR 點(diǎn)云的感知算法也分為物體檢測(包括跟蹤)和語義分割兩大類。這篇文章主要關(guān)注基于 LiDAR 點(diǎn)云的物體檢測算法,語義分割算法留待以后再做介紹。
很多綜述性的文章把 LiDAR 點(diǎn)云的物體檢測算法粗略分為四類:Multi-view 方法,Voxel 方法,Point 方法,以及 Point 和 Voxel 結(jié)合的方法。這種基于分類的綜述更像是一個(gè)算法圖書館,讀者可以根據(jù)關(guān)鍵字(或者說關(guān)鍵技術(shù))進(jìn)行索引,方便于查詢和歸檔,可能更適合于該領(lǐng)域內(nèi)的工作者。但是我想并不是所有的讀者都對這個(gè)方向有比較深入的了解,直接講方法分類和技術(shù)細(xì)節(jié)可能會從一開始就讓讀者迷失在算法的森林里。 所以,與一般的綜述不同,在這篇文章里我以時(shí)間為線索,將 LiDAR 點(diǎn)云物體檢測的發(fā)展歷程粗略地劃分為了四個(gè)時(shí)期:萌芽期,起步期,發(fā)展期和成落地期。我會從技術(shù)發(fā)展的角度,結(jié)合自己在研究中的一些體會來介紹各種算法。這篇綜述的目的不在于包羅這個(gè)方向所有的文章,我只會選一些在技術(shù)發(fā)展的道路上具有重要意義的工作。當(dāng)然本人水平有限,其中肯定會有疏漏。但是,如果大家讀完以后能夠?qū)υ摲较虻陌l(fā)展脈絡(luò)有一個(gè)基本的認(rèn)識,那我想我的目的就達(dá)到了。
基本概念在進(jìn)入具體的介紹之前,還是有必要簡單說一下一些基本的概念。LiDAR 的輸出數(shù)據(jù)是 3D 點(diǎn)云,每一個(gè)點(diǎn)除了包含 X,Y,Z 坐標(biāo),還包含一個(gè)反射強(qiáng)度 R,類似與毫米波雷達(dá)里的 RCS。3D 物體檢測的目標(biāo)是要根據(jù)點(diǎn)云數(shù)據(jù)來找到場景中所有感興趣的物體,比如自動(dòng)駕駛場景中的車輛,行人,靜態(tài)障礙物等等。下圖以車輛為例,來說明輸出結(jié)果的格式。簡單來說,檢測算法輸出多個(gè) 3D 矩形框(術(shù)語稱為 3D BoundingBox,簡稱 3D BBox),每個(gè)框?qū)?yīng)一個(gè)場景中的物體。3D BBox 可以有多種表示方法,一般最常用的就是用中心點(diǎn) 3D 坐標(biāo),長寬高,以及 3D 旋轉(zhuǎn)角度來表示(簡單一些的話可以只考慮平面內(nèi)旋轉(zhuǎn),也就是下圖中的 θ)。檢測算法輸出的 3D BBox 與人工標(biāo)注的數(shù)據(jù)進(jìn)行對比,一般采用 3D IoU (Intersection over Unoin)來衡量兩個(gè) BBox 重合的程度,高于設(shè)定的閾值就被認(rèn)為是一個(gè)成功的檢測,反之則認(rèn)為物體沒有被檢測到(False Negative)。如果在沒有物體的區(qū)域出現(xiàn)了 BBox 輸出,則被認(rèn)為是一個(gè)誤檢(False Positive)。評測算法會同時(shí)考慮這兩個(gè)指標(biāo),給出一個(gè)綜合的分?jǐn)?shù),比如 AP(Average Precision)以此為標(biāo)準(zhǔn)來評價(jià)算法的優(yōu)劣。由于不是本文的重點(diǎn),具體的細(xì)節(jié)這里就不做贅述了。?
基于 LiDAR 點(diǎn)云的 3D 物體檢測示意圖
萌芽期 (2017 年之前)有了前面的鋪墊,下面我們的算法之旅正式開始了。話說物體檢測算法的興起主要來自于計(jì)算機(jī)視覺領(lǐng)域,自從 2012 年深度學(xué)習(xí)出現(xiàn)以來,圖像和視頻中的物體檢測算法在性能上有了大幅度的提高,各種經(jīng)典算法也是層數(shù)不窮,比如最早的 R-CNN,到后來的 Faster RCNN,再到 YOLO 以及最新的 CenterNet 等等,可以說已經(jīng)研究的非常透徹了。那么,在做點(diǎn)云中的物體檢測時(shí),人們自然的就會想到要借鑒視覺領(lǐng)域的成功經(jīng)驗(yàn)。VeloFCN 就是其中的代表性方法。它將 3D 點(diǎn)云轉(zhuǎn)換到與圖像相似的正視圖(Front View),得到一個(gè)「點(diǎn)云偽圖像」。這種數(shù)據(jù)在格式和性質(zhì)上與圖像非常類似,自然的也就可以照搬圖像上的物體檢測算法。但是這種表示的缺陷也很明顯,首先多個(gè)點(diǎn)可能映射到圖像坐標(biāo)的同一個(gè)位置,這樣會造成信息的丟失。更為重要的是,將 3D 的點(diǎn)映射到 2D 平面,丟掉了深度信息,而這個(gè)信息對 3D 物體檢測來說是非常重要的。因此,人們又想到可以把 3D 點(diǎn)云映射到俯視圖(也稱作鳥瞰視圖,Bird's Eye View, 簡稱 BEV)。這種映射是非常直觀的,你可以簡單的認(rèn)為把 3D 點(diǎn)的高度坐標(biāo)忽略(將其看作點(diǎn)的特征),從而得到 2D 平面上的數(shù)據(jù)表示。MV3D 就是將 3D 點(diǎn)云同時(shí)映射到正視圖和俯視圖,并與 2D 圖像數(shù)據(jù)進(jìn)行融合。以上說的都是數(shù)據(jù)構(gòu)建和特征提取,至于后端的檢測算法,一般來說這個(gè)時(shí)期都是采用基于 R-CNN 或者類似的方法。
MV3D 的多種視圖融合
起步期(2017 年)時(shí)間進(jìn)入 2017 年,在這個(gè)年份里出現(xiàn)了兩個(gè)在點(diǎn)云物體檢測領(lǐng)域堪稱里程碑式的工作:VoxelNet 和 PointNet++。這兩個(gè)工作代表了點(diǎn)云處理的兩個(gè)基本方向,VoxelNet 將點(diǎn)云量化為網(wǎng)格數(shù)據(jù),而 PointNet++ 直接處理非結(jié)構(gòu)化的數(shù)據(jù)點(diǎn)。下面我會稍微詳細(xì)的介紹一下這兩個(gè)方法,因?yàn)橹簏c(diǎn)云物體檢測領(lǐng)域幾乎所有的方法都離不開這兩個(gè)工作里的概念。VoxelNet 這個(gè)工作是 2017 年由蘋果公司的兩位研究人員提出的,并且發(fā)表在了 CVPR 2018 上(計(jì)算機(jī)視覺和模式識別領(lǐng)域的頂會)。其思路并不復(fù)雜,首先將點(diǎn)云量化到一個(gè)均勻的 3D 網(wǎng)格中(下圖中的 grouping)。每個(gè)網(wǎng)格內(nèi)部隨機(jī)采樣固定數(shù)量的點(diǎn)(不足的就重復(fù)),每個(gè)點(diǎn)用 7 維特征表示,包括該點(diǎn)的 X,Y,Z 坐標(biāo),反射強(qiáng)度 R,以及該點(diǎn)相對網(wǎng)格質(zhì)心(網(wǎng)格內(nèi)所有點(diǎn)位置的均值)的位置差 ΔX,ΔY 和 ΔZ。全連接層被用來提取點(diǎn)的特征,然后每個(gè)點(diǎn)的特征再與網(wǎng)格內(nèi)所有點(diǎn)的特征均值進(jìn)行拼接,得到新的點(diǎn)特征。這種特征的優(yōu)點(diǎn)在于同時(shí)保留了單個(gè)點(diǎn)的特性和該點(diǎn)周圍一個(gè)局部小區(qū)域(網(wǎng)格)的特性。這個(gè)點(diǎn)特征提取的過程可以重復(fù)多次,以增強(qiáng)特征的描述能力(下圖中的 Stacked Voxel Feature Encoding)。最終網(wǎng)格內(nèi)的所有點(diǎn)進(jìn)行最大池化操作(Max Pooling),以得到一個(gè)固定長度的特征向量。以上這些步驟稱為特征學(xué)習(xí)網(wǎng)絡(luò),其輸出是一個(gè) 4D 的 Tensor(對應(yīng) X,Y,Z 坐標(biāo)和特征)。這與一般的圖像數(shù)據(jù)不同(圖像是 3D Tensor,只有 X,Y 坐標(biāo)和特征),因此還沒法直接采用圖像物體檢測的方法。VoxelNet 中采用 3D 卷積對Z維度進(jìn)行壓縮(比如 stride=2)。假設(shè) 4D Tensor 的維度為 HxWxDxC,經(jīng)過若干次 3D 卷積后,Z 維度的大小被壓縮為 2(也就是 HxWx2xC'),然后直接將 Z 維度與特征維度合并,生成一個(gè) 3D 的 Tensor(HxWx2C')。這就和標(biāo)準(zhǔn)的圖像數(shù)據(jù)格式相似了,因此可以接上圖像物體檢測網(wǎng)絡(luò)(比如 Region Proposal Network,RPN)來生成物體檢測框,只不過這里生成的是 3D 的檢測框。從上面的介紹可以看出,VoxelNet 的框架非常簡潔,也是第一個(gè)可以真正進(jìn)行端對端的學(xué)習(xí)的點(diǎn)云物體檢測網(wǎng)絡(luò)。實(shí)驗(yàn)結(jié)果表明,這種端對端的方式可以自動(dòng)地從點(diǎn)云中學(xué)習(xí)到可用的信息,比手工設(shè)計(jì)特征的方式更為高效。
VoxelNet 網(wǎng)絡(luò)結(jié)構(gòu)PointNet++ 該方法的前身是 PointNet,由斯坦福大學(xué)的研究者在 2017 年發(fā)表,這也是點(diǎn)云處理領(lǐng)域的開創(chuàng)性工作之一。PointNet 處理的是點(diǎn)云分類任務(wù),其主要思路是直接處理原始的點(diǎn)云。除了一些幾何變換之外,PointNet 主要有兩個(gè)操作:MLP(多個(gè)全連接層)提取點(diǎn)特征,MaxPooling 得到全局特征。物體分類網(wǎng)絡(luò)采用全局特征作為輸入,而分割網(wǎng)絡(luò)則同時(shí)采用全局特征和點(diǎn)特征。簡單來說,你可以把 PointNet 分類網(wǎng)絡(luò)看做一個(gè)分類器,比如可以理解為傳統(tǒng)方法中的 SVM。但是要進(jìn)行物體檢測的話,就還需要一個(gè)類似于 Sliding Window 的機(jī)制,也就是說在場景內(nèi)的各個(gè)位置應(yīng)用 PointNet 來區(qū)分物體和背景,以達(dá)到物體檢測的效果。當(dāng)然對于相對稀疏的點(diǎn)云數(shù)據(jù)來說,這種做法是非常低效的。因此,PointNet 的作者同年就提出了升級版本,也就是 PointNet++。其主要思路是用聚類的方式來產(chǎn)生多個(gè)候選區(qū)域(每個(gè)區(qū)域是一個(gè)點(diǎn)集),在每個(gè)候選區(qū)域內(nèi)采用 PointNet 來提取點(diǎn)的特征。這個(gè)過程以一種層級化的方式重復(fù)多次,每一次聚類算法輸出的多個(gè)點(diǎn)集都被當(dāng)做抽象后的點(diǎn)云再進(jìn)行下一次處理(Set Abstraction,SA)。這樣得到的點(diǎn)特征具有較大的感受野,包含了局部鄰域內(nèi)豐富的上下文信息。最后,在多層 SA 輸出的點(diǎn)集上進(jìn)行PointNet分類,以區(qū)分物體和背景。同樣的,這個(gè)方法也可以做點(diǎn)云分割。
PointNet 網(wǎng)絡(luò)結(jié)構(gòu)
PointNet++ 網(wǎng)絡(luò)結(jié)構(gòu)與 VoxelNet 相比,PointNet++ 的優(yōu)點(diǎn)在于:1,沒有量化帶來的信息損失,也無需調(diào)節(jié)量化超參數(shù);2,忽略空白區(qū)域,避免了無效的計(jì)算。但是缺點(diǎn)也顯而易見:1,無法利用成熟的基于空間卷積的2D物體檢測算法;2,雖然避免了無效計(jì)算,但是GPU對于點(diǎn)云的處理效率遠(yuǎn)低于網(wǎng)格數(shù)據(jù),因此實(shí)際的運(yùn)行速度甚至更慢。發(fā)展期(2018 年 - 2020 年)在 VoxelNet 和 PointNet++ 相繼提出后,3D 物體檢測領(lǐng)域迎來了一個(gè)快速發(fā)展期,很多算法被提出,用來改進(jìn)這兩個(gè)工作中的不足。對 Voxel 方法的改進(jìn)VoxelNet 的主要問題在于數(shù)據(jù)表示比較低效,中間層的 3D 卷積計(jì)算量太大,導(dǎo)致其運(yùn)行速度只有大約 2FPS(Frame Per Second),遠(yuǎn)低于實(shí)時(shí)性的要求,因此后續(xù)很多工作針對其運(yùn)行效率的問題進(jìn)行了改進(jìn)。SECOND 采用稀疏卷積策略,避免了空白區(qū)域的無效計(jì)算,將運(yùn)行速度提升到了 26 FPS,同時(shí)也降低了顯存的使用量。PIXOR 提出通過手工設(shè)計(jì)的方式,將 3D 的 Voxel 壓縮到 2D 的 Pixel。這樣做避免了 3D 卷積,但是損失了高度方向上的信息,導(dǎo)致檢測準(zhǔn)確度下降很多。PointPillar 的思路也是 3D 轉(zhuǎn) 2D,也就是將點(diǎn) 3D 云量化到 2D 的 XY 平面網(wǎng)格。但是與 PIXOR 手工設(shè)計(jì)特征的方式不同,PointPillar 把落到每個(gè)網(wǎng)格內(nèi)的點(diǎn)直接疊放在一起,形象的稱其為柱子(Pillar),然后利用與 PointNet 相似的方式來學(xué)習(xí)特征,最后再把學(xué)到的特征向量映射回網(wǎng)格坐標(biāo)上,得到與圖像類似的數(shù)據(jù)。這樣做一來避免了 VoxelNet 中的 3D 卷積和空白區(qū)域的無效計(jì)算(運(yùn)行速度達(dá)到 62 FPS),二來避免了手工設(shè)計(jì)特征導(dǎo)致信息丟失和網(wǎng)絡(luò)適應(yīng)性不強(qiáng)的問題,可以說是很巧妙的思路。不好的方面是,點(diǎn)特征的學(xué)習(xí)被限制在網(wǎng)格內(nèi),無法有效的提取鄰域的上下文信息。
PointPillar 網(wǎng)絡(luò)結(jié)構(gòu)對 Point 方法的改進(jìn)PointNet++ 采用基于聚類的方法來層級化的提取鄰域特征以及獲得物體候選,這種做法效率比較低,而且也很難做并行加速。而這恰巧是傳統(tǒng)的 2D 卷積網(wǎng)絡(luò)的強(qiáng)項(xiàng),因此后續(xù)的工作逐漸將 2D 物體檢測算法中的一些思路拿過來,用來解決 PointNet++ 中的問題。Point-RCNN 首先在這個(gè)方向了進(jìn)行了探索,可以稱得上 3D 物體檢測領(lǐng)域的又一個(gè)里程碑式的工作。從名字上就能看出,這個(gè)方法將點(diǎn)云處理和 2D 物體檢測領(lǐng)域的開山之作 Faster RCNN 結(jié)合了起來。首先,PointNet++ 被用來提取點(diǎn)特征。點(diǎn)特征被用來進(jìn)行前景分割,以區(qū)分物體上的點(diǎn)和背景點(diǎn)。同時(shí),每個(gè)前景點(diǎn)也會輸出一個(gè) 3D 候選 BBox。接下來就是將候選 BBox 內(nèi)的點(diǎn)再做進(jìn)一步的特征提取,輸出 BBox 所屬的物體類別,并且對其位置,大小進(jìn)行細(xì)化。看到這里,熟悉 2D 物體檢測的朋友肯定會說,這不就是一個(gè)典型的兩階段檢測模型嘛。沒錯(cuò),但不同的是,Point-RCNN 只在前景點(diǎn)上生成候選,這樣避免了 3D 空間中生成稠密候選框所帶來的巨大計(jì)算量。盡管如此,作為一個(gè)兩階段的檢測器,加上 PointNet++ 本身較大的計(jì)算量,Point-RCNN的運(yùn)行效率依然不高,只有大約13FPS 。Point-RCNN后來被擴(kuò)展為Part-A2[11],速度和準(zhǔn)確度都有一定的提升。
Point-RCNN 網(wǎng)絡(luò)結(jié)構(gòu)3D-SSD 通過對之前 Point-based 方法的各個(gè)模塊進(jìn)行分析,得出結(jié)論:FP(Feature Propagation)層和細(xì)化層(Refinement)是系統(tǒng)運(yùn)行速度的瓶頸。FP 層的作用是將 SA 層抽象后的點(diǎn)特征再映射回原始的點(diǎn)云,可以理解為上圖中 Point-RCNN 的 Point Cloud Decoder。這一步非常必要,因?yàn)?SA 輸出的抽象點(diǎn)并不能很好的覆蓋所有的物體,會導(dǎo)致很大的信息丟失。3D-SSD 提出了一種新的聚類方法,同時(shí)考慮點(diǎn)與點(diǎn)之間在幾何空間和特征空間的相似度。通過這種改進(jìn)的聚類方法,SA 層的輸出可以直接用來生成物體 Proposal,避免了 FP 層帶來的大計(jì)算量。同時(shí),為了避免 Refinement 階段的 Region Pooling,3D-SSD 直接采用 SA 輸出的代表點(diǎn),利用前面提到了改進(jìn)聚類算法找到其鄰域點(diǎn),用一個(gè)簡單的 MLP 來預(yù)測類別和物體框 3D BBox。3D-SSD 可以認(rèn)為是一個(gè) Anchor-Free 的單階段檢測器,這也符合整個(gè)物體檢測領(lǐng)域的發(fā)展趨勢。通過以上改進(jìn),3D-SSD 的運(yùn)行速度可以達(dá)到 25FPS。
3D-SSD 網(wǎng)絡(luò)結(jié)構(gòu)對于非結(jié)構(gòu)化的點(diǎn)云數(shù)據(jù),用圖模型來表示也是一種很自然的想法。但是圖神經(jīng)網(wǎng)絡(luò)相對比較復(fù)雜,雖然近些年發(fā)展也很快,但是在 3D 物體檢測上的工作并不多。PointGNN 是其中一個(gè)比較典型的工作。其流程主要分為三步:首先根據(jù)一個(gè)預(yù)設(shè)的距離閾值來建立圖模型;然后更新每個(gè)頂點(diǎn)以獲取鄰域點(diǎn)的信息,用來檢測物體類別和位置,最后融合多個(gè)頂點(diǎn)輸出的 3D 物體框,作為最終的檢測結(jié)果。這種基于圖模型的方法在思路上非常新穎,但是訓(xùn)練和推理過程的計(jì)算量太大。論文中指出完成一次訓(xùn)練需要花費(fèi)將近一周的時(shí)間,這大大降低了該類方法的實(shí)用性。
PointGNN 網(wǎng)絡(luò)結(jié)構(gòu)Voxel 和 Point 方法的融合以上回顧了 Voxel-based 和 Point-based 兩個(gè)主要方向上的改進(jìn)。其實(shí),在這個(gè)階段,研究者已經(jīng)有意無意的將兩種策略進(jìn)行融合,以取長補(bǔ)短。PointPillar 就是一個(gè)例子,雖然點(diǎn)云被按照類似 Voxel 的方式進(jìn)行量化,但是點(diǎn)特征的學(xué)習(xí)是采用類似 PointNet 的方式。雖然說算法的性能并不是最好的,但是其思路還是非常值得思考的。沿著這個(gè)方向,后續(xù)又出現(xiàn)了很多不錯(cuò)的工作。在介紹更多的工作之前,有必要來總結(jié)一下之前的代表性方法,看看它們在檢測率和速度上的對比如何。這里我們采用行業(yè)內(nèi)最流行的 KITTI 數(shù)據(jù)庫來作為評測的基準(zhǔn)。至于更大規(guī)模和更針對自動(dòng)駕駛應(yīng)用的 nuScenes 和 Waymo 數(shù)據(jù)庫,我們留在后面再討論。KITTI 采用 Velodyne 激光雷達(dá),在城市道路環(huán)境下采集數(shù)據(jù),其 3D 物體識別任務(wù)的類別包括車輛,行人和騎車的人。因?yàn)樵缙谝恍┧惴ㄖ惶峁┝塑囕v檢測的正確率,因此這里我們就只對比車輛這個(gè)類別。這里算法的準(zhǔn)確度采用中等難度測試集上的 AP 作為指標(biāo),而速度則采用 FPS 來衡量,這兩個(gè)指標(biāo)都是越高越好。
VoxelNet | SECOND | PointPillar | PointRCNN | 3D-SSD | |
準(zhǔn)確度(AP) | 64.17% | 75.96% | 74.31% | 75.64% | 79.57% |
速度(FPS) | 2.0 | 26.3 | 62.0 | 10.0 | 25.0 |
?從上表的對比中可以看出,基于Voxel的方法速度較快,準(zhǔn)確度偏低。基于 Point 的方法速度明顯偏慢,但是準(zhǔn)確度相對較高。一個(gè)成功的算法要同時(shí)考慮速度和準(zhǔn)確度,在兩者之間尋求最優(yōu)的平衡。
那么再來回顧一下 Voxel 和 Point 的主要問題。前者非常依賴于量化的參數(shù):網(wǎng)格大的話信息損失比較大,網(wǎng)格小的話的計(jì)算量和內(nèi)存使用量又非常高。后者很難提取鄰域的上下文特征,并且內(nèi)存的訪問是不規(guī)則的(大約 80% 的運(yùn)行時(shí)間都耗費(fèi)在數(shù)據(jù)構(gòu)建,而不是真正的特征提取上)。因此,兩者融合的基本思路是:利用較低分辨率的 Voxel 來提取上下文特征(比如 PV-CNN )或者生成物體候選(Fast Point RCNN ),或者二者兼有(比如 PV-RCNN,SA-SSD),然后再與原始的點(diǎn)云結(jié)合,這樣單個(gè)點(diǎn)的特征和點(diǎn)點(diǎn)之間的空間關(guān)系也可以同時(shí)保留。在 PV-CNN 中,一個(gè)分支采用低分辨率的 Voxel 來提取具有鄰域信息的特征,然后再通過插值的方法映射回每個(gè)點(diǎn)上。另一個(gè)分支直接從原始點(diǎn)出發(fā),利用MLP來提取點(diǎn)特征,這時(shí)雖然沒有鄰域信息,但是單個(gè)點(diǎn)的特征提取是相對精確的。最后把兩個(gè)分支的特征進(jìn)行拼接,作為下一步的輸入。?
PV-CNN 網(wǎng)絡(luò)結(jié)構(gòu)類似的,PV-RCNN 的一個(gè)分支將點(diǎn)云量化到不同分辨率的 Voxel,以提取上下文特征和生成 3D 物體候選。另外一條分支上采用類似于 PointNet++ 中 Set Abstraction 的操作來提取點(diǎn)特征。這里比較特別的是,每個(gè)點(diǎn)的領(lǐng)域點(diǎn)并不是原始點(diǎn)云中的點(diǎn),而是 Voxel 中的點(diǎn)。由于 Voxel 中的點(diǎn)具有多分辨率的上下文信息,點(diǎn)特征提取也就同時(shí)兼顧了單個(gè)點(diǎn)以及鄰域信息,這與 PV-CNN 中的思路是類似的。值得一提的是,PV-RCNN 和 Fast Point RCNN 都屬于兩階段的檢測方法,有一個(gè) ROI Pooling 的步驟,因此運(yùn)行速度會收到影響(PV-RCNN 只有 12.5 FPS,F(xiàn)ast Point R-CNN 也只有 16.7 FPS)。
PV-RCNN 網(wǎng)絡(luò)結(jié)構(gòu)SA-SSD 通過附加的前景分割和物體中心點(diǎn)估計(jì)任務(wù)引導(dǎo) Voxel 分支去更好的學(xué)習(xí)點(diǎn)特征和利用點(diǎn)之間的空間關(guān)系,同時(shí)也避免了 3D 物體候選框和 ROI Pooling 步驟。作為一個(gè)單階段的檢測器,SA-SSD 可以達(dá)到 25 FPS,準(zhǔn)確度也僅比 PV-RCNN 略低(79.79% vs. 81.43%)。
SA-SSD 網(wǎng)絡(luò)結(jié)構(gòu)落地期(2020 年至今)在之前的快速發(fā)展期中,3D 物體檢測的各種策略都被充分的研究和實(shí)驗(yàn),人們也獲得了很多寶貴的經(jīng)驗(yàn)。那么,下一步很自然就是需要確定最優(yōu)的策略,以及如何將算法與實(shí)際的應(yīng)用相結(jié)合。因此,在這一階段,研究的重心開始往算法的實(shí)用性上和可落地性上轉(zhuǎn)移。針對自動(dòng)駕駛應(yīng)用來說,基于激光雷達(dá)的 3D 物體檢測一方面是重要的感知信號來源,是自動(dòng)駕駛系統(tǒng)的核心之一,因此我們需要充分的考慮實(shí)時(shí)性和準(zhǔn)確性的平衡。
另一方面,激光雷達(dá)在很多時(shí)候會作為輔助的傳感器來輔助離線的數(shù)據(jù)標(biāo)注。比如,毫米波雷達(dá)的點(diǎn)云非常稀疏,底層數(shù)據(jù)又無法直觀的理解,因此很難在其上進(jìn)行精確的物體標(biāo)注。這個(gè)時(shí)候激光雷達(dá)或者攝像頭的輔助就變得非常重要。一般來說,自動(dòng)的物體檢測算法會和人工標(biāo)注進(jìn)行結(jié)合,以提高標(biāo)注效率。在這種應(yīng)用中,最關(guān)注的是檢測算法的準(zhǔn)確度而不是速度。因此,個(gè)人認(rèn)為現(xiàn)階段 3D 物體檢測的發(fā)展有兩個(gè)趨勢:一個(gè)是追求速度和準(zhǔn)確度的平衡,另一個(gè)是在保證一定速度的前提下最大化準(zhǔn)確度。前者一般會采用 Voxel 加單階段檢測器,后者一般會融合 Voxel 和 Point,甚至采用兩階段的檢測器,以獲得更為精細(xì)的物體框。下面結(jié)合幾個(gè) 2021 年最新的工作,來做進(jìn)一步的分析。SIENet 是一個(gè)基于 Voxel 和 Point 融合的兩階段檢測方法,其融合策略與 PV-RCNN 相似。為了解決遠(yuǎn)處物體點(diǎn)云相對稀疏的問題,SIENet 采用了一個(gè)附加分支,將 Voxel 的網(wǎng)格看做額外的點(diǎn),以此來對遠(yuǎn)處物體進(jìn)行補(bǔ)全。SIENet 在 KITTI 車輛檢測上的 AP 為 81.71%,但是速度只有 12.5 FPS,基本上與 PV-RCNN 相當(dāng)。
SIENet 網(wǎng)絡(luò)結(jié)構(gòu)Voxel R-CNN 也是一個(gè)兩階段檢測器,但是只采用了 Voxel 來做特征提取,其結(jié)構(gòu)更加簡潔。通過一個(gè)特別設(shè)計(jì)的 Voxel ROI Pooling 模塊,該方法可以進(jìn)一步提高物體檢測的精確度。其余的部分與一般的基于 Voxel 方法非常相似,這里就不詳細(xì)描述了。Voxel RCNN 在 KITTI 車輛檢測上的 AP 為81.62%,與 SIENet 相當(dāng),但是速度提升了一倍,達(dá)到 25.2 FPS。
Voxel R-CNN 網(wǎng)絡(luò)結(jié)構(gòu) CIA-SSD 是一個(gè)基于 Voxel 的單階段檢測方法。其特征提取階段與 SECOND 類似,都是采用稀疏 3D 卷積。不同的是 CIA-SSD 將網(wǎng)格內(nèi)點(diǎn)的均值作為起始特征(沒有采用 VoxelNet 中的多階段 MLP),而且通過不斷降低空間分辨率來進(jìn)一步減少計(jì)算量,最后將Z方向的特征拼接以得到 2D 特征圖(類似 VoxelNet 中的做法)。作為一個(gè)單階段的檢測器,CIA-SSD 借鑒了圖像物體檢測領(lǐng)域的一些技巧。比如,為了更好的提取空間和語義特征,CIA-SSD 采用了一種類似于 Feature Pyramid Network (FPN)的結(jié)構(gòu),當(dāng)然這里的細(xì)節(jié)設(shè)計(jì)稍微復(fù)雜一些。此外,為了解決單階段檢測器分類置信度和定位準(zhǔn)確度之間的差異問題,CIA- SSD 采用了 IoU 預(yù)測分支,以修正分類的置信度和輔助 NMS。結(jié)合以上這些策略,CIA-SSD 在 KITTI 車輛檢測的 AP 達(dá)到 80.28%,速度為 33 FPS。CIA-SSD 之后被擴(kuò)展為 SE-SSD,速度不變,AP 提升到 82.54%,這其實(shí)已經(jīng)超越了基于 Voxel 和 Point 融合的兩階段檢測器。
CIA-SSD 網(wǎng)絡(luò)結(jié)構(gòu)新的數(shù)據(jù)庫和基準(zhǔn)評測以上關(guān)于檢測準(zhǔn)確度和速度的分析都是基于 KITTI 數(shù)據(jù)庫。近兩年來,為了更好的評測 3D 物體檢測算法,并且更加貼近自動(dòng)駕駛場景,工業(yè)界構(gòu)建了兩個(gè)更大規(guī)模的數(shù)據(jù)庫:Waymo Open Dataset 和 NuScenes,其數(shù)據(jù)量比 KITTI高出兩個(gè)量級。這兩個(gè)數(shù)據(jù)庫上都組織了 3D 物體識別競賽,使得業(yè)界的研究和工程人員可以清楚的了解當(dāng)前最實(shí)用的技術(shù)。尤其是 2021 年的 Waymo 3D 物體識別競賽,還特別增加了對運(yùn)行時(shí)間的要求,進(jìn)一步的強(qiáng)調(diào)了算法的可落地性。從近兩屆比賽獲勝的算法來看,基于 Voxel 的單階段方法成為主流,這也與圖像物體檢測領(lǐng)域的發(fā)展趨勢相契合。前文介紹的很多技巧,比如輕量級的 Voxel 特征提取,稀疏 3D 卷積,F(xiàn)PN,IoU 預(yù)測分支等等,都在獲勝的算法中有所體現(xiàn)。這從另一個(gè)側(cè)面說明了當(dāng)前技術(shù)的最高水平,也為 3D 物體檢測領(lǐng)域的進(jìn)一步發(fā)展提供了方向。