1. 程式人生 > 實用技巧 >ML - PointNet & PointNet++(理論部分)

ML - PointNet & PointNet++(理論部分)

目錄

參考

《PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation》
《PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space》

點雲特性與PointNet

在這裡插入圖片描述

點雲幾個兩個很重要的特性。
(1)無序性。點雲中的點在打亂它們的索引之後,依然能表達空間結構。

(2)旋轉不變形。點雲整體經過旋轉之後,類別沒有改變。

對於(1)
所設計的ML模型必須是一個對稱函式,因為對稱函式的結果與輸入的引數的順序無關。比如sum、max函式。可以類比二維卷積神經網路中的max pooling操作。實際上論文中的max pooling操作在程式碼裡用的就是max函式。
在這裡插入圖片描述
以上這種直接對座標進行max的操作會使大量的點丟失(可能會導致特徵丟失),所以要先使用多層感知器(MLP)將每個點對映到更高的維度(此時資訊會冗餘)
在這裡插入圖片描述
對於(2)
論文中使用了T-Net去學習物體的旋轉,相當需要學習一個3x3的矩陣
在這裡插入圖片描述
所以整體PointNet的結構如下:
在這裡插入圖片描述

PointNet++

在這裡插入圖片描述

由PointNet可以看到,結構中只有一個max pool操作,並且得到了一個全域性特徵,沒有得到區域性特徵,所以模型本身在三維點雲場景分割的效果比較差。所以在PointNet的第二代,參考了二維影象中CNN的做法。CNN通過分層不斷地使用卷積核掃描影象上的畫素,使得越到後面的特徵圖感受野越大,同時每個畫素包含的資訊也越多。
在這裡插入圖片描述
在這裡插入圖片描述
先對整個點雲資料劃分一個個範圍,範圍內中心點之間的距離足夠遠,範圍內其他點作為區域性的特徵,然後用PointNet進行一次特徵的提取。通過了多次這樣的操作後,原本的點的個數變得越來越少,每個點都是上一層通過PointNet提取出來的區域性特徵。這個過程論文中稱為Set Abstraction(SA)。

在這裡插入圖片描述

Set Abstraction

一個SA層包含三個步驟:
Sampling:利用farthest point sample(最遠點取樣)隨機取樣點。
Grouping:利用query ball point劃一個R為半徑的圈,將每個圈裡面的點雲作為一簇。
PointNet: 對Sampling+Grouping以後的點雲進行區域性的全域性特徵提取。

classification

SA之後出現兩個分支,classification和segmentation,classification部分包括一個PointNet和全連線層。
在這裡插入圖片描述

segmentation

論文中對於上取樣的處理使用的是線性插值的方法。公式如下:
在這裡插入圖片描述
在這裡插入圖片描述

multi-scale grouping(MSG)

論文中還提出PointNet++在處理不同密集程度的點雲時出現的情況,表示稀疏情況下效果不理想。所以提出了MSG來改進PointNet++。MSG大致的思想是,在Grouping階段通過不同的R來劃分區域,進而concat特徵。
在這裡插入圖片描述