首页 文章

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

提问于
浏览
1

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

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函数吗?

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

1 回答

  • 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中的示例 .

相关问题