跨步反卷积如何工作?

数据挖掘 深度学习 卷积神经网络 自动编码器
2022-01-22 17:26:24

我想了解反卷积后图像的形状如何变化?我试图从 neon 中理解卷积自动编码器的示例代码。

layers = [Conv((4, 4, 8), init=init_uni, activation=Rectlin()),
          Pooling(2),
          Conv((4, 4, 32), init=init_uni, activation=Rectlin()),
          Pooling(2),
          Deconv(fshape=(3, 3, 8), init=init_uni, strides=2, padding=1),
          Deconv(fshape=(3, 3, 8), init=init_uni, strides=2, padding=1),
          Deconv(fshape=(4, 4, 1), init=init_uni, strides=2, padding=0)]

每一层的input_shapes和output_shapes如下

Convolution Layer 'ConvolutionLayer': 1 x (28x28) inputs, 8 x (25x25) outputs, padding 0, stride 1
Pooling Layer 'PoolingLayer': 8 x (25x25) inputs, 8 x (12x12) outputs
Convolution Layer 'ConvolutionLayer': 8 x (12x12) inputs, 32 x (9x9) outputs, padding 0, stride 1
Pooling Layer 'PoolingLayer': 32 x (9x9) inputs, 32 x (4x4) outputs
Deconvolution Layer 'DeconvolutionLayer': 32 x (4x4) inputs, 8 x (7x7) outputs
Deconvolution Layer 'DeconvolutionLayer': 8 x (7x7) inputs, 8 x (13x13) outputs
Deconvolution Layer 'DeconvolutionLayer': 8 x (13x13) inputs, 1 x (28x28) outputs

我了解卷积后形状如何变化(“有效”)。(感谢http://cs231n.github.io/convolutional-networks/)当使用反卷积(全卷积)时,步幅如何影响矩阵的大小?

2个回答

跨步反卷积正在扩大层的大小(您可以将其视为撤消池化的效果而不进行解池化)。

在这里查看幻灯片 18 这可能会有所帮助。

上采样或反卷积层用于提高图像的分辨率。在分割中,我们首先对图像进行下采样以获得特征,然后对图像进行上采样以生成片段。

对于反卷积操作,我们用零填充图像,然后对其进行卷积操作,因此对其进行了上采样。

例如: - 如果下采样后图像变为 [[1, 1] [1, 1]]

然后如果我们用零填充它, [[0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0] [0, 0, 1, 1, 0, 0] [0 , 0, 1, 1, 0, 0] [0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0]]

现在,如果我们使用 3 x 3 滤波器对上述图像进行卷积,我们将得到形状为 (4, 4) 的图像。因此,我们将形状为 (2, 2) 的图像上采样为 (4, 4)。