因此,我已经看到机器学习中的许多首批CNN示例都使用了MNIST数据集。每个图像都有28x28,因此我们知道输入的形状。如何对可变大小的输入进行此操作,假设您有一些56x56和28x28的图像。
如果可能的话,我正在寻找语言和框架无关的答案,或者在张量流句中寻找
答案 0 :(得分:2)
当您使用CNN进行分类任务时,您的网络有两部分:
特征生成器。零件生成尺寸为WF x HF
和CF
通道的要素图,尺寸为WI x HI
和CI
个通道。图像大小和要素图大小之间的关系取决于您的NN的结构(例如,池化层的数量和它们的步幅)。
分类。部分解决了具有WF*HF*CF
组件的分类向量的任务。
您可以将不同大小的图像放入要素生成器,并获取不同大小的要素图。但是分类器只能训练一些固定长度的矢量。因此,您显然会为您的网络训练一些固定大小的图像。如果您有不同大小的图像,请将其调整为输入网络大小,或裁剪图像的某些部分。
文章
中描述的另一种方式ķ。他,X。Zhang,S。Ren,J。Sun,“用于视觉识别的深度卷积网络中的空间金字塔池”,arXiv:1406.4729 2014
作者提供了空间金字塔池,它解决了CNN输入上不同图像的问题。但我不确定空间金字塔池是否存在于张量流中。
答案 1 :(得分:2)
在某些情况下,适当调整图像大小(例如保持宽高比)就足够了。但是,这会引入失真,如果这是有害的,另一种解决方案是使用空间金字塔池(SPP)。不同图像尺寸的问题在于它会生成不同大小的图层,例如,采用某些网络的n-th
图层的特征,您最终会得到一个大小为128*fw*fh
的要素图,其中fw
1}}和fh
根据输入示例的大小而有所不同。 SPP为缓解此问题所做的是将此可变大小的要素图转换为要素的固定长度向量。它通过将图像分成相等的补丁并对它们执行最大化来在不同的尺度上操作。我认为this paper在解释它方面做得很好。可以看到示例应用程序here。
作为一个快速解释,假设您有一个大小为k*fw*fh
的要素图。您可以将其视为表单的k
地图
X Y
Z T
其中每个块的大小为fw/2*fh/2
。现在,分别对每个块执行maxpooling会为您提供大小为4
的向量,因此,您可以将k*fw*fh
地图粗略地描述为k*4
固定大小的要素向量。
现在,调用此固定大小的向量w
并将其放在一边,这一次,将k*fw*fh
要素图视为k
要素图写为
A B C D
E F G H
I J K L
M N O P
再次,在每个块上单独执行maxpooling。因此,使用此方法,您可以获得更精细的表示形式,作为长度为v=k*16
的向量。
现在,连接两个向量u=[v;w]
可以得到一个固定大小的表示。这是2级SPP所做的事情(当然,您可以更改分区的数量/大小)。
希望这有帮助。