将.pb文件转为.tflite文件时遇ValueError错误,寻求技术帮助
解决tflite_convert量化时"std_dev and mean must be defined"的问题
我之前在做PB转TFLite量化的时候也碰到过一模一样的错误,其实这个报错的原因很直接:当你指定inference_input_type=QUANTIZED_UINT8时,TensorFlow需要明确输入数据的均值(mean)和标准差(std_dev),才能完成量化输入到模型内部浮点计算的转换。
具体解决方法
你只需要在命令中添加--mean_values和--std_dev_values两个参数就行,这两个值取决于你训练模型时对输入图像的预处理方式:
- 如果训练时把像素值从
0-255归一化到-1到1,那用--mean_values=127.5 --std_dev_values=127.5 - 如果是归一化到
0到1,那用--mean_values=0 --std_dev_values=255
修改后的完整命令示例(以归一化到-1到1为例):
tflite_convert --graph_def_file=frozen_inference_graph.pb --output_file=new_graph.tflite --input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE --input_shape=1,600,600,3 --input_array=image_tensor --output_array=detection_boxes,detection_scores,detection_classes,num_detections --inference_type=QUANTIZED_UINT8 --inference_input_type=QUANTIZED_UINT8 --mean_values=127.5 --std_dev_values=127.5
补充说明
如果你不需要使用量化后的输入类型,也可以设置--inference_input_type=FLOAT,这样就不需要指定mean和std_dev,但这样会失去输入量化带来的模型体积和推理速度优化。
内容的提问来源于stack exchange,提问作者Chakra
相关产品推荐
相关产品推荐

