我需要创建一个对象检测模型,以便与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模型的输出时,输出如下:
[{'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,对于本机模型,它运行得很好,但对我的模型却不是这样:
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()我认为解析输出的方法是不一样的,我真的不知道如何解析它们。
耽误您时间,实在对不起。我花了很多时间来理解为什么它不起作用,我不得不承认我在墙前。
发布于 2021-06-30 05:00:36
这是因为在保存模型后,原始模型中的张量名称与张量名称不同。TFLite在转换过程中使用保存的模型中的名称。
相反,您应该在SignatureDefs中使用TFLite,它应该为访问输入和输出提供一个有意义的名称。参见完整的示例这里
https://stackoverflow.com/questions/68180174
复制相似问题