Tensorflow Lite Android对象检测移动SSD型号预计将有4个输出,发现8个

2024-09-28 16:54:35 发布

您现在位置:Python中文网/ 问答频道 /正文

遇到的问题:

E/AndroidRuntime: FATAL EXCEPTION: main Process: org.tensorflow.lite.examples.detection, PID: 14719 java.lang.AssertionError: Error occurred when initializing ObjectDetector: Mobile SSD models are expected to have exactly 4 outputs, found 8

问题描述

  • Android应用程序源:来自谷歌的TensorFlow Lite对象检测示例
  • 启动示例应用程序时显示错误

型号说明

  • 使用自定义模型

  • 使用的预培训模型:ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8

  • 推理类型:FLOAT

  • 班级数目:4

系统信息

  • 操作系统平台和发行版:(Linux Ubuntu 20.14)
  • TensorFlow版本:2.4.1
  • TensorFlow安装地点:Pip

使用的已保存模型转换命令:

1。已保存的\u Model.pb导出:

python ./exporter_main_v2.py
--input_type image_tensor
--pipeline_config_path ./models/ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8/pipeline.config
--trained_checkpoint_dir ./models/ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8
--output_directory exported_models/tflite

2。将保存的模型(.pb)转换为tflite

toco
--saved_model_dir ./exported-models/tflite/saved_model
--emit-select-tf-ops true
--allow_custom_ops
--graph_def_file ./exported-models/tflite/saved_model/saved_model.pb
--output_file ./exported-models/tflite/tflite/detect.tflite
--input_shapes 1,300,300,3
--input_arrays normalized_input_image_tensor
--output_arrays 'TFLite_Detection_PostProcess’,’TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3'
--inference_type=FLOAT
--allow_custom_ops

备注 我试图在Google TensorFlow lite提供的示例中使用经过培训的自定义模型。只是每次我打开应用程序时,它都会返回这样一个错误,移动SSD型号预计正好有4个输出,发现8个。该模型经过培训,可以识别4个类,所有这些类都在labelmap.txt和管道配置中声明

有人知道这个错误吗?


Tags: 模型应用程序示例inputmodelmodelstensorflow错误
1条回答
网友
1楼 · 发布于 2024-09-28 16:54:35

经过进一步研究,我认为前面提到的问题是因为模型有8个张量输出,但是用Java编写的Android应用程序只能支持4个张量输出(至少Google提供的示例只支持4个张量输出)

我对不同模型上输出的张量的数量不是很确定。据我所知,不同型号的固定形状大小为640 x 640的型号可能需要4个以上的张量输出(通常为8个张量输出),这与用Java编写的Android应用程序不兼容

对于像我这样的业余用户,请在Android application中找到以下使用自定义模型的先决条件
建议的设置(假设您使用的是TensorFlow版本>;=2.3):

  • TensorFlow型号:SSD型号,带有320 x 320的固定形状大小调整器 (在我的例子中,SSD MobileNet v2 320x320工作得非常好) (张量输出必须为4)

  • Colab(非常适合模型培训和转换)
    (我曾尝试在本地机器上的Linux和Windows平台上执行培训和转换,不同工具和软件包的不兼容性让我头疼。我原来是使用Colab执行培训和转换的。它功能更强大,并且与那些培训工具和脚本有很好的兼容性。)

  • @lu-wang-g编写的metadata writer library
    (在我的例子中,在将经过培训的模型转换为.tflite后,如果您直接将.tflite模型迁移到Android应用程序,应用程序将报告与.tflite模型的配置有关的大量问题。假设您正确地培训和转换了模型,您所需要的只是上面的元数据编写器库。它将自动根据.tflite模型为您配置元数据。然后您可以直接将模型迁移到应用程序。)

有关详细信息,请访问我的GitHub发行版:
https://github.com/tensorflow/tensorflow/issues/47595

相关问题 更多 >