前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文搞懂 deconvolution、transposed convolution、sub-­pixel or fractional convolution

一文搞懂 deconvolution、transposed convolution、sub-­pixel or fractional convolution

作者头像
李拜六不开鑫
修改2020-04-26 16:13:37
1.6K0
修改2020-04-26 16:13:37
举报
文章被收录于专栏:本立2道生本立2道生

目录

博客:blog.shinelee.me | 博客园 | CSDN

写在前面

deconvolution in segmentation
deconvolution in segmentation

开篇先上图,图为deconvolution在像素级语义分割中的一种应用,直观感觉deconvolution是一个upsampling的过程,像是convolution的对称过程。

本文将深入deconvolution的细节,并通过如下方式展开:

  • 先回答 什么是deconvolution?为什么会有transposed convolutiononsubpixel or fractional convolution这样的名字?
  • 再介绍 各种情形下 transposed convolution是如何进行的,并提供一种统一的计算方法

什么是deconvolution

首先要明确的是,deconvolution并不是个好名字,因为它存在歧义:

  1. deconvolution最初被定义为“inverse of convolution”或者“inverse filter”或者“解卷积”,是指消除先前滤波作用的方法。比如,我们认为原始图像是清晰的,但是通过透镜观测到的图像却变得模糊,如果假设透镜的作用相当于以某个kernel作用在原始图像上,由此导致图像变得模糊,那么根据模糊的图像估计这个kernel或者根据模糊图像恢复原始清晰图像的过程就叫deconvolution
  2. 后来论文Adaptive Deconvolutional Networks for Mid and High Level Feature LearningVisualizing and Understanding Convolutional Networks又重新定义了deconvolution,实际上与transposed convolution、sub-pixel or fractional convolution指代相同。transposed convolution是一个更好的名字,sub-pixel or fractional convolution可以看成是transposed convolution的一个特例。对一个常规的卷积层而言,前向传播时是convolution,将input feature map映射为output feature map,反向传播时则是transposed convolution,根据output feature map的梯度计算出input feature map的梯度,梯度图的尺寸与feature map的尺寸相同。

本文谈论的是deconvolution的第2个含义,后面统一使用transposed convolution这个名字。

什么是transposed convolution?A guide to convolution arithmetic for deep learning中有这样一段话:

看完好像仍不是很直观,transposed convolution到底对应的是什么操作?等到文章的后面,这个问题的答案会逐渐清晰起来。

下面先以1个例子来对比convolution过程和transposed convolution过程,采用与A guide to convolution arithmetic for deep learning相同的设置:

可以看到,convolution过程zero padding的数量与超参数(p)一致,但是transposed convolution实际的zero padding的数量为2,为什么会这样?是为了保持连接方式相同,下面具体看一下。

convolution过程

先看convolution过程,连接方式 如下图所示,绿色表示输出,蓝色表示输入,每个绿色块具与9个蓝色块连接。

\left(\begin{array}{cccccccccccccccc}{w_{0,0}} & {w_{0,1}} & {w_{0,2}} & {0} & {w_{1,0}} & {w_{1,1}} & {w_{1,2}} & {0} & {w_{2,0}} & {w_{2,1}} & {w_{2,2}} & {0} & {0} & {0} & {0} & {0} \\ {0} & {w_{0,0}} & {w_{0,1}} & {w_{0,2}} & {0} & {w_{1,0}} & {w_{1,1}} & {w_{1,2}} & {0} & {w_{2,0}} & {w_{2,1}} & {w_{2,2}} & {0} & {0} & {0} & {0} \\ {0} & {0} & {0} & {0} & {w_{0,0}} & {w_{0,1}} & {w_{0,2}} & {0} & {w_{1,0}} & {w_{1,1}} & {w_{1,2}} & {0} & {w_{2,0}} & {w_{2,1}} & {w_{2,2}} & {0} \\ {0} & {0} & {0} & {0} & {0} & {w_{0,0}} & {w_{0,1}} & {w_{0,2}} & {0} & {w_{1,0}} & {w_{1,1}} & {w_{1,2}} & {0} & {w_{2,0}} & {w_{2,1}} & {w_{2,2}}\end{array}\right)

需要注意的是,transposed convolution的kernel与onvolution的kernel可以有关,也可以无关,需要看应用在什么场景,

  • 特征可视化训练阶段的反向传播中应用的transposed convolution,并不是作为一个真正的layer存在于网络中,其kernel与convolution共享(但要经过中心对称后再卷积,相当于上面的CT。
  • 图像分割生成模型decoder中使用的transposed convolution,是网络中真实的layer,其kernel经初始化后需要通过学习获得(所以卷积核也就无所谓中心对称不对称了)。
  • 前向传播为convolution/transposed convolution,则反向传播为transposed convolution/convolution。

在上面举的简化的例子中,我们可以通过分析得知transposed convolution该如何进行,但是,对于更一般情况应该怎么做?

transposed convolution的计算

对于一般情况,只需把握一个宗旨:transposed convolution将output size恢复为input size且保持连接方式相同

至此,再看transposed convolution的各种情况,就很容易推算了,更多例子可参见A guide to convolution arithmetic for deep learning

参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-09-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 什么是deconvolution
    • convolution过程
    • transposed convolution的计算
    • 参考
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档