理解分组卷积与深度可分离卷积

这两种卷积分别是在ResNext论文与MobileNet系列中体现的,貌似Xception中也有深度可分离卷积的体现。

作用都很简单,为了降参。

目录

1. 分组卷积 group convolution 

2 深度可分离卷积 depthwise separable convolution


1. 分组卷积 group convolution 

最早出现分组卷积的是AlexNet,说实话网上介绍的blog直接一贴我也没看懂AlexNet中是如何用分组卷积的,只知道现在因为计算资源上去了,大家已经不在把数据分在两块GPU上去搞了,贴个blog有兴趣的可以去看AlexNet中如何降参用分组卷积的。https://www.cnblogs.com/wangguchangqing/p/10333370.html

分组卷积,顾名思义就是相较原始卷积我们整合所有通道特征图的值,分组卷积只整合本组通道内特征图的值,话不多说上图。

理解分组卷积与深度可分离卷积

这是标准卷积的操作,输入特征图为C1×H×W,我们用C2×C1×h1×w1的卷积核执行标准卷积操作,得到C2×H×W的output特征图,对于输出特征图上的每一个点,都是在输入特征图全部通道(C1)执行multi-add操作得到的。

理解分组卷积与深度可分离卷积

这是分组卷积操作,输入特征图为C1×H×W,我们按照通道数分为g个组,每个组的特征通道数量为C1/g,这个时候我们用C2/g × C1/g × h1 ×w1的卷积核去对每一组进行卷积,得到C2/g × H × W的output特征图,又我们一共有g个组,所以最终拼接所有C2/g × H × W的output特征图,又可以得到和标准卷积尺度一样的output特征图,即C2×H×W。

以上就是分组卷积的操作,Alex认为分组卷积的方式可以增加filter之间的对角相关性(没理解为什么,可能就是类似dropout形势,组内的特征可以独立发挥最终特征预测作用,而不是通过与其他特征组合导致,减少耦合增加鲁棒吧。),可以减少训练参数,Group Convolution可以看成是structured sparse,对上图所示的,C2/g × C1/g × h1× w1卷积核可以看作C2/g ×(C1 - C1/g)× h1 × w1这部分卷积核的值为0,有时甚至可以在减少参数量的同时获得更好的效果(相当于正则)。

2 深度可分离卷积 depthwise separable convolution

深度可分离卷积是在mobileNet和Xception中都有涉及的一个操作,在看完分组卷积后,我们考虑一种特殊情况,如果输入特征图的尺寸等于输出特征图的尺寸(H × W不变),如果我们把输入特征图的通道数C1分成C1个组,也就是每个组都只有1个通道,那么我们用1 × 1 × K × K的卷积核来对每组进行卷积,同时拼接C1个组的结果,得到输出特征图的通道仍为C1 × H × W,这其实就是深度可分离卷积。

对于可分离卷积,我认为其可以分为两种形式,一种是空间可分离卷积,顾名思义,空间可分离就是将一个大的卷积核变成两个小的卷积核,也就是在inception系列中出现的把3 × 3卷积分成对称的1×3与3×1的操作,另一种就是深度可分离卷积,深度可分离卷积也可分为两部分,深度卷积+逐点卷积,深度卷积就是在每个通道上执行卷积,但是不整合所有对应通道上的结果(没有通道级别对应的add操作),逐点卷积就是1*1卷积。

理解分组卷积与深度可分离卷积

话不多说上图

理解分组卷积与深度可分离卷积

图(a)代表标准卷积。假设输入特征图尺寸为  理解分组卷积与深度可分离卷积,卷积核尺寸为理解分组卷积与深度可分离卷积   ,个数为N个,输出特征图尺寸为理解分组卷积与深度可分离卷积,标准卷积层的参数量为:理解分组卷积与深度可分离卷积 。

图(b)就是深度卷积,把输入特征图上的每一个通道单独执行卷积操作,也就是用M个理解分组卷积与深度可分离卷积的卷积核对输入特征图上的每一个通道执行卷积操作,最终得到的输出特征图的尺寸仍然为理解分组卷积与深度可分离卷积,参数数量为理解分组卷积与深度可分离卷积

图(c)为逐点卷积,也就是常规的1×1卷积操作,输入特征图为理解分组卷积与深度可分离卷积,卷积核的尺寸为理解分组卷积与深度可分离卷积  ,个数为N个,输出特征图尺寸为理解分组卷积与深度可分离卷积。参数数量为理解分组卷积与深度可分离卷积

那么图b与图c的结合就是深度可分离卷积了,深度可分离卷积作用就是降参咯,我们来对比一下标准卷积与深度可分离卷积:

 理解分组卷积与深度可分离卷积

如果我们用3 * 3的卷积,那么相当于我们大约可以减少10倍的参数计算量。

对于深度可分离卷积,在MobileNet1中比标准卷积在ImageNet上降低了约1%的精度。

理解分组卷积与深度可分离卷积

性能下降一点的原因我觉得也比较明显吧,就是通道数太少,特征图的维度太少,能获取到足够的有效信息吗?

参考:

https://zhuanlan.zhihu.com/p/70703846  这篇对moblieNet系列介绍比较全面,推!~