普通卷积、分组卷积和深度分离卷积概念以及参数量计算

举报
AI浩 发表于 2022/03/06 10:21:11 2022/03/06
【摘要】 Google提出了移动端模型MobileNet,其核心是采用了深度可分离卷积,其不仅可以降低模型计算复杂度,而且可以大大降低模型大小,适合应用在真实的移动端应用场景。这篇文章带你了解一下什么是普通卷积、分组卷积和深度分离卷积,以及如何计算参数量。上面的图片展示了普通卷积和分组卷积的不同,下面我们通过具体的例子来看。 普通卷积标准卷积运算量的计算公式:FLOPs=(2×C0×K2−1)×H×W...

Google提出了移动端模型MobileNet,其核心是采用了深度可分离卷积,其不仅可以降低模型计算复杂度,而且可以大大降低模型大小,适合应用在真实的移动端应用场景。这篇文章带你了解一下什么是普通卷积、分组卷积和深度分离卷积,以及如何计算参数量。

img

上面的图片展示了普通卷积和分组卷积的不同,下面我们通过具体的例子来看。

普通卷积

标准卷积运算量的计算公式:

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}

计算公式参考:深度学习之(经典)卷积层计算量以及参数量总结 (考虑有无bias,乘加情况) - 琴影 - 博客园 (cnblogs.com)

参数量计算公式: K 2 × C 0 × C 1 K^{2} \times C_{0} \times C{1}

C 0 C_{0} :输入的通道。

K:卷积核大小。

H,W:输出 feature map的大小

C 1 C_{1} :输出通道的大小。

bias=False,即不考虑偏置的情况有-1,有True时没有-1。

举例:

输入的尺寸是227×227×3,卷积核大小是11×11,输出是6,输出维度是55×55,

我们带入公式可以计算出

参数量:

1 1 2 × 3 × 6 11^2 \times 3 \times 6 =2178

运算量:

2 × 3 × 1 1 2 × 55 × 55 × 6 2 \times 3 \times11^{2}\times 55\times 55 \times 6 =13176900

分组卷积

分组卷积则是对输入feature map进行分组,然后每组分别卷积。

假设输入feature map的尺寸仍为 C 0 × H × W C_{0}\times H \times W ,输出feature map的数量为 C 1 C_{1} 个,如果设定要分成G个groups,则每组的输入feature map数量为 C 0 G \frac{C_{0}}{G} ,每组的输出feature map数量为 C 1 G \frac{C{1}}{G} ,每个卷积核的尺寸为 C 0 G × K × K \frac{C_{0}}{G}\times K \times K ,卷积核的总数仍为 C 1 C_{1} 个,每组的卷积核数量为 C 1 G \frac{C{1}}{G} ,卷积核只与其同组的输入map进行卷积,卷积核的总参数量为 N × C 0 G × K × K N\times \frac{C_{0}}{G}\times K \times K 总参数量减少为原来的 1 G \frac{1}{G}

计算量公式:

[ ( 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

分组卷积的参数量为:

K K C 0 g C 1 g g K * K * \frac{C_{0}}{g} * \frac{C_{1}}{g} * g

举例:

输入的尺寸是227×227×3,卷积核大小是11×11,输出是6,输出维度是55×55,group为3

我们带入公式可以计算出

参数量:

1 1 2 × 3 3 × 6 3 × 3 11^2 \times \frac{3}{3} \times \frac{6}{3} \times 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 =2205225

深度可分离卷积(Depthwise separable conv)

设输入特征维度为 D F × D F × M D_{F}\times D_{F}\times M ,M为通道数, D k D_{k} 为卷积核大小,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 ,M为通道数。卷积核的参数为 D k × D k × 1 × M D_{k}\times D_{k}\times 1 \times M 。输出深度卷积后的特征维度为: D F × D F × M D_{F}\times D_{F}\times 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}

  • 逐点卷积:输入为深度卷积后的特征,维度为 D F × D F × M D_{F}\times D_{F}\times M 。卷积核参数为 1 × 1 × M × N 1\times1\times M\times N 。输出维度为 D F × D F × N D_{F}\times D_{F}\times N 。卷积过程中对每个特征做 1 × 1 1 \times 1 的标准卷积, FLOPs为: N × D F × D F × M N \times D_{F} \times D_{F}\times M

    将上面两个参数量相加就是 D k × D k × M + M × N D_{k} \times D_{k} \times M+M \times N

所以深度可分离卷积参数量是标准卷积的 D K × D K × M + M × N D K × D K × M × N = 1 N + 1 D K 2 \frac{D_{K} \times D_{K} \times M+M \times N}{D_{K} \times D_{K} \times M \times N}=\frac{1}{N}+\frac{1}{D_{K}^{2}}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。