关于转置卷积(反卷积)的理解

本文地址:https://blog.youkuaiyun.com/isMarvellous/article/details/80087705,转载请注明出处。

什么是转置卷积(反卷积)?

转置卷积(Transposed Convolution)又称为反卷积(Deconvolution)。在PyTorch中可以使用torch.nn.ConvTranspose2d()来调用,在Caffe中也有对应的层deconv_layer

转置卷积常常用于CNN中对特征图进行上采样,比如语义分割和超分辨率任务中。之所以叫转置卷积是因为,它其实是把我们平时所用普通卷积操作中的卷积核做一个转置,然后把普通卷积的输出作为转置卷积的输入,而转置卷积的输出,就是普通卷积的输入。这样说可能有点绕,我们可以参照CNN中的反向传播过程来理解,转置卷积形式上就和一个卷积层的反向梯度计算相同。既然是输入输出对调,那么就有两个很重要的特性:

  1. 转置的卷积核变为了普通卷积核的转置;
  2. 如果把由输入特征图到输出特征图的计算过程画成一个计算图,那么输入输出元素的连接关系是不变的

关于第二点,也就是说,在普通卷积中,若元素a和元素1有连接(元素1由a计算得到),那么在相应的转置卷积中,元素1和元素a依然是有连接的(元素a由元素1计算得到)。

下面就基于此讨论一下我对转置卷积计算过程的一个理解。这并不是一个严格的推导,只是为了形象地帮助理解为什么要这样计算,或者说这个计算过程是怎么来的。然后再总结一下转置卷积输出特征图大小的计算。由于是自己的个人见解,难免有疏漏或理解不准确的地方,这里总结出来,希望大家一起来讨论。

普通卷积的计算过程

如下图:
这里写图片描述
这是一个卷积核大小为3x3,步长为2,padding为1的普通卷积。卷积核在红框位置时输出元素1,在绿色位置时输出元素2。我们可以发现,输入元素a仅和一个输出元素有运算关系,也就是元素1,而输入元素b和输出元素1, 2均有关系。同理c只和一个元素2有关,而d和1,2,3,4四个元素都有关。那么在进行转置卷积时,依然应该保持这个连接关系不变。

转置卷积(反卷积)的计算过程

根据前面的分析,我们需要将上图中绿色的特征图作为输入,蓝色的特征图作为输出,并且保证连接关系不变。也就是说,a只和1有关,b和1,2两个元素有关,其它类推。怎么才能达到这个效果呢?我们可以先用0给绿色特征图做插值,插值的个数就是使相邻两个绿色元素的间隔为卷积的步长,同时边缘也需要进行与插值数量相等的补0。如下图:
这里写图片描述
注意,这时候卷积核的滑动步长就不是2了,而是1,步长体现在了插值补0的过程中。

一般在CNN中,转置卷积用于对特征图进行上采样,比如我们想要将特征图扩大2倍,那么就可以使用步长为2的转置卷积。但是且慢!为什么我们这里2x2的输入,只得到了3x3的输出呢?说好的扩大2倍呢?不应该是4x4么?
别急,我们来算一算为什么是3x3。
我们将2x2的特征图插空并在边缘补0后,边长变成了2x2+1=5,使用3x3的卷积核做滑动步长为1的卷积,得到的特征图边长为(5-3+1)/1=3。所以我们只得到了3x3而非4x4的输出。那么在一般情况下,输出特征图的大小要怎么计算呢?下面我们来总结一下。

输出特征图的尺寸计算

假设我们做转置卷积的输入特征图大小为 n × n n \times n n×n,卷积核大小为 k × k k \times k k×k,后面为了表示方便,我们直接使用边长来表示大小。
步长stride为 s s s,那么转置卷积需要在四周每个边缘补0的数量为 s − 1 s-1 s1,边缘和内部插空补0后输入特征图大小变为
s × n + s − 1 s \times n + s - 1 s×n+s1
使用大小为 k k k的卷积核进行卷积(滑动步长为1),得到的输出特征图大小为:
( s × n + s − 1 − k + 1 ) / 1 = s × n + ( s − k ) (s \times n + s - 1 - k +1) / 1 = s \times n +(s - k) (s×n+s1k+1)/1=s×n+(sk)
可以看到,转置卷积并不是严格将输入特征图变为了s倍,而是还相差了个 s − k s-k sk

当然这个公式只是转置卷积的一种理解方法,在实际的实现中,还有不同的padding, stride和dilation配置,输出图像大小也会随之改变。本文的目的在于给出一个我自己对于转置卷积的理解。实际上转置卷积的转置一词是因为前述的卷积核转置,这里可以视为一种等效的理解。

