使用Keras VGG型号的预期输入范围是多少?

时间:2017-10-07 16:20:59

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

我试图使用来自keras的预训练VGG 16。但我真的不确定输入范围应该是什么。

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

  • RGB
  • BGR

哪个范围?

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

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

from .imagenet_utils import preprocess_input

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

此外,当我检查code for this preprocessor时,它有两种模式:caffetf(tensorflow)。

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

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

那么,工作的最佳范围是什么?模型权重的范围是什么?

1 个答案:

答案 0 :(得分:10)

模型权重是从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)
  3. 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训练的范围。