稀疏卷积的做法有两种,区别是使用GEMM算法进行卷积还是Winograd算法进行卷积。
指最后使用im2col的方式进行卷积。
论文提出了稀疏卷积的具体做法。
卷积的输入为一个矩阵M和一个哈希表H。矩阵M为输入feature map上不为空的部分的特征,大小为 a× n, a代表不为空的位置个数,n代表特征维度C。哈希表H, key代表输入中不为空的位置的坐标,value代表这个坐标对应的特征是M中的哪一行特征。
计算流程:
1.(CPU上)对H中的key进行遍历,确定卷积输出feature map上不为空的位置的坐标与个数,组成Hout 。同时确定rule book, rule book的每一行对应计算卷积输出feature map上不为空的某个位置所需要输入feature map上的位置,通过这个位置得到输入哈希表中该位置对应的key,填充到rule book中
2. (GPU上)。对rule book的每一行进行并行计算,得到每个不为空的输出位置的输出。
在稀疏卷积的基础上提出了子流形稀疏卷积。submanifold指稀疏卷积指输出feature map上不为空的位置与输入feature map上不为空的位置相同。稀疏卷积会使得数据的稀疏性指数下降,而submanifold会保持一样的稀疏性,但是如果只用submanifold稀疏卷积,卷积核的感受野会限制在一定范围内,所以要和maxpooling或stride=2的卷积一起使用,在保持稀疏性的同时增大感受野。
具体的实现流程类似,直接把Hin 复制到 Hout ,其他一致。