反卷积/转置卷积 (Deconvolution/Transposed Convolution) 原理与计算方法

本文详细介绍了反卷积的原理,它是卷积的逆过程,用于图像上采样。文章讨论了棋盘现象的出现原因,并提出了两种方法来避免或减轻这个问题:使用可被步长整除的卷积核和利用插值调整图像大小。特别提到了TensorFlow中的`tf.image.resize_images`函数及其不同插值方法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

反卷积

Deconvolution/Transposed Convolution
来自文章 《A guide to convolution arithmetic for deep learning》与《Deconvolution and Checkerboard Artifacts》

反卷积是一种上采样方法,将原图像分辨率提高,deconvolution layer可以允许模型通过每一个点进行绘制高分辨率图像上的一个方块。
在进行一般的卷积时,可以看作一种矩阵运算,将一个3x3的卷积核kernel展开成如下的矩阵形式:


我们称该矩阵为C,则如果输入某图像,首先将图像展平为一个向量,之后与C进行矩阵乘法:

此时得到的便是卷积后缩小的图像,也就是进行卷积的前向传播时进行的运算。而计算梯度反向传播时,则将loss x CT(转置),即kernel定义了用于前向和后向传递的矩阵C和CT。

对于反卷积的情况,则是与卷积正好相反,其前向和后向通过分别乘以CT和(CT)T = C来计算。
图中可以看出,CT乘以2x2的输入矩阵,得到了4x4的输出,与刚才的情况恰好转置,因此拥有相同kernel的卷积和反卷积是正好相反的:

但当卷积核大小不能被步长整除的时候,会出现棋盘现象。原因是上采样过程中取样不均匀,生成图的某些点在原图中多次取样(这不是反卷积特有的情况,只是在反卷积时由于图像分辨率提升导致更为明显)

  1. 方法一:采取可以被stride整除的kernel size
    该方案较好的应对了棋盘效应问题,但是仍不够圆满,因为一旦我们的kernel学习不均匀,仍然会产生棋盘效应,(下图为步长为2,核大小为4所产生的现象)
  2. 方法二:插值
    调整图像大小(使用最近邻插值或双线性插值),然后执行卷积图层。这似乎是一种自然的方法,大致相似的方法在图像超分辨率方面表现良好

插值是指在给定函数值的情况下,对某个空间中的非给定点进行函数值近似的问题。在深度学习中常用在修改图像尺寸的过程,由旧的图像矩阵中的点计算新图像矩阵中的点并插入,不同的计算过程就是不同的插值算法。

最近邻插值:

双线性插值:

双线性插值就是先在x方向上用Q11和Q21、Q12和Q22算R1、R2两个单线性,之后在y方向上用R1和R2算出P

方法二中的插值指的就是tensorflow中的图像大小调整函数(tf.image.resize_images)

通过tf.image.resize_images函数调整图像的大小。这个函数第一个参数为原始图像,第二个和第三个分别为调整后图像的大小,method参数给出了调整图像大小的算法
method = 0 双线性插值法
method = 1 最近邻居法
method = 2 双三次插值法
method = 3 面积插值法
### 反卷积(去卷积)概念 反卷积操作,也被称为转置卷积,在计算机视觉和深度学习领域用于上采样过程。不同于标准卷积层减少输入尺寸并提取特征的能力,反卷积旨在增加空间维度的同时恢复细节[^1]。 具体来说,反卷积通过学习一组滤波器来放大图像大小,并且可以看作是传统卷积运算的一个逆向版本。然而值得注意的是,“反卷积”并不完全等于数学意义上的严格意义下的逆变换;而是指一种能够实现扩大输出尺度的操作方式[^2]。 ```python import torch.nn as nn class DeconvNet(nn.Module): def __init__(self): super(DeconvNet, self).__init__() self.deconv_layer = nn.ConvTranspose2d(in_channels=64, out_channels=32, kernel_size=3, stride=2, padding=1, output_padding=1) def forward(self, x): return self.deconv_layer(x) ``` 在这个例子中定义了一个简单的含有单个转置卷积(`ConvTranspose2d`) 的神经网络模型 `DeconvNet` 。该层接受通道数为 64 的输入张量,并将其转换成具有 32 个通道的新表示形式,同时将高宽各方向上的分辨率加倍。 ### 应用场景 在实际应用方面,反卷积广泛应用于语义分割、超分辨率重建等领域。例如 U-Net 架构就利用了大量反卷积操作来进行医学影像分析中的像素级分类任务。此外,在风格迁移算法里也会见到其身影,用来逐步还原被压缩后的抽象表征至原始图片级别。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值