【CV】卷积和逆卷积(转置卷积)详解

article/2025/9/12 6:53:55

【CV】卷积和逆卷积(转置卷积)详解

文章目录

  • 【CV】卷积和逆卷积(转置卷积)详解
    • 1. 卷积与转置卷积的关系
    • 2. 普通卷积
    • 3. 转置卷积
      • 3.1 形象化转置卷积过程
      • 3.2 转置卷积总结
    • 4. 转置卷积函数
      • 4.1 转置卷积函数详解
      • 4.2 一般与特殊
        • 4.2.1 一般反卷积的步骤
        • 4.2.2 卷积 (i+2p-k)/s 无法整除时
    • 5. 参考

1. 卷积与转置卷积的关系

  转置卷积又称反卷积,逆卷积。在主流的深度学习框架之中,如Tensorflow,Pytorch,Kreas中的函数名都是conv_transpose。
  举个例子,将一个4X4的输入通过3X3的卷积核核进行普通卷积后(无padding,stride=1),将得到2X2的输出。而转置卷积将一个2X2的输入通过同样的3X3的卷积核,将得到一个4X4的输出。
  这看起来像是普通卷积的逆过程。事实上,这两者没有任何关系,操作过程也是不可逆的。

2. 普通卷积

1

  但在实际计算中,并不是通过卷积核在输入上进行滑动计算,效率太低,而是将卷积核转换为等效矩阵,将输入转化为向量,通过输入向量核卷积核矩阵的相乘获得输出向量。输出的向量经过整形便可得到我们的二维输出特征。
  具体操作如下图所示,由于一个3X3的卷积核要在输入上不同位置卷积卷积4次,所以通过补0的方式,将卷积核分别置于一个4X4矩阵的四个角落,这样我们的输入可以直接和这四个4X4的矩阵进行卷积,而舍去了滑动操作。

2

  进一步我们将输入拉成长向量,四个4X4的卷积核也进行拼接,如下图:

3

  于是可以得到如下的结果,其实本身就是点积:

4

3. 转置卷积

  !!!重点思想!!!:我们将一个1X16的行向量乘以一个16X4的矩阵,得到一个1X4的行向量。那么反过来一个1X4的向量乘以一个4X16的矩阵不就是能得到一个1X16的行向量,这就是转置卷积的思想。

  一般卷积操作(这里只考虑最简单的无padding,stride=1的情况),都将输入的数据越卷越小,根据卷积核大小的不同,和步长的不同,输出尺寸变化也很大。但是有时候,我们需要输入一个小的特征,输出更大的尺寸的特征。比如,图像语义分割中,往往要求最终的输出的特征尺寸和原始的输入尺寸相同,但是在网络卷积核池化的过程中特征图的尺寸逐渐变小,这里转置卷积便能派上用场。在数学上,转置卷积的操作非常简单,把正常的卷积操作反过来即可。

5

  这里需要注意的是,这两个操作并不是可逆的,对于用一个卷积核,经过转置卷积操作后并不能恢复到原始的数值,只是保留了原始的形状。

3.1 形象化转置卷积过程

  可视化转置卷积,以上式的第一列为例,

6

  这里将输入还原为一个2X2的张量,新的卷积核由于左上角有非零值,可以计算得到右侧结果。进而对每一个列向量都可以做这样的变换,得到如下:

7

  结合整体,仿佛是有一个更大的卷积核在2X2的大小的输入上滑动,但是输入太小,每一次卷积只能对应卷积核的一部分:

8

  形象的描述:直接卷积是用一个小窗户看大世界,而转置卷积是用一个大窗户的一部分去看小世界。
  这里需要注意。我们定义的卷积是左上角为a,右下角为i,但是在可视化卷积的过程中需要将卷积核旋转180度 后再进行卷积。由于输入图像太小,我们按照卷积核的尺寸来进行补0操作,补0数量为2即3-1,这样就将一个转置卷积转换为对应的直接卷积。

9

