MobileNet SSD V2转换的tflite模型的输出错误

时间:2020-02-25 05:12:32

标签: c++ android-ndk tf-lite

我正在使用TensorflowLite C ++ API在android上开发对象检测应用程序。当我将ssd_mobilenet_v2_coco_2018_03_29模型转换为tflite时,转换后的tflite模型的输出与相同测试图像上最初提供的.pb文件的输出不同。

将.pb文件转换为.tflite

终端命令(我使用this link来获得帮助。):

python3 object_detection/export_tflite_ssd_graph.py --pipeline_config_path=/content/ssd_mobilenet_v2_coco_2018_03_29/pipeline.config --trained_checkpoint_prefix=/content/ssd_mobilenet_v2_coco_2018_03_29/model.ckpt --output_directory=/tmp/tflite_graph --add_postprocessing_op=true

以上命令抛出错误:

google.protobuf.text_format.ParseError:109:7:消息类型 “ object_detection.protos.SsdFeatureExtractor”没有名为的字段 “ batch_norm_trainable”

按照建议的here步骤执行后,错误已解决。我从“ pipeline.config”文件中注释了“ batch_norm_trainable”标签。

但是,转换后的tflite模型的检测输出与原始提供的.pb文件的检测输出不同。如何将.pb文件转换为.tflite,以便.tflite文件提供正确的输出?

输出图像:

  1. 使用.pb(和.pbtxt)文件:pb_output_image1 pb_output_image2
  2. 使用转换后的.tflite文件:tflite_output_image1 tflite_output_image2

使用的版本:

  • 操作系统:Ubuntu 18.04
  • 设备:适用于arm64的QUALCOMM MSM8996(开发板)(Android 9),摩托罗拉一电源(Android 10)
  • TensorFlow版本(安装在Ubuntu上,用于转换):1.15
  • TensorFlow版本(适用于Android设备中使用的tflite,由源构建):2.1.0
  • Python版本:3.6.9
  • 挡板版本:2.0.0
  • GCC /编译器版本:8.3.0

任何帮助/指导都将不胜感激。

干杯:)

1 个答案:

答案 0 :(得分:0)

尝试使用带有tensorflow的Keras作为后端