pointnet

輸入:一幀的全部點云數(shù)據(jù)的集合,表示一個nx3的二維張量
其中,n為點云數(shù)量,3表示xyz坐標(biāo)

實現(xiàn)流程圖:

image.png

1、輸入數(shù)據(jù)首先與T-net學(xué)習(xí)到的轉(zhuǎn)換矩陣相乘,來對齊(得到想要的輸出格式),保證了模型的對特定空間轉(zhuǎn)換的不變性(指的是點云數(shù)據(jù)所代表的目標(biāo)對某些空間轉(zhuǎn)換應(yīng)該具有不變性,如旋轉(zhuǎn)和平移等剛體變換)。

如何實現(xiàn)對齊:
通過訓(xùn)練一個小型的網(wǎng)絡(luò)(也就是上圖中的T-Net)來得到轉(zhuǎn)換矩陣,并將之和輸入點云數(shù)據(jù)相乘來實現(xiàn)。

得到對齊矩陣后:
input transform矩陣的獲取還是比較簡單,這么一套操作下來,這個 input transform矩陣就不是固定的了,它會根據(jù)網(wǎng)絡(luò)的輸入動態(tài)調(diào)整矩陣的權(quán)重。
理解轉(zhuǎn)換矩陣就是可變參數(shù) input transform,根據(jù)網(wǎng)絡(luò)輸入調(diào)整權(quán)重,調(diào)整輸入

image.png

2、通過多個mlp對各點云數(shù)據(jù)進(jìn)行特征提取后,再用一個T-net對特征進(jìn)行對齊。
image.png

3、在特征的各個維度上執(zhí)行maxpooling操作來得到最終的全局特征。
image.png

4、對分類任務(wù),將全局特征通過mlp來預(yù)測最后的分類分?jǐn)?shù);對分割任務(wù),將全局特征和之前學(xué)習(xí)到的各點云的局部特征進(jìn)行串聯(lián),再通過mlp得到每個數(shù)據(jù)點的分類結(jié)果。
分割任務(wù)(1088=1024+64)
image.png

torch.eye:正交矩陣
返回值是【1 0 0;0 1 0;0 0 1】
參考文獻(xiàn):【3D視覺】PointNet和PointNet++ - 知乎 (zhihu.com)

