首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tensorflow lite模型的输出看起来像StatefulPartitionedCall:n,什么是不期望的

tensorflow lite模型的输出看起来像StatefulPartitionedCall:n,什么是不期望的
EN

Stack Overflow用户
提问于 2021-06-29 13:56:42
回答 1查看 1.5K关注 0票数 1

我需要创建一个对象检测模型,以便与raspberry pi 4和照相机一起使用。为此,我使用基于ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8模型的迁移学习创建了一个深度学习模型。这个模型的文档可以在这里找到:tpu-8

我使用的是tensorflow 2.5.0,输出模型(saved_model类型)运行良好。当我想用图像测试它的时候,它的准确性是很好的。

当我试图将我的tensorflow模型(.pb)转换为tensorflow lite时,问题就来了。转换工作,但是输出与.pb模型不一样,我没有找到任何关于这个.tflite模型的8个输出的文档。

正如您在上面的文档中所看到的,有8个输出包含num_detections、detection_boxes、detection_classes等.用tensorflow模型做得很好。但是,当我试图解释tensorflow模型的输出时,输出如下:

代码语言:javascript
复制
[{'dtype': <class 'numpy.float32'>,
  'index': 428,
  'name': 'StatefulPartitionedCall:7',
  'quantization': (0.0, 0),
  'quantization_parameters': {'quantized_dimension': 0,
                              'scales': array([], dtype=float32),
                              'zero_points': array([], dtype=int32)},
  'shape': array([    1, 51150,     4]),
  'shape_signature': array([    1, 51150,     4]),
  'sparsity_parameters': {}},
 {'dtype': <class 'numpy.float32'>,
  'index': 586,
  'name': 'StatefulPartitionedCall:4',
  'quantization': (0.0, 0),
  'quantization_parameters': {'quantized_dimension': 0,
                              'scales': array([], dtype=float32),
                              'zero_points': array([], dtype=int32)},
  'shape': array([1, 1]),
  'shape_signature': array([ 1, -1]),
  'sparsity_parameters': {}},
 {'dtype': <class 'numpy.float32'>,
  'index': 411,
  'name': 'StatefulPartitionedCall:6',
  'quantization': (0.0, 0),
  'quantization_parameters': {'quantized_dimension': 0,
                              'scales': array([], dtype=float32),
                              'zero_points': array([], dtype=int32)},
  'shape': array([    1, 51150,     4]),
  'shape_signature': array([    1, 51150,     4]),
  'sparsity_parameters': {}},
 {'dtype': <class 'numpy.float32'>,
  'index': 569,
  'name': 'StatefulPartitionedCall:5',
  'quantization': (0.0, 0),
  'quantization_parameters': {'quantized_dimension': 0,
                              'scales': array([], dtype=float32),
                              'zero_points': array([], dtype=int32)},
  'shape': array([1]),
  'shape_signature': array([1]),
  'sparsity_parameters': {}},
 {'dtype': <class 'numpy.float32'>,
  'index': 657,
  'name': 'StatefulPartitionedCall:1',
  'quantization': (0.0, 0),
  'quantization_parameters': {'quantized_dimension': 0,
                              'scales': array([], dtype=float32),
                              'zero_points': array([], dtype=int32)},
  'shape': array([1, 1, 1]),
  'shape_signature': array([ 1, -1, -1]),
  'sparsity_parameters': {}},
 {'dtype': <class 'numpy.float32'>,
  'index': 639,
  'name': 'StatefulPartitionedCall:2',
  'quantization': (0.0, 0),
  'quantization_parameters': {'quantized_dimension': 0,
                              'scales': array([], dtype=float32),
                              'zero_points': array([], dtype=int32)},
  'shape': array([1, 1]),
  'shape_signature': array([ 1, -1]),
  'sparsity_parameters': {}},
 {'dtype': <class 'numpy.float32'>,
  'index': 622,
  'name': 'StatefulPartitionedCall:3',
  'quantization': (0.0, 0),
  'quantization_parameters': {'quantized_dimension': 0,
                              'scales': array([], dtype=float32),
                              'zero_points': array([], dtype=int32)},
  'shape': array([1, 1, 1]),
  'shape_signature': array([ 1, -1, -1]),
  'sparsity_parameters': {}},
 {'dtype': <class 'numpy.float32'>,
  'index': 604,
  'name': 'StatefulPartitionedCall:0',
  'quantization': (0.0, 0),
  'quantization_parameters': {'quantized_dimension': 0,
                              'scales': array([], dtype=float32),
                              'zero_points': array([], dtype=int32)},
  'shape': array([1, 1]),
  'shape_signature': array([ 1, -1]),
  'sparsity_parameters': {}}]

“状态参与”键是什么?以及如何在文档中使用它?

关于信息,我正在使用这个github启动我的模型:github,对于本机模型,它运行得很好,但对我的模型却不是这样:

代码语言:javascript
复制
Traceback (most recent call last):
  File "TFLite_detection_webcam.py", line 219, in <module>
    if ((scores[i] > min_conf_threshold) and (scores[i] <= 1.0)):
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我认为解析输出的方法是不一样的,我真的不知道如何解析它们。

耽误您时间,实在对不起。我花了很多时间来理解为什么它不起作用,我不得不承认我在墙前。

EN

回答 1

Stack Overflow用户

发布于 2021-06-30 05:00:36

这是因为在保存模型后,原始模型中的张量名称与张量名称不同。TFLite在转换过程中使用保存的模型中的名称。

相反,您应该在SignatureDefs中使用TFLite,它应该为访问输入和输出提供一个有意义的名称。参见完整的示例这里

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

https://stackoverflow.com/questions/68180174

复制
相关文章

相似问题

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