tensorflow - FCN 训练和测试期间的不同图像尺寸

标签 tensorflow machine-learning neural-network convolution image-segmentation

我正在阅读多个相互冲突的 Stackoverflow 帖子,我对现实情况感到非常困惑。

我的问题如下。如果我在 128x128x3 图像上训练 FCN,是否可以提供大小为 256x256x3 或 B)128x128 或 C) 的图像因为训练和测试期间的输入必须相同?

考虑这样post #1 。在这篇文章中,它建议图像在输入和输出期间必须具有相同的尺寸。这对我来说很有意义。

所以post #2 :在这篇文章中,它建议我们可以在测试期间转发不同大小的图像,如果您执行一些奇怪的挤压操作,则这是可能的。完全不确定这怎么可能。

所以post #3 :在这篇文章中,它建议只需要深度相同,而不需要高度和宽度相同。这怎么可能?

据我了解,底线是,如果我在128x128x3上训练,那么从输入层到第一个转换层,(1)有一个固定的数字所发生的进步。因此,(2) 是固定的特征图大小,相应地,(3) 是固定数量的权重。如果我突然将输入图像大小更改为 512x512x3,则由于大小差异除非,训练和测试的特征图根本无法进行比较。。 p>

  1. 当我输入尺寸为 512x512 的图像时,仅考虑顶部 128x128,而忽略图像的其余部分
  2. 512x512 图像在传送到网络之前会调整大小。

有人可以澄清一下吗?正如您所看到的,有多个帖子与此相关,但没有规范的答案。因此,每个人都同意的社区辅助答案将非常有帮助。

最佳答案

这是我的分割,

帖子 1

是的,这是做事的标准方式。如果您有可变大小的输入,您可以裁剪/填充/调整它们的大小,以便您的输入大小相同。

帖子 2

请注意,这个人正在谈论“全卷积网络”而不是“全连接网络”。在全卷积网络中,所有层都将是卷积层,只要 channel 尺寸固定,卷积层就不会消耗任意大小(宽度和高度)的输入。

标准卷积网络需要固定输入大小,因为在将卷积输出馈送到全连接层之前进行了“扁平化”。因此,如果去掉全连接层(即全卷积网络),就不会有这个问题。

帖子 3

它所说的内容与第 2 篇文章基本相同(在我看来)。总而言之,如果您的卷积网络具有完全连接的层,并且您尝试输入可变大小的输入,您将得到 RunTimeError 。但是如果你有一个卷积输出并且输入 7x7x512 (h x w x channel )输入您将得到 (1x1x<output_channel>)输出,如果您输入 8x8x512输入,你会得到 (2x2x<output_channel>)输出(由于卷积运算)。

结论

最重要的是,如果您的网络在某处具有完全连接的层,则您无法直接提供可变大小的输入(无需填充/裁剪/调整大小),但如果您的网络是完全卷积的,则可以。

我不知道也无法评论的一件事是概率图何时为 [None, n, n, num_classes]大小(如帖子 #2 中所示),如何将其变为 [None, 1, 1, num_classes]因为您需要这样做才能执行 tf.squeeze .

编辑 1:

卷积核/输入/输出的行为方式

我添加此部分是为了阐明当输入大小发生变化时,卷积运算的输入/输出/内核的行为方式。如您所见,输入的更改将更改大小(即高度和宽度尺寸)。但内核(形状为 [height x width x in_channels x out_channels] 在此更改期间不会受到影响。

enter image description here

希望这是有道理的。

关于tensorflow - FCN 训练和测试期间的不同图像尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57349403/

相关文章:

r:使用库读取 libsvm 文件(e1071)

python - tensorflow summary 需要提供一个占位符,但我不明白为什么

git - 具有大量图像的机器学习数据集的版本控制?

tensorflow - 在 tensorflow 中实现连体网络

python - 如何计算衡量评估者间一致性的科恩卡帕系数? (影评)

python - 如何使用 pybrain 黑盒优化训练神经网络以监督数据集?

postgresql - 在 Postgresql 中选择位掩码

machine-learning - 我如何将 bool 张量输入到 tf.cond() 而不仅仅是一个 bool 值?

python - tensorflow张量乘法的有效方法

tensorflow - 什么是 HIP,为什么不能在锐龙 3400g 上运行?