在官方的tensorflow resnet50模型上运行tflite准确性工具

时间:2018-10-12 23:01:11

标签: c++ tensorflow imagenet

我已经下载了此处提供的官方resnet50模型:https://github.com/tensorflow/models/tree/master/official/resnet。我需要该模型的tflite量化版本,因此我将模型转换为tflite格式,如下所示:

toco --output_file /tmp/resnet50_quant.tflite --saved_model_dir <path/to/saved_model_dir> --output_format TFLITE  --quantize_weights QUANTIZE_WEIGHTS

此后,我以为我可以运行tflite accuracy tool来验证此模型的准确性仍然合理。尽管看起来我遇到了以下问题:

bazel run -c opt --copt=-march=native --cxxopt='--std=c++11'   --   //tensorflow/contrib/lite/tools/accuracy/ilsvrc:imagenet_accuracy_eval --model_file=/tmp/resnet50_quant.tflite --ground_truth_images_path=<path/to/images> --ground_truth_labels=/tmp/validation_labels.txt --model_output_labels=/tmp/tf_labels.txt --output_file_path=/tmp/accuracy_output.txt --num_images=0
INFO: Analysed target //tensorflow/contrib/lite/tools/accuracy/ilsvrc:imagenet_accuracy_eval (0 packages loaded).
INFO: Found 1 target...
Target //tensorflow/contrib/lite/tools/accuracy/ilsvrc:imagenet_accuracy_eval up-to-date:
  bazel-bin/tensorflow/contrib/lite/tools/accuracy/ilsvrc/imagenet_accuracy_eval
INFO: Elapsed time: 14.589s, Critical Path: 14.28s
INFO: 3 processes: 3 local.
INFO: Build completed successfully, 4 total actions
INFO: Running command line: bazel-bin/tensorflow/contrib/lite/tools/accuracy/ilsvrc/imagenet_accuracy_eval '--model_file=/tmp/resnet50_quant.tflite' '--ground_truth_images_path=<path/to/images>' '--ground_truth_labels=/tmp/validation_labels.txt' '--model_output_labels=/tmp/tf_labels.txt' '--output_file_path=/tmp/accuracy_output.txt' 'INFO: Build completed successfully, 4 total actions
2018-10-12 15:30:06.237058: E tensorflow/contrib/lite/tools/accuracy/ilsvrc/imagenet_accuracy_eval.cc:155] Starting evaluation with: 4 threads.
2018-10-12 15:30:06.536802: E tensorflow/contrib/lite/tools/accuracy/ilsvrc/imagenet_accuracy_eval.cc:98] Starting model evaluation: 50000
2018-10-12 15:30:06.565334: W tensorflow/core/framework/op_kernel.cc:1273] OP_REQUIRES failed at run_tflite_model_op.cc:89 : Invalid argument: Data shapes mismatch for tensors: 0 expected: [64,224,224,3] got: [1,224,224,3]
2018-10-12 15:30:06.565453: F tensorflow/contrib/lite/tools/accuracy/ilsvrc/imagenet_model_evaluator.cc:222] Non-OK-status: eval_pipeline->Run(CreateStringTensor(image_label.image), CreateStringTensor(image_label.label)) status: Invalid argument: Data shapes mismatch for tensors: 0 expected: [64,224,224,3] got: [1,224,224,3]
     [[{{node stage_run_tfl_model_output}} = RunTFLiteModel[input_type=[DT_FLOAT], model_file_path="/tmp/resnet50_quant.tflite", output_type=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/device:CPU:0"](stage_inception_preprocess_output)]]

问题似乎是官方resnet模型的输入张量为[64,224,224,3],而精度工具提供的输入张量为[1,2,224,224,3]。因此,官方模型似乎预期会有64张图像,因此准确性工具会失败。

我想知道如何使精度工具在正式的resnet50模型上运行?我猜想,尽管resnet 50的输入张量为[64,224,224,3],但应该有一种方法仍然可以在模型中运行单个图像。

1 个答案:

答案 0 :(得分:0)

有两种解决方法:

  1. 将模型的输入大小调整为[1,224,224,3],然后运行该工具。 您可以尝试查看this,然后相应地修改this file

  2. 或者修改同一工具,使其一次只能输入64张图像,而不是1张。您可以查看我指向上面的同一代码文件,一次而不是1张输入64张。

如果您需要长期支持,请考虑在Github上提出功能请求,我们可以在此支持批处理。