我有一个关于如何确定图像预处理参数的基本问题,例如 - “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
)
非常感谢任何帮助
答案 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
)
无需缩放。