首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用TFlite运行推理时出错

尝试使用TFlite运行推理时出错
EN

Stack Overflow用户
提问于 2021-08-25 09:54:58
回答 1查看 42关注 0票数 0

我已经用我的数据自定义训练了ssd_mobilenet_v2_fpnlite_320x320_coco17_tpu-8_3,并导出了模型,我能够进行推理。我正在使用tensorflow 2.6,现在我想将模型转换为tflite,以便在移动设备上运行它。我已经使用以下代码将模型转换为tflite,代码运行并成功保存了tflite模型。

代码语言:javascript
复制
    converter=tf.lite.TFLiteConverter.from_saved_model(PATH_TO_SAVED_MODE1L)
    converter.optimizations=[tf.lite.Optimize.DEFAULT]
    converter.target_spec.supported_ops=[tf.lite.OpsSet.TFLITE_BUILTINS,tf.lite.OpsSet.SELECT_TF_OPS]
    tflite_model=converter.convert()
    with open('C:/Users/CX/Desktop/model.tflite', 'wb') as f:
      f.write(tflite_model)

现在,我尝试使用下面的代码使用一些图像进行测试:

代码语言:javascript
复制
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
#interpreter.allocate_tensors()
path=r"C:\t3"
for file in pathlib.Path(path).iterdir():

   img = cv2.imread(r"{}".format(file.resolve()))
   print(np.shape(img))
   img = img.reshape(1,img.shape[0],img.shape[1],3) 
   print(np.shape(img))
   img = img.astype(np.uint32)

   vv= np.array(img, dtype=np.uint8)
   interpreter.set_tensor(input_details[0]['shape_signature'],img)
   interpreter.invoke()

我得到了这个错误:

代码语言:javascript
复制
TypeError: SetTensor(): incompatible function arguments. The following argument types are supported:
    1. (self: tensorflow.lite.python.interpreter_wrapper._pywrap_tensorflow_interpreter_wrapper.InterpreterWrapper, arg0: int, arg1: handle) -> object

Invoked with: <tensorflow.lite.python.interpreter_wrapper._pywrap_tensorflow_interpreter_wrapper.InterpreterWrapper object at 0x000001E4D88E38F0>, array([ 1, -1, -1,  3])

下面是interpreter.get_input_details()函数的详细信息:

代码语言:javascript
复制
[{'name': 'serving_default_input_tensor:0', 'index': 0, 'shape': array([1, 1, 1, 3]), 'shape_signature': array([ 1, -1, -1,  3]), '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.get_output_details()

代码语言:javascript
复制
[{'name': 'StatefulPartitionedCall:6', 'index': 462, 'shape': array([    1, 12804,     4]), 'shape_signature': array([    1, 12804,     4]), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}, {'name': 'StatefulPartitionedCall:0', 'index': 1594, 'shape': array([1, 1]), 'shape_signature': array([ 1, -1]), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}, {'name': 'StatefulPartitionedCall:5', 'index': 1559, 'shape': array([1]), 'shape_signature': array([1]), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}, {'name': 'StatefulPartitionedCall:7', 'index': 482, 'shape': array([    1, 12804,    56]), 'shape_signature': array([    1, 12804,    56]), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}, {'name': 'StatefulPartitionedCall:1', 'index': 1647, 'shape': array([1, 1, 1]), 'shape_signature': array([ 1, -1, -1]), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}, {'name': 'StatefulPartitionedCall:2', 'index': 1629, 'shape': array([1, 1]), 'shape_signature': array([ 1, -1]), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}, {'name': 'StatefulPartitionedCall:4', 'index': 1576, 'shape': array([1, 1]), 'shape_signature': array([ 1, -1]), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}, {'name': 'StatefulPartitionedCall:3', 'index': 1612, 'shape': array([1, 1, 1]), 'shape_signature': array([ 1, -1, -1]), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}]

任何帮助都是非常感谢的

EN

回答 1

Stack Overflow用户

发布于 2021-08-25 13:37:04

看起来您需要调整输入张量的大小,并且set_tensor中的给定形状不应该具有-1值而不是固定的形状值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68920674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档