PointNet這篇文章中確實沒有做到像CNN那樣逐層提取局部特征。我們知道在CNN中,一個點會與周圍若干點進(jìn)行加權(quán)求和(具體取決于卷積核大?。?,然后獲取一個新的點,隨著網(wǎng)絡(luò)層數(shù)加深,深層網(wǎng)絡(luò)的一個點對應(yīng)原始圖像的一個映射區(qū)域,這就是感受野的概念。但是本文做的特征提取都是點之間獨立進(jìn)行的,這勢必會造成一些問題,至于具體的問題解決,作者在PointNet++展開了說明。

pointnet++
是在沒有提取局部特征前提下,導(dǎo)致模型泛化能力有限(尤其是在復(fù)雜場景下)
在pointnet++文章中,針對三個問題,提出了三種解決方法

問題1 : 點云圖數(shù)據(jù)量大,點云很多,導(dǎo)致計算量過大從而限制模型的使用,如何解決?

從所有點云數(shù)據(jù)中采樣指定數(shù)量的點,希望這些指定數(shù)量的點能夠包含盡可能多的有用信息。
提出了farthest point sampling (FPS) algorithm,中文翻譯就是最遠(yuǎn)點采樣算法來實現(xiàn)從N個點中采樣 N’個點。
算法流程:
(1)隨機(jī)選擇一個點作為初始點作為已選擇采樣點;
(2)計算未選擇采樣點集中每個點與已選擇采樣點集之間的距離distance,將距離最大的那個點加入已選擇采樣點集,
(3)更新distance,一直循環(huán)迭代下去,直至獲得了目標(biāo)數(shù)量的采樣點。

問題2:如何將點集劃分為不同的區(qū)域,并獲取不同區(qū)域的局部特征?

上面已經(jīng)對原始點云數(shù)據(jù)進(jìn)行了最遠(yuǎn)點采樣,降低了數(shù)據(jù)的冗余度,減少了PointNet++模型的輸入大小,但是并未進(jìn)行局部特征的提取。


image.png

換言之:作者想三維卷積
如何實現(xiàn)三維卷積呢?
(1)預(yù)設(shè)搜索區(qū)域的半徑R與子區(qū)域的點數(shù)K
(2)類似三維的kmeans算法


image.png

image.png

image.png

問題:什么是重采樣?

至此,作者介紹了如何像CNN那樣,實現(xiàn)子區(qū)域的定義,進(jìn)而實現(xiàn)局部特征的提取。


image.png

采樣層Sampling layer

image.png

輸入:Nx(d+C)
其中:N是點云數(shù)據(jù)的數(shù)據(jù)點數(shù)量
d為xyz坐標(biāo)(三維)
C是點上的特征(用來形容點的屬性的,一般為0),輸出:N'x(d+c)
其中N’表示通過最遠(yuǎn)點采樣算法后獲得的采樣點(篩選后)

組層Grouping layer

輸入:Nx(d+C)
輸出:N'xKx(d+C)
其中K為根據(jù)N'(FPS選擇的點圍起來的區(qū)域內(nèi)的點的個數(shù))


image.png

獲得N個子區(qū)域后,每個子區(qū)域怎么進(jìn)行區(qū)域特征提取呢?


image.png

pointnet結(jié)構(gòu)如下:


image.png

很明顯融合局部信息的并不是加權(quán)求和,而是max pool。作者通過不斷的Sample layer/Grounping layer/Pointnet(三個合在一起叫做set abstraction),類似于CNN中不斷堆疊卷積層,實現(xiàn)了對局部特征不斷的提取。

問題3:點云不均勻的時候,在密集區(qū)域?qū)W習(xí)出來的特征可能不適合稀疏區(qū)域,這個問題應(yīng)該如何解決?

于是作者提出了兩種特征融合方式,分別為

(1)Multi-scale grouping (MSG);

(2)Multiresolution grouping (MRG).


image.png

對于MSG而言,是對不同半徑的子區(qū)域進(jìn)行特征提取后,再進(jìn)行特征堆疊,特征提取過程還是Pointnet結(jié)構(gòu)


image.png

代碼理解:
xyz: pointcloud data, [B, N, 3]
B:Batchsize
N:N指的是所有點的數(shù)量,3表示xyz
npoints:采樣點的數(shù)量

創(chuàng)新點總結(jié)歸納
1、損失函數(shù)改進(jìn)
2、注意力機(jī)制
自注意力機(jī)制,交叉注意力機(jī)制,混合注意力機(jī)制,通道注意力機(jī)制(注重特征之間的交互,類似哈希表,transformer qkv查詢機(jī)構(gòu)等等)
3、數(shù)據(jù)增強(qiáng)(前處理)
mixup,翻轉(zhuǎn),copy paste 等增加數(shù)據(jù)量
多源數(shù)據(jù)融合(紅外+原始圖像)
4、卷積模塊、功能模塊、激活函數(shù)等替換(傳統(tǒng)的)
卷積(級聯(lián)、并行,插入、跳躍(捷徑分支),堆疊,殘差結(jié)構(gòu),簡化、交互)
5、網(wǎng)絡(luò)的更改
(1)檢測頭(分類,回歸等)
(2)骨干網(wǎng)絡(luò)的替換
(3)pannet層的替換(多尺度融合、跳躍尺度融合,交叉融合)
6、數(shù)據(jù)處理
(1)利用更好的方式提取特征,處理數(shù)據(jù)特征
一個功能模塊(有多個參數(shù)調(diào)節(jié)),例如采樣中就存在6種方式
(2)投影(圖像-點云),(點云-圖像),兩者結(jié)合
7、訓(xùn)練策略改進(jìn)
(1)優(yōu)化器
(2)數(shù)據(jù)增強(qiáng)
(3)學(xué)習(xí)率

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容