sshuair's note

CNN中的卷积操作

2017-10-22

Convolution输出大小计算公式

一个图像经过卷积核之后输出图像的大小计算公式:

$$ size_{out} = floor [ \frac{size_{in} + 2 \ast padding - dilation \ast (kernel\ size - 1) - 1)} {stride} + 1 ]$$

  • $size_{in}$: input image size
  • $size_{out}$: output image size
  • kernel_size: Size of the convolving kernel
  • stride: Stride of the convolution
  • padding: Pad of convolution
  • dilation: Spacing between kernel elements

Convolution层如何计算

某一层的所有feature map都通过与一个卷积核filter进行点积(dot product)运算,生成一个新的map。比如第n层的feature map个数为3,大小为32x32,而下一层(n+1层)的feature map个数为6,那么如何计算呢,其实就是有6个5x5x3的filter(假设这里的kernel size = 5)来计算,注意这里最后一个3是第n层的feature map数量(每个filter为width x height x feature map),每一个filter都与第n层的3个feature map进行点积操作计算(计算时可以拉伸成一个vector进行计算),进而得到第n+1层的第一个feature map(如下图中的蓝色)

如此类推,每一个kernel都这么计算则可以得到n+1层中所有的feature map,如下图中的绿色

最后可以得到所有层的feature map,进而进入下一层运算。

每一层的参数数量如何计算呢,比如n层,其实就是该层的feature map数量乘以上一层(第n-层)的filter 大小,然后再加上bias(可加可不加),比如下图VGG16的第二层参数数量,首先第一层的图片大小是224x224x3,kernel_size是3,第二层自己的feature map数量为64,那么参数数量为(3x3x3)*64,计算公式可以表达为:

$$ (kernel\ size \ast kernel\ size \ast feature\ maps_{n-1}) \ast feature\ maps_n $$

扫描二维码,分享此文章