目录
- depth-wise conv
- gourp conv
- channel-wise conv
传统卷积中,假设输入通道数n,大小
,输出通道数m,卷积核大小
,步长为1的情况下,计算量为
,参数量为
,造成的计算量和参数量非常大。因此衍生出一些用于降低模型大小和计算量的方法,本文对其中三个方法进行简单介绍。
depth-wise convolution
MobileNets是为移动设备设计的网络,该模型的核心是名为depth-wise separable convolution的卷积层。它将传统卷积分解为一个depth-wise convolution和一个1x1卷积。
对一个大小为
的输入图,传统的方法是使用大小为
的卷积核进行卷积。
而depth-wise separable convolution则首先使用大小为
的卷积核进行depth-wise convolution。具体来说,在depth-wise convolution中,n个输入通道中的每一个都有相应的卷积核,两两进行卷积。得到的输出通道数为n,如果stride为1且padding为same的话,大小就是
。
接下来再进行1x1卷积,卷积核为
,得到
的最终输出。
这种方法的计算量为
,参数大小为
可以发现参数量和计算量都大幅下降。
但是可以发现仍然没有规避一个巨大的
,在现代网络通道数动辄512、1024的情况下,仍然有优化余地。
group convolution
group convolution的历史就比较早了,在AlexNet中就有。
group convolution就是把输入特征图分为g组,然后将这g个组分别进行卷积。道理很简单。
我们假设输入通道数和输出通道数都能被g整除,那么计算量就是
,参数量是
group convolution的缺点是,每个group之间的特征不进行交换,会造成性能下降。
后面有ShuffleNet对group convolution进行改进,就是在卷积完成后加入一个channel shuffle。我看其他人写的材料称之为“均匀地打乱”,这样接下来进行group convolution时,每一个group的输入不是只来自相邻组,这样就实现了特征融合。
channel-wise convolution
近日阅读paper,发现一个
的式子用在动态生成卷积核的简化上。 说
代表channel-wise convolution。查资料看到一篇18年的paper定义了它,但是写得有点晦涩,中文网络反而没有其他解释。因此在对paper进行努力阅读理解的过程中写了这些东西。
首先我们从特例开始。输入
大小的特征图,输出通道为m。那么输入可以平铺为
(假设
为整数)。此时channel-wise convolution就是对这个平铺的特征图的普通1x1卷积。
特例时的channel wise convolution,深色部位代表卷积核窗口当输入特征图大小不为1时,卷积核就在channel维度上移动,卷积核窗口内每一个元素都落在不同channel的相同位置上。下图展示的是通道数n=9,输入宽度为2的输入特征图,大小为4的卷积核在上面滑动。
非特例时的channel-wise convolutionchannel-wise convolution的卷积核为公用的,大小为
的卷积核,代表着参数量也仅为
。它的计算量为
,规避了 巨大的
,效率比较高。
参考文献
- Gao, Hongyang, Zhengyang Wang, and Shuiwang Ji. "ChannelNets: Compact and efficient convolutional neural networks via channel-wise convolutions."Advances in Neural Information Processing Systems. 2018.
- "MobileNets." 机器之心, 23 Feb. 2020, MobileNets.
- "CNN模型之ShuffleNet." 知乎专栏, 23 Feb. 2020, 小小将:CNN模型之ShuffleNet.
- "Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution - shine-lee - 博客园." 23 Feb. 2020, Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution.