神经网路的几种卷积方式


  在《 详解卷积神经网络 》已经初步的讲解了一个卷积层应该包含的参数、隐含的层等等信息;由于神经网络的发展是由一个比较长久的历史,因此其卷积计算的算子也相对应的演变。下面简单的介绍几种常用的卷积方式:

0、标准卷积(Standard Convolution)

在这里插入图片描述

标准卷积

  由上图可知,标准卷积是用一个kernel计算说所有通道的卷积之后得到一个通道的输出,然后再用另一个kernel计算所有通道的卷积之后得到第二个输出。

假设有一个3×3大小的卷积层,其输入通道为16、输出通道为32。则一般的操作就是用32个3×3的卷积核来分别同输入数据卷积,这样每个卷积核需要3×3×16个参数,得到的输出是只有一个通道的数据。之所以会得到一通道的数据,是因为刚开始3×3×16的卷积核的每个通道会在输入数据的每个对应通道上做卷积,然后叠加每一个通道对应位置的值,使之变成了单通道,那么32个卷积核一共需要(3×3×16)×32 =4068个参数。

1、深度可分离卷积(DepthWise Convolution)

在这里插入图片描述

深度可分离卷积

  深度可分离卷积(DepthWise Convolution)是在标准卷积的基础上,提出来的一种新的卷积思路。对于不同的channel采取不同的卷积核进行卷积运算,将标准卷积分为两个卷积过程:Depthwise Convolution 和 Pointwise Convolution。

1.1 深度可分离卷积的过程

假设有 N ∗ H ∗ W ∗ C N*H*W*C NHWC的输入,同时有 k k k 3 ∗ 3 3*3 33的卷积。若设 p a d = 1 , s t r i d e = 1 pad=1,stride=1 pad=1,stride=1,那么标准卷积的输出为 N ∗ H ∗ W ∗ k N*H*W*k NHWk。同样的深度可分离卷积的最终输出也是 N ∗ H ∗ W ∗ k N*H*W*k NHWk,但是它是经过两步完成的,如下所示:

  • Depthwise Convolution:将输入数据分为 g r o u p = C group=C group=C组,然后每一株都用一个 3 ∗ 3 3*3 33的kernel做卷积运算。这样就会得到每一个channel的空间特征,其输出为 N ∗ H ∗ W ∗ C N*H*W*C NHWC
  • Pointwise Convolution:将Depthwise Convolution的输出作为Pointwise Convolution的输入数据,然后做 k k k个标准的 1 ∗ 1 1*1 11 卷积运算。这样就收集到了每个点的特征,其输出为 N ∗ H ∗ W ∗ k N*H*W*k NHWk

1.2 深度可分离卷积的优点

  1. 参数量降低,假设输入通道为3,要求输出通道数为256,则:
    - 标准卷积: 3 ∗ 3 ∗ 3 ∗ 256 = 6912 3*3*3*256=6912 333256=6912
    - 深度可分离卷积: 3 ∗ 3 ∗ 3 + 3 ∗ 1 ∗ 1 ∗ 256 = 795 3*3*3+3*1*1*256=795 333+311256=795

  2. 乘法运算次数降低;
    - 标准卷积: H ∗ W ∗ C ∗ k ∗ 3 ∗ 3 H*W*C*k*3*3 HWCk33
    - 标准卷积: H ∗ W ∗ C ∗ 3 ∗ 3 + H ∗ W ∗ C ∗ k H*W*C*3*3 + H*W*C*k HWC33+HWCk
    它们的计算次数比 S C D w + P w = H ∗ W ∗ C ∗ k ∗ 3 ∗ 3 H ∗ W ∗ C ∗ 3 ∗ 3 + H ∗ W ∗ C ∗ k = k ∗ 3 ∗ 3 k + 3 ∗ 3 \frac {SC}{Dw+Pw}=\frac {H*W*C*k*3*3}{H*W*C*3*3 + H*W*C*k}=\frac{k*3*3}{k + 3*3} Dw+PwSC=HWC33+HWCkHWCk33=k+33k33

  3. 在参数量和计算次数降低的同时,在做深度可分离卷积计算的时耗上会有所降低;

  4. 深度可分离卷积是先考虑区域,再考虑通道的,实现了通道区域分离。

2、组卷积(Group convolution)

  组卷积,是最早在AlexNet中出现,由于当时的硬件资源有限,训练AlexNet时卷积操作不能全部放在同一个GPU处理,因此作者把feature maps分给多个GPU分别进行处理,最后把多个GPU的结果进行融合。

2.1 分组卷积特性

在这里插入图片描述

标准卷积

在这里插入图片描述