3.2 转置卷积总结

  转置卷积转换为直接卷积的步骤(这里只考虑stride=1 padding=0的情况)。

  • 设卷积核大小为kXk,输入为方形图像。
  • (1)对输入进行四边补0,单边补0的数量为k-1
  • (2)将卷积核旋转180度,再新的输入上进行直接卷积

4. 转置卷积函数

nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, bias=True)
  • in_channels (int) -输入信号的通道数
  • out_channels (int) - 卷积产生的通道数
  • kernel_size (int or tuple) - 卷积核的大小
  • stride (int or tuple, optional) - 卷积步长
  • padding (int or tuple, optional) - 输入的每条边补充0的层数
  • output_padding (int or tuple, optional) - 输出的每条边补充0的层数
  • dilation (int or tuple, optional) - 卷积核元素之间的间距
  • groups (int, optional) - 从输入通道到输出通道的阻塞连接数
  • bias (bool, optional) - 如果bias=True, 添加偏置

4.1 转置卷积函数详解

  • 符号规定
    10

  • i. 卷积步长s=1时
      其中,实际输入 i" 指 s>1 时,对 i’ 中间填0后的尺寸(不包括p’)。
    有:反卷积的输出o’即为卷积的输入i;反卷积的核尺寸与卷积的相等。
    11
      这里解释为什么要在外周填充2层0,即为什么p’=2:

  • (1)首先,p’=2保证了 o’ = i

  • (2)这种填充方式,保证了反卷积过程元素位置对应关系,与卷积过程相同。例如:正向卷积过程中,绿色图像左上角的元素,只对蓝色图像左上角元素有贡献。在反卷积时,这样的padding使得,只有蓝色的左上角会影响绿色的左上角数值。

  • (3)为了保证这种对应关系,有如下结论:p’ = k-p-1

  • ii. 卷积步长s>1时
      直观上,卷积的 s>1 时,反卷积的 s’<1,这也是反卷积又叫 fractionally strided convolutions的原因。
      但是不可能真的用非整数的s’做反卷积,为了实现 s’<1:需要在 i’ 每相邻两数间填充 (s-1)个0,填充完后,用 s’=1 的设置进行卷积。
      即:(中间填充0)+(s’=1)的组合操作,实现了理论上的 s’ < 1。
    12

4.2 一般与特殊

4.2.1 一般反卷积的步骤

  1. 设对应的卷积参数为:i, k, s, p, o;
  2. 目标是:已知 i’ = o,恢复出形状 i,即 o’ = i;
  3. 对 i’ 相邻元素间填充(s-1)个0,得到 i" = i’ + (i’-1)(s-1);
  4. 对i’‘进行padding,p’ = k-p-1;
  5. 最后进行 k’=k, s’=1 的卷积操作。

4.2.2 卷积 (i+2p-k)/s 无法整除时

  在前文中,说明了卷积时,无法整除的情况:a = (i+2p-k)%s
则所有输入为 (i+a), a={0, 1, 2, …, s-1}的图像卷积之后具有相同的输出尺寸。这点在反卷积时需特别注意。
  这种卷积所对应的反卷积操作:在一般卷积的第4步之后:在图像右和下侧,填充 a 个0。

  1. 设对应的卷积参数为:i, k, s, p, o;
  2. 目标是:已知 i’ = o,恢复出形状 i,即 o’ = i;
  3. 对 i’ 相邻元素间填充(s-1)个0,得到 i" = i’ + (i’-1)(s-1);
  4. 对i’‘进行padding,p’ = k-p-1;
  5. 再在i’'的右和下侧,填充 a 个0;
  6. 最后进行 k’=k, s’=1 的卷积操作。

5. 参考

【1】https://blog.csdn.net/weixin_43975801/article/details/104566738
【2】https://zhuanlan.zhihu.com/p/113525131
【3】https://blog.csdn.net/weixin_42112050/article/details/117169004


http://chatgpt.dhexx.cn/article/dp9UX6D1.shtml

相关文章

什么是卷积?

理解1&#xff1a; 作者&#xff1a;果程C 链接&#xff1a;https://www.zhihu.com/question/22298352/answer/50940942 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 对于初学者&#xff0c;我推荐用复利的例子来理…

