【问题标题】:How to convert tflite_graph.pb to detect.tflite properly如何正确将 tflite_graph.pb 转换为 detect.tflite
【发布时间】:2020-08-28 03:58:23
【问题描述】:

我正在使用 tensorflow 对象检测 api 使用来自 tensorflow model zoo 的 ssdlite_mobilenet_v2_coco_2018_05_09 训练自定义模型。

我成功地训练了模型并使用this tutorial 中提供的脚本对其进行了测试。

这就是问题所在,我需要一个 detect.tflite 才能在我的目标机器(嵌入式系统)中使用它。但是,当我真正用我的模型制作 tflite 时,它​​几乎不输出任何内容,而当它输出时,它是 错误检测。为了制作 .tflite 文件,我首先使用export_tflite_ssd_graph.py,然后使用此命令在输出上使用toco,并遵循the doc 和一些谷歌搜索:

toco --graph_def_file=$OUTPUT_DIR/tflite_graph.pb --output_file=$OUTPUT_DIR/detect.tflite --input_shapes=1,300,300,3 --input_arrays=normalized_input_image_tensor --output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3' --allow_custom_ops

此外,我用于 .tflite 检测任务的代码工作正常,因为我使用 ssd_mobilenet_v3_small_coco detect.tflite 文件对其进行了测试。

【问题讨论】:

    标签: python tensorflow object-detection-api tensorflow-lite


    【解决方案1】:

    问题出在toco 命令上。我使用的一些文件已经过时并误导了我。 toco 已弃用,我应该改用 tflite_convert 工具。

    这是我使用的完整命令(从您的培训目录运行):

    tflite_convert --graph_def_file tflite_inference_graph/tflite_graph.pb --output_file=./detect.tflite --output_format=TFLITE --input_shapes=1,300,300,3 --input_arrays=normalized_input_image_tensor --output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3 ' --inference_type=QUANTIZED_UINT8 --mean_values=128 --std_dev_values=127 --change_concat_input_ranges=false --allow_custom_ops

    我在 ssdlite_mobilenet_v2_coco_2018_05_09 模型上进行了培训,并将其添加到我的 .config 文件的末尾。

     graph_rewriter {
      quantization {
        delay: 400
        weight_bits: 8
        activation_bits: 8
      }
    }
    

    我也使用此命令在 tflite_inference_graph 目录中生成 tflite_graph.pb:

    python export_tflite_ssd_graph.py --pipeline_config_path 2020-05-17_train_ssdlite_v2/ssd_mobilenet_v2_coco.config --trained_checkpoint_prefix 2020-05-17_train_ssdlite_v2/train/model.ckpt-1146 --output_directory 2020-05-17_train_ssdlite_v2/tflite_inference_graph --add_postprocessing_op=true

    注意:我想在我的嵌入式系统上使用量化模型。这就是我在配置文件中添加 graph_rewriter 并在我的 tflite_convert 命令中添加 --inference_type=QUANTIZED_UINT8 的原因。

    【讨论】:

    • 如果您可以添加一些您曾经提出的问题解决方案的参考资料,那将非常有价值
    猜你喜欢
    • 1970-01-01
    • 2021-10-21
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 2021-11-21
    • 2018-01-04
    • 2015-02-10
    相关资源
    最近更新 更多