在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?是否有任何关于此的一致性,还是特定于使用的预训练模型?
答案 0 :(得分:4)
始终在相应的模型级模块中使用preprocess_input
功能。也就是说,对keras.applications.inception_v3.preprocess_input
使用InceptionV3
,keras.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中的示例。