2020.10.20讀 PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space
PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space
1. 背景資訊
- 輸入資料:原始點雲
- PointNet++ 是PointNet的改進版本, PointNet中實現點雲排序不變性是通過提取global feature完成的,顯然,這對於區域性資訊沒有好的提取能力。 PointNet++通過利用PointNet層級巢狀,實現了提取local feature的能力
3. 亮點:
(1)利用遞迴PointNet構建層級結構,在度量空間內實現了對點雲細粒度pattern的識別,提高了網路對複雜場景的可概括性。
(2)受限於感測器能力,實際獲取的點雲都是取樣密度不均勻的,本文作者提出了兩種新穎的方法處理這個問題,使得網路能夠自適應地學習區域性區域應該capture的scale(適應不同的取樣密度)。這兩種新穎方法是Multi-scale grouping(MSG)和Multi-resolution grouping(MRG).
2.方法
獲取的點雲不同區域稀疏性有差別。
2.1 回顧PointNet
2.2 層級點集特徵學習
- 層級結構由多個集合抽象層(set abstraction levels)構建
- 一個set abstraction level處理一個 N ∗ ( d + C ) N*(d+C) N∗(d+C)的矩陣,其中N是點的數量,d是指d維座標,C是指C維點特徵。輸出一個 N ′ ∗ ( d + C ′ ) N'*(d+C') N′∗(d+C′)的矩陣,其中 N ′ N' N′是下采樣之後的點數,d是指d維座標, C ′ C' C′是指 C ′ C' C′維點特徵.
- 每一個set abstraction level都由三個關鍵層組成:(1)Sampling layer, (2) Grouping layer, (3) PointNet layer
(1)Sampling layer
給定輸入點集:
利用迭代FPS選擇一個子點集:
具體的,FPS邏輯如下:
一開始,找個seed點(一般是質心)放在已經選中的點集中,確定要選的點數K,然後每一輪,都執行如下三步選擇出一個點,直到已經選中的點集中數量=K
1)對於任意一個剩餘點,計算該點到已經選中的點集中所有點的距離
2)取最小值,作為該點到已經選中點集的距離
3)計算出每個剩餘點到當前已經選中的點集的距離後,取距離最大的那個點。
(2) grouping layer
輸入到該層的是一個
N
∗
(
d
+
C
)
N*(d+C)
N∗(d+C)的點集和一個
N
∗
d
N*d
N∗d的質心集,該層輸出一個
N
′
∗
K
∗
(
d
+
C
)
N'*K*(d+C)
N′∗K∗(d+C)的點集,其中K是質心點的鄰居個數,K是隨著group自適應變化的,但是作者也說了,不用擔心,在下一層pointNet中這些變化的K都會被轉換為一個固定長度的local region feature vector.
grouping layer有兩種查詢方式:一種是半徑球查詢(r固定),上限點數是K,作者建議採用這種方法,因為這更能趨向於區域性特徵,更具有通用性。另一種是KNN查詢。
實際上,為了保證半徑球查詢能夠自適應點雲取樣密度,在下一小節中,會展開作者提供的兩種策略:MSG和MRG
(3)PointNet layer
輸入到該層的是
N
′
∗
K
∗
(
d
+
C
)
N'*K*(d+C)
N′∗K∗(d+C)的矩陣,代表
N
′
N'
N′個local點區域。輸出資料是
N
′
∗
(
d
+
C
′
)
N'*(d+C')
N′∗(d+C′)矩陣,其中
C
′
C'
C′代表PointNet提取出來的
C
′
C'
C′維點特徵。
Note: 在作用PointNet layer之前對每個local區域中的點都做了相對座標變換:每個group中的點都相對質心做變換,轉換為相對質心的相對座標,這樣可以獲得區域性點之間的關係,更有利於學習。
其中i表示K個local region中的第i個,j表示d維座標中的第j維,x(j)_hat表示質心點。
2.3 在非均勻點取樣密度下的魯棒特徵學習
當輸入取樣密度變化時,網路會學習從不同尺度的local region中自適應地結合特徵。每一個abstraction level 提取多個scale的local patterns並且根據區域性點密度智慧地結合他們。
有兩種型別地自適應不同尺度的特徵結合方法:MSG和MRG
1. Multi-scale grouping (MSG)
思路很樸素,就是取不同稀疏度生成不同scale的region,計算他們的特徵然後把他們的特徵concat起來。
具體地,作者採用對輸入點雲進行不同dropout ratio的隨機dropout來實現,dropout ratio在[0,p]之間,為了不對dropout太過分產生沒有意義的空點集,p被設定為0.95. 作者解釋dropout ratio可以實現點雲具有變化的稀疏性,隨機dropout實現了點雲稀疏性變化的均勻性。
Note:這裡我一開始根據Figure 3(a)理解成了,取不同球半徑生成不同scale的region,根據作者的dropout描述,這樣理解是不對的。
2. Multi-resolution grouping (MRG)
上面的MSG方法的計算量很大。作者提出MRG作為替代方法,在後面的實驗結果中,發現MSG比MRG效果要好一些,但是時間成本很高。
在Figure 3(b)中,在第i個層級
L
i
L_{i}
Li中的region feature是由兩個vectors concatenate而來的, 左邊的vector是通過一個set abstraction level從低一級的
L
i
−
1
L_{i-1}
Li−1的子區域中提取出來的,右邊的vector是利用single PointNet直接處理在local region中的所有原始點而得來的。
如果local region density很低,那麼left權重應該被設定低一些,right權重應該被設定的高一些。
如果local region density很高,那麼left權重應該被設定高一些,right權重應該被設定的低一些。
這些都是由網路來學習的,滿足自適應性。
2.4 點雲分割中的點特徵傳播
在語義分割中,要求輸入點的數量與輸出點的數量相等。而set abstraction level會實現點的數量降取樣,為了解決這個問題,作者採用了基於距離的插值和skip link concation來解決這個問題。
如Figure 2右上角所示,前一層的
(
N
2
,
d
+
C
2
)
(N_{2},d+C_{2})
(N2,d+C2)通過
1.插值,變成了
(
N
1
,
d
+
C
2
)
(N_{1},d+C_{2})
(N1,d+C2)
2.skip link concatenation,變成了
(
N
1
,
d
+
C
2
+
C
1
)
(N_{1},d+C_{2}+C{1})
(N1,d+C2+C1)
3.unit pointnet(FC+ReLU), 進行簡單的特徵融合,變成了
(
N
1
,
d
+
C
3
)
(N_{1},d+C_{3})
(N1,d+C3)
直到生成最後的
(
N
,
k
)
(N,k)
(N,k),其中k表示語義分割的標籤。
插值過程:
插值公式:
這裡一般設定成p=2,k=3(三點插值法)
實驗和結果部分略
3. 讀後感
1. PointNet++ 通過層級結構具有了強大的對點雲細節捕獲的能力,根據作者描述,這是受CNN層級結構的啟發。 一個好的idea從一個領域遷移到另一個領域,然後work的很好,就是普通意義的創新,而這需要博聞強識+靈活的思維。
2. 為了解決點雲中稀疏性不同的問題,作者提出MSG和MRG來解決它。MSG的思想很樸素,用dropout對input的點雲生成不同稀疏度的點雲,分別提取特徵進行特徵向量串聯。MRG的多解析度,在我看來是比較粗糙的,作者只提取了 L i − 1 L_{i-1} Li−1層和raw點雲的特徵進行串聯,可能是更多的考慮了速度的問題吧。
4. 不同的度量方法用在不同的資料上效果有差異,在剛性物體上,利用歐式距離度量效果就會很好,在非剛性物體(比如動物,一匹馬)上,相應的利用測地距離度量效果會更好。如在3維人體姿態識別或者其他跟非剛性物體識別的任務中,應該考慮測地距離度量。