我在tensorflow-slim中使用ResNet-50模型来提取功能。我的问题是,在输入图像之前,我是否需要根据一些标准ResNets-50平均值对图像进行居中?我知道对于vgg-19,tf-slim提供了使用
_mean_image_subtraction(image, means)
中定义的vgg_preprocessing.py
进行居中的选项。但我找不到ResNets的任何此类文件或功能。
我相信你也应该使用vgg_preprocessing
。来自get_preprocessing()
的preprocessing_factory.py:
preprocessing_fn_map = {
'cifarnet': cifarnet_preprocessing,
'inception': inception_preprocessing,
'inception_v1': inception_preprocessing,
'inception_v2': inception_preprocessing,
'inception_v3': inception_preprocessing,
'inception_v4': inception_preprocessing,
'inception_resnet_v2': inception_preprocessing,
'lenet': lenet_preprocessing,
'mobilenet_v1': inception_preprocessing,
'resnet_v1_50': vgg_preprocessing,
'resnet_v1_101': vgg_preprocessing,
'resnet_v1_152': vgg_preprocessing,
'resnet_v1_200': vgg_preprocessing,
'resnet_v2_50': vgg_preprocessing,
'resnet_v2_101': vgg_preprocessing,
'resnet_v2_152': vgg_preprocessing,
'resnet_v2_200': vgg_preprocessing,
'vgg': vgg_preprocessing,
'vgg_a': vgg_preprocessing,
'vgg_16': vgg_preprocessing,
'vgg_19': vgg_preprocessing,
}
您还可以验证preprocessing_factory.get_preprocessing()
使用train_image_classifier.py:
preprocessing_name = FLAGS.preprocessing_name or FLAGS.model_name
image_preprocessing_fn = preprocessing_factory.get_preprocessing(
preprocessing_name,
is_training=True)
...
image = image_preprocessing_fn(image, train_image_size, train_image_size)
是的,您应该居中(标准化)图像。应该做更好的模型融合。
如果没有用于ResNet的此图像处理操作的默认tf-slim
方法,您可以基于this变体进行自己的实现
另外,对于整个训练批次计算means
(来自_mean_image_subtraction(image, means)
)更有用,而不是单个图像或整个数据集。