1. 程式人生 > >三維深度學習之pointnet系列詳解(一)

三維深度學習之pointnet系列詳解(一)

三維深度學習之pointnet系列詳解(一)

置頂 2018年05月09日 23:25:06 痛並快樂著呦西 閱讀數:4429 標籤: pointnet 三維深度學習 更多

個人分類: 3D Deep Learning

目前二維深度學習取得了很大的進步並且應用範圍越來越廣,隨著三維裝置的發展,三維深度學習得到了很大的關注。

最近接觸了三維深度學習方面的研究,從pointnet入手,對此有了一點點了解希望記錄下來並分享,若有誤希望指正~持續更新

以下所有的解讀基於點雲分類。

一、三維深度學習簡介

二、點雲存在的問題

三、pointnet網路結構詳解

四、pointnet程式碼詳解

 

一、三維深度學習簡介

  1. 多視角(multi-view):通過多視角二維圖片組合為三維物體,此方法將傳統CNN應用於多張二維視角的圖片,特徵被view pooling procedure聚合起來形成三維物體;
  2. 體素(volumetric):通過將物體表現為空間中的體素進行類似於二維的三維卷積(例如,卷積核大小為5x5x5),是規律化的並且易於類比二維的,但同時因為多了一個維度出來,時間和空間複雜度都非常高,目前已經不是主流的方法了;
  3. 點雲(point clouds):直接將三維點雲拋入網路進行訓練,資料量小。主要任務有分類、分割以及大場景下語義分割;
  4. 非歐式(manifold,graph):在流形或圖的結構上進行卷積,三維點雲可以表現為mesh結構,可以通過點對之間臨接關係表現為圖的結構。流形表達比較抽象,用到拉普拉斯特徵什麼的,我也不太懂……

二、點雲存在的問題

  1. 無序性:點雲本質上是一長串點(nx3矩陣,其中n是點數)。在幾何上,點的順序不影響它在空間中對整體形狀的表示,例如,相同的點雲可以由兩個完全不同的矩陣表示。 如下圖左邊所示:
 我們希望得到的效果如下圖右邊:N代表點雲個數,D代表每個點的特徵維度。不論點雲順序怎樣,希望得到相同的特徵提取結果。

    

我們知道,網路的一般結構是:提特徵-特徵對映-特徵圖壓縮(降維)-全連線。

  下圖中x代表點雲中某個點,h代表特徵提取層,g叫做對稱方法,r代表更高維特徵提取,最後接一個softmax分類。g可以是maxpooling或sumpooling,也就是說,最後的D維特徵對每一維都選取N個點中對應的最大特徵值或特徵值總和,這樣就可以通過g來解決無序性問題。pointnet採用了max-pooling策略。

 2.旋轉性:相同的點雲在空間中經過一定的剛性變化(旋轉或平移),座標發生變化,如下圖所示:

我們希望不論點雲在怎樣的座標系下呈現,網路都能正確的識別出。這個問題可以通過STN(spacial transform netw)來解決。二維的變換方法可以參考這裡,三維不太一樣的是點雲是一個不規則的結構(無序,無網格),不需要重取樣的過程。pointnet通過學習一個矩陣來達到對目標最有效的變換。

三、pointnet網路結構詳解

先來看網路的兩個亮點:

  1. 空間變換網路解決旋轉問題:三維的STN可以通過學習點雲本身的位姿資訊學習到一個最有利於網路進行分類或分割的DxD旋轉矩陣(D代表特徵維度,pointnet中D採用3和64)。至於其中的原理,我的理解是,通過控制最後的loss來對變換矩陣進行調整,pointnet並不關心最後真正做了什麼變換,只要有利於最後的結果都可以。pointnet採用了兩次STN,第一次input transform是對空間中點雲進行調整,直觀上理解是旋轉出一個更有利於分類或分割的角度,比如把物體轉到正面;第二次feature transform是對提取出的64維特徵進行對齊,即在特徵層面對點雲進行變換。
  2. maxpooling解決無序性問題:網路對每個點進行了一定程度的特徵提取之後,maxpooling可以對點雲的整體提取出global feature。

再來看網路結構:

 其中,mlp是通過共享權重的卷積實現的,第一層卷積核大小是1x3(因為每個點的維度是xyz),之後的每一層卷積核大小都是1x1。即特徵提取層只是把每個點連線起來而已。經過兩個空間變換網路和兩個mlp之後,對每一個點提取1024維特徵,經過maxpool變成1x1024的全域性特徵。再經過一個mlp(程式碼中運用全連線)得到k個score。分類網路最後接的loss是softmax。

四、pointnet程式碼詳解

好像也沒有特別需要講的……重點我都框出來了

