目录

一、转置卷积的背景

二、转置卷积的应用

三、转置卷积的区别

四、转置卷积的推导

五、转置卷积的输出

5.1 stride = 1

5.2 stride > 1 ☆

六、小结


一、转置卷积的背景

通常,对图像进行多次卷积运算后,特征图的尺寸会不断缩小。而对于某些特定任务 (如 图像分割 和 图像生成 等),需将图像恢复到原尺寸再操作。这个将图像由小分辨率映射到大分辨率的尺寸恢复操作,叫做 上采样 (Upsample),如下图所示:

图1 上采样示例

上采样方法有很多,详见《【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值_闻韶-CSDN博客》。然而,这些上采样方法都是基于人们的先验经验来设计的,在很多场景中效果并不理想 (如 规则固定、不可学习)。因此,我们希望神经网络自己学习如何更好地插值,即接下来要介绍的 转置卷积


二、转置卷积的应用

曾经,转置卷积也被称为 反卷积 (Deconvolution)。与传统的上采样方法相比,转置卷积的上采样方式并非预设的插值方法,而是同标准卷积一样,具有可学习的参数,可通过网络学习来获取最优的上采样方式

转置卷积在某些特定领域具有广泛应用,比如:

  • 在 DCGAN[1],生成器将随机值转变为一个全尺寸图片,此时需用到转置卷积。
  • 在语义分割中,会在编码器中用卷积层提取特征,然后在解码器中恢复原先尺寸,从而对原图中的每个像素分类。该过程同样需用转置卷积。经典方法有 FCN[2] 和 U-net[3]。
  • CNN 可视化[4]:通过转置卷积将 CNN 的特征图还原到像素空间,以观察特定特征图对哪些模式的图像敏感。

三、转置卷积的区别

标准卷积的运算操作 其实是对卷积核中的元素 与输入矩阵上对应位置的元素 进行逐像素的乘积并求和。然后,卷积核在输入矩阵上以步长为单位进行滑动,直到遍历完输入矩阵的所有位置。

假设,输入是一个 4×4 矩阵,使用 3×3 的标准卷积进行计算,同时令 padding=0,stride=1。最终输出结果应是一个 2×2 矩阵,如图 2 所示:

图2 标准卷积示例

在上例中,输入矩阵右上角 3×3 范围的值 (黄色 2 3 4) 会影响 输出矩阵右上角的值 (黄色 27),这其实也对应了标准卷积中感受野的概念。所以,可以说 3×3 标准卷积核 建立了 输入矩阵中 9 个值输出矩阵中 1 个值 的映射关系。

综上所述,我们也就可以认为标准卷积操作实际上就是建立了一个 多对一的映射关系

对转置卷积而言,我们实际上是想建立一个逆向操作,即 一对多的映射关系。对于上例,我们想要建立的其实是输出矩阵中的 1 个值与输入矩阵中的 9 个值的关系,如图 3 所示:

图3 卷积逆向运算示例

当然,从信息论的角度上看,常规卷积操作是不可逆的,所以转置卷积并不是通过输出矩阵和卷积核计算原始输入矩阵,而是计算得到保持了相对位置关系的矩阵


四、转置卷积的推导

定义一个 4×4 输入矩阵 input

再定义一个 3×3 标准卷积核 kernel

设 步长 stride=1、填充 padding=0,则按 "valid" 卷积模式,可得 2×2 输出矩阵 output

这里,换一个表达方式,将输入矩阵 input 和输出矩阵 output 展开成 16×1 列向量 X4×1 列向量 Y,可分别表示为:

接着,再用矩阵运算来描述标准卷积运算,设有 新卷积核矩阵 C

经推导 (卷积运算关系),可得 4×16 稀疏矩阵 C

以下,用图 4 展示矩阵运算过程:

图4 标准卷积矩阵运算示例

而转置卷积其实就是要对这个过程进行逆运算,即 通过 C 和 Y 得到 X

此时,即为新的 16×4 稀疏矩阵。以下通过图 5 展示转置后的卷积矩阵运算。此处,用于转置卷积的权重矩阵  不一定来自于原卷积矩阵  (通常不会如此恰巧),但其形状和原卷积矩阵  的转置相同。