【图像处理】卷积算法

本文索引&#xff1a; 文章目录 # 一、 什么是卷积&#xff1f; 在图像处理中&#xff0c;卷积操作指的是使用一个卷积核对图像中的每个像素进行一系列操作。 卷积核&#xff08;算子&#xff09;是用来做图像处理时的矩阵,图像处理时也称为掩膜&#xff0c;是与原…

matlab 矩阵卷积

卷积的表达式&#xff1a; y(n)x(n)*h(n)sigma{x(m)h(n-m)} y(n)x(n)*sigma{deta(n-m)} 对应信号系统的卷积冲激函数&#xff0c;系统的结果就是信号和其本身的线性移位 结果元素的个数&#xff0c;x(n)的长度是n,h(n)的长度是m,则结果的序列长度就是nm-1 和信号处理的过程是…

卷积的理解

之前&#xff0c;习惯把记录和总结的知识点放到云笔记上&#xff0c;但发现CSDN这个博客注册好久了&#xff0c;但却没有往上面放文章&#xff0c;所以决定把以前的笔记整理一下&#xff0c;放到这里来&#xff0c;以便交流学习。 关于信号的卷积 最初认识卷积来源于《信号与…

卷积的含义

本文章为学习笔记 学习内容&#xff1a;b站up主王木头学科学的视频从“卷积”、到“图像卷积操作”、再到“卷积神经网络”&#xff0c;“卷积”意义的3次改变 假设一个人在一天中持续不断地吃东西&#xff0c;同时也在消化吃下去的食物&#xff0c;就有这样两条曲线&#xf…

(n,k,N)卷积码的生成矩阵

文章目录 卷积码卷积码编码器卷积码生成矩阵子生成元和生成元子生成矩阵和生成矩阵生成矩阵的作用 举例 ( n , 1 , N ) (n,1,N) (n,1,N)卷积码 ( n , k , N ) (n,k,N) (n,k,N)卷积码 卷积码 ( n , k , N ) (n,k,N) (n,k,N)卷积码是将每 k k k个信息比特作为一组&#xff0c;编码…

线性卷积运算

一、卷积定义 卷积是两个变量在某范围内相乘后求和的结果。如果卷积的变量是g(n)序列和h(n)&#xff0c;则卷积的结果 y ( n ) g ( n ) ∗ h ( n ) ∑ i − ∞ ∞ g ( i ) h ( n − i ) y(n) g(n) * h(n) \sum_{i -\infty}^{\infty}g(i)h(n-i) y(n)g(n)∗h(n)i−∞∑∞​…

向量与矩阵的卷积算法

由于我发现网上并没有关于向量与矩阵两者进行卷积计算的具体算法&#xff0c;所以我就跟各位网友分享一下我的观点。因为本人知识储备有限&#xff0c;对卷积的了解也很是肤浅&#xff0c;没有深入研究&#xff0c;所以有错误的地方还请大神们指正&#xff0c;小子不胜感激。 …

矩阵卷积、矩阵相乘的转化

