为何含有全连接层的网络,需要固定输入图片大小?

前言

在图像识别,目标检测等任务中经常用到预训练的模型,比如在VGG16模型结构(除去最后一层)的基础上加上多个softmax层用来分类。在SSD中用预训练的VGG16和ResNet50作为特征提取层。

 

当你用到包含全连接层的预训练模型时,就需要固定固定输入图片的大小。

池化层需要经过Flatten压扁之后,才能和全连接成相连。

如上图,经过最后一个池化层和Flatten后的输出矩阵形状为(800,1)

全连接层的前向传播是当前层的权重W^{l}和上一层输出a^{l-1}的乘积。

而权重矩阵的形状是固定的,上图中是(500x800)

因此(500,800)x(800,1)  ===>  输出矩阵的shape:(500,1)

如果输入的尺寸不固定,无法前向传播。假设输入的56x56的图片,经过池化后输出(11x11)的特征图,Flatten后得到(1,6050)的形状,而下一层的权重是预训练的(500x800)的矩阵,因此无法计算,程序就会报错。

当然,也有特例,如SPPNet

SPPnet的提出就是为了解决全连接层的输入需要固定维度的问题。目标检测任务中,通过多尺度的ROI Pooling,使每个区域框都生成相同大小的特征向量,只要区域框的数量确定了,输入到全连接的特征向量的尺寸也就确定了,可以完成前向传播。

若全为卷积网络,则不需要固定大小。

因为卷积网络的参数之和卷积核的大小和输入输出的channel数有关,和图像的尺寸没关系。

因此,在一些深度学习框架中导入定义好的模型时,会提示你,如果包含顶部的全连接层,尺寸必须是固定的。

当include_top为True时,input_tensor必须为(224,224,3)

 

常见的预训练模型的参数

模型大小Top1准确率Top5准确率参数数目深度默认输入
Xception88MB0.7900.94522,910,480126299x299
VGG16528MB0.7150.901138,357,54423224x224
VGG19549MB0.7270.910143,667,24026224x224
ResNet5099MB0.7590.92925,636,712168224x224
InceptionV392MB0.7880.94423,851,784159299x299
IncetionResNetV2215MB0.8040.95355,873,736572299x299
MobileNet17MB0.6650.8714,253,86488224x224

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值