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

前言

在图像识别,目标检测等任务中经常用到预训练的模型,比如在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准确率 参数数目 深度 默认输入
Xception 88MB 0.790 0.945 22,910,480 126 299x299
VGG16 528MB 0.715 0.901 138,357,544 23 224x224
VGG19 549MB 0.727 0.910 143,667,240 26 224x224
ResNet50 99MB 0.759 0.929 25,636,712 168 224x224
InceptionV3 92MB 0.788 0.944 23,851,784 159 299x299
IncetionResNetV2 215MB 0.804 0.953 55,873,736 572 299x299
MobileNet 17MB 0.665 0.871 4,253,864 88 224x224

 

没有更多推荐了,返回首页