如使用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)
論文學習筆記(一) 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.
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的特征
步驟:
将輸入點集 P P P中各點坐标遷移到以點 p p p為原點的相對坐标系,得到點集合 P ′ P^′ P′;
通過MLP将 P ‘ P` P‘中每個點映射到高維空間 δ \delta δ中,得到特征矩陣 F δ F_\delta Fδ;
将輸入點的特征集 F F F和上一步得到的特征矩陣 F δ F_\delta Fδ直接拼接,得到新的特征矩陣 F ∗ F_* F∗;
使用MLP從點集合 P ′ P^′ P′中學習到一個K×K大小的變換矩陣 X X X;
使用變換矩陣 X X X對特征矩陣 F ∗ F_* F∗進行矩陣變換(權重&排序),得到特征矩陣 F X F_X FX;
上文中提到,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 定義每個代表性點的感覺野為 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個代表點都可以看到整個形狀,是以它們都具有進行預測的能力。
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,旨在實作對特殊代表點的特定表示。