子流形稀疏卷积网络
出版时间:2019
作者:Benjamin Graham, Laurens van der Maaten。 Facebook AI Research
代码地址
看到最近很多关于点云的网络都用到这个方法,就来读一下。
卷积处理的数据(比如图片)一般都是很dense的,但是有些数据是sparse的(比如点云数据,在纸上形成的笔画)。在这些稀疏数据上直接用dense的卷积网络
是非常没有效率的。本文引入了一种稀疏卷积运算,该运算针对处理稀疏数据
而定制,与之前的稀疏卷积网络的工作不同,它严格地在子流形上运行,而不是将观测扩展到网络的每一层。
(总之就是一个很适合处理稀疏数据的卷积)
“submanifold” dilation 问题
左: 原始输入,是一个手画的圆形, 是嵌入在二维网格(grid)上的一维曲线(curve)。
中:一次3x3卷积之后的结果
右:两次3x3卷积之后的结果
上图的输入是一个手写数字识别的例子,作者把上图表示出来的问题叫做“submanifold” dilation 问题
,可以看到原始数据是非常sparse的,但是用了传统卷积之后,稀疏性很快就消失了。
如果不是对所有的pixel进行卷积,只对白色的有curve的pixel进行卷积操作会怎么样?
结果就是,会丢失很多信息,没法分类。
注:作者把白色的这些有意义的pixel叫做active site
We use the term 'submanifold' to refer to input data that is sparse because it has a lower effective dimension than the space in which it lives, for example a one-dimensional curve in 2+ dimensional space, or a two-dimensional surface in 3+ dimensional space.
我们使用术语“子流形”来表示输入数据是稀疏的,因为它的有效维数低于它所在的空间,例如二维空间中的一维曲线,或三维空间中的二维曲面。
作者提出两种卷积操作:SC 和 VSC。
下图展示了active site和non-active site在传统卷积C,SC, VSC的计算和内存开销。
Context:filter size为3,对一个d维的single location进行卷积。
传统卷积C,SC, VSC的计算和内存开销
其中, a是active sites number, m是input channel number, m是output channel number。
Modules used for building sub-manifold sparse convolutional networks
作者用提出的VSC和SC构建了很流行的几种网络模块:VGG
, ResNet
, DenseNet
模块。
(a) VGG block
是2个VSC个一个max pooling组成
(b) 保持输入输出分辨率不变的ResNet block
是把两个VSC的输出加在input上
(c) 减小分辨率的ResNet block
(d) 保持输入输出分辨率不变的DenseNet block
(e) 减小分辨率的DenseNet block
和SC不同的只是rule book的构建。
在ModelNet-40数据集上的结果。
可以看到VSC的精确度不比传统卷积C的精确度差多少,但是速度
和内存
都有极大的提升。
结果可视化里面如果有个类似下面这样的图,更能表示使用SC/VSC不会降低数据稀疏性。
然而没有,试着自己可视化看看吧。
这篇文章没有发表,而是作为《3D Semantic Segmentation with Submanifold Sparse Convolutional Networks》的一部分后来发表的。
如果看不懂这篇文章的一些细节,没关系,去读写的更清楚详细的《3D Semantic Segmentation with Submanifold Sparse Convolutional Networks》。我有点吐血,写完这个才读了《3D Semantic Segmentation with Submanifold Sparse Convolutional Networks》,很多我猜出来的细节,在文章中就写明了,去读吧,清晰很多。
https://blog.csdn.net/zcgyq/article/details/83088283