Pointwise convolution;Depthwise convolution;Groupwise convolution

转自:https://www.cnblogs.com/qiulinzhang/p/11541029.html

Pointwise convolution;Depthwise convolution;Groupwise convolution都是在标准卷积的基础上进行修改,以达到参数削减,同时保证准确率能够满足要求的目的
标准卷积示意图:
image.png

这里假设卷积层的输入通道数为 Cin

,输出通道数为 Cout,假设采用 k * k 大小的卷积核来进行卷积,那么最终需要 Cout个 尺寸为k∗K∗Cin的卷积核,即这一个卷积层所需要的参数量为 Cout∗k∗k∗Cin

Pointwise convoltion

Pointwise convolution从名字上来看为“逐点卷积”,即采用卷积核大小为 1 x 1 来对feature map 逐个点来进行卷积

最典型的应用是在何凯明提出的残差网络中的bottleneck中用来降维,现在以resnet-50的第2个block为例子,featuremap的channle数为256,最终输出的channel数为512

    一般的building block形式:

        feature_map -> 3x3,512 -> 3x3,512

    其所需要的参数量为 3∗3∗Cin∗Cout+3∗3∗Cout∗Cout

,将Cin=256,Cout=256

代入可得:‭3,538,944‬

bottleneck的形式为:

featuremap -> 1x1,128 -> 3x3,128, -> 1x1, 512

这里 1x1 的卷积核就是 pointwise convolution,其功能就是先将256通道降维成128通道,然后再升维到256,这样的做法可以减少参数量
其所需要的参数量为:1∗1∗Cin∗Cm+3∗3∗Cm∗Cm+1∗1∗Cm∗Cout
,将Cin=256,Cout=512,Cm=128

    代入可得:245760
    二者相除,可以得到其参数量约为原来的1/14

DepthWise Convolution

Depthwise 从字面上来看即逐深度(channel)卷积,即在每个channel进行卷积

image.png

如上图所示:

先在每个channel上以平面kernel(即深度为1)进行卷积,这样原始有多少个channel,输出就有多少个channel,即上图的从蓝色部分到紫色部分;
但是这样并没有利用到通道之间的关系,因此后面再加一个pointwise convolution,即在每个位置上用 1∗1∗Cin

的kernel来聚合每个通道之间的信息,即上图的从紫色部分到黄色部分

因此最后需要的参数量为:k∗k∗1∗Cin+1∗1∗Cin∗Cout

,比原来的参数量也大大减少。因为它对每一个通道都进行了学习(每个通道对应一个不同的过滤器),而不是所有通道对应同一个过滤器,得到的特征质量更佳。
Groupwise Convolution

Groupwise 从字面上来看即逐群进行卷积,这里的意思是把channel分成多个群,每一个群采用一种卷积核,如下图左所示:
image.png

假设将Cin
个channel均分成 g 份,这样得到了 g 个群,每个群采用的kernel为 k∗k∗(Cin/g),因为有 g 个,我们最终输出为Cout

,这样输出也是由 g 个进行cat组合起来的
因此需要的参数为:

[k∗k∗(Cin/g)∗(Cout/g)]∗g=k∗k∗Cin∗Cout/g

相当于参数量是原来的 1/g

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值