Keras VGG16预处理输入模式

use*_*622 8 deep-learning keras tensorflow image-preprocessing vgg-net

我正在使用Keras VGG16模型

我已经看到,有一个preprocess_input方法可以与VGG16模型结合使用。该方法似乎在imagenet_utils.py中调用preprocess_input方法,方法(取决于大小写)在imagenet_utils.py中调用_preprocess_numpy_input方法

preprocess_inputmode哪些期待“朱古力”,“TF”,或“火炬”的说法。如果我在带有TensorFlow后端的Keras中使用模型,我应该绝对使用mode="tf"吗?

如果是,这是否是因为Keras加载的VGG16模型受过经过相同预处理(即,将输入图像的范围从[0,255]更改为输入范围[-1,1])的图像进行了训练?

另外,用于测试模式的输入图像也应进行此预处理吗?我相信最后一个问题的答案是肯定的,但我希望得到保证。

我希望Francois Chollet能够正确地做到这一点,但是看他是不是https://github.com/fchollet/deep-learning-models/blob/master/vgg16.py,或者我使用错了mode="tf"

更新信息

@FalconUA将我带到牛津VGG,那里有一个模型部分,其中包含16层模型的链接。通过以下模型 16层模型中的链接可以找到有关将preprocessing_input mode参数tf缩放为-1到1并caffe减去一些平均值的信息信息页面。在“说明”部分中,它说:

“在本文中,模型表示为经过比例抖动训练的配置D。输入图像应通过均值像素(而不是均值图像)相减为零。即,应减去以下BGR值:[103.939, 116.779,123.68]。”

Fal*_*nUA 9

mode这里是不是后端,而是大约在什么框架模型进行训练,并从移植。在与VGG16 的keras链接中,声明:

这些重量是从VGG在牛津发布的重量中得出的

因此,在Caffe中对VGG16和VGG19模型进行了训练,并将其移植到TensorFlow,因此mode == 'caffe'在这里(范围从0到255,然后提取均值[103.939, 116.779, 123.68])。

较新的网络,如MobileNet的ShuffleNet被训练上TensorFlow,所以mode'tf'对它们和输入是零为中心的范围从-1到1。

  • @user3731622 较新的架构正在使用 BatchNorm 和其他东西,他们发现将输出保持在 `-1 .. 1` 附近通常是好的,所以较新的东西,如 *Xception* 和 *MobileNet* 正在使用那种标准化,并且他们接受了最流行的框架的训练,即 TensorFlow 和 PyTorch。 (2认同)

Dmi*_*rii 5

根据我在 Keras 中训练 VGG16 的经验,输入应该是从 0 到 255,减去均值[103.939, 116.779, 123.68]。我试过转移学习(冻结底部并在顶部堆叠一个分类器),输入以 到-1为中心1,结果比0..255 - [103.939, 116.779, 123.68].