天天看點

論文學習筆記(一) PointCNNAbstract1 Introduction2 Related Work3 PointCNN

『寫在前面』

\qquad 最近在研究點雲資料處理與應用,将學習論文中的一些值得記錄和思考的點記錄于此,友善自己後續回憶要點。建議參照原版paper使用,剛開始學寫blog,歡迎各位指正纰漏。

  • 論文出處:CVPR 2018
  • 作者機構:Yangyan Li等,山東大學

Abstract

  • 傳統CNNs成功之處在于利用了空間局部相關性
  • 而點雲資料往往不規則且無序,如果直接應用傳統的卷積運算,不但會丢失形狀資訊,還會受到點集順序變化的影響
  • 為了解決上述問題,本文提出了X-transformation,并且結合傳統的卷積運算,構成X-conv子產品,也就是PointCNN的building block。

1 Introduction

  • 在某些情況下,使用point cloud表示資料比使用dense grid更為有效:比如三維空間中的平面,二維空間中的直線等。

以三維空間的平面為例:

如使用point cloud表示, S ( p 1 , p 2 , ⋅ ⋅ ⋅ , p N ) S(p_1,p_2,···,p_N) S(p1​,p2​,⋅⋅⋅,pN​)其中, N N N表示點的數量, p i = ( p i 1 , p i 2 , p i 3 ) p_i=(p_{i1},p_{i2},p_{i3}) pi​=(pi1​,pi2​,pi3​)表示各點坐标,那麼 S S S的資料量為 3 N 3N 3N.

如使用dense grid表示,假設空間大小為 M ∗ M ∗ M M*M*M M∗M∗M,則資料量大小為 M 3 M^3 M3

一般情況下, M 3 > 3 N M^3>3N M3>3N,是以Point Cloud效率更高?

  • f i i = f i i i f_{ii}=f{iii} fii​=fiii,但二者形狀不同,故CNNs會丢失形狀資訊; f i i i ≠ f i v f_{iii} \neq f{iv} fiii​̸​=fiv,但其實二者代表的是統一形狀,隻是順序不同,說明CNNs無法适應不同點集順序。
    論文學習筆記(一) PointCNNAbstract1 Introduction2 Related Work3 PointCNN
論文學習筆記(一) PointCNNAbstract1 Introduction2 Related Work3 PointCNN
  • X-transformation.

    \qquad 從K個輸入點中學習一個K×K的矩陣:

    X = M L P ( p 1 , p 2 , . . . , p K ) X={\rm {MLP}}(p_1,p_2,...,p_K) X=MLP(p1​,p2​,...,pK​)

    \qquad 使用X對輸入特征同步進行權重和排列,最後對變換後的特征進行卷積,稱這一系列操作為X-Conv,這也是PointCNN的基本子產品。

論文學習筆記(一) PointCNNAbstract1 Introduction2 Related Work3 PointCNN
關于這一段的了解:
  • X i i X_{ii} Xii​和 X i i i X_{iii} Xiii​從不同形狀的點集中學習得到,故可以使得 f i i f_{ii} fii​與 f i i i f_{iii} fiii​不同;
  • 通過學習得到的 X i i i X_{iii} Xiii​可能等于 X i v × π X_{iv}\times\pi Xiv​×π,且 π × [ f a , f b , f c , f d ] T = [ f c , f a , f b , f d ] T \pi\times[f_a,f_b,f_c,f_d]^T=[f_c,f_a,f_b,f_d]^T π×[fa​,fb​,fc​,fd​]T=[fc​,fa​,fb​,fd​]T,是以使得 f i i i = f i v f_{iii}=f_{iv} fiii​=fiv​.

\qquad 理想情況下,X-transformation可以做到考察點集形狀的同時不受點集順序的影響。但實際中,作者發現其效果并不理想,尤其是點集順序重排。

2 Related Work

  • PointCNN做到了輸入特征表示和卷積核的稀疏性。
  • PointNet和Deep Sets使用對稱函數(symmetric function)來克服輸入點集的無序性。盡管對稱函數有理論支撐,但它帶來丢失資訊的代價。
  • 作者認為,PointCNN中的X-Conv結構在提取局部特征時,比PointNet中使用的最大池化表現更好。
  • STNs中使用了對稱矩陣作為kernel。而在PointCNN中,X-transformation需要同時服務于權值和排序,是以使用了普通矩陣模組化。意思是,如果隻用來做排序,就可以用其他加以限制的矩陣實作?比如文中舉了個例子doubly stochastic matrix(還沒有具體看這塊)。

