1.5 简述转置卷积的主要思想以及应用场景

1.5 简述转置卷积的主要思想以及应用场景

普通的卷积主要思想

普通的卷积操作可以形式化为一个矩阵乘法运算,即y=Ax(1-12)

其中,x和y分别是卷积的输入和输出(展平成一维向量形式),维度分别为d⁽i⁾和d⁽⁰⁾;A是由卷积核、滑动步长决定的常对角矩阵,维度为其每一行对应着卷积核的一次滑动位置。以一维卷积为例,假设输入向量
x = [ a , b , c , d , e , f , g ] T x=[a,b,c,d,e,f,g]^T x=[a,b,c,d,e,f,g]T
卷积核为K=[x,y,z],卷积的滑动步长为2,则输出向量为

在这里插入图片描述

转置卷积主要思想:

反过来,记 A T A^T AT为矩阵A的转置,定义如下矩阵运算:

y^= A T A ^T AT x x x^(1-14)

其所对应的操作被称为转置卷积,x^ 和 y^ 分别是转置卷积的输入和输出,维度分别为d⁽⁰⁾和d(i)。

转置卷积也被称为反卷积(deconvolution),它可以看作是普通卷积的一个“对称”操作,这种“对称性”体现在以下两个方面。

  • 转置卷积能将普通卷积中输入到输出的尺寸变换逆反过来

    例如,式(1-12)中的普通卷积将特征图尺寸由d(1)变为d(1),而式(1-14)中的转置卷积则可以将特征图尺寸由d(0)复原为d(1)。这里需要注意的是,输入特征图经过普通卷积操作后再经过转置卷积,只是复原了形状,并不能复原具体的取值(因此将转置卷积称为反卷积并不是很合适)。

  • 根据矩阵运算的求导知识,在式(1-12)所示的普通卷积中,输出y对于输入x的导数为

  • 在这里插入图片描述

    而在式(1-14)所示的转置卷积中,输出y^ 对于输入x^ 的导数为
    在这里插入图片描述

    由此可以看出,转置卷积的信息正向传播与普通卷积的误差反向传播所用的矩阵相同,反之亦然

    以式(1-14)为例,我们可以写出转置卷积的具体计算公式:

    在这里插入图片描述

可以看到,等号的右侧实际上就是一个普通卷积对应的矩阵乘法。

因此,转置卷积本质上就是一个对输入数据进行适当变换(补零/上采样)的普通卷积操作

具体实现时,以二维卷积为例,一个卷积核尺寸为Kw×Kh,滑动步长为(Sw,Sh)、边界填充尺寸为(pw,ph)的普通卷积,其所对应的转置卷积可以按如下步骤来进行。

  1. 对输入特征图进行扩张(上采样):相邻的数据点之间,在水平方向上填充Sw-1个零,在垂直方向上填充Sn-1个零。

  2. 对输入特征图进行边界填充:左右两侧分别填充在这里插入图片描述个零列,上下两侧分别填充在这里插入图片描述个零行。

  3. 在变换后的输入特征图上做卷积核大小为、滑动步长为(1,1)的普通卷积操作。

    在上述步骤2中,转置卷积的边界填充尺寸(pw^, pn^)是根据与之对应的普通卷积的边界填充尺寸(pw,pn)来确定的,很多深度学习框架(如PyTorch)就是按照这个思路来设定转置卷积的边界填充尺寸。

    但在有些计算框架(如TensorFlow)中,做卷积时无法显式指定边界填充尺寸,只能选择一些预定义的填充模式(如padding=same或padding=valid),此时,转置卷积的边界填充尺寸是根据与之对应的普通卷积的边界填充模式来设定的。

    需要注意的是,当滑动步长大于1时,卷积的输出尺寸公式中含有向下取整操作,故而普通卷积层的输入尺寸与输出尺寸是多对一关系,此时转置卷积无法完全恢复之前普通卷积的输入尺寸,需要通过一个额外的参数来直接或间接地指定之前的输入尺寸,(如TensorFlow中的output_shape参数、PyTorch中的output_padding参数)。

应用场景:

普通卷积和转置卷积所处理的基本任务是不同的。前者主要用来做特征提取,倾向于压缩特征图尺寸

