點雲深度學習系列一: PointNet和PointNet++
前言:SLAM的系列實驗基本就更新那麼多,之後開始進入點雲深度學習的方向,不出意外,這個系列會持續很久
點雲深度學習最近一兩年逐漸火熱,這個系列從CVPR2017的PointNet開始,主要總結頂會的相關文章,不會全文翻譯,只總結自己覺得重要的點。感興趣的同學,可以去閱讀原文。畢竟經要去西天取,文章要去源頭品。
PointNet
(PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation)
(作為第一個直接處理點雲的深度學習框架,相關介紹太多了,不再贅述)
輸入是包含n個點的三維點雲(nx3) , 原始資料通過一個3D 空間變換矩陣預測網路 T-Net(3),估計出3x3的變換矩陣T(3) 並作用在原始資料上,實現資料的對齊。對齊後的資料會以點為單位,通過一個共享引數的雙層感知機模型進行特徵提取 。每個點提取出64維的特徵,再通過特徵空間變換矩陣預測網路 T-Net(64) 預測64x64的變換矩陣,作用到特徵上,實現對特徵的對齊。然後繼續利用三層感知機(64,128,1024)進行以特徵點為單位的特徵提取,直到把特徵的維度變為1024,繼而在特徵空間的維度上進行Max Pooling,提取出點雲的全域性特徵向量。
PointNet++
(PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space)
1.文章主要解決兩個問題
-
怎麼劃分這個點雲集合
採用Farthest Point Sampling(FPS)演算法,原理: 先隨機選一個點,然後呢選擇離這個點距離最遠的點加入起點,然後繼續迭代,直到選出需要的個數為止。(Sampling layer)
採用Ball query分組演算法,原理: 給定中心點,把給定半徑內的點都包括進來,同時給定鄰居點個數。相比KNN,Ball query保證了一個固定的區域尺寸,所以比KNN更加geralizable across space,更適合於需要區域性特徵的任務。(Grouping layer)
-
怎麼組合點雲集的區域性特徵
local region中的座標首先被轉換到相對於中點的座標系中,使用相對座標系,我們可以捕獲到區域性區域中點到點的關係。
使用PointNet作為區域性特徵學習器作為一個基礎的結構部件,PointNet要在區域性點集中抽取特徵,或者把特徵組合成更高層表示,所以PointNet++遞迴地使用PointNet在一個巢狀劃分的輸入點雲集合上。(PointNet layer)
但是存在取樣不均勻密度的問題。在低密度的地方可能會丟失區域性資訊,所以還需要增大尺度,所以提出了 density adaptive PointNet layers。主要採用以下兩種方式解決:
Multi-scale grouping (MSG):每個尺度使用PointNet,然後將多尺度特徵融合到一起。但是計算量比較大。
Multi-resolution grouping (MRG):MRG特徵由兩個向量組成,左邊的使用區域抽象層彙總每個子區域的特徵,右邊的使用PointNet直接處理所有原始點資料。當局部區域密度低時,左邊的特徵不如右邊的可靠,因為它包含更加稀疏的點,並且更多收到了取樣的影響。
另一方面,當時區域性區域密度高時,左邊的向量提供了更精細的細節資訊,因為它具有在較低層次遞迴地檢查更高解析度的能力。
2.整體框架如下:
set abstraction: 主要分為上面提到的Sampling layer、Grouping layer 和PointNet layer
通過多個set abstraction,最後進行分類和分割:
分類:將提取出的特徵使用PointNet進行全域性特徵提取
分割:NL-1是集合抽象層的輸入,NL是集合抽象層的輸出。NL是取樣得到的,NL-1肯定大於等於NL。在特徵傳播層,將點特徵從NL傳遞到NL-1。根據NL的點插值得到NL-1,採用鄰近的3點反距離加權插值。將插值得到的特徵和之前跳躍連線的特徵融合,在使用PointNet提取特徵
3.總結:
給一片點雲,PointNet++會先對點雲進行取樣(sampling)和劃分區域(grouping),在各個小區域內用基礎的PointNet網路進行特徵提取(MSG、MRG),不斷迭代。對於分類問題,直接用PointNet提取全域性特徵,採用全連線得到每個類別評分。對於分割問題,將高維的點反距離插值得到與低維相同的點數,再特徵融合,再使用PointNet提取特徵
參考連結: