PointCNN: Convolution OnX-Transformed Points

CNN之所以獲得如此大的成功,關鍵在於他的Conv操作,該操作可以利用圖像中密集表示的數據中的局部相關性,得到局部集合結構。此處的想法就是可不可以將其在PointCloud中應用該種想法。

\(\mathcal{X}-Conv\)來鵝城只爲兩件事:

  1. 對每個代表點周圍的點特徵做集成。
  2. 在隱空間對輸入做重排去除輸入順序的影響。

上面兩件事的作用可以類比爲CNN裏面的Conv操作。

作者提出了一種在卷積角度處理點雲問題的框架,其中最關鍵的部分被稱爲\(\mathcal{X}-Conv\),他的主要作用就是解決了上面兩件事。


image
在上圖(i)中,每個網格單元關聯一個特徵。在ii-iv,這些點是從局部鄰域採樣的,類似於i中的局部面片,每個點都與特徵、順序索引和座標關聯這三個要素相連。
我們在上圖中展示了點雲應用在卷積上的問題和挑戰。假設再上圖的ii-iv上的C維無序集合的輸入特徵都是相同的\(\mathbb{F}=\{f_a,f_b,f_c,f_d\}\),而且我們有一個形狀爲\(4\times C\)的kernel \(K=[k_\alpha,k_\beta,k_\gamma,k_\delta]^T\)

上圖ii-iv是點雲的形式:

  • iiiii雖然feature的輸入順序相同,但是feature的形狀不同,此時就需要網絡可以區分出來他們兩個的不同之處。
  • iiiiv雖然feature的輸入順序不同,但是feature的形狀相同,此時就需要網絡可以去除出來輸入順序對他們兩個的影響。

由上圖1a可得,由於卷積操作的性質,在所有情況下\(f_{ii},f_{iii}\)的計算結果是相等的,\(f_{iii},f_{iv}\)的操作結果是不相等的。很顯然可以得出結論,直接卷積會導致原始信息丟失空間信息並且使得卷積的結果對於順序很敏感。

解決方案 - Beg - 在隱空間對輸入做重排去除輸入順序的影響

image

本文作者思路是讓網絡去學習一個轉置矩陣\(\mathcal{X}\),該矩陣可以對某個特定順序的輸入進行處理,得到一個與順序無關的feature。輸入數據經過\(\mathcal{X}\)相乘之後,在執行Convolution的操作,比如圖1中的iii,他的feature的順序是abcd,經過和轉置矩陣\(\mathcal{x}\)相乘之後,得到了某一種順序能和圖iv的這種排列順序相等。此時我們就做到了上述的第二點,消除掉輸入順序對識別結果的不良影響。\(\color{red}{這樣消除會不會同樣消除掉空間信息呢?}\)感覺應該是不會的,他不是那種max-pooling操作,它是通過\(\mathcal{X}\)抵消順序的。
image

  • 在結構信息相同的時候,儘管順序信息不同,網絡可以學到一種特徵,形成針對性的矩陣,同結構化的點雲,可以擁有相同順序的feature
  • 在順序信息相同的時候,但結構信息不同,經過矩陣計算得到的feature是不同的

對網絡進行訓練之後發現,矩陣並沒有二值化,這也是一個待解決的問題,雖然沒有成功二值化,但是這樣的特徵也可以理解爲這個矩陣學到了如何在點雲中提取feature的權重。


image
PointCNN對點雲數據做平移不變性的操作,就是在中心點查到k近鄰之後,用其周圍點的座標信息減去中心點的座標信息,得到局部座標系,將每個點的局部座標系單獨提升,並結合相關特徵。這樣就消除了整體的變化導致局部的變化,讓網絡學到的東西產生變化。
image
image
基於柵格的CNN的輸入是一個\(F_1\)的特徵圖形狀爲\(R_1\times R_1\times C_1\)(如上圖的\(F_1\)),其中的\(R_1\)是空間分辨率,\(C_1\)是特徵的通道數。卷積核\(K\)的形狀爲\(K\times K\times C_1\times C_2\)將其與\(F_1\)形狀爲\(K\times K\times C_1\)local patch做卷積,產生一個形狀爲\(R_2\times R_2\times C_2\)feature map。注意到圖2的上部\(R_1=4,K=2,R_2=3\)。和\(F_1\)相比,\(F_2\)的分辨率一般都是比較低的\((R_2<R_1)\),但channels一般是比較高的\((C_2>C_1)\),編碼到高級別的語義信息,這個過程是遞歸的,圖越來越小,但深度越來越高。

PointCNN的輸入是\(\mathbb{F}_1=\{(p_{1,i},f_{1,i}):i=1,2,\dots,N_1\}\),即點集\(\{p_{1,i}:p_{1,i}\in\mathbb{R}^{Dim}\}\),每個點與特徵\(\{f_{1,i}:f_{1,i}\in\mathbb{R}^{C_1}\}\)相關聯。瞭解過基於網格的CNN分層構造之後,我們希望在\(\mathbb{F}_1\)上應用X-Conv以獲得更加高級別的表示\(\mathbb{F}_2=\{(p_{2,i},f_{2,i}:f_{2,i})\in\mathbb{R}^{C_2},i=1,2,\dots,N_2\}\),其中\(\{p_{2,i}\}\)\(\{p_{1,i}\}\)的一組代表點,\(\mathbb{F}_2\)\(\mathbb{F}_1\)相比有更小的分辨率和更深的通道數(\(N_2<N_1,C_2>C_1\))。當遞歸應用將\(\mathbb{F}_1\)轉換爲\(\mathbb{F}_2\)\(\mathcal{X}-Conv\)過程中,具有特徵的輸入點被投影聚合爲更少的點\((9\rightarrow 5\rightarrow 2,如上圖2所示)\),但每個點都有更加豐富的特徵信息(點的顏色越來越深,大小越來越大)。

