赞
踩
这两种卷积分别是在ResNext论文与MobileNet系列中体现的,貌似Xception中也有深度可分离卷积的体现。
作用都很简单,为了降参。
目录
2 深度可分离卷积 depthwise separable 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,有时甚至可以在减少参数量的同时获得更好的效果(相当于正则)。
深度可分离卷积是在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)代表标准卷积。假设输入特征图尺寸为
图(b)就是深度卷积,把输入特征图上的每一个通道单独执行卷积操作,也就是用M个
图(c)为逐点卷积,也就是常规的1×1卷积操作,输入特征图为
那么图b与图c的结合就是深度可分离卷积了,深度可分离卷积作用就是降参咯,我们来对比一下标准卷积与深度可分离卷积:
如果我们用3 * 3的卷积,那么相当于我们大约可以减少10倍的参数计算量。
对于深度可分离卷积,在MobileNet1中比标准卷积在ImageNet上降低了约1%的精度。
性能下降一点的原因我觉得也比较明显吧,就是通道数太少,特征图的维度太少,能获取到足够的有效信息吗?
参考:
https://zhuanlan.zhihu.com/p/70703846 这篇对moblieNet系列介绍比较全面,推!~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。