PointPillar:利用偽圖像高效實現(xiàn)3D目標檢測
點擊下方卡片,關(guān)注“新機器視覺”公眾號
視覺/圖像重磅干貨,第一時間送達
文章導(dǎo)讀
計算機視覺任務(wù)中,2D卷積神經(jīng)網(wǎng)絡(luò)得益于極其出色的性能不斷刷新著各大視覺任務(wù)的榜單,可謂是YYDS。隨著人工智能算法的不斷推進,更多的研究者將目光聚焦到了3D任務(wù),那么在3D視覺任務(wù)中,2D卷積神經(jīng)網(wǎng)絡(luò)的神話能否延續(xù)呢?答案是肯定的!今天小編將分享一篇3D點云檢測論文—Pointpillars,看看作者如何巧妙的只使用2D卷積,卻實現(xiàn)了高效的3D目標檢測。1
3D點云檢測的現(xiàn)狀如何
最近幾年點云的三維目標檢測一直很火,從早期的PointNet、PointNet++,到體素網(wǎng)格的VoxelNet,后來大家覺得三維卷積過于耗時,又推出了Complex-yolo等模型把點云投影到二維平面,用圖像的方法做目標檢測,從而加速網(wǎng)絡(luò)推理。
所以在點云上實現(xiàn)3D目標檢測通常就是這三種做法:3D卷積、投影到前視圖或者鳥瞰圖(Bev)。
3D卷積的缺點是計算量較大,導(dǎo)致網(wǎng)絡(luò)的推理速度較慢。投影的方式受到點云的稀疏性的限制,使得卷積無法較好的提取特征,效率低下。而后來研究熱點轉(zhuǎn)向了采用鳥瞰圖(Bev)的方式,但存在的明顯的缺點就是需要手動提取特征,不利于推廣到其他的雷達上使用。
撥開那些花里胡哨的網(wǎng)絡(luò),有什么更靠譜的模型能夠權(quán)衡速度和精度做三維目標檢測呢?
2
橫空殺出的PointPillars
這是一篇前兩年的點云目標檢測網(wǎng)絡(luò),為什么重溫它是因為小編在學習百度Apollo 6.0時發(fā)現(xiàn)它被集成進去作為激光雷達的檢測模型了。在這里給大家解析一下該網(wǎng)絡(luò)模型,看看有啥特點!
Pointpillars的創(chuàng)新點在于:提出了一種新的編碼方式,利用柱狀物的方式生成偽圖像。
Pointpillars由三大部分組成:
利用pillars的方式將點云轉(zhuǎn)化為稀疏偽圖像;
使用2D網(wǎng)絡(luò)進行特征的學習;
使用SSD檢測頭進行Bbox的回歸。
如下圖所示:

網(wǎng)絡(luò)結(jié)構(gòu)
Pointpillars的性能表現(xiàn):具有明顯的速度優(yōu)勢,最高也可達到105Hz,且對比僅使用點云作為輸入的3D目標檢測的方法有精度上的提升。
3
PointPillars的詳細分析
想要學習一個網(wǎng)絡(luò)模型,不管是圖像還是點云的檢測:
首先需要看看它是怎么做數(shù)據(jù)處理的?
然后了解它的特征提取模塊是怎么搭建的?
接下來了解它的檢測頭選用的是什么?
模型搭建完畢后需要分析損失函數(shù)如何權(quán)衡?
最后當然是看看實驗的仿真效果如何?
數(shù)據(jù)處理環(huán)節(jié):
Pointpillar設(shè)計了一套編碼方式將激光雷達輸出的三維坐標轉(zhuǎn)換到網(wǎng)絡(luò)輸入的形式,操作如下:
通常從激光雷達中獲取的點云表現(xiàn)形式一般是x,y,z和反射強度i。
將點云離散到x-y平面的均勻間隔的網(wǎng)格中,從而創(chuàng)建一組柱狀集P ,具有| P | = B,z軸不需要參數(shù)進行控制。
將每個支柱中的點增加xc,yc,zc,xp和yp(其中c下標表示到支柱中所有點的算術(shù)平均值的距離,p下標表示從支柱x,y中心的偏移量)。激光雷達中的每個點就具有了九維的特征。
對每個樣本的非空支柱數(shù)(P)和每個支柱中的點數(shù)(N)施加限制,來創(chuàng)建大小為(D,P,N)的張量張量。如柱狀體中的數(shù)據(jù)太多,則進行隨機采樣,如數(shù)據(jù)太少,則用0進行填充。
簡化版本的PointNet對張量化的點云數(shù)據(jù)進行處理和特征提取(即對每個點都運用線性層+BN層+ReLU層),來生成一個(C,P,N)的張量,再對于通道上使用最大池化操作,輸出一個(C,P)的張量。
編碼后特征散布回原始的支柱位置,創(chuàng)建大小為(C,H,W)的偽圖像。
(D, P, N)--> (C, P, N) --> (C, P) --> (C, H, W)
上述的轉(zhuǎn)換流程流程如圖所示:

