如何使卷积神经网络接受可变尺寸的输入?

我注意到,机器学习中许多关于卷积神经网络(CNN)的初学者示例都使用了MNIST数据集。这些图像的尺寸均为28×28,因此我们事先就知道输入的形状。如果输入图像尺寸可变,例如有些图像是56×56,有些是28×28,应该如何处理呢?

如果可能的话,我希望得到一个不依赖于特定语言和框架的答案,或者最好是用TensorFlow的术语来解释。


回答:

在某些情况下,适当调整图像尺寸(例如保持纵横比)就足够了。但是,这可能会引入失真,如果这种失真是有害的,另一种解决方案是使用空间金字塔池化(SPP)。不同图像尺寸的问题在于它会产生不同尺寸的层,例如,取某个网络的第n层的特征,你可能会得到一个尺寸为128*fw*fh的特征图,其中fwfh根据输入示例的尺寸而变化。SPP通过将这种可变尺寸的特征图转化为固定长度的特征向量来缓解这个问题。它在不同尺度上操作,通过将图像分成大小相等的块,并对这些块进行最大池化。我认为这篇论文对其解释得非常好。一个示例应用可以在这里看到这里

简单来说,假设你有一个尺寸为k*fw*fh的特征图。你可以将其视为k个形式为

X YZ T

的图,其中每个块的尺寸为fw/2*fh/2。现在,对每个块分别进行最大池化,你将得到一个尺寸为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

的特征平面,再次对每个块分别进行最大池化。这样,你获得了一个更细粒度的表示,作为一个长度为v=k*16的向量。

现在,将两个向量u=[v;w]连接起来,你就得到了一个固定尺寸的表示。这正是2尺度SPP所做的(当然,你可以更改分割的数量/尺寸)。

希望这对你有帮助。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注