PointNet1 是斯坦福大學研究人員提出的一個點雲處理網絡,與先前工作的不同在於這一網絡可以直接輸入無序點雲進行處理,而無序將數據處理成規則的3Dvoxel形式進行處理。輸入點雲順序對於網絡的輸出結果沒有影響,同時也可以處理旋轉平移后的點雲數據。
點雲是一種重要的幾何數據形式。卷積網絡通常需要規則的數據形式作為輸入,但由於點雲是非規則數據類型所以通常的做法大都先對點雲進行規則化的處理,將空間划分成網格的體素voxel就是一種典型的做法。但這樣的方式會造成有很多不必要的體積划分使得輸入數據變得稀疏,同時會影響點雲數據的不變性。
PointNet從不同的角度出發來解決這一問題,考慮到點雲數據的本質是一個點集,它具有一下特征:
- 無序性,點雲是一個點集,沒有固定的順序;
- 與鄰域點又相互作用,點雲中的個體不是獨立的,與周圍的點具相關,具有局域特征;
- 剛體旋轉、平移不變性,旋轉和平移不會改變點雲的分類、分割結果。
PointNet的結構十分簡單,它可以直接輸出點雲數據,隨后得到分類/分割的結果。模型對無序點雲的每一個點進行獨立的處理,由此來實現與輸入順序無關的點雲處理。在網絡中關鍵的結構是一個單對稱函數最大池化(max pooling)。
模型通過學習選擇出點雲中感興趣點/信息點,並將選擇的原理編碼到模型中,最后利用全連接層將學習到的特征合稱為全局的描述子。
這一模型中輸入點是獨立的,研究人員同時增加了不依賴於數據的空間變化網絡來處理剛體或仿射變換,在輸入網絡前對點雲數據進行規范化(canonicalize)處理, 消除旋轉等變換帶來的影響。
1.處理點雲通常的方法分為一下幾類:
類別 | 方法1 | 方法2 | 方法3 | 方法4 |
---|---|---|---|---|
點雲特征 | 編碼統計特性(不變性) | 內蘊/外部特征 | 全局/局部特征 | ^ @ ^ |
3D數據深度學習 | Volumetric(稀疏+計算量大) | Multiview多視角卷積(不易拓展) | Special空間卷積 | Featurebased基於特征的卷積(受制於表達能力) |
無序數據的深度學習sort規范化 | 序列模型RNN | 對稱函數集成每點信息 | ^ @ ^ | ^ @ ^ |
2.Framework
PointNet 利用了對稱函數——最大池化的方法來對點雲中各點的信息進行融合。它的具體結構如下圖所示,其中輸入是3通道
的點雲數據, 輸出是分類標簽或者是分割結果。
下面讓我們來看看網絡的每一部分具體功能 ,網絡共分為 個部分:
- 輸入變換——>對齊輸入點雲(規范化canonical space)
- 點雲處理——>MPL處理點雲(升維到64)
- 特征變換——>對齊輸入特征(規范化canonical space)
- 特征處理——>MPL處理特征(升維到1024)
- 對稱函數處理——>全局特征(Max pooling)
- 感知機
其中第一部分的 是一個微型網絡,用於生成一個仿射變換矩陣來對點雲的旋轉、平移等變化進行規范化處理。這個變換/對齊網絡是一個微型的PointNet,它輸入原始點雲數據,輸出為一個 的旋轉矩陣:
同樣的思路也可以用於對於特征空間的對齊.變換,唯一的不同在於輸入編程了64維的特征,而輸出則是 的變換矩陣了:
第二部分則是對點雲和特征進行處理的n個感知機,將
的點雲輸入后,對於每一個點都有一個
的兩層感知機來對點雲進行處理,這里相當於利用MPL近似了一個通用的函數,將每個點的信息通過感知機進行學習和提取,隨后利用最大池化層對信息進行融合生成全局特征:
其中h就相當於上面的MPL感知機,而
就是起到對稱函數作用的Max Pooling。在網絡中mpl(64,64)和mpl(64,128,1024)都是復用的,是一個MPL的n份復制。
最后,每一個輸入的點都將得到1024維的描述,通過最大池化,將n-1024融合為1024維的特征來描述這一向量:
在分類任務中,點雲生成的1024維特征通過最后一個MLP來進行學習,其中k是最后一層的輸出數量,代表分類的類別,每個類別會對應對於點雲的分類得分。
而在分割任務中,由於需要考慮局部特征,需要將n*64局域特征和1024維的全局特征結合在一起進行融合,在每一個點的64維特征后接續1024全局特征:
隨后利用一個mpl(512,512,128)對
維的特征維度進行學習,生成
的向量,再利用(128,m)的感知機對最后的特征進行分類(分割問題其實是針對每一個點的分類問題),其中n對應n個點,而m對應的是點對應的m個分類得分。
3.結果
PointNet通過上面的操作,可以得到一個稀疏的關鍵點集來描述總結點雲所表示的形狀:
上圖中,第一行是原始數據、第二行樹關鍵點集(類似於骨架)、第三行為外形的上邊界。關鍵點集相當於定義了形狀的全局特征,所有的點都將落在第二行和第三行表示之間。網絡的魯棒性就來源於此處,只要保留了關鍵點,及時點雲有變換和擾動結果也不會受到影響。同時關鍵點集合也意味着可以描述整個點雲的性質。
4.最后貼幾個不錯的結果:
1.模型檢索、分割、語義分割:
5.對於點雲的編碼好
最后maxpooling輸出的點雲編碼,可以看做是對於點雲的描述。下圖是對於1024個點函數在立方中進行可視化的結果,有灰度的范圍描述了他們的激活區域,描述了從點雲中抽取出的特征表達。
這一項目還有配套的代碼, 接下來繼續對代碼進行學習。
在pointNet后,還有一個PointNet++2的工作,通過層級使用PointNet的方法,致力於解決對於局域結構和細粒度任務,主要探索了度量空間中的距離。
PointNet Project: http://stanford.edu/~rqi/pointnet/ ↩︎
PointNet++ Project:http://stanford.edu/~rqi/pointnet2/ ↩︎