繁体   English   中英

无法将保存的 EfficientDet 模型 saved_model.pb 转换为 tflite 格式

[英]Fail to convert saved EfficientDet model saved_model.pb to tflite format

我已经使用 TF2 API 训练了一个 EfficientDet-d0 模型以检测自定义图像。 这工作得很好。 已保存检查点、pipeline.config 和 save_model.pb 文件,并且可以使用这些文件重新加载模型。 问题是我无法将此模型转换为 tflite 格式以便在 RaspberryPi 上使用它。 尝试使用 Google Colab 笔记本中的 TF 文档( https://www.tensorflow.org/lite/guide/inference#load_and_run_a_model_in_python )进行转换: https ://colab.research.google.com/drive/1cnJF85aPz5VMyEJ0gzsdB3zjvXaRCG_r ? usp =分享

转换本身似乎有效,但是当我设置解释器时出了点问题,因为所有值都是 0 并且输入形状是 [1 1 1 3]:

interpreter = tf.lite.Interpreter(TFLITE_FILE_PATH)
print(interpreter.get_input_details())

[{'name': 'serving_default_input_tensor:0', 'index': 0, 'shape': array([1, 1, 1, 3], dtype=int32), 'shape_signature': array([ 1, -1 , -1, 3], dtype=int32), 'dtype': <class 'numpy.uint8'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype =float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}]

interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
input_shape = input_details[0]['shape']
print(input_shape)

[1 1 1 3]

当我然后尝试设置张量时,我收到以下错误

input_data = np.array(np.random.random_sample(input_shape), dtype=np.float32)
interpreter.set_tensor(input_details[0]['index'], input_data)

ValueError:无法设置张量:获得了 FLOAT32 类型的值,但输入 0 的预期类型为 UINT8,名称:serving_default_input_tensor:0

任何人都知道我如何正确转换模型或我做错了什么? 非常感谢!

正如错误所暗示的那样,输入张量应该由 'uint8' 数据类型的数字组成。 因此,在构建 input_data 时,将其转换为所需的数据类型,如下所示:

input_data = np.random.choice(range(256), size=input_shape).astype(np.uint8)

我特意选择了range(256) ,对于 RGB 格式的图像,像素值位于 [0, 255] 范围内。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM