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

2023-12-25

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

我的问题如下。如果我训练 FCN128x128x3图像,是否可以提供尺寸的图像256x256x3, or B)128x128,或 C)两者都不是,因为训练和测试期间的输入必须相同?

考虑一下post #1 https://stackoverflow.com/questions/38241234/fully-convolution-networks-with-varied-inputs。在这篇文章中,它建议图像在输入和输出期间必须具有相同的尺寸。这对我来说很有意义。

SO post #2 https://stackoverflow.com/questions/39050557/fully-convolutional-network-training-image-size:在这篇文章中,它建议我们可以在测试期间转发不同大小的图像,如果您执行一些奇怪的挤压操作,这就成为可能。完全不确定这怎么可能。

SO post #3 https://stackoverflow.com/questions/57331860/how-does-input-image-size-influence-size-and-shape-of-fully-connected-layer:在这篇文章中,它建议只需要深度相同,而不需要高度和宽度相同。这怎么可能?

据我了解,底线是,如果我接受过训练128x128x3,然后从输入层到第一个卷积层,(1)发生的步数是固定的。最后,(2)固定的特征图大小,相应地,(3)固定数量的权重。如果我突然将输入图像尺寸更改为512x512x3,由于大小的差异,训练和测试的特征图根本无法进行比较UNLESS.

  1. 当我输入尺寸的图像时512x512,那么只有顶部128x128被考虑并且图像的其余部分被忽略
  2. 512x512 图像在输入网络之前会调整大小。

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


这是我的分解,

Post 1

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

Post 2

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

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

Post 3

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

结论

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

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

Edit 1:

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

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

希望这是有道理的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FCN 训练和测试期间的不同图像尺寸 的相关文章

随机推荐