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

cde*_*roy 8 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,它调用keras.applications.imagenet_utils.preprocess_inputmode='tf'。对于其他模型,它会设置mode='caffe'每个模型执行不同的转换。

在博客文章迁移学习从弗朗索瓦CHOLLET - https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html -它归到[0, 1]通过划分255。不应该使用Keras中的preprocess_input函数吗?

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

Yu-*_*ang 8

始终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。也许最好改为尝试文档中的示例。

  • 您也可以尝试在ImageNet上验证模型性能(准确性等)。如果预训练模型的性能与作者声称的性能相匹配,则预处理可能是正确的。 (2认同)