在轻量化网络中,经常使用组卷积、深度卷积或是深度可分离卷积来降低FLOPs,那么三者的区别在哪里呢?下面总结一下。
一、标准卷积
下面是用一个卷积核对输入特征做一次卷积,得到的输出特征的通道为1。
二、组卷积
组卷积是将输入特征按通道分为g组,每组特征中的通道数为
C
i
n
g
\frac{C_{in}}{g}
gCin,所以相应的卷积核的大小也变了,通道数变少了。每次卷积后的特征按通道concat输出特征。当分组数量和输出特征的通道相同时,即只有
C
o
u
t
C_{out}
Cout个卷积核时,卷积分别对输入特征的每一组卷积1次;当输出特征的通道大于分组数量时,需要
C
o
u
t
C_{out}
Cout个卷积核对输入特征的每一组卷积
C
o
u
t
/
g
C_{out}/g
Cout/g次。
三、深度卷积
深度卷积是组卷积的极端情况,将输入特征的每一通道分为一组,即分组数为
g
=
C
i
n
g=C_{in}
g=Cin。后续步骤和组卷积一致。
四、深度可分离卷积
深度可分离卷积是将深度卷积和点卷积(
1
×
1
1 \times 1
1×1卷积核)相结合。可以从深度卷积中可以得知,卷积核只是对通道的每一层进行了提取了特征,和标准卷积缺少了通道之间的信息交互。加入点卷积后可以增强特征通道之间的信息交互,进一步提升性能。具体可参考MobileNets v1。
最后本文只是对三种卷积感性上的认识,具体的不同卷积的FLOPs计算请参考这篇文章。