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


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

写在前面

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 definition

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

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

  • 2-D transposed convolutions ( N = 2 N=2 N=2)
  • square inputs ( i 1 = i 2 = i i_1=i_2=i i1=i2=i)
  • square kernel size ( k 1 = k 2 = k k_1=k_2=k k1=k2=k)
  • same strides along both axes ( s 1 = s 2 = s s_1=s_2=s s1=s2=s)
  • same zero padding along both axes ( p 1 = p 2 = p p_1=p_2=p p1=p2=p)
  • square outputs ( o 1 = o 2 = o o_1=o_2=o o1=o2=o)

若令 i = 4 i=4 i=4 s = 1 s=1 s=1 p = 0 p=0 p=0 k = 3 k=3 k=3,输出尺寸 o = 2 o=2 o=2,则convolution过程是将 4 × 4 4\times 4 4×4的map映射为 2 × 2 2\times 2 2×2的map,而transposed convolution过程则是将 2 × 2 2\times 2 2×2的map映射为 4 × 4 4\times 4 4×4的map,两者的kernel size均为3,如下图所示:

convolution vs transposed convolution

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

convolution过程

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

direct convolution

令卷积核 w = ( w 0 , 0 w 0 , 1 w 0 , 2 w 1 , 0 w 1 , 2 w 1 , 2 w 2 , 0 w 2 , 1 w 2 , 2 ) \mathbf{w} = \left(\begin{array}{ccc} {w_{0,0}} & {w_{0,1}} & {w_{0,2}} \\ {w_{1,0}} & {w_{1,2}} & {w_{1,2}} \\ {w_{2,0}} & {w_{2,1}} & {w_{2,2}} \end{array}\right) w=w0,0w1,0w2,0w0,1w1,2w2,1w0,2w1,2w2,2,为了便于理解,将卷积写成矩阵乘法形式,令 x \mathbf{x} x 4 × 4 4\times 4 4×4输入矩阵以行优先方式拉成的长度为16的向量, y \mathbf{y} y 2 × 2 2\times 2 2×2输出矩阵以同样方式拉成的长度为4的向量,同时将 w \mathbf{w} w表示成 4 × 16 4\times 16 4

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值