(ML) Sparse Convolution

YEN HUNG CHENG
7 min readMar 12, 2023

--

卷積神經網絡 (CNN) 使用在 二維的圖像處理非常有效,但是在處理三維點雲(point clouds)時,額外增加的維度 Z 也就增加了計算量,且 3D 點雲大部分的體像素都是空的,若使用常規卷積不僅會增加計算量,也會嚴重破壞原本稀疏的程度,如下圖

With regular 3x3 convolutions

Sparse Convolution 分為兩種:

  1. Regular sparse convolution
  2. Submanifold sparse convolution

Example

輸入一張 2D Sparse 的 RGB 影像(Channel = 3,Width = 5,Height = 5)
下圖中的 input tensor 只有在 p1, p2 有數值,其它的地方數值都是 0

進行(stride = 1 ,padding = 0)卷積操作
filter 中的 channel 是 input tensor 的 channel 所決定的

kernel size = 3 x 3

Regular sparse convolution

下圖中 空白地方的數值為 0,若使用 Regular sparse convolution 輸出的 feature map 就會發生膨脹

stride = 1, padding = 0

Submanifold sparse convolution

在 Submanifold sparse convolution 上,當 kernel 的中心有數值時,才會進行卷積運算,這樣就能保有原本稀疏的程度

stride = 1, padding = 0

Submanifold sparse convolution operation

  1. Build the hash table
  2. Build Rule Book
  3. Computation for GPU

Build the hash table

對於上圖,右上角的輸出 feature map 代表 p1 卷積後產生的輸出結果,右下角的輸出 feature map 代表 p2 卷積後產生的輸出結果

將 P1, P2 卷積輸出的結果結合起來(主要是消除掉重複元素),最後得到了一張位置表(Hash out)

Build Rule Book

  • build getoffset

接下來會建立 getoffset ,getoffset 會存取 kernel 經過 tensor 中 p1 的權重所在位置

當然也會紀錄 p2 所在的權重位置

最後使用 getoffset 來建立 Rulebook

Computation for GPU

最後就是透過查詢 Rulebook 來進行卷積計算,而建構 Rulebook 就是使用 GPU 來實現

以上就是 Submanifold sparse convolution 運作方式,總結就是通過對 input tensor 不為 0 的 value 建立位置哈希表和 RuleBook,只對有效數據計算卷積運算,從而減少計算量,且不破壞原本稀疏的程度

網路上有不少的文章,但是表格對我來說有點複雜,所以我將表格進行簡化,並且省略一些看起來不重要的地方,重新製作新的圖表來幫助我理解

GitHub

Reference

https://arxiv.org/abs/1711.10275

--

--