卷积参数量计算(标准卷积,分组卷积,深度可分类)

5 篇文章 2 订阅
4 篇文章 0 订阅

卷积参数量计算 总整理

这边其实算写给我自己复习用的, 就没有用博客的口吻了 简单为主

预备知识

FLOPs: s小写,指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。(模型) 在论文中常用GFLOPs(1 GFLOPs = 1 0 9 10^9 109 FLOPs)相当于十亿次

为了理解下面的计算, 简单复习一下卷积运算的过程, 就是将kernel在原input fmap上或者原图上进行滑动(左向右), 并且进行element wise multiplication 点乘, 然后最终将点乘后的元素进行相加 add, 也就是MAC, 这在计算量中算是两次运算

参考

  1. 轻量级神经网络“巡礼”(一)—— ShuffleNetV2
  2. 轻量化网络ShuffleNet MobileNet v1/v2 解析
@普通卷积计算
计算量or运算量

标准卷积FLOPs = ( 2 ∗ C i ∗ K 2 − 1 ) ∗ H ∗ W ∗ C 0 (2 * C_i * K^2 -1) * H * W * C_0 (2CiK21)HWC0

  • 只考虑一个input feature map, 不考虑Batchsize

  • Ci=input channel, k=kernel size, HW=output feature map size, Co=output channel.

  • 2是因为一个MAC算2个operations。

  • 不考虑bias时有-1,有bias时没有-1。

以上主要分为两步

第一步括号内的是计算出output fmap中一个pixel的计算量

外面的 HWC0 则是扩展到整个output feature map的步骤, 所以就是相乘

参数量

简单来说就是需要多少个可以学习的参数, 这里理解的思路为因为与input fmap进行卷积, 卷积核上的每一点weight都要进行学习, 所以需要学习的量为K平方, 注意这只是单个通道的卷积核需要学习的参数量, 还要依照进来的多少个通道的input, 卷积核在扩展成一样的通道数, 接着input的每个通道都与卷积核进行卷积之后, 在依照输出的通道数,就会产生几组的卷积核组, 于是进行相乘

  • 输入尺寸为 H ∗ W ∗ C 1 H*W*C_1 HWC1,

  • 卷积核为 k ∗ k ∗ C 1 k * k * C_1 kkC1

  • 输出特征图 通道数 c 2 c_2 c2

  • 标准卷积参数量计算为 ( k 2 ∗ c 1 ) ∗ c 2 (k^2 * c_1) * c_2 (k2c1)c2 , 都知道卷积核为多少个通道, 输出的特征就是多少个通道

思路一样是先计算input进来的参数量, 在依据输出的通道数进行相乘
假设输入为( 1, 3, 8, 8), 经过conv(2, 1, 1)卷积
则该op的参数量为 ( 1 2 ∗ 3 ) ∗ 2 = 6 (1^2 * 3) * 2 = 6 (123)2=6


@Group 卷积

卷积计算的部分先看参数量, 在来看计算量

参数量

也就是将输入的fmap 依照自己设定的组数g, 来分组别进行计算

  • Input feature map 为 H x W x C/g

  • 单个卷积核大小为 K x K x C/g (很好理解, 因为input分成g组了, 卷积核也要进行分组才能分开卷积)

  • 输出数据为 H2 x W2 x C2/g

  • Group 分组卷积的参数量计算方式为

k ∗ k ∗ c 1 g ∗ c 2 g ∗ g k * k * \frac{c1}{g} * \frac{c2}{g}*g kkgc1gc2g

先看前面的 k ∗ k ∗ c 1 g ∗ c 2 g k * k * \frac{c1}{g} * \frac{c2}{g} kkgc1gc2 其实与一般的标准卷积计算的方式差不多, 只不过这里先计算分组后单个组别的计算量, 所以可以看到是乘上 c 1 g ∗ c 2 g \frac{c1}{g} * \frac{c2}{g} gc1gc2
最终因为是g个组别, 所以还要乘上g组才等于完整的计算量

举个例子
Ex.

input (1, 64, 8, 8) 这里为了好分组, 输入channel为64
conv(2, 1, 1) 表示输出channel为2, 卷积为1x1
g  = 2表示分成2组
所以计算量为 1^2 x 64/2 x 2/2 x 2 = 64
计算量or运算量

思路一样跟着走, 先计算出 要产出一个output pixel的计算量要多少在扩展到整个output map

[ ( 2 ∗ k 2 ∗ C i / g ∗ + 1 ) ∗ H 2 ∗ W 2 ∗ C o / g ] ∗ g [(2 * k^2 * Ci/g * +1) * H_2 * W_2 * C_o/g] * g [(2k2Ci/g+1)H2W2Co/g]g

这里唯一和标准卷积不一样的地方只在于通道的地方被g给分组了


@深度可分类卷积(Depthwise separable conv)

深度可分类卷积主要是由

  • depthwise conv : 负责滤波 尺寸为 D k ∗ D k ∗ 1 Dk * Dk * 1 DkDk1, 共M个, (Dk 就是 Depthwise kernel size), 作用在输入的每个通道上, 所以1表示单个通道, M就是依照输入特征的通道数分成M组
  • pointwise conv : 负责转换通道, 尺寸为 1 ∗ 1 ∗ M 1 * 1 * M 11M, 共N个, 因为是做1x1的卷积, 并且要增加通道数为M, 一共有N个卷积核
参数量
  • depthwise conv : D k ∗ D k ∗ 1 ∗ M Dk * Dk * 1 * M DkDk1M
  • pointwise conv : 1 ∗ 1 ∗ M ∗ N 1 * 1 * M * N 11MN
  • 将上面两个参数量相加就是 D k ∗ D k ∗ M + M ∗ N D_k * D_k * M + M * N DkDkM+MN

深度可卷积是标准卷积的

depthwise深度卷积其实就是g = M = N 的分组卷积,但没有将g组concate起来, 所以参数量为 1 / N 1/N 1/N

pointwise conv其实就是讲g组卷积用conv1x1拼接起来, 所以pointwise参数量是 标准卷积的 1 / D k 2 1/D_k^2 1/Dk2

  • 14
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分组卷积深度可分离卷积是两种常用的卷积操作方法。 分组卷积(grouped convolution)是将输入的通道分成多个组,每个组内的通道进行独立的卷积操作,然后将各组的结果进行拼接。这种方法可以减少计算量和参数量,同时提高模型的非线性表达能力。例如,如果将输入的通道数分为两组,那么每组只需要进行一半的卷积操作,从而减少了计算量和参数量。 深度可分离卷积(depthwise separable convolution)是将标准卷积操作拆分成两个步骤:深度卷积和逐点卷积。首先,深度卷积操作对每个输入通道进行独立的卷积,然后使用逐点卷积深度卷积的结果进行组合。深度可分离卷积可以有效地减少参数量和计算量,同时保持模型的表达能力。这种方法在轻量化和移动端模型中被广泛使用。 综上所述,分组卷积深度可分离卷积是两种常用的卷积操作方法,它们可以在神经网络中提高计算效率并减少参数量,同时保持模型的表达能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [对深度可分离卷积分组卷积、空洞卷积的通俗理解(上篇)](https://blog.csdn.net/qq_27825451/article/details/102457264)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [各种卷积层的理解(深度可分离卷积分组卷积、扩张卷积、反卷积)](https://blog.csdn.net/gwplovekimi/article/details/89890510)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值