当图像大小不同时,如何格式化图像数据以进行训练/预测?


87

我正在尝试训练对图像进行分类的模型。我的问题是,它们的大小不同。我应该如何格式化我的图像/或模型架构?


2
请显示您到目前为止已尝试过的方法,以及似乎对您不起作用的方法。
基思·约翰·哈奇森

16
到处都是Inception v4的代码。我不同意这种现成的评论。多一点输入将是很好的-就像我们正在谈论的是哪种网络-但完全没有道歉的理由。那一个真正的问题。
赛德赛

4
问题是ImageNet如何格式化其图像数据以用于培训?
mskw

Answers:


147

您没有说出您在谈论什么架构。既然您说过要对图像进行分类,我假设它是一个部分卷积,部分完全连接的网络,例如AlexNet,GoogLeNet等。通常,问题的答案取决于您所使用的网络类型。

例如,如果您的网络仅包含卷积单元(也就是说,不包含完全连接的层),则它可能与输入图像的大小无关。这样的网络可以处理输入图像,然后返回另一个图像(“一直卷积”);当然,您必须确保输出符合您的期望,因为您必须以某种方式确定损失。

但是,如果您使用的是完全连接的设备,那么麻烦就大了:在这里,您必须使用固定数量的网络学习权重,因此,不同的输入将需要不同数量的权重-这是不可能的。

如果这是您的问题,则可以执行以下操作:

  • 不用担心挤压图像。无论如何,网络可能会学会理解内容。缩放和透视对内容有什么意义吗?
  • 将图像中心裁切为特定尺寸。如果您担心丢失数据,请进行多次裁剪,然后使用这些裁剪来增强输入数据,以便将原始图像拆分为N正确大小的其他图像。
  • 将纯色图像填充到平方大小,然后调整大小。
  • 结合起来做。

填充选项可能会为网络的预测引入其他错误源,因为网络可能(读为:可能会)偏向包含此类填充边框的图像。如果您需要一些想法,请查看TensorFlow文档的“ 图像”部分,其中的类似内容可以省去resize_image_with_crop_or_pad更大的工作。

至于不关心压榨,是著名的盗梦空间网络的预处理管道的一部分:

# This resizing operation may distort the images because the aspect
# ratio is not respected. We select a resize method in a round robin
# fashion based on the thread number.
# Note that ResizeMethod contains 4 enumerated resizing methods.

# We select only 1 case for fast_mode bilinear.
num_resize_cases = 1 if fast_mode else 4
distorted_image = apply_with_random_selector(
    distorted_image,
    lambda x, method: tf.image.resize_images(x, [height, width], method=method),
    num_cases=num_resize_cases)

他们完全意识到了这一点,并且无论如何都会这样做。

根据多远你想要或需要去,实际上是一纸在这里被称为空间金字塔池深卷积网络从视觉上识别,通过在一个非常特殊的方式处理它们的手柄任意大小的输入。


11
当您处理对象检测和实例分割时,此主题似乎要复杂得多,因为如果图像数据的方差很大,则锚框的大小(也是超参数)需要进行调整。
CMCDragonkai '18

纵横比对于区分圆形和椭圆形的网络起着非常重要的作用。
HelloGoodbye

1
另一个普遍的看法是,批次不一定必须具有相同的尺寸。第一批可以处理4:3的图像,第二批可以处理16:9的图像,只要能够处理密集的图层即可。
sunside

1
@Tobitor,始终使网络的输入尽可能接近实际(测试或推理时间)数据。如果所有图像的宽度都比高度宽,则还应该对网络建模以像这样处理图像。就是说,如果您无法说出“使用”数据的外观,则必须在训练过程中做出一些牺牲。在那种情况下,将图像的尺寸从1000x200调整为256x256通常是可以的(想象一下以60度角看那个车牌-现在非常粗略地正方形)。
sunside

2
@Tobitor完全不需要图像是正方形的,如果您不知道推理过程中的实际图像大小,则恰好是最坏的折衷方案。:^)至于大小,越小越好,但是图像必须足够大以仍然捕获最精细的必需细节-一般来说,请记住,如果您作为人类专家,无法确定其中的内容,图像,网络也将无法运行。
海滨

11

尝试制作一个空间金字塔池化层。然后将其放在最后一个卷积层之后,以使FC层始终获得恒定的维向量作为输入。在训练期间,使用特定图像大小训练一个时期的整个数据集的图像。然后在下一个时代,切换到其他图像尺寸并继续训练。


与常规池相比,您能否详细说明什么是“空间金字塔池”?
Matthieu

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.