在微调预训练模型的同时,在Keras中预处理图像的正确方法是什么

时间:2018-02-08 03:37:29

标签: python machine-learning deep-learning keras

在keras.applications中为我们自己的数据微调预训练模型时,在Keras中预处理数据的正确方法是什么?

Keras提供以下preprocess_input功能

keras.applications.imagenet_utils.preprocess_input

keras.applications.inception_v3.preprocess_input

keras.applications.xception.preprocess_input

keras.applications.inception_resnet_v2.preprocess_input

在内部看来,对于inception_v3,xception和inception_resnet_v2,它使用mode='tf'调用keras.applications.imagenet_utils.preprocess_input。而对于其他模型,它设置mode='caffe',每个模型执行不同的转换。

在关于Francois chollet转移学习的博客文章中 - https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html - 通过255的除法将其归一化为[0, 1]。不应该使用Keras中的preprocess_input函数吗? / p>

还不清楚输入图像是RGB还是BGR?是否有任何关于此的一致性,还是特定于使用的预训练模型?

1 个答案:

答案 0 :(得分:4)

始终在相应的模型级模块中使用preprocess_input功能。也就是说,对keras.applications.inception_v3.preprocess_input使用InceptionV3keras.applications.resnet50.preprocess_input使用ResNet50

mode参数指定训练原始模型时使用的预处理方法。 mode='tf'表示预训练的权重是从TF转换的,其中作者训练的模型具有[-1, 1]输入范围。 mode='caffe'mode='torch'也是如此。

applications.*.preprocess_input的输入始终为RGB。如果模型需要BGR输入,则将在preprocess_input内置换通道。

您提到的博客文章是在keras.applications模块推出之前发布的。我不建议将其用作keras.applications转移学习的参考。也许最好再尝试docs中的示例。