如何正确转换tflite_graph.pb到detect.tflite
问题内容:
我正在使用tensorflow对象检测api使用来自tensorflow模型zoo的ssdlite_mobilenet_v2_coco_2018_05_09训练自定义模型。
我成功地训练了模型并使用本教程中提供的脚本对其进行了测试。
这是问题所在,我需要有一个 detect.tflite 才能在目标计算机(嵌入式系统)中使用它。但是,当我实际上从模型中制作出tflite时,它
几乎什么也不输出, 而当这样做时,这是 错误的检测
。为了制作.tflite文件,我首先使用了doc和一些Google搜索export_tflite_ssd_graph.py
,然后toco
在此命令的输出中使用:
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
另外,我使用ssd_mobilenet_v3_small_coco detect.tflite文件进行测试时,我从.tflite用于检测任务的代码正常运行。
问题答案:
问题出在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’,’T’
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的原因。