3 PointCNN

3.1 Hierarchical Convolution

  • CNNs的分層結構會使得分辨率越來越小,通道數越來越多,feature map編碼更高層的資訊。
  • X-Conv參考CNNs分層結構的思想,将輸入點集映射或聚合到下一層,“less and less points, richer and richer features”.
  • 需要注意的是, F 2 F_2 F2​基于的點集( p 2 p_2 p2​)并不一定要求是 F 1 F_1 F1​基于的點集的子集( p 1 p_1 p1​).但在本文實作中,使用的都是采樣的方法(是以都是子集):分類任務,使用随機下采樣方法獲得 p 2 p_2 p2​;而分割任務中,使用FPS(最遠點采樣法)。

    作者提到,他們認為一些代表點生成算法可能更加有效,如Deep Points。

3.2 X-Conv Operator

  • X-Conv使用 p 2 p_2 p2​在 p 1 p_1 p1​中的鄰近點集作為輸入
N \Bbb N N是 p 2 p_2 p2​在 p 1 p_1 p1​中的鄰近點集。從 N \Bbb N N中采樣 K K K個點,得到X-Conv的輸入 S \Bbb S S。 S \Bbb S S是一個無序點集,可以表示為 [ P K × D ∣ F K × C 1 ] [P_{K\times D}|F_{K\times {C_1}}] [PK×D​∣FK×C1​​] 進而,可以得到,X-Conv中的trainable kernel是一個tensor K \bf K K,其大小為 K × ( C 1 + C δ ) × C 2 K\times (C_1+C_\delta)\times C_2 K×(C1​+Cδ​)×C2​.
  • X-Conv算法描述

    輸入: K K K - trainable kernel

    p p p - 映射/聚合标點

    P P P - 輸入點集

    F F F - 輸入點的特征集

    輸出: F p F_p Fp​ - 映射/聚合到 p p p的特征

    步驟:

    1. 将輸入點集 P P P中各點坐标遷移到以點 p p p為原點的相對坐标系,得到點集合 P ′ P^′ P′;
    2. 通過MLP将 P ‘ P` P‘中每個點映射到高維空間 δ \delta δ中,得到特征矩陣 F δ F_\delta Fδ​;
    3. 将輸入點的特征集 F F F和上一步得到的特征矩陣 F δ F_\delta Fδ​直接拼接,得到新的特征矩陣 F ∗ F_* F∗​;
    4. 使用MLP從點集合 P ′ P^′ P′中學習到一個K×K大小的變換矩陣 X X X;
    5. 使用變換矩陣 X X X對特征矩陣 F ∗ F_* F∗​進行矩陣變換(權重&排序),得到特征矩陣 F X F_X FX​;
    6. 對 K K K和 F X F_X FX​進行卷積,得到輸出特征矩陣 F p F_p Fp​.
因為上述算法中所涉及到的卷積、MLP和矩陣乘法都是可微分的,故整個X-Conv子產品可微,可以很友善地使用BP算法訓練。
上文中提到,X-Conv的kernel size為 K × ( C 1 + C δ ) × C 2 K\times (C_1+C_\delta)\times C_2 K×(C1​+Cδ​)×C2​,其參數量主要受 K K K影響,與CNNs中的平方和3D-CNNs中的立方相比,具有稀疏性。可以節省記憶體和算力。Sparse kernel的一個好處是可以在不顯著增加參數數量的情況下耦合較遠距離資訊。
  • 關于局部坐标系的幾點讨論

    \quad 1. X-Conv被設計用來刻畫局部點集資訊,是以應轉換到中心點的相對坐标系。

    \quad 2. 注意一個點可能會是多個代表性點的鄰近點,是以這樣的點可能以不同的相對坐标作用在不同的代表性點上(Figure.3 主要就是在解釋這個)。

    \quad 3. 局部坐标應作為部分特征輸入到X-Conv中,但由于坐标特征與其他額外的特征相比,次元一般較低(不一緻),故作者通過MLP來進行高維映射,以得到更加抽象的特征表示(該做法與PointNet類似)。

  • 關于X-Conv的幾點讨論

    \quad 1. X-Conv的一個優點是它可以以一種統一的形式作用在有或沒有額外特征的點雲資料上,如XYZ點雲、XYZI點雲等。例如對XYZ點雲而言,X-Conv層的輸入隻有 F δ F_\delta Fδ​,沒有 F F F。

    \quad 2. 理論上,X-變換既可以用在feature上,也可以用在kernel上。但為了便于運作标準的卷積運算(一般模組化成kernel被訓練,而不是被X-變換“孵化”出來的kernel再訓練),作者用在了變換feature上。

3.3 PointCNN Architecture

  • CNNs中的卷積層 VS PointCNN中的X-Conv結構

    \quad 1. 局部區域提取:卷積層使用K×K的視窗,X-Conv使用K-近鄰;

    \quad 2. 學習特征的方法不同。

  • 感覺野

    \quad 定義每個代表性點的感覺野為 K / N K/N K/N,其中 K K K代表近鄰點數, N N N代表上一層的總點數。 K / N = 1 K/N=1 K/N=1意味着本層的代表點get到了上一層的全局資訊。

論文學習筆記(一) PointCNNAbstract1 Introduction2 Related Work3 PointCNN
  • 分類網絡結構

    \qquad 論文中,作者給出了兩款用于完成分類任務的網絡結構,Figure 4(a) 和 Figure 4(b).(a)中給出的網絡結構采樣數下降過快,導緻X-Conv層不能被充分訓練。作者為了改進此問題,提出了(b)結構,旨在控制網絡深度的同時兼顧感覺野的增長速度,使模型具有"see larger and larger"的能力。

    \qquad 借鑒CNNs中膨脹卷積的思想,作者也引入了膨脹因子 D D D。具體做法是從 K × D K×D K×D個近鄰點中均勻采樣得到最後的K個近鄰點。這樣使得在不增加近鄰點數量,也就是沒有增大kernel size的情況下,将感覺野從 K / D K/D K/D增大到 ( K × D ) / N (K\times D)/N (K×D)/N。如圖(b)所示,在fc層之前的4個代表點都可以看到整個形狀,是以它們都具有進行預測的能力。

  • 分割網絡結構

    \qquad 采用類似Conv&DeConv的結構,并且在Conv階段和DeConv采用的均是X-Conv結構。不同之處在于在DeConv處,輸出比輸入含有更多的點數和更少的特征數

  • 其他Trick的使用

    \quad 1. 激活函數選擇使用ELU(Exponential Linear Unit),數學表達如下所示。

摘自:https://blog.csdn.net/qq_20909377/article/details/79133981

其中 α \alpha α是一個可調整的參數,它控制着ELU負值部分在何時飽和。右側線性部分使得ELU能夠緩解梯度消失,而左側軟飽能夠讓ELU對輸入變化或噪聲更魯棒。ELU的輸出均值接近于零,是以收斂速度更快。

tensorflow中:tf.nn.elu(features, name=None)

f ( x ) = { x , if  x > 0 α ( e x − 1 ) , if  x ≤ 0 f(x) = \begin{cases} x, & \text{if $x>0$} \\ \alpha(e^x-1), & \text{if $x\leq0$} \end{cases} f(x)={x,α(ex−1),​if x>0if x≤0​

f ′ ( x ) = { 1 , if  x > 0 α + f ( x ) , if  x ≤ 0 f^′(x) = \begin{cases} 1, & \text{if $x>0$} \\ \alpha+f(x), & \text{if $x\leq0$} \end{cases} f′(x)={1,α+f(x),​if x>0if x≤0​

論文學習筆記(一) PointCNNAbstract1 Introduction2 Related Work3 PointCNN

\quad 2. BN層的使用。在 P ′ P^′ P′、 F p F_p Fp​和全連接配接層(最後一層除外)上采用了批歸一化。但沒有用在MLP δ _\delta δ​和MLP上,因為 F ∗ F_* F∗​和 X X X,尤其是 X X X,旨在實作對特殊代表點的特定表示。

\quad 3. 卷積運算使用了分離卷積(separable convolution)以降低參數數量和計算消耗。

\quad 4. 在最後一個全連接配接層之前加了Dropout,還使用了"subvolume supervision"來緩解過拟合。

\quad 5. 最後一個X-Conv層中,感覺野被設定為小于1的值,這樣做的目的是使得該層的輸出僅能涵蓋原始資料中的部分資訊,迫使模型在訓練過程中更多地去學習如何捕捉有價值的局部資訊。

\quad 6. 關于資料增強。随機采樣和打亂順序。作者建議,如果想要訓練一個以N個點作為輸入的PointCNN模型,各訓練樣本點數的的選擇應服從高斯分布 N ( N , ( N / 8 ) 2 ) {\Bbb {N}}(N,(N/8)^2) N(N,(N/8)2),這點至關重要。

繼續閱讀