卷积,特征图,转置卷积和空洞卷积的计算细节

作者: 曾梓华 | 来源:发表于2018-05-21 23:13 被阅读17次

最近在做姿态估计的项目,在定制和实现卷积网络的时候发现自己对里面的一些计算细节还不够了解,所以整理了该文章,内容如下:

  • 卷积计算过程(单 / RGB 多通道)
  • 特征图大小计算公式
  • 转置卷积(反卷积)的计算过程
  • 空洞卷积的计算过程

该文章只单纯的讲解计算的细节,关于对应的原理和证明可以戳尾部的参考文献。


卷积计算过程(单 / RGB 多通道)


假设输入层的大小为 5 x 5,局部感受野(或称卷积核)的大小为 3 x 3,那么输出层一个神经元所对应的计算过程(下文简称「卷积计算过程」)如下:

卷积计算过程

上述计算对应的公式如下:

其中 I 表示输入,W 表示卷积对应的权重。

每个卷积核对应的权重 W 在计算卷积过程中,值是固定的,我们称为权重共享

然后,将值输入到激活函数 σ 中获得输出值。

如果将输入层想像成黑板,局部感受野就像是黑板擦,他会从左往右,从上至下的滑动,每次滑动 1 个步长(Stride)并且每次滑动都重复上述的计算过程,我们就可以得到输出的特征图(feature map),如下图所示:

卷积过程,蓝色表示输入,绿色表示输出

有时候,按照规定步数滑动到黑板边缘时,黑板擦一部分会露出在黑板外,这个时候就 不能够顺利执行卷积过程了,解决的方法是填充,常见的有两种填充(Padding)方法,第一种方法为 Valid,第二种方法为 Same,如下图所示:

Valid 填充方法

Valid 是丢弃的方法,比如上述的 input_width = 7,kernel_width = 5,stride = 3,只允许滑动 1 次,多余的元素则丢掉。

image.png

Same 是补全的方法,对于上述的情况,允许滑动 3 次,但是需要补 4 个元素,左边补 2 个 0,右边补 2 个 0,这种方法则不会抛弃边缘的信息,关于如何计算填充数量会在下小节中讲到。

在实际应用中,输入的都为彩色图像(RGB 三通道),也就是说输入的维度是 [图片数,图片高,图片宽,通道数],这个时候,执行卷积的过程如下:

RGB 多通道卷积过程

特征图大小的计算公式


我们在设计和调整网络结构的时候,还需要快速知道调整了卷积核后,输出特征图的大小,假定:

  • 输入图片 i(只考虑输入宽高相等)
  • 卷积核大小 f
  • 步长 s
  • 填充的像素数 p

那么输出的特征图大小 o 的计算公式则如下:

o 值的大小与 i,f,p,s 这四个变量相关,也和填充的方式有关。

  • 当填充方式为 VALID 时,p 值等于 0,代入相应的 i,f,p,s 就可以相应的计算出 o 值了。
  • 当填充方式为 SAME 时,步长 s 为 1 时,输出的 o == i,我们则可以计算出相应的 P 值为 p = (f-1) / 2

转置卷积(反卷积,逆卷积)的计算过程

在理解转置卷积(Transposed Convolution)计算过程之前,先来看一下如何用矩阵相乘的方法代替传统的卷积。

假设一个卷积操作,它的输入是 4x4,卷积核大小是 3x3,步长为 1x1,填充方式为 Valid 的情况下,输出则为 2x2,如下图所示:

我们将其从左往右,从上往下以的方式展开,

  • 输入矩阵可以展开成维数为 [16, 1] 的矩阵,记作 x
  • 输出矩阵可以展开成维数为 [4, 1] 的矩阵,记作 y
  • 卷积核可以表示为 [4, 16] 的矩阵,记作 C,其中非 0 的值表示卷积对应的第 i 行 j 列的权重。
  • 所以卷积可以用 y = C * x ([4, 1] = [4, 16] * [16, 1])来表示
矩阵 C

那么,转置卷积就可以理解为是

空洞卷积的计算过程

空洞卷积(Dilated convolutions)在卷积的时候,会在卷积核元素之间塞入空格,如下图所示:

空洞卷积过程,蓝色表示输入,绿色表示输出

这里引入了一个新的超参数 d,(d - 1) 的值则为塞入的空格数,假定原来的卷积核大小为 k,那么塞入了 (d - 1) 个空格后的卷积核大小 n 为:

进而,假定输入空洞卷积的大小为 i,步长 为 s ,空洞卷积后特征图大小 o 的计算公式为:

参考资料

相关文章

  • 卷积,特征图,转置卷积和空洞卷积的计算细节

    最近在做姿态估计的项目,在定制和实现卷积网络的时候发现自己对里面的一些计算细节还不够了解,所以整理了该文章,内容如...

  • 深度可分离卷积、分组卷积、扩张卷积、转置卷积(反卷积)

    对深度可分离卷积、分组卷积、扩张卷积、转置卷积(反卷积)的理解 [深度学习]转置卷积(Transposed Con...

  • 反卷积(转 )

    转 卷积神经网络CNN(1)——图像卷积与反卷积(后卷积,转置卷积) 1. 图像卷积 卷积的时候需要对卷积核进行1...

  • 2020 经典卷积神经网络(1) VGG

    在卷积神经网中,我们通过调整不同尺寸的卷积核或不同 pattern 卷积核来读取一张图。通过卷积将空间上特征逐渐转...

  • 空洞卷积

    理解空洞卷积 标准卷积可以看做 r = 1 的空洞卷积,是空洞卷积的特殊形式。 标准卷积:以3*3为例,以下分辨率...

  • 转置卷积的理解

    转置卷积(Transposed convolution)用在什么地方? 转置卷积在图像的语义分割领域应用很广,如果...

  • Tensorflow快餐教程(9) - 卷积

    摘要:卷积的计算方法 卷积 卷积就是滑动中提取特征的过程 在数学中,卷积convolution是一种函数的定义。它...

  • TensorFlow从头迈步W6.2-卷积核

    多个卷积核的作用卷积核就是滤波器,经过卷积操作会得到不同的特征图。对不同的特征进行采样。

  • MachineLearning

    一、卷积&池化 卷积 卷积能抽取特征 多层卷积能抽取复杂特征 卷积神经网络每层的卷积核权重是由数据驱动学习得来,不...

  • 转置卷积

    (一)转置卷积 我们之前的卷积神经网络中的卷积不会增输入的高和宽,通常要么不变,要么减半。如果我们想要增大图像只能...

网友评论

    本文标题:卷积,特征图,转置卷积和空洞卷积的计算细节

    本文链接:https://www.haomeiwen.com/subject/uglcjftx.html