ShellNet: 點雲殼卷積網路 (ICCV 2019)
目前在點雲研究領域,如何針對點雲這種非結構化資料進行高效的特徵計算,一直是一個研究熱點。其中的核心問題是:如何計算點雲中每個點的feature?從PointNet開始,很多不同的演算法被提出來。本文介紹ICCV 2019的一篇文章,裡面提出了一個新的操作:殼卷積
ShellConv
,以及包含殼卷積的殼網路
ShellNet
。論文及原始碼:
1。 ShellConv 殼卷積
ShellConv operator
ShellConv實現的功能是計算出一個取樣點的feature。如上圖(c)所示,
一個Shell表示兩個同心但不同半徑的球面之間的空間範圍
。ShellConv的主要思路是:
將取樣點的鄰居點劃分到不同的shell內;
同一個shell內的點,透過聚合函式(max_pool)計算出一個shell的區域性feature;
最後用多個shell的區域性feature,計算出取樣點的feature
對於一個取樣點,使用ShellConv計算feature的詳細流程(原始碼實現)如下:
用KNN找到
個鄰居。
表示shell size,即每個shell包含多少個鄰居點;
表示shell的個數。
個鄰居點按照到取樣點的距離,升序排列。因此,每個鄰居點會落到對應的shell裡面;
個鄰居點的xyz座標(相對於取樣點的座標)分別經過兩個共享的Dense層(全連線層)處理,得到
個高維的feature;
如果
個鄰居點之前已經有feature,則將之前的feature拼接到Dense層計算出來的feature後面;
分別在每個shell內,對包含在該shell內的點,用max_pool計算出每個shell的區域性feature,得出D個feature;
用kernel大小為 [1, D] 的conv2d對D個feature進行聚合,計算出取樣點的feature。
2。 ShellNet 殼網路
ShellNet architecture
上圖即為點雲分類、分割的網路結構。以分割為例,詳細流程(原始碼實現)如下:
輸入的點云為
,feature為
;
用FPS取樣得到的點為
,用ShellConv計算每個取樣點的feature,得到
;
類似上一步,得到的點為
,feature為
;
類似上一步,得到的點為
,feature為
。至此,完成了下采樣的過程;
直接用第3步得到的點
,作為取樣點,用ShellConv計算每個取樣點的feature,得到
,與第3步的feature拼接後得到
,經過一個Dense層得到
;
類似上一步,得到點
,feature為
;
類似上一步,沒有feature拼接,得到點
,feature為
;
最後透過3個dense層,得到
。
表示類的個數。
3。 總結
這篇文章與另一篇點雲球核卷積 有很多相似之處:
Shell-Conv VS Spherical-Conv
ShellConv引數量少,執行速度應該比SphericalConv快。