您當前的位置:首頁 > 舞蹈

ShellNet: 點雲殼卷積網路 (ICCV 2019)

作者:由 不知道叫什麼好 發表于 舞蹈時間:2019-11-09

目前在點雲研究領域,如何針對點雲這種非結構化資料進行高效的特徵計算,一直是一個研究熱點。其中的核心問題是:如何計算點雲中每個點的feature?從PointNet開始,很多不同的演算法被提出來。本文介紹ICCV 2019的一篇文章,裡面提出了一個新的操作:殼卷積

ShellConv

,以及包含殼卷積的殼網路

ShellNet

。論文及原始碼:

1。 ShellConv 殼卷積

ShellNet: 點雲殼卷積網路 (ICCV 2019)

ShellConv operator

ShellConv實現的功能是計算出一個取樣點的feature。如上圖(c)所示,

一個Shell表示兩個同心但不同半徑的球面之間的空間範圍

。ShellConv的主要思路是:

將取樣點的鄰居點劃分到不同的shell內;

同一個shell內的點,透過聚合函式(max_pool)計算出一個shell的區域性feature;

最後用多個shell的區域性feature,計算出取樣點的feature

對於一個取樣點,使用ShellConv計算feature的詳細流程(原始碼實現)如下:

用KNN找到

K=ss \cdot D

個鄰居。

ss

表示shell size,即每個shell包含多少個鄰居點;

D

表示shell的個數。

K

個鄰居點按照到取樣點的距離,升序排列。因此,每個鄰居點會落到對應的shell裡面;

K

個鄰居點的xyz座標(相對於取樣點的座標)分別經過兩個共享的Dense層(全連線層)處理,得到

K

個高維的feature;

如果

K

個鄰居點之前已經有feature,則將之前的feature拼接到Dense層計算出來的feature後面;

分別在每個shell內,對包含在該shell內的點,用max_pool計算出每個shell的區域性feature,得出D個feature;

用kernel大小為 [1, D] 的conv2d對D個feature進行聚合,計算出取樣點的feature。

2。 ShellNet 殼網路

ShellNet: 點雲殼卷積網路 (ICCV 2019)

ShellNet architecture

上圖即為點雲分類、分割的網路結構。以分割為例,詳細流程(原始碼實現)如下:

輸入的點云為

N\times3

,feature為

None

用FPS取樣得到的點為

N_0 \times3

,用ShellConv計算每個取樣點的feature,得到

N_0 \times C_0

類似上一步,得到的點為

N_1 \times3

,feature為

N_1 \times C_1

類似上一步,得到的點為

N_2 \times3

,feature為

N_2 \times C_2

。至此,完成了下采樣的過程;

直接用第3步得到的點

N_1 \times3

,作為取樣點,用ShellConv計算每個取樣點的feature,得到

N_1 \times C_1

,與第3步的feature拼接後得到

N_1 \times 2C_1

,經過一個Dense層得到

N_1 \times C_1

類似上一步,得到點

N_0 \times 3

,feature為

N_0 \times C_0

類似上一步,沒有feature拼接,得到點

N \times 3

,feature為

N \times C

最後透過3個dense層,得到

N \times k_{seg}

k_{seg}

表示類的個數。

3。 總結

這篇文章與另一篇點雲球核卷積 有很多相似之處:

ShellNet: 點雲殼卷積網路 (ICCV 2019)

Shell-Conv VS Spherical-Conv

ShellConv引數量少,執行速度應該比SphericalConv快。

標簽: Feature  shell  取樣  ShellConv  計算