我试图使用来自keras的预训练VGG 16。但我真的不确定输入范围应该是什么。
快速回答,这些颜色顺序中的哪一个?
哪个范围?
我注意到the file where the model is defined导入了一个输入预处理器:
from .imagenet_utils import preprocess_input
但是这个预处理器从未在文件的其余部分使用过。
此外,当我检查code for this preprocessor时,它有两种模式:caffe
和tf
(tensorflow)。
每种模式的工作方式不同。
最后,我无法在互联网上找到一致的文档。
那么,工作的最佳范围是什么?模型权重的范围是什么?
答案 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')
所做的。
keras.preprocessing.image.load_img()
以RGB格式加载图像,所以VGG16(以及从caffe移植的所有模型)都需要进行此转换。(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训练的范围。