卷积神经网络经过卷积/池化之后的图像尺寸及参数个数以及FLOPs

尺寸大小

卷积

设输入图像尺寸为W * W * 3,卷积核尺寸为F,步幅为S,Padding使用P,共有M个卷积核,则经过该卷积层后输出的图像尺寸为:

[(W-F+2P)/S + 1 ] * [(W-F+2P)/S + 1] * M

常见的F、S和P的设置如下:

  • F = 3, S = 1, P = 1(保持feature map大小不变)
  • F = 5, S = 1, P = 2(保持feature map大小不变)
  • F = 5, S = 2, P = ? (whatever fits)
  • F = 1, S = 1, P = 0(保持feature map大小不变)

这里的[x]代表对x进行下取整

注意:共有M个卷积核,比如第一个卷积核对图像进行卷积,由于图像共有3个通道,其实,这个卷积核就相当于有3个F * F大小的不相同的卷积模板分别对3个通道做卷积再逐相加,形成一个feature map,并不是只有一个F*F大小的卷积核分别对3个通道做卷积再相加(考虑一下,假如只有一个F * F大小的卷积核分别对3个通道做卷积再相加,那不就相当于3个通道直接相加,再和这个卷积核进行卷积吗?这样显然丢失了许多有用信息和重要特征啊!)

池化

设输入图像尺寸为W * W * 3,卷积核尺寸为F,步幅为S(池化时,例如最大池化或平均池化,S的大小通常小于等于F,使每个区域没有重叠),池化一般化不用padding,也没有类似于卷积核个数的概念(所以经过pooling后,一般化channel不变,变的只是每个channel的大小),则经过该池化层后输出的图像尺寸为:

[(W-F)/S + 1 ] * [(W-F)/S + 1] * 3

常见的F、S和P的设置如下:

  • F = 2, S = 2(feature map大小减半,channel不变)
  • F = 3, S = 2

这里的[x]代表对x进行下取整

参数个数

设当前层输入特征图尺寸为W * W * X,卷积核尺寸为F,步幅为S,Padding使用P,共有M个卷积核,则该卷积层的参数个数为:

(F * F * X+1) * M(一个feature map共享一个bias) = F * F * X * M(卷积核参数个数)+ M(bias参数个数)

  • 注:池化层没有参数(平均池化,最大池化)

图像卷积的过程如下,可以看到bias的个数就是卷积核的个数,即经过卷积后的feature map的数量:
在这里插入图片描述

FLOPs

  • FLOPS:全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。
  • FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。网上打字很容易全小写,造成混淆,本问题针对模型,应指的是FLOPs。
    现在不考虑activation function的运算。
  • 卷积层的FLOPs为:
    在这里插入图片描述
  • 1.Ci=input channel, k=kernel size, HW=output feature map size, Co=output channel.
  • 2.因为一个MAC算2个operations(包括乘法和加法)。不考虑bias时有-1,考虑bias时没有-1。上面针对的是一个input feature map,没考虑batch size。理解上面这个公式分两步,括号内是第一步,计算出output feature map的一个pixel,然后再乘以HWCo拓展到整个output feature map。括号内的部分又可以分为两步,

在这里插入图片描述
第一项是乘法运算数,第二项是加法运算数,因为n个数相加,要加n-1次,所以不考虑bias,会有一个-1,如果考虑bias,刚好中和掉,括号内变为:
在这里插入图片描述
全连接层:
在这里插入图片描述

  • 1.I=input neuron numbers, O=output neuron numbers.
  • 2.一个MAC算2个operations。不考虑bias时有-1,有bias时没有-1。分析同理,括号内是一个输出神经元的计算量,总共有O个输出神经元。

反卷积

在这里插入图片描述

参考

  • CNN 模型所需的计算力(flops)和参数(parameters)数量是怎么计算的?
  • 如何计算pytorch中的ConvTranspose2d(反卷积)的输出尺寸?

你可能感兴趣的:(深度学习)