普通卷积分组卷积和深度分离卷积概念以及参数量计算
Posted AI浩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了普通卷积分组卷积和深度分离卷积概念以及参数量计算相关的知识,希望对你有一定的参考价值。
Google提出了移动端模型MobileNet,其核心是采用了深度可分离卷积,其不仅可以降低模型计算复杂度,而且可以大大降低模型大小,适合应用在真实的移动端应用场景。这篇文章带你了解一下什么是普通卷积、分组卷积和深度分离卷积,以及如何计算参数量。
上面的图片展示了普通卷积和分组卷积的不同,下面我们通过具体的例子来看。
普通卷积
标准卷积运算量的计算公式:
F
L
O
P
s
=
(
2
×
C
0
×
K
2
−
1
)
×
H
×
W
×
C
1
FLOPs =\\left(2 \\times C_0 \\times K^2-1\\right) \\times H \\times W \\times C_1
FLOPs=(2×C0×K2−1)×H×W×C1
计算公式参考:深度学习之(经典)卷积层计算量以及参数量总结 (考虑有无bias,乘加情况) - 琴影 - 博客园 (cnblogs.com)
参数量计算公式: K 2 × C 0 × C 1 K^2 \\times C_0 \\times C1 K2×C0×C1
C 0 C_0 C0 :输入的通道。
K:卷积核大小。
H,W:输出 feature map的大小
C 1 C_1 C1:输出通道的大小。
bias=False,即不考虑偏置的情况有-1,有True时没有-1。
举例:
输入的尺寸是227×227×3,卷积核大小是11×11,输出是6,输出维度是55×55,
我们带入公式可以计算出
参数量:
1 1 2 × 3 × 6 11^2 \\times 3 \\times 6 112×3×6=2178
运算量:
2 × 3 × 1 1 2 × 55 × 55 × 6 2 \\times 3 \\times11^2\\times 55\\times 55 \\times 6 2×3×112×55×55×6=13176900
分组卷积
分组卷积则是对输入feature map进行分组,然后每组分别卷积。
假设输入feature map的尺寸仍为 C 0 × H × W C_0\\times H \\times W C0×H×W,输出feature map的数量为 C 1 C_1 C1个,如果设定要分成G个groups,则每组的输入feature map数量为 C 0 G \\fracC_0G GC0,每组的输出feature map数量为 C 1 G \\fracC1G GC1,每个卷积核的尺寸为 C 0 G × K × K \\fracC_0G\\times K \\times K GC0×K×K,卷积核的总数仍为 C 1 C_1 C1个,每组的卷积核数量为 C 1 G \\fracC1G GC1,卷积核只与其同组的输入map进行卷积,卷积核的总参数量为 N × C 0 G × K × K N\\times \\fracC_0G\\times K \\times K N×GC0×K×K,总参数量减少为原来的 1 G \\frac1G G1。
计算量公式:
[
(
2
×
K
2
×
C
0
/
g
+
1
)
×
H
×
W
×
C
o
/
g
]
×
g
\\left[\\left(2 \\times K^2 \\times C_0 / g +1\\right) \\times H \\times W \\times C_o / g\\right] \\times g
[(2×K2×C0/g+1)×H×W×Co/g]×g
分组卷积的参数量为:
K
∗
K
∗
C
0
g
∗
C
1
g
∗
g
K * K * \\fracC_0g * \\fracC_1g * g
K∗K∗gC0∗gC1∗g
举例:
输入的尺寸是227×227×3,卷积核大小是11×11,输出是6,输出维度是55×55,group为3
我们带入公式可以计算出
参数量:
1 1 2 × 3 3 × 6 3 × 3 11^2 \\times \\frac33 \\times \\frac63 \\times 3 112×33×36×3=726
运算量:
[ ( 2 × 1 1 2 × 3 / 3 + 1 ) × 55 × 55 × 6 / 3 ] × 3 \\left[\\left(2 \\times 11^2 \\times3 / 3 +1\\right) \\times 55 \\times 55 \\times 6 / 3\\right] \\times 3 [(2×112×3/3+1)×55×55×6/3]×3=2205225
深度可分离卷积(Depthwise separable conv)
设输入特征维度为 D F × D F × M D_F\\times D_F\\times M DF×DF×M,M为通道数, D k D_k Dk为卷积核大小,M为输入的通道数, N为输出的通道数,G为分组数。
当分组数量等于输入map数量,输出map数量也等于输入map数量,即M=N=G,N个卷积核每个尺寸为$D_k\\times D_k\\times 1 $时,Group Convolution就成了Depthwise Convolution。
逐点卷积就是把G组卷积用conv1x1拼接起来。如下图:
深度可分离卷积有深度卷积+逐点卷积。计算如下:
-
深度卷积:设输入特征维度为 D F × D F × M D_F\\times D_F\\times M DF×DF×M,M为通道数。卷积核的参数为 D k × D k × 1 × M D_k\\times D_k\\times 1 \\times M Dk×Dk×1×M。输出深度卷积后的特征维度为: D F × D F × M D_F\\times D_F\\times M DF×DF×M。卷积时每个通道只对应一个卷积核(扫描深度为1),所以 FLOPs为: M × D F × D F × D K × D K M\\times D_F\\times D_F\\times D_K\\times D_K M×DF×深度学习Group Convolution分组卷积Depthwise Convolution和Global Depthwise Convolution