图5 转置后卷积矩阵运算示例

最后,将 16×1 的输出结果重新排序,即可通过 2×2 输入矩阵得到 4×4 输出矩阵。


五、转置卷积的输出

5.1 stride = 1

同样,使用上文中的 3×3 卷积核矩阵 C

输出矩阵 output 仍为:

将输出矩阵展开为 列向量 Y

带入到上文中的转置卷积计算公式,则转置卷积的计算结果为:

这其实等价于 先填充 padding=2 的输入矩阵 input

然后,转置标准卷积核 kernel

最后,在 填零的输入矩阵 input 上使用 经转置的标准卷积核 kernel 执行 标准卷积运算,如图 6 所示:

图6  s=1 的转置卷积运算示例 (步长 s'=1)

更一般地,对于卷积核尺寸 kernel size = ,步长 stride =  = 1,填充 padding =  = 0 的转置卷积,其 等价的标准卷积 在原尺寸为 的输入矩阵上进行运算,输出特征图的尺寸 为:

同时,等价的标准卷积的的输入矩阵 input 在卷积运算前,需先进行 padding' =  的填充,得到尺寸 

因此,实际上原计算公式为 (等价的标准卷积的步长 ):


5.2 stride > 1 ☆

在实际中,我们大多数时候会使用 stride>1 的转置卷积,从而获得较大的上采样倍率。

以下,令输入尺寸为 5×5,标准卷积核同上  kernel size = = 3,步长  stride =  = 2,填充  padding =  = 0,标准卷积运算后,输出矩阵尺寸为 2×2

此处,转换后的稀疏矩阵尺寸变为 25×4,由于矩阵太大这里不展开进行罗列。最终转置卷积的结果为:

此时,等价于 输入矩阵同时添加了 空洞 和 填充,再由仅转置的标准卷积核进行运算,过程如图 7 所示:

图7 s=2 时,转置卷积运算示例 (步长 s'=1)

更一般地,对于卷积核尺寸 kernel size = ,步长 stride =  > 1,填充 padding =  = 0 的转置卷积,其 等价的标准卷积 在原尺寸为 的输入矩阵上进行运算,输出特征图的尺寸 为:

同时,等价的标准卷积的输入矩阵 input 在卷积运算前,需先进行 padding' =  的填充;然后,相邻元素间的空洞数为 ,共有  组空洞需插入;从而,实际尺寸为 

因此,实际上原计算公式为 (等价的标准卷积的步长 ):

可见,通过控制步长 stride =  的大小可以控制上采样的倍率,而该参数类比于膨胀/空洞卷积的 膨胀率/空洞数


六、小结

注意:矩阵中的实际权值不一定来自原始卷积矩阵。重要的是权重的排布是由卷积矩阵的转置得来的。转置卷积运算与普通卷积形成相同的连通性,但方向是反向的。

我们可以用转置卷积来上采样,而 转置卷积的权值是可学习的,所以无需一个预定义的插值方法。

尽管它被称为转置卷积,但这并不意味着我们取某个已有的卷积矩阵并使用转置后的版本。重点是,与标准卷积矩阵 (一对多关联而不是多对一关联) 相比,输入和输出之间的关联是以反向的方式处理的

因此,转置卷积不是卷积,但可以用卷积来模拟转置卷积通过在输入矩阵的值间插入零值 (以及周围填零) 上采样输入矩阵,然后进行常规卷积 就会产生 与转置卷积相同的效果。你可能会发现一些文章用这种方式解释了转置卷积。但是,由于需要在常规卷积前对输入进行上采样,所以效率较低。

注意:转置卷积会导致生成图像中出现 网格/棋盘效应 (checkerboard artifacts),因此后续也存在许多针对该问题的改进工作。


参考资料:

听六小桨讲AI | 第5期:卷积的变体之转置卷积

https://towardsdatascience.com/up-sampling-with-transposed-convolution-9ae4f2df52d0

【机器学习】详解 转置卷积 (Transpose Convolution)相关推荐

  1. 转置卷积transpose convolution

    参考: A guide to convolution arithmetic for deep learning.(Vincent Dumoulin, Francesco Visin).[https:/ ...

  2. group convolution (分组卷积)的计算量详解、卷积计算量特征图大小,池化特征图大小、深度通道deep-wise 卷积

    group convolution (分组卷积)的计算量详解.卷积计算量特征图大小,池化特征图大小.深度通道deep-wise 卷积 提示:最近忙着各种提前批的笔试面试,所以没太多空刷题了都,先复盘一 ...

  3. 转置卷积Transposed Convolution

    转置卷积Transposed Convolution 我们为卷积神经网络引入的层,包括卷积层和池层,通常会减小输入的宽度和高度,或者保持不变.然而,语义分割和生成对抗网络等应用程序需要预测每个像素的值 ...

  4. 二分类最优阈值确定_机器学习 | 详解GBDT在分类场景中的应用原理与公式推导...

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...

  5. 机器学习--详解基于梯度下降的Logistic回归算法原理

    先给出Logistic回归的sigmod函数数学表达式: 很简单的表达式,再看看它的性质,当时,,因此 当时,,因此 Logistic回归之所以称为Logistic是因为只有两个状态即0和1,这也是数 ...

  6. 强的离谱, Transformer 模型与联邦机器学习详解!

    Transformer 作为一种基于注意力的编码器 - 解码器架构,不仅彻底改变了自然语言处理(NLP)领域,还在计算机视觉(CV)领域做出了一些开创性的工作.与卷积神经网络(CNN)相比,视觉 Tr ...

  7. 语义分割之FCN网络详解 全卷积网络

    1. FCN网络结构图 原论文链接:https://paperswithcode.com/paper/fully-convolutional-networks-for-semantic 参考B站视频: ...

  8. 一文详解各种卷积操作

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 文章导读 卷积是深度学习中的重要组成部分,在日常搭建神经网络的过程 ...

  9. 详解numpy中transpose()函数

    今天在网上搜寻了许多博客,始终没有真正理解numpy中的transpose()函数, transpose 的原理其实是根据维度(shape)索引决定的,举个栗子: x = np.arange(4).r ...

最新文章

  1. java连接mongodb_java连接mongodb源码解读
  2. Scala学习 -- 基础语法
  3. 第一章:1.2.1系统建模
  4. OpenCV isContinuous()连续存储的问题
  5. java中并不是任意多个接口都可以实现多实现
  6. 浅谈javascript函数劫持
  7. Oracle NetSuite:异军突起的云原生ERP
  8. 通信原理实践(五)——2PSK 与2DPSK 通信系统
  9. 梯度离散_使用策略梯度同时进行连续/离散超参数调整
  10. 沙普利算法java实现_Java实现婚姻稳定匹配Gale- Shapley算法
  11. MySQL 排序规则
  12. Apache Airflow调度中心发布任务步骤
  13. python pymysql multiprocessing.dummy多线程 读写数据库报错
  14. 如何查看电脑本地IP+端口号
  15. OSM数据下载及两种格式转换方法(shp等格式)
  16. 无法访问/opt/module/spark/jars/spa
  17. 研究日记:虚拟歌姬自动调教之歌曲音频切割的问题
  18. Linux关于网络通信的命令
  19. uniapp绘制分享海报
  20. 【MySQL】事务管理

热门文章

  1. 什么是ERP?可能是全网最权威的解读
  2. 房卡棋牌俱乐部功能开发(一)
  3. 004-python-列表、元组、字典
  4. 身在异国的你,心目中是否有张“不可取代名单”?
  5. 如何利用积分系统提升社群活跃度与留存率?
  6. 内存分析工具MAT分析内存溢出问题
  7. python语言由psf组织所有、这是一个商业组织_智慧树知道营销管理章节测验答案...
  8. Aligenie语音开发平台(天猫精灵)的对接记录
  9. 2.4G无线音频模块方案测评之RODE录音麦
  10. AS400 DDM 概述