卷积、池化操作的尺寸变化

用代码看下各层信息(以ResNet18为例)

model=models.resnet18(weights=models.ResNet18_Weights.IMAGENET1K_V1) #初始化模型
print(model) #查看模型层信息
summary(model,(1,3,224,224)) #输入输出信息

从上图得知,用了64个3通道的卷积核(尺寸7,步长2,扩充3)、池化核尺寸3步长2扩充1

对于(1,3,224,224)的输入,卷积后输出64个112*112的特征图,池化后输出64个56*56的特征图

卷积和池化后尺寸计算公式,默认向下取整

 

三个关键词:

    • kernel_size——卷积核大小
    • padding——边缘扩充,一般四周填充0
    • stride——卷积核移动步长

卷积核会按步长遍历图像,把卷积核框住的像素进行卷积(对应像素相乘求和)得到1个中心像素值(例如3*3的核9个像素用1个像素代表)。卷积就是把卷积核范围内的像素变成中心一个像素

 如果遍历后图像尺寸不变,那么步长取1,且扩充p=(k-1)/2

为了使卷积核的中心可以遍历边缘的像素,所以通过padding扩充原图。

另一个案例

上图中网络结构:2个卷积层(Convolutions)+2个池化层(Subsampling)+3个全连接层(Full connection)

上图中数据的计算:

32*32如何得到28*28,5*5的卷积核(默认步长为1,无pading)遍历图像,图像边缘处上下左右各丢失2行(列)像素,所以32-4=28。

14*14如何得到10*10,计算同上,14-4=10。

28*28→14*14与10*10→5*5是如何得到的,下述代码中池化层设置的是2,即图像大小除2

@前的1→6→16是如何得到的,1是32*32的原图为单通道(RGB图要写成3),6、16是下述代码中卷积层设置的。

16@5*5即400→120→84→10是如何得到的,120、84是下述代码中全连接层设置的,10是类别数(即分10类问题,如果是分猫狗两类,那就是2)

值得注意的是上图的16@5*5中的5*5(下图绿框)是计算出来的:1、10是单通道图,10分类问题。其他数据可以自己设定。

32*32原图→经5*5卷积→28*28图→经池化层参数2→14*14图→经5*5卷积→10*10图→经池化层参数2→5*5图

posted @ 2020-04-23 18:59  夕西行  阅读(1310)  评论(0编辑  收藏  举报