转置卷积主要用于对特征图进行扩张或上采样,代表性的应用场景如下。

  • 语义分割/实例分割等任务:由于需要提取输入图像的高层语义信息,网络的特征图尺寸一般会先缩小,进行聚合;此外,这类任务一般需要输出与原始图像大小一致的像素级分割结果,因而需要扩张前面得到的具有较高语义信息的特征图,这就用到了转置卷积。
  • 一些物体检测、关键点检测任务,需要输出与源图像大小一致的热图。
  • 图像的自编码器、变分自编码器、生成式对抗网络等。

参考文献:

《百面深度学习》 诸葛越 江云胜主编

出版社:人民邮电出版社(北京)

ISBN:978-7-115-53097-4

2020年7月第1版(2020年7月北京第二次印刷)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/520044.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经验分享:水牛社怎么做?

本人也就是通过他慢慢学习成长起来的。还是一个网友推荐的,现在他对我来说算是大佬了,已经单飞了,好久都没有联系了,呵呵,真是人往高处走,水往低处流啊。 做网赚会经常和一些网络小白聊天,聊着…

Qt 绘制中的视口(setViewport)和窗口(setWindow)

重点 : 1.绘制(QPainter)可以设置视口,视口下设置窗口,而绘制的构件是以窗口为坐标系进行绘画。 2.先根据绘图设备的物理坐标系的矩形位置,设置视图视口setViewport,然后在以视口为区域去设置…

银行数字化转型导师坚鹏:银行数字化转型案例研究

银行数字化转型案例研究 课程背景: 数字化背景下,很多银行存在以下问题: 不清楚银行科技金融数智化案例? 不清楚银行供应链金融数智化案例? 不清楚银行普惠金融数智化案例? 不清楚银行跨境金融数智…

技术直播--天翼云@openEuler创新项目分享

在2023年操作系统大会上,天翼云操作系统团队斩获CTinspector、CVE-ease、NestOS三项2023年度优秀项目奖。 自加入社区以来,天翼云团队在openEuler社区贡献不少项目。本次技术直播将介绍天翼云在openEuler社区贡献的几个重点项目的功能、应用场景和优化方…

代码随想录算法训练营第三十九天|动态规划|62.不同路径、63. 不同路径 II

62.不同路径 文章 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径&…

网络性能优化工具

网络优化是 IT 行业的一个重要方面,网络很复杂,管理员努力保持其平稳运行,然而,网络环境也是不可预测和动态的,任何未受监控的问题都可能像滚雪球一样变成中断。 优化网络性能需要引入: 新设备和应用程序…

安卓简单登录

注意 有的朋友不知道登录咋写,这里我就简单给出相应代码,用的本地存储,没用网络请求,有需要可以替换成想要的,废话不多上代码 登录 import androidx.appcompat.app.AppCompatActivity;import android.content.Context…

1. C++ 编译期多态与运行期多态

C 编译期多态与运行期多态 今日的C不再是个单纯的“带类的C”语言,它已经发展成为一个多种次语言所组成的语言集合,其中泛型编程与基于它的STL是C发展中最为出彩的那部分。在面向对象C编程中,多态是OO三大特性之一,这种多态称为运…

grid布局所有元素在同一行显示且等分列

目录 一、问题 二、实现方式 三、总结 tiips:如嫌繁琐,直接移步总结即可! 一、问题 1.grid布局可以通过 grid-template-columns来指定列的宽度。且可以通过repeat来指定重复的次数。但是现在的需求是:grid布局中元素的数量不确定&#…

leetCode刷题 4.寻找两个正序数组的中位数

目录 1. 思路 2. 解题方法 3. 复杂度 4. Code 题目: 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1: 输入&…

部署SpringBoot项目

方案一:纯手工部署 1,购买一台云服务器 这里我使用腾讯云,推荐Centos8/Centos7.6 2,安装springBoot项目所需要的环境 1,数据库单独安装在另一台服务器上,只需要修改IP地址即可 2,安装jdk yum…

微服务架构中实体类模块化设计与MyBatis-Plus注解浅析

引言 在微服务开发过程中,为了保证代码的整洁性和可维护性,我们通常会将VO(视图值对象)、DTO(数据传输对象)、DO(领域对象)等实体类独立组织成一个API模块。这样做的目的是实现代码…