具有自定义模型的Tensorflow lite示例 - " input_product_scale< output_scale不正确"

时间:2017-11-26 20:53:45

标签: tensorflow tensorflow-lite

如何重现:
使用命令重新训练一个mobilenet:

public void openGmail(Activity activity) {
    Intent emailIntent = new Intent(Intent.ACTION_VIEW);
    emailIntent.setType("text/plain");
    emailIntent.setType("message/rfc822");
    emailIntent.setData(Uri.parse("mailto:"+activity.getString(R.string.mail_to)));
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, activity.getString(R.string.app_name) + " - info ");
    final PackageManager pm = activity.getPackageManager();
    final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0);
    ResolveInfo best = null;
    for (final ResolveInfo info : matches)
        if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail"))
            best = info;
    if (best != null)
        emailIntent.setClassName(best.activityInfo.packageName, best.activityInfo.name);
    activity.startActivity(emailIntent);
}

python tensorflow/tensorflow/examples/image_retraining/retrain.py —image_dir (data-pwd) —learning_rate=0.001 —testing_percentage=20 —validation_percentage=20 —train_batch_size=32 —validation_batch_size=-1 —flip_left_right True —random_scale=30 —random_brightness=30 —eval_step_interval=100 —how_many_training_steps=200 —architecture mobilenet_1.0_224_quantized —default_ranges_min=0 —default_ranges_max=6 —std_values=224 —mean_values=224 mean values并没有真正有所作为 - 尝试了不同的组合。
然后我像这样转换了生成的.pb文件:

std_values

然后我在两个股票应用程序中都被替换了:iOS简单和Android相机示例应用程序tflite模型与生成的一个。这导致了同样的错误:

错误:
Android:

bazel-bin/tensorflow/contrib/lite/toco/toco --input_file=(path)/output_graph.pb --input_format=TENSORFLOW_GRAPHDEF 
--output_format=TFLITE 
--output_file=./mobilenet_quantized_224.tflite --inference_type=QUANTIZED_UINT8 
--input_type=QUANTIZED_UINT8 --input_array=Placeholder --output_array=final_result 
--input_shape=1,224,224,3
--output_array=final_result --input_shape=1,224,224,3

iOS:

Can not allocate memory for the given inputs: 
tensorflow/contrib/lite/kernels/kernel_util.cc:34 
input_product_scale < output_scale was not true.

问题:
怎么解决......错误? :)

编辑,因为我正在添加赏金: 目标是获得如何重新训练模型并使其与tensorflow lite一起运行的解释。我知道这是非常新的,但我在文档中左右错误地运行。

1 个答案:

答案 0 :(得分:1)

以下内容对您不起作用吗?

bazel-bin / tensorflow / contrib / lite / toco / toco --input_file =(path)/output_graph.pb --input_format = TENSORFLOW_GRAPHDEF --output_format = TFLITE --output_file =。/ mobilenet_quantized_224.tflite - -inference_type = QUANTIZED_UINT8 --input_type = QUANTIZED_UINT8 --input_array =占位符--output_array = final_result --input_shape = 1,224,224,3 --mean_values = 128 --std_values = 128 --default_ranges_min = 0 --default_ranges_max = 6

我已经重现了您所看到的错误,并且能够使用以下命令:

python tensorflow/tensorflow/examples/image_retraining/retrain.py \
  --image_dir /tmp/flower_photos \
  --learning_rate=0.001 \
  --testing_percentage=20 \
  --validation_percentage=20 \
  --train_batch_size=32 \
  --validation_batch_size=-1 \
  --flip_left_right True \
  --random_scale=30 \
  --random_brightness=30 \
  --eval_step_interval=100 \
  --how_many_training_steps=200 \
  --architecture mobilenet_1.0_224_quantized

bazel-bin/tensorflow/contrib/lite/toco/toco \
  --input_file=/tmp/output_graph.pb \
  --input_format=TENSORFLOW_GRAPHDEF \
  --output_format=TFLITE \
  --output_file=/tmp/mobilenet_quantized_224.tflite \
  --inference_type=QUANTIZED_UINT8 \
  --input_type=QUANTIZED_UINT8 \
  --input_array=Placeholder \
  --output_array=final_result \
  --input_shape=1,224,224,3 \
  --mean_value=128 \
  --std_value=128 \
  --default_ranges_min=0 \
  --default_ranges_max=6

请告诉我这是否适合您。