生成偽圖像的過程
特征提取環(huán)節(jié):
本文中的編碼器的輸出特征維度C=64,除了第1個Block中汽車的步幅S=2,行人和騎自行車的人的步幅為1,第2和第3個block中采用了相同的步幅。并對3個塊進行上采樣,最后將3個上采樣的塊進行通道拼接,可以為檢測頭提供6C維度的特征。
數(shù)據(jù)流在下采樣和上采樣的過程中并不復(fù)雜:
下采樣:Block1(S,4,C),Block2(2S,6,2C),和Block3(4S,6,4C)
上采樣:Up1(S,S,2C),Up2(2S,S,2C)和Up3(4S,S,2C)。
如下圖所示:

特征層結(jié)構(gòu)
檢測頭模塊
論文中作者使用SSD進行3D目標檢測。與SSD相似,使用了2D聯(lián)合截面(IoU)將先驗盒和地面的真實情況進行匹配。Bbox的高度和高程沒有用于匹配,取而代之的是2D匹配,高度和高程成為附加的回歸目標。
損失函數(shù)部分
檢測網(wǎng)絡(luò)的損失函數(shù)一般都是有分類和回歸兩部分組成,分類損失用于給出目標的類別,回歸損失用于給出目標的位置,而三維目標檢測相比圖像的二維檢測多了3個參數(shù)。
3D Box由(x,y,z,w,h,l,0)進行定義:

其中分類損失:

回歸損失:

通過加權(quán)和的方式得到總的損失函數(shù):

實驗仿真結(jié)果
最后我們看一下文章給出的仿真結(jié)果:


不管從速度上還是精度上相比于幾種經(jīng)典模型還是有一定程度的提高,但其實我們可以發(fā)現(xiàn)在行人等檢測仍然徘徊在50%左右,和圖像的目標檢測動仄80%~90%的mAP還有很大的提升空間。
這里是運行源碼的一份評估報告,不過源碼中將車輛和行人等分開到兩份配置中訓(xùn)練,估計是因為大小特征不一,怕合起來影響刷榜精度吧。

4
PointPillars的優(yōu)缺點在哪里?
梳理一遍這個檢測網(wǎng)絡(luò)后,我們回顧對比一下其他方法,不難發(fā)現(xiàn)它的優(yōu)勢不外乎以下幾點:
提出了一種新的點云編碼器,不依靠固定編碼器進行學習特征,可以利用點云的所有信息。
在柱狀體而非體素(voxel)上進行操作,無需手動調(diào)整垂直方向的分箱。
網(wǎng)絡(luò)中只使用2D卷積,不使用3D卷積,計算量小運行高效。
不適用手工特征,而是讓網(wǎng)絡(luò)自動的學習特征,因此無需手動的調(diào)整點云的配置,即可推廣到其他的激光雷達中使用。
該網(wǎng)絡(luò)側(cè)重于三維數(shù)據(jù)形式的轉(zhuǎn)換編碼,所以在后續(xù)幾個環(huán)節(jié)仍然有不少優(yōu)化的空間,比如:
特征融合部分采用的FPN是否可以換成PAN
檢測頭采用的SSD是否可以換成更新的檢測器
回歸損失函數(shù)是否可以將角度和BBox緊耦合
通過閱讀開源工程,發(fā)現(xiàn)它提供了一個效果展現(xiàn)的可視化工具,和小編以前做的聯(lián)合標注工具很相似,如下圖所示,針對同步后的激光雷達和攝像頭數(shù)據(jù),在可視化三維點云空間的同時,將感知的結(jié)果投影到圖像的透視投影視角上以及點云的鳥瞰圖視角中。

最主要的是這個工具可以用于其他的檢測模型,只要在右側(cè)的配置欄提供輸入輸出信息即可,強烈推薦!
—版權(quán)聲明—
僅用于學術(shù)分享,版權(quán)屬于原作者。
若有侵權(quán),請聯(lián)系微信號:yiyang-sy 刪除或修改!
