我们能否将尺寸可变的图像作为卷积神经网络的输入以进行目标检测?如果可能,我们该怎么做?
但是,如果我们尝试裁切图像,则会丢失图像的某些部分,如果尝试调整大小,则会丢失图像的清晰度。如果将图像清晰度作为主要考虑因素,这是否意味着使用固有的网络属性是最好的?
我们能否将尺寸可变的图像作为卷积神经网络的输入以进行目标检测?如果可能,我们该怎么做?
但是,如果我们尝试裁切图像,则会丢失图像的某些部分,如果尝试调整大小,则会丢失图像的清晰度。如果将图像清晰度作为主要考虑因素,这是否意味着使用固有的网络属性是最好的?
Answers:
有很多方法可以做到这一点。在StackOverflow,Quora和其他内容网站上的许多帖子中已经介绍了其中大多数内容。
总之,列出的大多数技术可以分为两类解决方案,即
在转换中,可以查找诸如
人们还可以研究具有固有属性的网络,以通过构建网络的层行为来不受输入大小的影响。例如,
完全卷积网络(FCN),对输入大小完全没有限制,因为一旦描述了内核和步长大小,每一层的卷积就可以根据相应的输入生成适当的维数输出。
空间金字塔池(SPP),FCN没有完全连接的密集层,因此与图像大小无关,但是说如果要使用密集层而不考虑输入变换,那么有一篇有趣的论文可以解释深度学习网络。
PS我可能会因为一些技巧而错过。不声称这是详尽的清单。
卷积层和池化层本身与输入维无关。但是,对于不同大小的图像,卷积层的输出将具有不同的空间大小,如果以后我们有一个完全连接的层(因为我们的完全连接的层需要固定大小的输入),这将引起问题。有几种解决方案:
1.全局池:避免在卷积层末端使用完全连接的层,而是使用池(例如全局平均池)来将要素图的形状从(N,H,W,C)减少(在全局池之前) )塑造(N,1,1,C)(在全局池之后),其中:
N =小批量样本的数量
H =特征图的空间高度
W = 特征图的空间宽度
C =特征图(通道)的数量
As可以看出,输出维数(N * C)现在独立于特征图的空间大小(H,W)。如果进行分类,则可以继续在顶部使用完全连接的层来获取类的登录信息。
2.可变大小的池:使用可变大小的池区域来针对不同的输入大小获得相同的要素图大小。
3.裁剪/调整大小/填充输入图像:您可以尝试重新缩放/裁剪/填充输入图像,使它们都具有相同的形状。
我今天必须解决这个问题,所以我想分享一下我发现可行的内容。我发现网络上有很多“理论上可行的”答案和花絮,但实际却很少,“这是您具体实现的方式”。
为了使用Tensorflow Keras实施此操作,我必须执行以下操作。也许其他人可以发现其中一些可以修改,放松或删除。
请注意,调用Model.predict确实抱怨性能-考虑到该解决方案的低效率,这不足为奇-但这确实有效!