前言
PointNet是由斯坦福大學(xué)的Charles R. Qi等人在《PointNet:Deep Learning on Point Sets for 3D Classification and Segmentation》一文中提出的模型,它可以直接對點云進行處理的,對輸入點云中的每一個點,學(xué)習(xí)其對應(yīng)的空間編碼,之后再利用所有點的特征得到一個全局的點云特征。Pointnet提取的全局特征能夠很好地完成分類任務(wù),但局部特征提取能力較差,這使得它很難對復(fù)雜場景進行分析。
PointNet++是Charles R. Qi團隊在PointNet論文基礎(chǔ)上改進版本,其核心是提出了多層次特征提取結(jié)構(gòu),有效提取局部特征提取,和全局特征。
F-PointNet將PointNet的應(yīng)用拓展到了3D目標(biāo)檢測上,可以使用PointNet或PointNet++進行點云處理。它在進行點云處理之前,先使用圖像信息得到一些先驗搜索范圍,這樣既能提高效率,又能增加準(zhǔn)確率。
PointNet
1.1 PointNet思路流程
1)輸入為一幀的全部點云數(shù)據(jù)的集合,表示為一個nx3的2d tensor,其中n代表點云數(shù)量,3對應(yīng)xyz坐標(biāo)。
2)輸入數(shù)據(jù)先通過和一個T-Net學(xué)習(xí)到的轉(zhuǎn)換矩陣相乘來對齊,保證了模型的對特定空間轉(zhuǎn)換的不變性。
3)通過多次mlp對各點云數(shù)據(jù)進行特征提取后,再用一個T-Net對特征進行對齊。
4)在特征的各個維度上執(zhí)行maxpooling操作來得到最終的全局特征。
5)對分類任務(wù),將全局特征通過mlp來預(yù)測最后的分類分?jǐn)?shù);對分割任務(wù),將全局特征和之前學(xué)習(xí)到的各點云的局部特征進行串聯(lián),再通過mlp得到每個數(shù)據(jù)點的分類結(jié)果。
1.2 PointNet網(wǎng)絡(luò)結(jié)構(gòu)
它提取的“全局特征”能夠很好地完成分類任務(wù)。下面看一下PointNet的框架結(jié)構(gòu):
下面解釋一個網(wǎng)絡(luò)中各個部件的作用。
1)transform:第一次,T-Net 3x3,對輸入點云進行對齊:位姿改變,使改變后的位姿更適合分類/分割;第二次,T-Net 64x64,對64維特征進行對齊。2)mlp:多層感知機,用于提取點云的特征,這里使用共享權(quán)重的卷積。
3)max pooling:匯總所有點云的信息,進行最大池化,得到點云的全局信息。
4)分割部分:局部和全局信息組合結(jié)構(gòu)(concate,語義分割)。
5)分類loss:交叉熵:分割loss:分類+分割+L2(transform,原圖的正交變換)。
1.3T-Net網(wǎng)絡(luò)結(jié)構(gòu)
將輸入的點云數(shù)據(jù)作為nx3x1單通道圖像,接三次卷積和一次池化后,再reshape為1024個節(jié)點,然后接兩層全連接,網(wǎng)絡(luò)除最后一層外都使用了ReLU激活函數(shù)和批標(biāo)準(zhǔn)化。
1.4 模型效果
ModelNet40 上的分類結(jié)果:
ShapeNet部分?jǐn)?shù)據(jù)集上的分割結(jié)果:
不足:缺乏在不同尺度上提取局部信息的能力。
PointNet++
Pointnet提取的全局特征能夠很好地完成分類任務(wù),由于模型基本上都是單點采樣,代碼底層用的是2Dconv,只有maxpooling整合了整體特征,所以局部特征提取能力較差,這使得它很難對復(fù)雜場景進行分析。
PointNet++的核心是提出了多層次特征提取結(jié)構(gòu),有效提取局部特征提取,和全局特征。
2.1 思路流程
先在輸入點集中選擇一些點作為中心點,然后圍繞每個中心點選擇周圍的點組成一個區(qū)域,之后每個區(qū)域作為PointNet的一個輸入樣本,得到一組特征,這個特征就是這個區(qū)域的特征。
之后中心點不變,擴大區(qū)域,把上一步得到的那些特征作為輸入送入PointNet,以此類推,這個過程就是不斷的提取局部特征,然后擴大局部范圍,最后得到一組全局的特征,然后進行分類。
2.2 整體網(wǎng)絡(luò)結(jié)構(gòu)
PointNet++ 在不同尺度提取局部特征,通過多層網(wǎng)絡(luò)結(jié)構(gòu)得到深層特征。PointNet++按照任務(wù)也分為 classification (分類網(wǎng)絡(luò))和 segmentation (分割網(wǎng)絡(luò))兩種,輸入和輸出分別與PointNet中的兩個網(wǎng)絡(luò)一致。
PointNet++會先對點云進行采樣(sampling)和劃分區(qū)域(grouping),在各個小區(qū)域內(nèi)用基礎(chǔ)的PointNet網(wǎng)絡(luò)進行特征提?。∕SG、MRG),不斷迭代。
對于分類問題,直接用PointNet提取全局特征,采用全連接得到每個類別評分。對于分割問題,將高維的點反距離插值得到與低維相同的點數(shù),再特征融合,再使用PointNet提取特征 。
比較PointNet++兩個任務(wù)網(wǎng)絡(luò)的區(qū)別:
在得到最高層的 feature 之后,分類網(wǎng)絡(luò)使用了一個小型的 PointNet + FCN 網(wǎng)絡(luò)提取得到最后的分類 score;
分割網(wǎng)絡(luò)通過“跳躍連接” 操作不斷與底層 “低層特征圖”信息融合,最終得到逐點分分類語義分割結(jié)果。(“跳躍連接”對應(yīng)上圖的 skip link connection;低層特征圖 具有分辨率較大,保留較豐富的信息,雖然整體語義信息較弱。)
2.3網(wǎng)絡(luò)結(jié)構(gòu)組件
1)采樣層(sampling)
激光雷達單幀的數(shù)據(jù)點可以多達100k個,如果對每一個點都提取局部特征,計算量是非常巨大的。因此,作者提出了先對數(shù)據(jù)點進行采樣。作者使用的采樣算法是最遠點采樣(farthest point sampling, FPS),相對于隨機采樣,這種采樣算法能夠更好地覆蓋整個采樣空間。
2)組合層(grouping)
為了提取一個點的局部特征,首先需要定義這個點的“局部”是什么。一個圖片像素點的局部是其周圍一定曼哈頓距離下的像素點,通常由卷積層的卷積核大小確定。同理,點云數(shù)據(jù)中的一個點的局部由其周圍給定半徑劃出的球形空間內(nèi)的其他點構(gòu)成。組合層的作用就是找出通過采樣層后的每一個點的所有構(gòu)成其局部的點,以方便后續(xù)對每個局部提取特征。
3)特征提取層(feature learning)
因為PointNet給出了一個基于點云數(shù)據(jù)的特征提取網(wǎng)絡(luò),因此可以用PointNet對組合層給出的各個局部進行特征提取來得到局部特征。值得注意的是,雖然組合層給出的各個局部可能由不同數(shù)量的點構(gòu)成,但是通過PointNet后都能得到維度一致的特征(由上述K值決定)。
2.4 不均勻點云組合grouping方法
不同于圖片數(shù)據(jù)分布在規(guī)則的像素網(wǎng)格上且有均勻的數(shù)據(jù)密度,點云數(shù)據(jù)在空間中的分布是不規(guī)則且不均勻的。當(dāng)點云不均勻時,每個子區(qū)域中如果在分區(qū)的時候使用相同的球半徑,會導(dǎo)致部分稀疏區(qū)域采樣點過小。作者提出多尺度成組 (MSG)和多分辨率成組 (MRG)兩種解決辦法。
1)多尺度組合MSG:對于選取的一個中心點設(shè)置多個半徑進行成組,并將經(jīng)過PointNet對每個區(qū)域抽取后的特征進行拼接(concat)來當(dāng)做該中心點的特征,這種做法會產(chǎn)生很多特征重疊,結(jié)果會可以保留和突出(邊際疊加)更多局部關(guān)鍵的特征,但是這種方式不同范圍內(nèi)計算的權(quán)值卻很難共享,計算量會變大很多。
2)多分辨率組合MRG:MRG避免了大量的計算,但仍然保留了根據(jù)點的分布特性自適應(yīng)地聚合信息的能力。對不同特征層上(分辨率)提取的特征再進行concat,以b圖為例,最后的concat包含左右兩個部分特征,分別來自底層和高層的特征抽取,對于low level點云成組后經(jīng)過一個pointnet和high level的進行concat,思想是特征的抽取中的跳層連接。
當(dāng)局部點云區(qū)域較稀疏時,上層提取到的特征可靠性可能比底層更差,因此考慮對底層特征提升權(quán)重。當(dāng)然,點云密度較高時能夠提取到的特征也會更多。這種方法優(yōu)化了直接在稀疏點云上進行特征抽取產(chǎn)生的問題,且相對于MSG的效率也較高。
選擇哪一種?
當(dāng)局部區(qū)域的密度低時,第一矢量可能不如第二矢量可靠,因為計算第一矢量的子區(qū)域包含更稀疏的點并且更多地受到采樣不足的影響。在這種情況下,第二個矢量應(yīng)該加權(quán)更高。另一方面,當(dāng)局部區(qū)域的密度高時,第一矢量提供更精細細節(jié)的信息,因為它具有以較低水平遞歸地表達較高分辨率檢查的能力。
2.5 模型效果
分類對比:
分割對比:
小結(jié)復(fù)雜場景點云一般采用PointNet++進行處理,而簡單場景點云則采用PointNet。如果只從點云分類和分割兩個任務(wù)角度分析,分類任務(wù)只需要max pooling操作之后的特征信息就可完成,而分割任務(wù)則需要更加詳細的local context信息。
F-PointNet 也是直接處理點云數(shù)據(jù)的方案,但這種方式面臨著挑戰(zhàn),比如:如何有效地在三維空間中定位目標(biāo)的可能位置,即如何產(chǎn)生 3D 候選框,假如全局搜索將會耗費大量算力與時間。
F-PointNet是在進行點云處理之前,先使用圖像信息得到一些先驗搜索范圍,這樣既能提高效率,又能增加準(zhǔn)確率。
3.1 基本思路
首先使用在 RGB 圖像上運行的 2D 檢測器,其中每個2D邊界框定義一個3D錐體區(qū)域。然后基于這些視錐區(qū)域中的 3D 點云,我們使用 PointNet/PointNet++ 網(wǎng)絡(luò)實現(xiàn)了 3D實例分割和非模態(tài) 3D 邊界框估計??偨Y(jié)一下思路,如下:
基于圖像2D目標(biāo)檢測。
基于圖像生成錐體區(qū)域。
在錐體內(nèi),使用 PointNet/PointNet++ 網(wǎng)絡(luò)進行點云實例分割。
它是在進行點云處理之前,先使用圖像信息得到一些先驗搜索范圍,這樣既能提高效率,又能增加準(zhǔn)確率。先看看下面這張圖:
在這張圖里,左上角的意思是先把圖像和點云信息標(biāo)定好(這個屬于傳感器的外參標(biāo)定,在感知之前進行;獲取兩個傳感器之間旋轉(zhuǎn)矩陣和平移向量,就可以得到相互的位置關(guān)系)。
左下角是用目標(biāo)檢測算法檢測出物體的邊界框(BoundingBox),有了邊界框之后,以相機為原點,沿邊界框方向延伸過去就會形成一個錐體(上圖的右半部分),該論文題目里frustum這個詞就是錐體的意思。然后用點云對該物體進行識別的時候,只需要在這個錐體內(nèi)識別就行了,大大減小了搜索范圍。
3.2 模型框架
模型結(jié)構(gòu)如下:(可以點擊圖片放大查看)
網(wǎng)絡(luò)共分為三部分,第一部分是使用圖像進行目標(biāo)檢測并生成錐體區(qū)域,第二部分是在錐體內(nèi)的點云實例分割,第三部分是點云物體邊界框的回歸。
3.3基于圖像生成錐體區(qū)域
由于檢測到的目標(biāo)不一定在圖像的正中心,所以生成的錐體的軸心就不一定和相機的坐標(biāo)軸重合,如下圖中(a)所示。為了使網(wǎng)絡(luò)具有更好的旋轉(zhuǎn)不變性,我們需要做一次旋轉(zhuǎn),使相機的Z軸和錐體的軸心重合。如下圖中(b)所示。
3.4 在錐體內(nèi)進行點云實例分割
實例分割使用PointNet。一個錐體內(nèi)只提取一個物體,因為這個錐體是圖像中的邊界框產(chǎn)生的,一個邊界框內(nèi)也只有一個完整物體。
在生成錐體的時候提到了旋轉(zhuǎn)不變性,此處完成分割這一步之后,還需要考慮平移不變性,因為點云分割之后,分割的物體的原點和相機的原點必不重合,而我們處理的對象是點云,所以應(yīng)該把原點平移到物體中去,如下圖中(c)所示。
3.5 生成精確邊界框
生成精確邊界框的網(wǎng)絡(luò)結(jié)構(gòu):
從這個結(jié)構(gòu)里可以看出,在生成邊界框之前,需要經(jīng)過一個T-Net,這個東西的作用是生成一個平移量,之所以要做這一步,是因為在上一步得到的物體中心并不完全準(zhǔn)確,所以為了更精確地估計邊界框,在此處對物體的質(zhì)心做進一步的調(diào)整,如下圖中(d)所示。
下面就是邊界框回歸了,對一個邊界框來講,一共有七個參數(shù),包括:
最后總的殘差就是以上目標(biāo)檢測、T-Net和邊界框殘差之和,可以據(jù)此構(gòu)建損失函數(shù)。
3.6 PointNet關(guān)鍵點
(1) F-PointNet使用2D RGB圖像
F-PointNet使用2D RGB圖像原因是:1.當(dāng)時基于純3D點云數(shù)據(jù)的3D目標(biāo)檢測對小目標(biāo)檢測效果不佳。所以F-PointNet先基于2D RGB做2D的目標(biāo)檢測來定位目標(biāo),再基于2d目標(biāo)檢測結(jié)果用其對應(yīng)的點云數(shù)據(jù)視錐進行bbox回歸的方法來實現(xiàn)3D目標(biāo)檢測。2.使用純3D的點云數(shù)據(jù),計算量也會特別大,效率也是這個方法的優(yōu)點之一。使用成熟的2D CNN目標(biāo)檢測器(Mask RCNN)生成2D檢測框,并輸出one-hot 分類向量(即基于2D RGB圖像的分類)。
(2)錐體框生成
2D檢測框結(jié)合深度信息,找到最近和最遠的包含檢測框的平面來定義3D視錐區(qū)域frustum proposal。然后在該frustum proposal里收集所有的3D點來組成視錐點云(frustum point cloud)。
3.7 實驗結(jié)果
與其他模型對比:
模型效果:
3.8 優(yōu)點
(1)舍棄了global fusion,提高了檢測效率;并且通過2D detector和3D Instance Segmentation PointNet對3D proposal實現(xiàn)了逐維(2D-3D)的精準(zhǔn)定位,大大縮短了對點云的搜索時間。下圖是通過3d instance segmentation將搜索范圍從9m~55m縮減到12m~16m。
(2)相比于在BEV(Bird's Eye view)中進行3D detection,F(xiàn)-PointNet直接處理raw point cloud,沒有任何維度的信息損失,使用PointNet能夠?qū)W習(xí)更全面的空間幾何信息,特別是在小物體的檢測上有很好的表現(xiàn)。下圖是來自Hao Su 2018年初的課程,現(xiàn)在的KITTI榜有細微的變動。
(3)利用成熟的2D detector對proposal進行分類(one-hot class vector,打標(biāo)簽),起到了一定的指導(dǎo)作用,能夠大大降低PointNet對三維空間物體的學(xué)習(xí)難度。
3.9 模型代碼
開源代碼:GitHub - charlesq34/frustum-pointnets: Frustum PointNets for 3D Object Detection from RGB-D Data
作者代碼的運行環(huán)境:
系統(tǒng):Ubuntu 14.04 或 Ubuntu 16.04
深度框架:TensorFlow1.2(GPU 版本)或 TensorFlow1.4(GPU 版本)
其他依賴庫:cv2、mayavi等。
審核編輯:劉清
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4814瀏覽量
103583 -
RGB
+關(guān)注
關(guān)注
4文章
807瀏覽量
59924 -
FPS
+關(guān)注
關(guān)注
0文章
35瀏覽量
12206
原文標(biāo)題:一文搞懂PointNet全家桶——強勢的點云處理神經(jīng)網(wǎng)絡(luò)
文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
BP神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)的比較
BP神經(jīng)網(wǎng)絡(luò)的優(yōu)缺點分析
什么是BP神經(jīng)網(wǎng)絡(luò)的反向傳播算法
BP神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)的關(guān)系
BP神經(jīng)網(wǎng)絡(luò)的基本原理
人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法

評論