深度网络的input大小问题总结

最近在用YOLO做遥感卫星图像的检测,但是所用的图像库图片大小从100*100~2000*2000的大小不等,也可能是因此使得最后的检测效果不好。所以令人深思的问题是检测网络的输入大小的问题,到底是由什么决定的?甚至分类网络的输入大小是根据什么决定的?

印象中SSPNet解决的问题之一就是网络输入大小问题:
blog.csdn.net/chenriwei2/article/details/38047119:
“由于之前的大部分CNN模型的输入图像都是固定大小的(大小,长宽比),比如NIPS2012的大小为224X224,而不同大小的输入图像需要通过crop或者warp来生成一个固定大小的图像输入到网络中。这样子就存在问题,1.尺度的选择具有主观性,对于不同的目标,其最适合的尺寸大小可能不一样,2.对于不同的尺寸大小的图像和长宽比的图像,强制变换到固定的大小会损失信息;3.crop的图像可能不包含完整的图像,warp的图像可能导致几何形变。所以说固定输入到网络的图像的大小可能会影响到他们的识别特别是检测的准确率;”

mine: 为什么都是固定输入???再看一遍tensorflow的mnist的输入设置以及后面全连接层的权重设置:

x_image = tf.reshape(x, [-1,28,28,1])  #转换输入数据shape,以便于用于网络中
...
W_fc1 = weight_variable([7 * 7 * 64, 1024])

就算忽略前面输入的大小,但是后面全连接的权重数量是得设置好的。

原来别人也有解释:“为什么CNN需要固定输入图像的大小,卷积部分不需要固定图像的大小(它的输出大小是跟输入图像的大小相关的),有固定输入图像大小需求的是全连接部分,由它们的定义我们可以知道,全连接部分的参数的个数是需要固定的。综上我们知道,固定大小这个限制只是发生在了网络的深层(高层)处。”

而SSPNet: "文章利用了空间金字塔池化(spatial pyramidpooling(SPP))层来去除网络固定大小的限制,也就是说,将SPP层接到最后一个卷积层后面,SPP层池化特征并且产生固定大小的输出,它的输出然后再送到第一个全连接层。也就是说在卷积层和全连接层之前,我们导入了一个新的层,它可以接受不同大小的输入但是产生相同大小的输出;这样就可以避免在网络的输入口处就要求它们大小相同,也就实现了文章所说的可以接受任意输入尺度;"

而RoI Pooling Layer:事实上,RoI Pooling Layer是SPP-Layer的简化形式。SPP-Layer是空间金字塔Pooling层,包括不同的尺度;RoI Layer只包含一种尺度,如论文中所述7*7。这样对于RoI Layer的输入(r,c,h,w),RoI Layer首先产生7*7个r*c*(h/7)*(w/7)的Block(块),然后用Max-Pool方式求出每一个Block的最大值,这样RoI Layer的输出是r*c*7*7。

回归原来的问题,为啥YOLOv2说至今只用到了卷积以及池化层,就可以更改输入的图像大小,并且还可以进行多尺度训练?这边我还是要去看YOLO的代码的。

你可能感兴趣的:(深度网络的input大小问题总结)