【问题标题】:What is the expected input range for working with Keras VGG models?使用 Keras VGG 模型的预期输入范围是多少?
【发布时间】:2018-03-19 05:53:11
【问题描述】:
我正在尝试使用来自 keras 的预训练 VGG 16。但我真的不确定输入范围应该是多少。
快速回答,这些颜色顺序中的哪一个?
以及哪个范围?
- 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 时,它有两种模式:caffe 和tf(张量流)。
每种模式的工作方式不同。
最后,我在互联网上找不到一致的文档。
那么,工作的最佳范围是多少?模型权重训练到什么范围?
【问题讨论】:
标签:
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')做的。
- 从 RGB 转换为 BGR:因为
keras.preprocessing.image.load_img() 以 RGB 格式加载图像,所以 VGG16(以及从 caffe 移植的所有模型)需要此转换。
- 减去平均 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 训练的范围。