【卷积神经网络】图像卷积、池化操作后的特征图大小计算方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41427568/article/details/101310578

一、卷积操作

输入图像为正方形

输入图像尺寸为 W W W*W ,卷积核尺寸为 F F F*F ,步长为S,padding为P,卷积核个数为C,经过卷积层之后输出的图像尺寸为 N N C N*N*C
N = W F + 2 P S + 1 N=\frac{W-F+2*P}{S} +1

输入图像为矩形

输入图像尺寸为 W H W*H ,卷积核尺寸为 F F F*F ,步长为S,padding为P,卷积核个数为C,经过卷积层之后输出的图像尺寸为 W H C W'*H'*C ,计算方式如下:
W = W F + 2 P S + 1 W'=\frac{W-F+2*P}{S}+1
H = H F + 2 P S + 1 H'=\frac{H-F+2*P}{S}+1
对于三通道的图像进行卷积,使用的是三维卷积核,比如说下图所示:
在这里插入图片描述
图源:TensorFlow中padding卷积的两种方式“SAME”和“VALID”

输出的矩阵会把三个通道分别卷积然后叠加起来形成一个二维矩阵,卷积核的个数决定了输出二维矩阵的个数,所以输出矩阵的通道数是卷积核的个数。如果出现除不尽的情况,卷积计算操作向下取整

二、池化操作

输入图像尺寸为 W H D W*H*D (其中D是图像深度),池化核尺寸为 F F F*F ,步长为S,一般不在池化操纵中使用padding操作,经过池化之后输出的图像尺寸为 W H D W'*H'*D ,计算方式如下:
W = W F S + 1 W'=\frac{W-F}{S}+1
H = H F S + 1 H'=\frac{H-F}{S}+1
池化不改变输入图像的通道数。如果出现除不尽的情况,池化计算操作向上取整

padding模式选择

在tensorflow中,你可以选择使用何种padding策略,有VALID和SAME可供选择。注意,和上面卷积操作有些许不同,这两种操作默认是向上取整的,因为tf的源代码中是这样写的:

If padding == "SAME":
      output_spatial_shape[i] = ceil(input_spatial_shape[i] / strides[i])

    If padding == "VALID":
      output_spatial_shape[i] =
        ceil((input_spatial_shape[i] -
              (spatial_filter_shape[i]-1) * dilation_rate[i])
              / strides[i])

dilation_rate为一个可选的参数,默认为1,这里我们先不管。那么这两种策略就可以写成如下公式。
VALID策略:
若padding=VALID,那么输出尺寸为 N = W F + 1 S N=\frac{W-F+1}{S} ,向上取整。
SAME策略:
若padding=SAME,那么输出尺寸为 N = W S N=\frac{W}{S} ,向上取整,使用padding填充,由上面计算可得 p a d d i n g = F 1 2 padding=\frac{F-1}{2}
例子:TensorFlow中padding卷积的两种方式“SAME”和“VALID”

使用SAME:在这里插入图片描述

SAME结果:在这里插入图片描述
5/2=2.5,向上取整是3。
使用VALID:
在这里插入图片描述
VALID结果:
在这里插入图片描述
(5-3+1)/2=1.5,向上取整2。

猜你喜欢

转载自blog.csdn.net/qq_41427568/article/details/101310578