網路模型部分

變換矩陣部分,以第一個STN為例

置頂 2018年05月09日 23:25:06 痛並快樂著呦西 閱讀數:4429 標籤: pointnet 三維深度學習 更多

個人分類: 3D Deep Learning

目前二維深度學習取得了很大的進步並且應用範圍越來越廣,隨著三維裝置的發展,三維深度學習得到了很大的關注。

最近接觸了三維深度學習方面的研究,從pointnet入手,對此有了一點點了解希望記錄下來並分享,若有誤希望指正~持續更新

以下所有的解讀基於點雲分類。

一、三維深度學習簡介

二、點雲存在的問題

三、pointnet網路結構詳解

四、pointnet程式碼詳解

 

一、三維深度學習簡介

  1. 多視角(multi-view):通過多視角二維圖片組合為三維物體,此方法將傳統CNN應用於多張二維視角的圖片,特徵被view pooling procedure聚合起來形成三維物體;
  2. 體素(volumetric):通過將物體表現為空間中的體素進行類似於二維的三維卷積(例如,卷積核大小為5x5x5),是規律化的並且易於類比二維的,但同時因為多了一個維度出來,時間和空間複雜度都非常高,目前已經不是主流的方法了;
  3. 點雲(point clouds):直接將三維點雲拋入網路進行訓練,資料量小。主要任務有分類、分割以及大場景下語義分割;
  4. 非歐式(manifold,graph):在流形或圖的結構上進行卷積,三維點雲可以表現為mesh結構,可以通過點對之間臨接關係表現為圖的結構。流形表達比較抽象,用到拉普拉斯特徵什麼的,我也不太懂……

二、點雲存在的問題

  1. 無序性:點雲本質上是一長串點(nx3矩陣,其中n是點數)。在幾何上,點的順序不影響它在空間中對整體形狀的表示,例如,相同的點雲可以由兩個完全不同的矩陣表示。 如下圖左邊所示:
 我們希望得到的效果如下圖右邊:N代表點雲個數,D代表每個點的特徵維度。不論點雲順序怎樣,希望得到相同的特徵提取結果。

    

我們知道,網路的一般結構是:提特徵-特徵對映-特徵圖壓縮(降維)-全連線。

  下圖中x代表點雲中某個點,h代表特徵提取層,g叫做對稱方法,r代表更高維特徵提取,最後接一個softmax分類。g可以是maxpooling或sumpooling,也就是說,最後的D維特徵對每一維都選取N個點中對應的最大特徵值或特徵值總和,這樣就可以通過g來解決無序性問題。pointnet採用了max-pooling策略。

 2.旋轉性:相同的點雲在空間中經過一定的剛性變化(旋轉或平移),座標發生變化,如下圖所示:

我們希望不論點雲在怎樣的座標系下呈現,網路都能正確的識別出。這個問題可以通過STN(spacial transform netw)來解決。二維的變換方法可以參考這裡,三維不太一樣的是點雲是一個不規則的結構(無序,無網格),不需要重取樣的過程。pointnet通過學習一個矩陣來達到對目標最有效的變換。

三、pointnet網路結構詳解

先來看網路的兩個亮點:

  1. 空間變換網路解決旋轉問題:三維的STN可以通過學習點雲本身的位姿資訊學習到一個最有利於網路進行分類或分割的DxD旋轉矩陣(D代表特徵維度,pointnet中D採用3和64)。至於其中的原理,我的理解是,通過控制最後的loss來對變換矩陣進行調整,pointnet並不關心最後真正做了什麼變換,只要有利於最後的結果都可以。pointnet採用了兩次STN,第一次input transform是對空間中點雲進行調整,直觀上理解是旋轉出一個更有利於分類或分割的角度,比如把物體轉到正面;第二次feature transform是對提取出的64維特徵進行對齊,即在特徵層面對點雲進行變換。
  2. maxpooling解決無序性問題:網路對每個點進行了一定程度的特徵提取之後,maxpooling可以對點雲的整體提取出global feature。

再來看網路結構:

 其中,mlp是通過共享權重的卷積實現的,第一層卷積核大小是1x3(因為每個點的維度是xyz),之後的每一層卷積核大小都是1x1。即特徵提取層只是把每個點連線起來而已。經過兩個空間變換網路和兩個mlp之後,對每一個點提取1024維特徵,經過maxpool變成1x1024的全域性特徵。再經過一個mlp(程式碼中運用全連線)得到k個score。分類網路最後接的loss是softmax。

四、pointnet程式碼詳解

好像也沒有特別需要講的……重點我都框出來了

網路模型部分

變換矩陣部分,以第一個STN為例