1. 程式人生 > 實用技巧 >2020.10.20讀 PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space

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. 背景資訊

  1. 輸入資料:原始點雲
  2. 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 層級點集特徵學習

  1. 層級結構由多個集合抽象層(set abstraction levels)構建
    , 每一個抽象層都處理一個點集,抽象特徵,然後產生一個具有更少元素的新的集合。
  2. 一個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維點特徵.
  3. 每一個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 Nd的質心集,該層輸出一個 N ′ ∗ K ∗ ( d + C ) N'*K*(d+C) NK(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) NK(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} Li1的子區域中提取出來的,右邊的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} Li1層和raw點雲的特徵進行串聯,可能是更多的考慮了速度的問題吧。

4. 不同的度量方法用在不同的資料上效果有差異,在剛性物體上,利用歐式距離度量效果就會很好,在非剛性物體(比如動物,一匹馬)上,相應的利用測地距離度量效果會更好。如在3維人體姿態識別或者其他跟非剛性物體識別的任務中,應該考慮測地距離度量。