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

标签 deep-learning

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

最佳答案

你没有说你在说什么架构。既然你说你想对图像进行分类,我假设它是一个部分卷积、部分完全连接的网络,如 AlexNet、GoogLeNet 等。一般来说,你的问题的答案取决于你正在使用的网络类型。

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

如果您使用的是完全连接的单元,那么您就会遇到麻烦:这里您的网络必须使用固定数量的学习权重,因此不同的输入将需要不同数量的权重 - 这是不可能的.

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

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

填充选项可能会给网络的预测带来额外的误差源,因为网络可能(阅读:可能会)偏向于包含此类填充边框的图像。 如果您需要一些想法,请查看Images TensorFlow 文档的部分中,有诸如 resize_image_with_crop_or_pad 之类的内容,可以消除更大的工作。

至于不关心挤压,here's著名的 Inception 网络的一段预处理管道:

# 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)

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

根据您想要或需要走多远,实际上有一篇论文 here称为“用于视觉识别的深度卷积网络中的空间金字塔池”,它通过以非常特殊的方式处理任意大小的输入。

关于deep-learning - 当图像大小不同时,如何格式化图像数据以进行训练/预测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41907598/

相关文章:

python - 如何在keras中使用model.fit_generator

machine-learning - 在下面的示例中,避免过度拟合的最佳时期是什么?

python - 通过重复最后一个元素来填充张量( tensorflow )

c - 如何找出卡住的 tensorflow 图的正确输入和输出操作?

python - 如何跟踪使用 CPU 与 GPU 进行深度学习的时间?

python - 使用 ImageDataGenerator 时的 Keras 分割训练测试集

neural-network - Caffe 分割网络 - softmax_loss_layer 错误

java - Deeplearning4j 将模型解析为数据集

deep-learning - Faster-RCNN bbox/图像标准化

python - 如何使用pytorch中的检查点模型文件来测试CIFAR-10数据集?