参考: https://towardsdatascience.com/how-does-sparse-convolution-work-3257a0a8fd1
注: 插图和部分内容理解来自于上述博客
背景
三维点云的数据相对于2D数据而言是极其稀疏的,因此提出可以针对稀疏数据来进行卷积,而不是扫描所有图像像素或者空间体素。
以一个例子来进行3D稀疏卷积讲解
1. 初步定义
输入定义:
以下图为一个输入,其中除了P1和P2两个点,其余点都是(0,0,0),而非零元素也称为active input sites 。并且根据稀疏格式,数据列表为[[0.1, 0.1, 0.1], [0.2, 0.2, 0.2]],索引列表是[1, 2], [2, 3],并且按照YX顺序进行排序。
卷积核定义:
输出定义:
与传统卷积不同,稀疏卷积有两种输出:
regular output definition: 与普通的卷积是相似的,只要对应的kernel覆盖一个active input site,就可以计算出output site。
submanifold output definition: 只有当kernel的中心覆盖到active input site时,卷积输出才会被计算。
如上图所示可以看到上部分为regular output definition经过卷积得到的输出结果,而下面是submanifold output definition得到的输出结果,其中A1A2表示两者输出的总和,两种颜色分别对应两个通道。
2. Hash table构建
Input Hash Table
如上图左边所示,对于输出的
H
a
s
h
i
n
Hash_{in}
Hashin,其中
v
i
n
v_{in}
vin为输入的稀疏数据的下标,而
k
e
y
i
n
key_{in}
keyin表示对应的数据在输出矩阵中的二维位置。
根据上面的假想数据可以知道,对应的P1和P2数据分别位于矩阵的(2,1)和(3,2),并且为YX顺序。
Output Hash Table
接着进行卷积操作得到对应的Output Hash Table。首先对P1传导过程进行演示:
当没遇到P1时,矩阵不再发生变化。
然后对每一个卷积得到的元素进行记录:
同样对P2进行相同操作:
于是两张表进行融合消除,便得到Output hash table。
3.Rulebook构建
右侧为rulebook,其中,第一列为索引(相对于卷积核),第二列为计数器count,表示改位置多少次被访问到,第三列第四列分别为input hash table和output hash table的index。
4.稀疏卷积计算过程
如上图所示为整个稀疏卷积的过程,与普通卷积的滑动窗口不同,稀疏卷积根据生成的rulebook对对应的稀疏数据进行稀疏卷积计算。
以其中红色箭头为例。首先根据记录的
v
i
n
v_{in}
vin找到对应的key值,然后根据key找到对应的input matrix数据。接着根据rulebook记录的Getoffset找到kernel数值。这时对找到的input matrix进行计算,便可以得到计算结果。
而对于蓝色箭头而言,计算过程与红色箭头一致,而到最后一步时,因为两者对应的
v
o
u
t
v_{out}
vout位置是一致的,因此对两者进行加和操作。