组卷积

  上两幅图分别代表的是不同的卷积方式,第一张代表的是标准卷积,第二张代表的组卷积。假设两种卷积方式的输入均为 H ∗ W ∗ c i H*W*c_i HWci;那么分析如下:

  • 标准卷积:若卷积核为 h i ∗ w i ∗ c 1 h_i*w_i*c_1 hiwic1,输出的特征图尺寸为 H ∗ W ∗ c 2 H*W*c_2 HWc2,那么标准卷积的参数量为 H ∗ W ∗ c 1 ∗ c 2 H*W*c_1*c_2 HWc1c2
  • 组卷积:假设将feature map按照通道分为g组,则每组输入feature map为 H ∗ W ∗ ( c 1 g ) H * W * (\frac {c_1}{g}) HW(gc1),则对应的卷积核为 h 1 ∗ w 1 ∗ ( c 1 g ) h_1 * w_1 * (\frac {c_1}{g}) h1w1(gc1),每组输出的尺寸为 H ∗ W ∗ ( c 2 g ) H * W * (\frac {c_2}{g}) HW(gc2),然后将每组输出的feature map进行拼接,将得到最终输出 H ∗ W ∗ c 2 H*W*c_2 HWc2,它的参数量为: h 1 ∗ w 1 ∗ ( c 1 g ) ∗ ( c 2 g ) = h 1 ∗ w 1 ∗ c 1 ∗ c 2 ∗ ( 1 g ) h_1 * w_1 * (\frac {c_1}{g})*(\frac {c_2}{g}) = h_1 * w_1 * c_1 * c_2 * (\frac{1}{g}) h1w1(gc1)(gc2)=h1w1c1c2(g1)
    总结:通过对比上文计算出标准卷积和组卷积的参数数量,可以得知,组卷积的参数数量是吧标准卷积的 1 g \frac{1}{g} g1

2.2 组卷积具体的例子

  从一个具体的例子来看,Group conv本身就极大地减少了参数。比如当输入通道为256,输出通道也为256,kernel size为3×3,标准卷积的参数为256×3×3×256。做组卷积时,若group为8,每个group的input channel和output channel均为32,参数为8×32×3×3×32,是原来的八分之一。而组卷积最后将每一组输出feature maps进行拼接,得到最终输出。
  Alex认为组卷积能够增加 filter之间的对角相关性,而且能够减少训练参数,不容易过拟合,这类似于正则的效果。

3、扩展卷积(Dilated Convolution)

3.1 概念

  扩展卷积(Dilated Convolution)又名又名空洞卷积(atrous convolutions,是在ICLR 2016提出的,且是针对图像语义分割问题中下采样会降低图像分辨率、丢失信息而提出的一种卷积思路。它的特点是在不增加参数和模型复杂度的条件下,可以指数倍的扩大视觉野(每一个输出是由视觉野大小的输入所决定的)。相比与原来的标准卷积,扩展卷积(Dilated Convolution)多了一个超参数(hyper-parameter),及扩展率(dilation rate),指的是kernel各点在之间的间隔数量(通常默认为1)。
  从下图中可以看出这一效果。蓝色的矩形表示视觉野。红色的小点表示kernel。在图a中,kernel是33,视觉野是33,dilated=1;在图b中,kernel是33,但是视觉野是77,dilated=2;在图c中,kernel是33,但是视觉野是1515,dilated=4. 可以看出在dilated(扩展系数)扩大时,视觉野同样扩大。
在这里插入图片描述

3.2 动态过程

  在二维图像上直观地感受一下扩张卷积的过程:
在这里插入图片描述

  上图是一个扩张率为2的3×3卷积核,感受野与5×5的卷积核相同,而且仅需要9个参数。你可以把它想象成一个5×5的卷积核,每隔一行或一列删除一行或一列。
  在相同的计算条件下,空洞卷积提供了更大的感受野。空洞卷积经常用在实时图像分割中。当网络层需要较大的感受野,但计算资源有限而无法提高卷积核数量或大小时,可以考虑空洞卷积。

4、反卷积(Deconvolution)

  反卷积(Deconvolution)又名转置卷积(transposed Convolutions)或是分数步长卷积(fractially straced convolutions)。反卷积的概念第一次出现是Zeiler在2010年发表的论文Deconvolutional networks中。随着反卷积在神经网络可视化上的成功应用,其应用场景越来越多,例如:场景分割、生成模型等。

4.1 卷积和反卷积的关系

  卷积的前向传播过程是反卷积的反向传播过程,卷积的反向传播过程是反卷积的前向传播过程。因为卷积的前向反向分别乘 C C C C T C^T CT,而反卷积的前向反向分别乘 C T C^T CT ( C T ) T (C^T)^T (CT)T;故卷积和反卷积的前向和反向传播正好交换过来。

4.2 转置卷积的动态图

在这里插入图片描述

  △卷积核为3×3、步幅为2和无边界扩充的二维转置卷积
需要注意的是,转置前后padding,stride仍然是卷积过程指定的数值,不会改变。

  例子:由于上面只是理论的说明了转置卷积的目的,而并没有说明如何由卷积之后的输出重建输入。下面我们通过一个例子来说明感受下。
  比如有输入数据:3×3,Reshape之后,为A :1×9,B(可以理解为滤波器):9×4(Toeplitz matrix) 那么AB=C:1×4;Reshape C=2×2。所以,通过B 卷积,我们从输入数据由shape=3×3变成了shape=2×2。反过来。当我们把卷积的结果拿来做输入,此时A:2×2,reshape之后为1×4,B的转置为4×9,那么AB=C=1×9,注意此时求得的C,我们就认为它是卷积之前的输入了,虽然存在偏差。然后reshape为3×3。所以,通过B的转置 - “反卷积”,我们从卷积结果shape=2×2得到了shape=3×3,重建了分辨率。
  也就是输入feature map A=[3,3]经过了卷积B=[2,2] 输出为 [2,2] ,其中padding=0,stride=1,反卷积(转置卷积)则是输入feature map A=[2,2],经过了反卷积滤波B=[2,2].输出为[3,3]。其中padding=0,stride=1不变。那么[2,2]的卷积核(滤波器)是怎么转化为[4,9]或者[9,4]的呢?通过Toeplitz matrix。

参考文献

卷积神经网络四种卷积类型
反卷积
卷积原理: 几种常用的卷积(标准卷积、深度卷积、组卷积、扩展卷积、反卷积)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值