分组卷积和深度可分离卷积

(一)分组卷积:分组卷积即将原图像通道数目按组划分,每一组进行卷积操作,最后再拼接在一起,以减少卷积核的参数,降低运算量。

论文地址:https://arxiv.org/pdf/1605.0648

输入图像尺寸为为(batch_size,in_channels,W,H)

正常卷积的输出为(batch_size,out_channels,W,H),在padding=‘same’的情况下,卷积核大小kernel_size = (out_channels,in_channels,W,H)。

分组卷积的情况下,按照in_channels/g(g为组数)、out_channels/g进行分组,分组处理的情况下,每一组的卷积核大小kernel_size = (out_channels/g,in_channels/g,W,H),一共有g组,所有共有(out_channels*in_channels*W*H)/g个参数,是正常卷积参数的1/g。

(二)深度可分离卷积

深度可分离卷积操作分为Depthwise Convolution与Pointwise Convolution两部分。在分组卷积的基础上延伸,即深度可分离卷积在Depthwise Convolution操作时,将分组卷积的组数g设置为和输入通道in_channels一致的数目,但与一般的分组卷积不同的是,这里的每一组对应的卷积核的个数只能为1个,而每一组的输入图像实际为一个二维矩阵,尺寸为W*H,所以对应的卷积核大小为k*k,故此处操作有g个k*k的卷积核,然后得到g个特征图,经过通道的concat操作得到特征图大小为batch_size*g*W1*H1,再经过out_channels*g*1*1(Pointwise Convolution)卷积之后得到最终结果。区别便是分组卷积在最初就可以给每个组分配多个多通道卷积核,而深度可分离卷积在Depthwise Convolution操作时每一组只能分配一个k*k的单通道卷积核,输出的通道数在Pointwise Convolution时的卷积核个数决定。

在实现深度可分离卷积的Depthwise Convolution操作时,直接调用pytorch的conv2d函数时,即令out_channels_1 = in_channels_1且group = in_channels_1;实现Pointwise Convolution时即in_channelse_2 = out_channels_1,输出通道即out_channels_2设置为预设的值即可,kernel_size = 1.完成上述操作即实现了深度可分离卷积。

具体操作过程如下:首先是将组数g分为和输入通道相等的in_channels,然后对每一个in_channels做卷积操作(即g个W*H的矩阵和g个k*k尺寸的卷积核做卷积操作,得到g个特征图),卷积核参数量为:g*k*k,得到与输入通道数相等的feature maps,再对这些feature maps做Pointwise卷积操作,卷积核参数量为out_channels*g*1*1,最后得到batch_szie*out_channels*W*H的图像特征输出。本质上是将原卷积操作的像素点间的关系和通道之间的联系分开来看,先考虑同一通道像素点间的联系,再通过Pointwise联系各个通道,来达到原卷积操作的目的,同时大幅度减少参数量,提高运算效率。

细致参见:深度可分离卷积

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值