关于反卷积(转置卷积)小记

反卷积(Transposed Convolution)详解

1. 反卷积概述

反卷积(Transposed Convolution),又称转置卷积反向卷积,在深度学习中主要用于上采样(upsampling),常见于**生成对抗网络(GANs)、语义分割(Semantic Segmentation)、超分辨率重建(Super-Resolution)**等任务。

误解
反卷积不是普通卷积的数学逆操作,而是一种特定的卷积运算,其主要目的是增大特征图的尺寸

煮啵在这里讲一下煮啵的个人理解:

反卷积的意义是卷积之后的矩阵的每个元素有一个感受视野,反卷积希望通过这个元素还原感受视野里面的内容。并且由于卷积后的元素的感受视野有相交的情况,所以反卷积中也出现了结果中有些元素的值来源于卷积结果的一个或多个元素的现象,理论上通过反卷积,我们可以通过将特征图反卷积还原到原图大小从而获取到我们的卷积核在原图中提取的是什么信息。

2. 为什么需要反卷积?

在**普通卷积(Convolution)**中,输入大小 N × N N \times N N×N 经过一个 K × K K \times K K×K 的卷积核(stride 为 S S S,不使用 padding)后,输出尺寸会缩小:

O = N − K S + 1 O = \frac{N - K}{S} + 1 O=SNK+1

这意味着,卷积操作丢失了空间信息,导致特征图尺寸缩小。在某些任务(如图像生成、语义分割)中,我们需要恢复更大尺寸的输出,因此需要使用反卷积来进行上采样

3. 反卷积的数学原理

3.1 普通卷积计算

假设输入是 3 × 3 3 \times 3 3×3 的矩阵,使用 2 × 2 2 \times 2 2×2 的卷积核,步长(stride)为 1,无填充(padding)。

输入矩阵:
[ 1 2 3 4 5 6 7 8 9 ] \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix} 147258369

卷积核:
[ 1 0 0 − 1 ] \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix} [1001]

进行标准卷积运算后,输出尺寸变小( 2 × 2 2 \times 2 2×2):

[ ( 1 × 1 + 2 × 0 + 4 × 0 + 5 × ( − 1 ) ) ( 2 × 1 + 3 × 0 + 5 × 0 + 6 × ( − 1 ) ) ( 4 × 1 + 5 × 0 + 7 × 0 + 8 × ( − 1 ) ) ( 5 × 1 + 6 × 0 + 8 × 0 + 9 × ( − 1 ) ) ] \begin{bmatrix} (1 \times 1 + 2 \times 0 + 4 \times 0 + 5 \times (-1)) & (2 \times 1 + 3 \times 0 + 5 \times 0 + 6 \times (-1)) \\ (4 \times 1 + 5 \times 0 + 7 \times 0 + 8 \times (-1)) & (5 \times 1 + 6 \times 0 + 8 \times 0 + 9 \times (-1)) \end{bmatrix} [(1×1+2×0+4×0+5×(1))(4×1+5×0+7×0+8×(1))(2×1+3×0+5×0+6×(1))(5×1+6×0+8×0+9×(1))]

[ − 4 − 4 − 4 − 4 ] \begin{bmatrix} -4 & -4 \\ -4 & -4 \end{bmatrix} [4444]

输出尺寸 2 × 2 2 \times 2 2×2,比输入 3 × 3 3 \times 3 3×3 小。

3.2 反卷积计算

反卷积的目标是增大尺寸,假设使用相同的 2 × 2 2 \times 2 2×2 卷积核,对 2 × 2 2 \times 2 2×2 的输入进行反卷积,目标是恢复成 3 × 3 3 \times 3 3×3 尺寸。

假设 2 × 2 2 \times 2 2×2 输入:

[ 1 2 3 4 ] \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} [1324]

经过反卷积后:

[ 1 0 2 0 0 0 3 0 4 ] \begin{bmatrix} 1 & 0 & 2 \\ 0 & 0 & 0 \\ 3 & 0 & 4 \end{bmatrix} 103000204

然后再用相同的卷积核滑动求和,最终恢复到 3 × 3 3 \times 3 3×3 大小。

4. 反卷积与上采样的区别

方法 作用 是否可学习
上采样(最近邻插值、双线性插值) 仅放大尺寸,不增加特征
反卷积(Transposed Convolution) 放大尺寸并提取特征

5. 反卷积的实现

在 PyTorch 里,使用 ConvTranspose2d 实现反卷积:

import torch
import torch.nn as nn

# 定义一个反卷积层
deconv = nn.ConvTranspose2d(in_channels=1, out_channels=1, kernel_size=3, stride=2, padding=1, output_padding=1)

# 创建输入特征图 (1,1,4,4)
x = torch.randn(1, 1, 4, 4)

# 进行反卷积
output = deconv(x)

print(output.shape)  # 输出尺寸增大

6. 反卷积的应用

  1. 生成对抗网络(GANs)
    • DCGAN(深度卷积生成对抗网络)中,G 生成器利用反卷积将噪声映射到高分辨率图像。
  2. 语义分割
    • FCN(全卷积网络) 中,用反卷积恢复图像尺寸,使分类结果与原图对齐。
  3. 超分辨率
    • SRGAN 等网络使用反卷积将低分辨率图像转换为高清图像。

7. 反卷积的潜在问题

7.1 棋盘效应(Checkerboard Artifacts)

反卷积可能导致非均匀的像素分布,出现类似棋盘的伪影。解决方案:

  • 使用 stride=1,再结合上采样+普通卷积
  • 采用 Sub-Pixel Convolution(亚像素卷积)

8. 总结

  1. 反卷积是用于上采样的可学习卷积操作,不同于普通插值方法。
  2. 反卷积不是卷积的逆运算,而是一种数学设计,用于增大特征图尺寸。
  3. 主要应用于 GANs、语义分割、超分辨率等领域
  4. 可能导致棋盘效应,需要适当调整参数或改进方法

你可能感兴趣的:(乱七八糟,人工智能,深度学习,反卷积)