两个矩阵卷积转化为矩阵相乘形式——Matlab应用(这里考虑二维矩阵&#xff0c;在图像中对应)两个图像模糊&#xff08;边缘&#xff09;操作&#xff0c;假设矩阵A、B&#xff0c;A代表源图像&#xff0c;B代表卷积模板&#xff0c;那么B的取值决定最后运算的结果。 Matlab中的…

矩阵卷积理解

为了验证后续矩阵卷积转化为矩阵相乘&#xff0c;这里给出的conv2的实例描述&#xff1a; 假设矩阵A&#xff08;4*3&#xff09;、B&#xff08;2*3&#xff09;如下&#xff1a; 首先&#xff0c;B需要旋转180&#xff0c; 命令旋转2次90即可&#xff1a; B rot90(rot90(B)…

什么是卷积

目录 卷积是什么鬼卷积为什么这么牛卷积神经网络是个啥 卷积是什么鬼 卷积(convolution) 卷积&#xff1a; f ( t ) ∗ g ( t ) ∫ f ( τ ) g ( τ ) d ( τ ) 卷积运算符号用 ∗ 号来表示 卷积&#xff1a;f(t)*g(t)\int{f(τ)g(τ)d(τ)}\\ 卷积运算符号用*号来表示 卷积…

二维卷积/矩阵卷积

二维卷积/矩阵卷积的计算方程 设有矩阵A和矩阵B&#xff0c;它们的卷积结果矩阵的元素可由下列公式计算得来&#xff1a; C(j,k)∑p∑qA(p,q)B(j−p1,k−q1) 其中的index只要在A&#xff0c;B中valid都要参与运算。 举例来说&#xff0c;令矩阵M为卷积核矩阵&#xff0c;矩阵…

如何计算矩阵的卷积

昨天立下flag&#xff0c;要开始学习深度学习&#xff0c;深度学习中十分重要的就是卷积神经网络&#xff0c;顾名思义&#xff0c;卷积神经网络中一定会用到卷积。喵哥在博友的一篇博文中看到卷积运算用于图像边缘检测的应用实例&#xff0c;博友十分细心的在截图上做了卷积的…

矩阵乘法实现卷积运算

1. 对于普通卷积运算&#xff0c;是使用滑动窗口实现卷积运算&#xff1a; 矩阵根据卷积核的大小进行&#xff0c;从左到右、从上到i下的移动&#xff0c;对应数据相乘再相加得到的数据为该区域的值。 ​​​​​​​ ​​​​​​​ 2.矩阵乘法实现卷积 原理&#xff1a;根据…

各种卷积操作及其矩阵运算

前言 简单来讲&#xff0c;卷积是一种函数和函数产生一个新函数的数学运算&#xff0c;该数学运算的自变量是两个函数f, g&#xff08;连续或离散都可以,&#xff0c;定义域之外的部分记函数值填充为0&#xff09;&#xff0c;输出为一个函数h,满足 ,或者说&#xff0c;就是对…

矩阵卷积运算的具体过程

矩阵卷积运算的具体过程&#xff0c;很简单 最近在看图像处理&#xff0c;卷积运算这一块也查了很多&#xff0c;但是感觉都写的太复杂&#xff0c;我这里简单的写一下卷积到底是一个什么计算过程。 假设有一个卷积核h&#xff0c;就一般为3*3的矩阵&#xff1a; 有一个待处理…

矩阵卷积运算过程讲解

写了那么久的博客&#xff0c;始于Python爬虫&#xff0c;目前专于Java学习&#xff0c;终于有了属于自己的小窝&#xff0c;欢迎各位访问我的个人网站&#xff0c;未来我们一起交流进步。 在爬虫处理验证码的过程中接触到矩阵卷积运算&#xff0c;关于该类运算&#xff0c;记录…

矩阵的卷积以及使用python计算方法

1、离散⼆维卷积公式 其中A为被卷积矩阵&#xff0c;K为卷积核&#xff0c;B为卷积结果&#xff0c;该公式中&#xff0c;三个矩阵的排序均从0开始。 卷积核、滤波器通常为较小尺寸的矩阵&#xff0c;比如3333、5555等&#xff0c;数字图像是相对较大尺寸的2维&#xff08;多…

矩阵卷积

1. 矩阵的卷积运算主要用在图像处理中&#xff0c;假设输入信号为x[m,n]&#xff0c;激活响应为h[m,n]&#xff0c;则其卷积定义为&#xff1a; 2.如果矩阵的中心在边缘就要将原矩阵进行扩展&#xff0c;例如补0 3.卷积的计算步骤&#xff1a; (1) 卷积核绕自己的核心…

隐马尔可夫模型(HMM)及Viterbi算法

HMM简介 对于算法爱好者来说&#xff0c;隐马尔可夫模型的大名那是如雷贯耳。那么&#xff0c;这个模型到底长什么样&#xff1f;具体的原理又是什么呢&#xff1f;有什么具体的应用场景呢&#xff1f;本文将会解答这些疑惑。   本文将通过具体形象的例子来引入该模型&#x…