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

六月 北京 | 高性能计算之GPU CUDA培训

6月22-24日三天密集式学习  快速带你入门 阅读全文 >


正文共2029个字,13张图,预计阅读时间13分钟。


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


  • 卷积计算过程(单 / 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 的计算公式为:



参考资料


1、A guide to convolution arithmetic for deep learning(https://arxiv.org/abs/1603.07285)


2、如何理解深度学习中的转置卷积(https://www.zhihu.com/question/43609045)


3、如何理解空洞卷积(https://www.zhihu.com/question/54149221/answer/192025860)


4、卷积网络如何应用在彩色图像上(https://www.zhihu.com/question/28832761)


原文链接:https://www.jianshu.com/u/74b632e3297c


查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org


请关注人工智能LeadAI公众号,查看更多专业文章

大家都在看

LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值