【问题标题】:What is the expected input range for working with Keras VGG models?使用 Keras VGG 模型的预期输入范围是多少?
【发布时间】:2018-03-19 05:53:11
【问题描述】:

我正在尝试使用来自 keras 的预训练 VGG 16。但我真的不确定输入范围应该是多少。

快速回答,这些颜色顺序中的哪一个?

  • RGB
  • BGR

以及哪个范围?

  • 0 到 255?
  • 从大约 -125 到大约 +130 平衡?
  • 0 到 1?
  • -1 到 1?

我注意到the file where the model is defined 导入了一个输入预处理器:

from .imagenet_utils import preprocess_input

但是这个预处理器从不在文件的其余部分中使用。

另外,当我检查code for this preprocessor 时,它有两种模式:caffetf(张量流)。

每种模式的工作方式不同。

最后,我在互联网上找不到一致的文档。

那么,工作的最佳范围是多少?模型权重训练到什么范围?

【问题讨论】:

    标签: python tensorflow image-processing keras vgg-net


    【解决方案1】:

    模型权重是从 caffe 移植过来的,所以在 BGR format

    Caffe 使用 BGR 颜色通道方案来读取图像文件。这是 由于 imread 的底层 OpenCV 实现。假设 RGB 是一个常见的错误。

    你可以找到原始的caffe模型权重文件on VGG website。这个链接也可以在 Keras 文档中找到。

    我认为第二个范围是最接近的。训练期间没有缩放,但作者减去了 ILSVRC2014 训练集的平均值。如the original VGG paper 2.1 节所述:

    我们做的唯一预处理是减去平均 RGB 值, 根据每个像素在训练集上计算。

    这句话其实是imagenet_utils.preprocess_input(mode='caffe')做的。

    1. 从 RGB 转换为 BGR:因为 keras.preprocessing.image.load_img() 以 RGB 格式加载图像,所以 VGG16(以及从 caffe 移植的所有模型)需要此转换。
    2. 减去平均 BGR 值:从图像数组中减去 (103.939, 116.779, 123.68)

    vgg16.py 中未使用预处理器。它被导入到文件中,以便用户可以通过调用keras.applications.vgg16.preprocess_input(rgb_img_array) 来使用预处理功能,而无需关心模型权重来自何处。 preprocess_input() 的参数始终是 RGB 格式的图像数组。如果模型是用 caffe 训练的,preprocess_input() 会将数组转换为 BGR 格式。

    请注意,函数preprocess_input() 不打算从imagenet_utils 模块调用。如果您使用 VGG16,请致电keras.applications.vgg16.preprocess_input(),图像将转换为适合 VGG16 训练的格式和范围。同样,如果您使用的是 Inception V3,请致电 keras.applications.inception_v3.preprocess_input(),图像将转换为 Inception V3 训练的范围。

    【讨论】:

      猜你喜欢
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2020-08-30
      • 2021-06-24
      相关资源
      最近更新 更多