2017-10-07 223 views
2

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

快速回答,这些颜色顺序是哪个?

  • RGB
  • BGR

和范围?

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

我注意到the file where the model is defined进口输入预处理:

from .imagenet_utils import preprocess_input 

但这种预处理是从来没有在文件的其余部分使用。

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

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

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

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

回答

3

模型重量从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:因为在RGB格式keras.preprocessing.image.load_img()加载图像,需要这种转换的VGG16(和朱古力移植所有型号)。
  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的训练范围。