在CNN中,上采样和转置卷积是一样的吗?

机器算法验证 机器学习 神经网络 卷积神经网络 转置卷积
2022-02-04 20:52:09

当您进行“反卷积”时,会使用“上采样”和“转置卷积”这两个术语(<-- 这不是一个好术语,但让我在这里使用它)。本来我以为是同一个意思,但看了这些文章后,我觉得它们是不同的。谁能澄清一下?

  1. 转置卷积:看起来我们可以在通过卷积神经网络传播损失时使用它。

    http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/#Backward-Propagation

    https://github.com/vdumoulin/conv_arithmetic

    https://arxiv.org/pdf/1312.6034v2.pdf,第 4 节“对于卷积层......”

  2. 上采样:似乎我们想在 convnet-decovnet 结构中从较小的输入上采样到较大的输入时使用它。

    https://www.youtube.com/watch?v=ByjaPdWXKJ4&feature=youtu.be&t=22m

4个回答

由于没有详细和标记的答案,我会尽力而为。

让我们首先了解这些层的动机来自哪里:例如卷积自动编码器。您可以使用卷积自动编码器来提取图像的特征,同时训练自动编码器来重建原始图像。(这是一种无监督的方法。)

这种自动编码器有两部分:从图像中提取特征的编码器和从这些特征中重建原始图像的解码器。编码器和解码器的架构通常是镜像的。

在卷积自动编码器中,编码器与卷积和池化层一起工作。我假设你知道这些是如何工作的。解码器尝试镜像编码器,但不是“让所有东西变小”,而是“让所有东西变大”以匹配图像的原始大小。

与卷积层相反的是转置卷积层(也称为反卷积,但正确地从数学上讲这是不同的)。它们与过滤器、内核、步幅一起工作,就像卷积层一样,但不是从例如 3x3 输入像素映射到 1 个输出,而是从 1 个输入像素映射到 3x3 像素。当然,反向传播的工作方式也略有不同。

与池化层相反的是上采样层,其最纯粹的形式仅调整图像大小(或根据需要多次复制像素)。一种更先进的技术是unpooling,它通过记住 maxpooling 层中最大值的位置来恢复 maxpooling,并且在 unpooling 层中将值复制到该位置。引用这篇(https://arxiv.org/pdf/1311.2901v3.pdf)论文:

在卷积网络中,最大池化操作是不可逆的,但是我们可以通过在一组开关变量中记录每个池化区域内最大值的位置来获得近似逆。在反卷积网络中,反池化操作使用这些开关将来自上层的重建放置到适当的位置,保留刺激的结构。

有关更多技术输入和上下文,请查看这个非常好的、示范性和深入的解释:http ://deeplearning.net/software/theano/tutorial/conv_arithmetic.html

看看https://www.quora.com/What-is-the-difference-between-Deconvolution-Upsampling-Unpooling-and-Convolutional-Sparse-Coding

这可能取决于您使用的软件包。

在 keras 中,它们是不同的。上采样在这里定义https://github.com/fchollet/keras/blob/master/keras/layers/convolutional.py 如果您使用 tensorflow 后端,实际发生的是 keras 调用 tensorflow resize_images函数,它本质上是一个插值而不是可训练的。

转置卷积涉及更多。它在上面列出的相同 python 脚本中定义。它调用 tensorflow conv2d_transpose函数,它有内核并且是可训练的。

希望这可以帮助。

这是一个很好的说明1)转置卷积和2)上采样+卷积之间的区别。 https://distill.pub/2016/deconv-checkerboard/

虽然转置卷积更有效,但文章提倡上采样+卷积,因为它不受棋盘伪影的影响。

卷积神经网络中的反卷积与转置卷积同义。反卷积在其他领域可能还有另一种含义。

转置卷积是执行上采样的一种策略。