转置卷积的详细指南

185 阅读4分钟

导读:卷积神经网络在计算机视觉项目中非常有用,可以自动从照片和视频中提取特征,同时也可以减少图像尺寸。

卷积神经网络在计算机视觉项目中非常有用,可以自动从照片和视频中提取特征,同时也可以减少图像尺寸。
在大多数图像分类的模型中,使用的CNN是全连接层的。但在这种情况下,你将面临几个问题,如更高的计算成本和不保留空间维度。为了解决这个问题,我们采用了一种叫做转置卷积的技术,它只是标准卷积的逆运算。这是通过保持连接模式的完整来实现的。

定义

转置卷积也被称为上采样卷积,这是指它所完成的任务,即对输入的特征图进行上采样。
因为对输出的跨度等于对输入的分数跨度,所以它也被称为分数跨度卷积。
由于转置卷积的前向传递与普通卷积的后向传递相同,所以它被称为后向跨度卷积。

代码:
转置卷积的实现- 输入形状:
三维张量,形状为:(batchsize,步骤,通道)
输出形状:
三维张量,形状为:(batchsize,newsteps,过滤器)
如果指定输出padding

比如说 :

tf.keras.layers.Conv1DTranspose(
    filters,
    kernel_size,
    strides=1,
    padding='valid',
    output_padding=None,
    dilation_rate=1,
    activation=None,
    use_bias=True,
    kernel_initializer='glorot_uniform',
    bias_initializer='zeros
)

目标是什么?

图像分类的目标是获得具有相同维度的输出图像,而不会遇到完全卷积神经网络所面临的问题。为了实现这一目标,我们必须对输入进行升采样,使其与输出尺寸相匹配。

常用的升采样技术

最近的邻居:
最近的邻居将输入的像素值复制到K-最近的邻居,其中K是预期的输出。
双线性插值:
在这里,我们采取输入像素的四个最近的像素值,并根据四个最近的单元之间的距离,使用加权平均来平滑输出。
钉床:
在钉床中,我们将输入像素的值复制到输出图像的相应位置,同时用零填充其余的位置。
最大脱拼:
最大脱拼层从内核中的所有值中选择最高值。为了完成最大不拼合,每个最大拼合层的最高值的索引在整个编码步骤中被保存。保存的索引随后在解码步骤中使用,输入的像素被映射到保存的索引中,并在空白处填上零。

然后再来看看转置卷积的另一种升采样方式,它有一个额外的特点,即使用一些可学习的参数。它不依赖于预编程的插值机制。

转置卷积

所涉及的步骤:

  1. 假设你有一个2x2的输入,需要被上采样到3x3的输出。
  2. 接下来,取一个大小为2x2的内核,具有单位跨度和零填充。
  3. 然后,下一步是将输入的左上方元素与内核的每个元素相乘。
  4. 我们对所有剩余的输入组件重复这个过程。这就为输入的每个元素形成了四个不同的2x2矩阵,这些矩阵根据它们的位置进行映射。
  5. 由于它们是根据它们的位置来映射的,因此产生的上采样矩阵的一些元素将导致重叠。我们只是把重叠的地方的元素加上去,以解决这个问题。
  6. 最后的输出结果将是最终的升采样矩阵,其空间尺寸为3x3。

尽管它被命名为转置卷积,这并不意味着我们利用了现有卷积矩阵的转置版本。重要的特点是,与标准卷积矩阵相比,输入和输出之间的关系是反向处理的(一对多而不是多对一的关联)。

因此,转置后的卷积根本就不是一个。然而,我们可以用卷积来模拟转置卷积。

缺点

转置卷积很容易产生奇怪的棋盘格图案,如下图所示。
Screenshot-2022-06-16-232247

其根本原因是图像的某些部分有不平等的重叠,导致伪影。避免重叠问题的一个方法是确保你使用的内核大小被你的步长除以。因此,使用一个可以被步长除以的内核尺寸,例如当步长为2时,使用2x2或4x4。

结论

现代图像分割和超分辨率算法是建立在转置卷积的基础上的。它们提供了最精确和全面的升采样。我们研究了各种常用的上采样技术,转置卷积的步骤,转置卷积的缺点,最后是转置卷积的应用。