张量流模型的图像预处理参数

时间:2018-01-15 04:04:31

标签: android ios tensorflow

我有一个关于如何确定图像预处理参数的基本问题,例如 - “IMAGE_MEAN”,“IMAGE_STD”,用于各种张量流预训练模型。 TensorFlow的Android示例应用程序为ClassifierActivity.java(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/android/src/org/tensorflow/demo/ClassifierActivity.java)中的某个inception_v3模型提供了这些参数,如下所示 -

“如果你想使用TensorFlow for Poets codelab生成的模型,你需要设置IMAGE_SIZE = 299,IMAGE_MEAN = 128,IMAGE_STD = 128”

如何为其他TF模型确定这些参数

此外,在将TF模型转换为CoreML模型时,要在iOS上使用,还需要指定其他图像预处理参数(如 - red_bias,green_bias,blue_bias和image_scale),如代码段所示下面。以下参数适用于inception_v1_2016.pb模型。如果我想使用另一个预先训练的模型,如ResNet50,MobileNet等,我如何确定这些参数

tf_converter.convert(tf_model_path = 'inception_v1_2016_08_28_frozen.pb',
                 mlmodel_path = 'InceptionV1.mlmodel',
                 output_feature_names = ['InceptionV1/Logits/Predictions/Softmax:0'],
                 image_input_names = 'input:0',
                 class_labels = 'imagenet_slim_labels.txt',
                 red_bias = -1,
                 green_bias = -1,
                 blue_bias = -1,
                 image_scale = 2.0/255.0
                 )

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

不幸的是,各种ImageNet模型的预处理要求仍在记录中。 ResNet和VGG模型都使用相同的预处理参数。您可以在此处找到每个颜色通道的偏差:

https://github.com/fchollet/deep-learning-models/blob/master/imagenet_utils.py#L11

Inception_V3,MobileNet和其他模型的预处理可以在此仓库的各个模型文件中找到:https://github.com/fchollet/deep-learning-models

转换为Core ML时,您始终需要在每个通道的基础上指定预处理偏差。因此,对于VGG类型的预处理,您可以直接从链接到上面的代码复制每个通道的偏差。值得注意的是,在缩放之前应用(添加)偏差是非常重要的。您可以在此处详细了解如何设置正确的值:http://machinethink.net/blog/help-core-ml-gives-wrong-output/

您发布的转换代码看起来很适合MobileNet或Inception_V3模型,但不适用于VGG或ResNet。对于那些你需要的人:

tf_converter.convert(...
    red_bias=-123.68,
    green_bias=-116.78,
    blue_bias=-103.94
)

无需缩放。