zoukankan      html  css  js  c++  java
  • Pointwise Depthwise Groupwise Convolution

    Pointwise/ Depthwise/ Groupwise

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

    这里假设卷积层的输入通道数为 (C_{in}),输出通道数为 (C_{out}),假设采用 k * k 大小的卷积核来进行卷积,那么最终需要 (C_{out})个 尺寸为(k * K * C_{in})的卷积核,即这一个卷积层所需要的参数量为 (C_{out} * k * k * C_{in})

    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*C_{in}*C_{out}+3*3*C_{out}*C_{out}),将(C_in=256,C_{out}=256)代入可得:‭3,538,944‬

      • bottleneck的形式为:

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

        这里 1x1 的卷积核就是 pointwise convolution,其功能就是先将256通道降维成128通道,然后再升维到256,这样的做法可以减少参数量
        其所需要的参数量为:(1*1*C_{in}*C_m + 3*3*C_m*C_m+1*1*C_m*C_{out}),将(C_{in}=256,C_{out}=512,C_m=128)代入可得:245760
        二者相除,可以得到其参数量约为原来的1/14

    DepthWise Convolution

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

    image.png

    如上图所示:

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

    因此最后需要的参数量为:(k*k*1*C_{in}+1*1*C_{in}*C_{out}),比原来的参数量也大大减少。因为它对每一个通道都进行了学习(每个通道对应一个不同的过滤器),而不是所有通道对应同一个过滤器,得到的特征质量更佳。

    Groupwise Convolution

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

    假设将(C_{in})个channel均分成 g 份,这样得到了 g 个群,每个群采用的kernel为 (k * k * (C_{in}/g)),因为有 g 个,我们最终输出为(C_{out}),这样输出也是由 g 个进行cat组合起来的
    因此需要的参数为:

    [[k * k * (C_{in}/g) * (C_{out}/g)]*g=k * k * C_{in} * C_{out} / g ]

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

  • 相关阅读:
    原来四五年没有写过什么东西了
    Spark难道比oracle性能还差?百万级数据测试性能
    程序人常去的网站(转)
    Android中关于dip和px以及转换的总结
    padding与margin的区别
    Python装饰器探究——装饰器参数
    Python 装饰器执行顺序迷思
    Python CSV模块简介
    理解线程3 c语言示例线程基本操作
    Python 外部函数调用库ctypes简介
  • 原文地址:https://www.cnblogs.com/qiulinzhang/p/11541029.html
Copyright © 2011-2022 走看看