计算经卷积和池化层后的特征图尺寸

375 阅读2分钟

在深度卷积神经网络中,计算经过多层卷积和池化后的特征图的尺寸是很常见的需求。这样的计算可以帮助我们设计全连接层的输入。对于每个卷积层或池化层,输出特征图的尺寸可以使用以下公式计算:

Hout=Hin+2×padkernel_sizestride+1Wout=Win+2×padkernel_sizestride+1H_{\text{out}} = \left\lfloor \frac{H_{\text{in}} + 2 \times \text{pad} - \text{kernel\_size}}{\text{stride}} + 1 \right\rfloor \\ W_{\text{out}} = \left\lfloor \frac{W_{\text{in}} + 2 \times \text{pad} - \text{kernel\_size}}{\text{stride}} + 1 \right\rfloor

这里:

  • HinH_{\text{in}}WinW_{\text{in}} 是输入特征图的高和宽。
  • pad 是应用到输入特征图的边缘的填充的像素数。
  • kernel_size 是卷积核或池化核的大小。
  • stride 是卷积或池化操作的步长。

根据您提供的网络结构和假设输入是256x256单通道灰度图,我们可以计算最后一个卷积层后的输出维度。让我们逐层计算:

  1. 第一个卷积层 (Layer 1):

    • 输入: 256x256
    • Kernel size: 3x3, Stride: 1, Padding: 1
    • 输出: ((256 + 2*1 - 3)/1 + 1 = 256) (同样适用于宽度)
  2. 第一个池化层 (Layer 3):

    • 输入: 256x256
    • Kernel size: 2x2, Stride: 2, Padding: 0
    • 输出: ((256 + 2*0 - 2)/2 + 1 = 128) (同样适用于宽度)

以此类推,继续计算下去:

  1. 第二个卷积层 (Layer 4) 和第二个ReLU层 (Layer 5) 不改变尺寸:128x128
  2. 第二个池化层 (Layer 6) 输出尺寸: (12822+1=64)( \frac{128 - 2}{2} + 1 = 64 )
  3. 第三个、第四个卷积层 (Layer 7, 9) 和相应的ReLU层 (Layer 8, 10) 不改变尺寸:64x64
  4. 第三个池化层 (Layer 11) 输出尺寸: (6422+1=32)( \frac{64 - 2}{2} + 1 = 32 )
  5. 第五、第六个卷积层 (Layer 12, 14) 和相应的ReLU层 (Layer 13, 15) 不改变尺寸:32x32

最终输出尺寸在通过所有卷积和池化层之后为32x32。因此,在全连接层之前,您需要将这32x32的特征图展平,如果卷积层的输出通道数为256,则展平后的特征向量维度为 (256×32×32)( 256 \times 32 \times 32 )