Author
和PointNet是同一批作者,這是對PointNet的一個改進版本
Abstract
PointNet不能很好的捕捉由度量空間引入的局部結構,也就限制了它識別細粒度類別的能力以及對復雜場景的泛化能力
本文提出一個層級的神經網絡遞歸地應用在嵌套划分的輸入點雲集。
通過探索度量空間的距離,本文設計的網絡結構隨着上下文尺度的增加可以學習到局部特征
更深的觀察發現,點雲集的密度一般都是不均勻的,但PointNet是在均勻采樣密度的點集上訓練的,這會造成很大的性能下降,我們提出新型的點集學習方法可以適應性的組合不同尺度的特征。
Introduction
在這種距離尺度空間中,局部領域可能會展現出不同的性質,比如說不同的部分它的點雲密度不同
PointNet的基本思想是是學習每個點的空間編碼然后聚合所有的點的特征到全局特征中,但是這種結構捕捉不到測度引入的局部結構。然而探究局部結構在CNN中被證明非常重要,傳統2D CNN中接受規則輸入,並且不斷的在不同層捕獲不同尺度的特征,通過層級結構不斷地抽象特征能更好地泛化到unseen cases.
本文提出了一個層級的神經網絡,去處理層級采樣的點雲。
類似於CNN結構,我們先從小的領域提取局部特征,然后group去產生更高層的特征,這個過程不斷的重復直到獲取整個點雲集合的全局特征
要解決兩個問題:
- 怎么划分這個點雲集合
- 怎么組合點雲集的局部特征
這兩個問題是緊密聯系的,因為划分點集是要讓他們有共同的結構,所以local feature learner的權重就可以共享,類似於CNN, 本文使用PointNet作為局部特征學習器
作為一個基礎的結構部件,PointNet要在局部點集中抽取特征,或者把特征組合成更高層表示,所以PointNet++遞歸地使用PointNet在一個嵌套划分的輸入點雲集合上
一個問題是如何划分輸入:
每個局部划分都是一個鄰域球,參數包括中心點的位置和尺度,為了更加均勻地覆蓋整個數據集,中心點是使用farthest point sampling(FPS)算法進行采樣的
FPS: 先隨機選擇一個點,然后再選擇離這個點最遠的點作為起點,再繼續迭代,知道選出需要的個數為止
相比體素CNN使用的fixed stride, 本文的局部感受野只依賴於輸入數據和尺度,所以更高效和有用
因為特征多尺度的融合以及輸入點雲的不均勻性,對鄰域球的尺度的確定是項非常有挑戰性但是很有趣的任務。
我們認為輸入點雲在不同的區域有不同的密度(現實生活中常見),這對應於CNN中不同尺度的kernel。
一個有意義的貢獻是:PointNet++利用不同尺度的鄰居來實現robustness和捕獲的細節
PointNet缺乏捕獲在不同尺度上的局部內容的能力,所以引入一個層級的特征學習框架來解決這個局限性
這個層級結構由很多個set abstraction leels構成,每個level中: a set of points is processed and abstracted to produce a new set with fewer elements
set abstraction level由三個層組成: Sampling layer, Grouping layer 和PointNet layer
Sampling layer主要是選出一些點作為局部區域的中心點,Grouping layer就是通過找中心點的鄰居來構造局部區域,PointNet使用mini-PointNet來把局部區域編碼層feature vectors
(N,d+C) N個點, d維坐標, C維額外特征
分組后每個組的點的個數不一定相同,但是PointNet把它們都統一到同一個長度的特征向量
分組算法用的是ball query,就是給定中點,把給定半徑內的點都包括進來,同時是要給定點個數。相比KNN,ball query's保證了一個固定的區域尺寸,所以比KNN更加geralizable across space,更適合於需要局部特征的任務。
local region中的坐標首先被轉換到相對於中點的坐標系中,使用相對坐標系,我們可以捕獲到局部區域中點到點的關系。
不均勻的密度: Features learned in dense data may not generalize to sparsely sampled regions.
在低密度的地方可能會丟失局部信息,所以還需要增大尺度,所以提出了 density adaptive PointNet layers
上面有個例子進行解釋,想要捕捉一個五角星的樣子
當輸入采樣密度變化時,學習對於不同尺度的區域特征的組合
根據點密度進行組合局部特征,
MSG: 分組的時候分不同scale
訓練時會隨機dropout一些input points,測試的時候不會dropout,這樣訓練集就有various sparsity
MRG: MSG計算消耗比較大,所以提出了一個替代的方法來避免大的計算消耗
計算如上圖,一部分是直接對原始點提取特征,一部分是abstraction level后的點提取特征
左右兩部分的權重不相同,當局部區域的密度很低時,左邊的向量應該更不可信,因為它suffer more from sampling deficiency. 所以這時右邊的vector權重要更大,如果密度大時,情況相反
For Set Segmentation
在set abstraction layer中,點進行了子采樣,但是segmentation任務中對於點標記需要所有的原始點。一種方法是對所有的點都sample成中心點,但是計算復雜度太高。
另一種方式是子采樣點的特征傳導回原始數據點
采納了一種層級的傳播方式,如圖二的skip link,
同時進行逆向連接,之前的輸入作為輸出,之前的輸出大小作為輸入,進行插值(feature values)進行插值。
插值方式采用的是: inverse distance weighted average based on k nearest neighbors
“unit pointnet”: 類似於CNN中的1x1卷積
這個過程直到傳播特征到原始的數據點
SSG: single scale groupint
MSG: multi scale grouping
MRG: multi resolution grouping
DP: random input dropout during training
參考:
https://www.cnblogs.com/li-yao7758258/p/8182846.html
它本質上是PointNet的分層版本。每個圖層都有三個子階段:采樣,分組和PointNeting。在第一階段,選擇質心,在第二階段,把他們周圍的鄰近點(在給定的半徑內)創建多個子點雲。然后他們將它們給到一個PointNet網絡,並獲得這些子點雲的更高維表示。然后,他們重復這個過程(樣本質心,找到他們的鄰居和Pointnet的更高階的表示,以獲得更高維表示)。使用這些網絡層中的3個。還測試了不同層級的一些不同聚合方法,以克服采樣密度的差異(對於大多數傳感器來說這是一個大問題,當物體接近時密集樣本,遠處時稀疏)。他們在原型PointNet上進行了改進,在ModelNet40上的准確率達到了90.7%。
參考:http://blog.csdn.net/yongxiebin9947/article/details/78706591
所以這篇PointNet++主要內容為: 1.以何種方式將點雲數據划分為多個區域(例如直接將點雲分塊進行體素化也是一種區域划分方法); 2.如何在一個塊內,提取塊內點雲的“局部結構”。