以张量流亭亭玉立的ResNet-50中的图像
我在张量流亭亭玉立中使用ResNet-50模型来提取特征。我的问题是,在摄取图像之前,是否需要根据一些标准ResNets-50平均值将图像居中?我知道vgg-19 tf-slim提供了使用中定义的 _mean_image_subtraction(image, means)
进行对中的选项。但是我找不到ResNets的任何这样的文件或功能。以张量流亭亭玉立的ResNet-50中的图像
我相信你也应该使用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,
}
您也可以从train_image_classifier.py验证使用preprocessing_factory.get_preprocessing()
:
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)
)批处理,而不是针对单个图像或整个数据集。
这正是我想知道,如果有需要减去手段。许多框架调整原始模型,以便可以从所有ResNet模型中减去相同的平均值。因此,知道它是否必须在tf-slim中完成是合理的,如果是,那么特定网络的平均值是多少。 –
手段必须计入特定的数据集,而不是特定的网络。你也可以看[这里](http://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#cv2.normalize)做另一种正常化的方法 – Dmitry
通过网络的意思,我的意思是最初训练网络的图像。在转移学习中,从原始数据集中减去平均值是非常标准的做法。供您参考 - https://github.com/vlfeat/matconvnet/issues/485 –
完美。这是我正在寻找的。尽管它对于ResNets也有vgg_preprocessing,但这很奇怪。他们应该为此设置一个通用名称。 –