Dan*_*ler 7 python image-processing keras tensorflow vgg-net
我正在尝试使用来自keras的预训练VGG 16.但我真的不确定输入范围应该是什么.
快速回答,这些颜色订单中的哪一个?
哪个范围?
我注意到定义模型的文件导入了一个输入预处理器:
from .imagenet_utils import preprocess_input
Run Code Online (Sandbox Code Playgroud)
但是这个预处理器从未在文件的其余部分中使用.
此外,当我检查此预处理器的代码时,它有两种模式:caffe和tf(tensorflow).
每种模式都有不同的作
最后,我无法在互联网上找到一致的文档.
那么,工作的最佳范围是什么?模型权重的训练范围是多少?
Yu-*_*ang 11
模型权重是从caffe移植的,所以它是BGR格式.
Caffe使用BGR颜色通道方案来读取图像文件.这是由于imread的底层OpenCV实现.RGB的假设是一个常见的错误.
您可以在VGG网站上找到原始的caffe模型重量文件.此链接也可以在Keras文档中找到.
我认为第二个范围是最接近的范围.在训练期间没有缩放,但是作者已经减去了ILSVRC2014训练集的平均值.如最初的VGG文件第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训练的范围.