image

根據上圖介紹\(\mathcal{X}-Conv\)如何利用空間局部相關性。

爲了利用歐氏空間CNN卷積的那種空間局部相關性,\(\mathcal{X}-Conv\)在局部進行操作,由於輸出特徵應該和代表點\(\{p_{2,i}\}\)相關聯,因此\(\mathcal{X}-Conv\)\(\{p_{1,i}\}\)的鄰域點和相關的特徵作爲輸入。爲了簡單起見,我們將\(\{p_{2,i}\}\)中的一個代表點表示爲\(p\)\(p\)feature表示爲\(f\),並將\(\{p_{1,i}\}\)\(K\)個近鄰點表示爲\(\mathbb{N}\),因此對於\(p\)\(\mathcal{X}-Conv\)的輸入就是\(\mathbb{S}=\{(p_i,f_i):p_i\in\mathbb{N}\}\)。注意到\(\mathbb{S}\)是一個無序集合,在不喪失一般性的情況下,\(\mathbb{S}\)可以被轉換成\(k\times Dim\)的矩陣\(P=(p_1,p_2,\dots,p_K)^T\),和\(K\times C_1\)的矩陣\(F=(f_1,f_2,\dots,f_K)^T\)\(K\)代表一個可訓練的卷積核。經過上述,我們希望可以計算出特徵\(F_p\),即輸入特徵到代表點\(p\)投影聚合。我們在上面的Algorithm中詳細的介紹了\(\mathcal{X}-Conv\)運算符,並簡要的總結如下:

\[F_p=\mathcal{X}-Conv(K,p,P,F)=Conv(K,MLP(P-p)\times[MLP_\delta(P-p),F])\tag{2} \]

\(MLP_\delta\)是類似PointNet的對每個點進行處理的多層感知機。並且構成\(\mathcal{X}-Conv\)的所有操作(Conv,MLP,matrix multiplication,\(MLP_\delta\))都是可微的,所以其本身也是可微的,可以插入到神經網絡開始訓練。

注意:

\(\mathcal{X}-Conv\)設計用於局部點區域,輸出不應該取決於點\(p\)及其相鄰點的絕對位置,而應該取決於他們的相對位置。所以我們在算法的第一步就實現了局部座標系的操作,定義輸出特徵的就是相鄰點的局部座標和他們相關聯的特徵,然而局部特徵的維度和表示方法和相關特徵的表示方法是不同的。爲了解決這個問題,我們首先將座標系提高的更高的維度和更抽象的表示(第二行),然後將其與相關特徵(第三行)結合起來進行進一步的處理。

\(MLP_\delta\)這個提高座標點維度的方法和PointNet裏面的方法是一致的,不同之處是提升特徵的維度的方法沒有經過對稱函數的處理,取而代之的是,他們通過\(\mathcal{X}-transformation\)與相關特徵一起進行加權和排列,\(\mathcal{X}-transformation\)是在所有鄰域中共同學習的。\(\mathcal{X}\)取決於輸入點的順序(第四步),因爲\(\mathcal{X}\)應該根據輸入點對\(F_*\)進行排列,因此\(\mathcal{X}\)必須知道輸入的特定順序。對於沒有任何附加信息的輸入點雲,第一層的\(\mathcal{X}-Conv\)進用於獲取\(F_\delta\)

輸入:

  • \(P=(p_1,p_2,\dots,p_K)^T\),代表鄰居點
  • \(F=(f_1,f_2,\dots,f_K)^T\),代表鄰居點的feature
  • \(K=[k_\alpha,k_\beta,k_\gamma,k_\delta]^T\),卷積的kernel。
  • \(p\),代表目標點

爲了計算出\(p\)feature,首先確定其鄰居點集\(P\)(使用FPS,或KNN),按照以上算法操作:

根據上述不同用途的採樣點方案對數據進行點採樣得到\(p\)

  1. \(p\)的鄰居節點的座標轉化爲相對於\(p\)的座標:\(P'\leftarrow P-p\)
  2. 使用\(MLP_\delta\),將上一步得到的鄰居節點轉化爲feature信息:\(F_\delta\leftarrow MLP_\delta(P')\)
  3. 講轉化得到的feature和鄰居自己的關於點信息feature,得到新的feature\(F_*\leftarrow [F_\delta,F]\)
  4. \(MLP\)計算特定輸入順序的對應矩陣,以進行輸入順序無關化處理:\(\mathcal{X}\leftarrow MLP(P')\)
  5. 使用上一步計算出來的矩陣對特徵進行順序無關化處理:\(F_\mathcal{X}\leftarrow \mathcal{X}\times F_*\)
  6. 執行卷積操作:\(F_p\leftarrow Conv(K,F_\mathcal{X})\)

解決方案 - End - 對每個代表點周圍的點特徵做集成

通過上述方案,可以模擬CNN的特性,並且做到了開頭\(\mathcal{X}-Conv\)的兩件事

問題

上面的\(\{p_{2,i}\}\)應該是有利於投影聚集的點。在我們的實現中,在分類任務裏面對\(\{p_{1,i}\}\)通過隨即下采樣得到\(\{p_{2,i}\}\),在分割任務裏因爲點的均勻性很重要所以這裏使用最遠點採樣算法,文中給出假設應該是有更好的採樣方案可以對分割任務進行優化,但是並沒有做出探索。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章