<think>好的,我现在要帮助用户理解转置卷积的概念、工作原理和应用场景。首先,我需要回顾一下用户提供的引用内容,确保信息准确。 转置卷积,也被称为反卷积或上采样卷积,主要用途是上采样,扩大特征图的尺寸。用户提到的引用[1]和[3]都强调了这一点。接下来,我需要解释转置卷积如何工作。根据引用[4],转置卷积通过逆转普通卷积的尺寸变化来实现,比如将d(0)复原为d(1)。这里要说明的是,虽然形状恢复,但数值不一定恢复,所以“反卷积”可能不太准确。 工作原理部分可能需要用数学表达式来说明。比如,标准卷积的矩阵乘法形式,转置卷积则是其转置矩阵。用户要求数学表达式用$...$,独立公式用$$...$$。例如,普通卷积可以表示为$Y = WX$,转置卷积则为$\hat{X} = W^T \hat{Y}$,这里需要正确使用LaTeX格式。 应用场景方面,引用[1]提到DCGAN、语义分割(如FCN、Unet)和CNN可视化。这些例子需要具体展开,每个应用场景如何利用转置卷积进行上采样或生成图像。 同时,用户可能对转置卷积和普通卷积的区别感兴趣。引用[2]和[4]提到转置卷积不是普通卷积的逆运算,而是尺寸上的逆转。这里需要强调两者的不同,避免混淆。 生成的问题部分需要考虑用户可能的后续疑问,比如数学推导、与其他上采样方法的比较、实现细节等。需要确保问题相关且有深度,帮助用户进一步学习。 最后,检查是否所有数学表达式都符合格式要求,引用标识是否正确添加,回答结构是否清晰。确保使用中文,避免技术术语使用错误,保持自然流畅。</think>### 转置卷积详解 #### 一、概念定义 **转置卷积(Transposed Convolution)** 是一种通过可学习参数实现特征图上采样的操作,常用于深度学习中需要扩大特征图空间分辨率的场景。尽管常被称为“反卷积”(Deconvolution),但它并非数学意义上的卷积逆运算,而是通过矩阵转置的数学形式实现尺寸变换[^3][^4]。 #### 二、工作原理 1. **数学形式** 普通卷积可表示为矩阵乘法:若输入特征图展开为向量$X$,卷积核权重矩阵为$W$,则输出为$Y = WX$。 转置卷积则使用权重矩阵的转置$W^T$,通过$\hat{X} = W^T \hat{Y}$实现反向映射,将小尺寸输入$\hat{Y}$扩展为大尺寸输出$\hat{X}$[^4]。 2. **具体操作** - **填充与步长**:通过在输入特征图元素间插入零值(由步长控制)并叠加卷积结果,实现尺寸扩大。 - **计算示例**:若输入为$3 \times 3$,卷积核为$3 \times 3$,步长=2,输出可达$5 \times 5$(具体公式见下文)。 $$ \text{输出尺寸} = (\text{输入尺寸} -1) \times \text{步长} + \text{卷积核尺寸} - 2 \times \text{填充} $$ #### 三、应用场景 1. **图像生成(如DCGAN)** 将随机噪声向量逐步上采样为全尺寸图像,例如生成对抗网络(GAN)中的生成器结构[^1]。 2. **语义分割(如FCN、Unet)** 编码器提取特征后,解码器通过转置卷积恢复原图分辨率,实现像素级分类[^1][^3]。 3. **CNN特征可视化** 将中间特征图映射回像素空间,观察神经元激活模式[^1]。 4. **超分辨率重建** 将低分辨率图像上采样为高分辨率版本,保留细节信息。 #### 四、与普通卷积的对比 | **特性** | **普通卷积** | **转置卷积** | |----------------|---------------------------|----------------------------| | 计算方向 | 下采样(尺寸缩小) | 上采样(尺寸扩大) | | 数学关系 | 权重矩阵$W$ | 权重矩阵转置$W^T$ | | 填充效果 | 输入边缘补零 | 输入元素间插零 | | 典型应用 | 特征提取 | 图像生成、分辨率恢复 | #### 五、代码示例(PyTorch实现) ```python import torch.nn as nn # 定义转置卷积层:输入通道=3, 输出通道=64, 卷积核大小=4, 步长=2, 填充=1 trans_conv = nn.ConvTranspose2d(3, 64, kernel_size=4, stride=2, padding=1) # 输入尺寸:(batch_size, 3, 16, 16) input = torch.randn(32, 3, 16, 16) output = trans_conv(input) # 输出尺寸:(32, 64, 32, 32) ```
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值