卷积与反卷积(转置卷积)关系的公式推导 及其各自的形式
1. 卷积与反卷积(转置卷积)的关系推导:
2. Transposed Convolution, Fractionally Strided Convolution or Deconvolution
https://buptldy.github.io/2016/10/29/2016-10-29-deconv/
Posted on 2016-10-29
反卷积(Deconvolution)的概念第一次出现是Zeiler在2010年发表的论文Deconvolutional networks中,但是并没有指定反卷积这个名字,反卷积这个术语正式的使用是在其之后的工作中(Adaptive deconvolutional networks for mid and high level feature learning)。随着反卷积在神经网络可视化上的成功应用,其被越来越多的工作所采纳比如:场景分割、生成模型等。其中反卷积(Deconvolution)也有很多其他的叫法,比如:Transposed Convolution,Fractional Strided Convolution等等。
这篇文章的目的主要有两方面:
1. 解释卷积层和反卷积层之间的关系;
2. 弄清楚反卷积层输入特征大小和输出特征大小之间的关系。
下图表示参数为 (i=5,k=3,s=2,p=1)(i=5,k=3,s=2,p=1) 的卷积计算过程,从计算结果可以看出输出特征的尺寸为 (o1=o2=o=3)(o1=o2=o=3)。
下图表示参数为 (i=6,k=3,s=2,p=1)(i=6,k=3,s=2,p=1) 的卷积计算过程,从计算结果可以看出输出特征的尺寸为 (o1=o2=o=3)(o1=o2=o=3)。
从上述两个例子我们可以总结出卷积层输入特征与输出特征尺寸和卷积核参数的关系为:
反卷积层
在介绍反卷积之前,我们先来看看卷积运算和矩阵运算之间的关系。
卷积和矩阵相乘
考虑如下一个简单的卷积层运算,其参数为 (i=4,k=3,s=1,p=0)(i=4,k=3,s=1,p=0),输出 o=2o=2。
对于上述卷积运算,我们把上图所示的3×3卷积核展成一个如下所示的[4,16]的稀疏矩阵 CC, 其中非0元素 wi,jwi,j 表示卷积核的第 ii 行和第 jj 列。
通过上述的分析,我们已经知道卷积层的前向操作可以表示为和矩阵CC相乘,那么 我们很容易得到卷积层的反向传播就是和CC的转置相乘。
反卷积和卷积的关系
- 二维的离散卷积(N=2N=2)
- 方形的特征输入(i′1=i′2=i′i1′=i2′=i′)
- 方形的卷积核尺寸(k′1=k′2=k′k1′=k2′=k′)
- 每个维度相同的步长(s′1=s′2=s′s1′=s2′=s′)
- 每个维度相同的padding (p′1=p′2=p′p1′=p2′=p′)
o′=i′−k′+2p′+1=i′+(k−1)−2po′=i′−k′+2p′+1=i′+(k−1)−2p
Fractionally Strided Convolution
o′=s(i′−1)+k−2po′=s(i′−1)+k−2p
参考
Is the deconvolution layer the same as a convolutional layer?
卷积与反卷积(转置卷积)关系的公式推导 及其各自的形式相关推荐
- [十三]深度学习Pytorch-卷积层(1D/2D/3D卷积、卷积nn.Conv2d、转置卷积nn.ConvTranspose)
0. 往期内容 [一]深度学习Pytorch-张量定义与张量创建 [二]深度学习Pytorch-张量的操作:拼接.切分.索引和变换 [三]深度学习Pytorch-张量数学运算 [四]深度学习Pytor ...
- FCN全卷积网络和Deconv转置卷积原理描述
直到RPN生成Roi的时候,MaskRcnn和FasterRcnn的结构都是一样的. 然后RPN会过滤掉一部分,剩下的Roi分成前景和背景(2分类),同时RPN会对Roi做一个初步的box回归. 接下 ...
- 反卷积(Deconvolution)/ 转置卷积(Transpose Convolution)
提出于FCN. 反卷积和卷积类似,都是相乘相加的运算.只不过后者是多对一,前者是一对多.而反卷积的前向和后向传播,只用颠倒卷积的前后向传播即可.所以无论优化还是后向传播算法都是没有问题.图解如下:
- PyTorch框架学习十——基础网络层(卷积、转置卷积、池化、反池化、线性、激活函数)
PyTorch框架学习十--基础网络层(卷积.转置卷积.池化.反池化.线性.激活函数) 一.卷积层 二.转置卷积层 三.池化层 1.最大池化nn.MaxPool2d 2.平均池化nn.AvgPool2 ...
- 对深度可分离卷积、分组卷积、扩张卷积、转置卷积(反卷积)的理解
参考: https://zhuanlan.zhihu.com/p/28749411 https://zhuanlan.zhihu.com/p/28186857 https://blog.yani.io ...
- PyTorch 入坑八:卷积与转置卷积
卷积 操作 略 输入输出尺寸变化 略 PyTorch实现 nn.Conv2d(in_channels,out_channels,kernel_size,stride=1.padding=0,dilat ...
- 【机器学习】详解 转置卷积 (Transpose Convolution)
目录 一.转置卷积的背景 二.转置卷积的应用 三.转置卷积的区别 四.转置卷积的推导 五.转置卷积的输出 5.1 stride = 1 5.2 stride > 1 ☆ 六.小结 一.转置卷积的 ...
- cnn stride and padding_彻底搞懂CNN中的卷积和反卷积
前言 卷积和反卷积在CNN中经常被用到,想要彻底搞懂并不是那么容易.本文主要分三个部分来讲解卷积和反卷积,分别包括概念.工作过程.代码示例,其中代码实践部分主结合TensorFlow框架来进行实践.给 ...
- 转置卷积和膨胀卷积详细讲解
目录 转置卷积(Transposed Convolution) 作用 转置卷积的输出 转置卷积过程 转置卷积运算过程 pytorch中转置卷积对应参数 膨胀卷积(空洞卷积,Atrous convolu ...
最新文章
- Zotero科研文献管理 - 将PDF文件同步到Google Driver中,不同电脑无缝使用
- javascript 编码规范 用更合理的方式写 javascript
- cb-A10系统优化之(一):去除自启动软件
- 怪不得超市不让带宠物...
- 支付价格计算中精度问题之double,float
- 浅谈事理图谱认知:系统体系+领域收敛+人机协同+辅助范式
- StringUtils 的使用
- oracle存储sql片段引入_强大的跨数据库访问组件 UniDAC使用教程:注释和SQL函数...
- Java基础——Oracle(二)
- Linux 查看分区大小
- opengl 光线追踪_Vulkan的视频编解码支持将于2020年上半年加入,光线追踪也在路上...
- 如何注册、发布 CSDN博客
- Ubuntu常用命令及git常用命令
- 小白零基础搞unity手机跑酷游戏-01-GettingStarted
- 如何在Fedora 上dnf安装Node.js
- 三本 计算机专业,四川哪些三本大学的计算机专业最好?
- Qt编写安防视频监控系统13-视频存储
- .a文件和.lib文件的区别
- 进击的 Vulkan 移动开发(一)之今生前世
- 为什么程序员话少钱多死得早?-一位人生悲惨的程序员与你讲述其中原因
热门文章
- python 人像素描_谁说程序员不懂浪漫的,直接用 Python 给女朋友画张素描
- 洛谷 P2708 硬币翻转
- ajaxSubmit来上传文件
- 打开Flutter动画的另一种姿势——Flare
- 使用pydot 画CNN网络结构图
- MATLAB线形规划函数linprog、intlinprog与二次规划函数quadprog
- 算法导论------递归算法的时间复杂度求解
- PCL函数库摘要——3D点云特征描述与提取
- D2大会资源分享(解决了GitHub下载限速)
- go(gin框架)session底层使用redis实现(gorilla/sessions和gin-contrib/sessions)