全卷积网络 - 训练数据中不同大小的图像

Posted

技术标签:

【中文标题】全卷积网络 - 训练数据中不同大小的图像【英文标题】:Fully convolutional network - different size of images in training data 【发布时间】:2017-12-27 09:52:50 【问题描述】:

我正在尝试使用 Keras 库、Tensorflow 后端对完全卷积神经网络进行建模。

我面临的问题是将不同大小的图像批量输入model.fit() 函数。训练集由不同大小的图像组成,从 768x501 到 1024x760。

不超过 5 张图像具有相同的尺寸,因此将它们分组似乎没有任何帮助。

Numpy 允许将数据以列表形式存储在单个变量中。但是 keras model.fit() 函数在接收列表类型训练数组时会抛出错误。

我不希望调整大小和丢失数据,因为我已经有一个非常小的数据集。

我该如何训练这个网络?

【问题讨论】:

您可以尝试填充较小的图像,使它们具有与最大图像相同的大小。如果这对您来说不是一个有效的解决方案,请尝试阅读this。到最后有人提出了和你一样的问题。 为什么不想调整数据大小?你有多少张图片? 我只有大约 1200 张图像用于训练。有些是 1024x(~650),有些是 768x(~520)。所以我所做的就是将它们分成两批并使用它们训练模型。我不想调整大小,因为我想使用纯粹未更改的数据。但似乎这是唯一的方法,或者填充。 所以,我正在训练一个全卷积网络。图像输入图像输出类型。所以我的输出图像与我的输入大小相同。我不明白的是,我已经使用输入形状作为(无,无,1)进行了训练。使用两批训练图像 - 1024x680 和 760x520。但是当我输入大小为 1024x720 的输入时,它会预测大小为 1024x680 的输出,这对应于我的训练批量大小之一。如何创建一个可以输入任意大小的输入图像以产生所需输出的网络 - 与输入图像大小相同的图像。 调整大小或裁剪是要走的路。 【参考方案1】:

我认为 空间金字塔池 (SPP) 可能会有所帮助。看看这个paper。

我们注意到 SPP 对于深度 CNN 有几个显着的特性:

1) 无论输入大小如何,SPP 都能够生成固定长度的输出,而之前的深度网络中使用的滑动窗口池不能;

2) SPP 使用多级空间箱,而滑动窗口池仅使用单个窗口大小。多级池化已被证明对对象变形具有鲁棒性;

3) 由于输入尺度的灵活性,SPP 可以汇集以可变尺度提取的特征。通过实验,我们表明所有这些因素都提高了深度网络的识别准确率。

yhenon 实现了SPP for Keras on Github。

【讨论】:

以上是关于全卷积网络 - 训练数据中不同大小的图像的主要内容,如果未能解决你的问题,请参考以下文章

语义分割--全卷积网络FCN详解

全卷积网络FCN

用于语义分割的全卷积神经网络

全卷积网络(FCN)实战:使用FCN实现语义分割

卷积神经网络不同隐藏层卷积核都是一样的吗

2.3全卷积网络(FCN)与图像分割