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

xiaoxiao2025-05-14  39

尺寸大小

卷积

设输入图像尺寸为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(反卷积)的输出尺寸?
转载请注明原文地址: https://www.6miu.com/read-5030064.html

最新回复(0)