首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow Lite Android对象检测--移动SSD模型预计将有精确的4个输出,发现8个

Tensorflow Lite Android对象检测--移动SSD模型预计将有精确的4个输出,发现8个
EN

Stack Overflow用户
提问于 2021-03-05 07:54:45
回答 2查看 2.3K关注 0票数 2

遇到的问题:

E/AndroidRuntime:致命异常:主进程: org.tensorflow.lite.examples.detection,PID: 14719 java.lang.AssertionError:当初始化ObjectDetector:移动SSD模型时发生错误,预计只有4个输出

问题描述

  • 资料来源: TensorFlow Lite对象检测示例
  • 启动示例应用程序时显示的错误

模型描述

  • 使用自定义模型?,YES,
  • 预训练模型:ssd_mobilenet_v2_fpnlite_640x640_co17_tpu-8
  • 推理类型:浮点
  • 班级数:4

系统信息

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

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

1. Saved_Model.pb导出:

python ./exporter_main_v2.py -输入型image_tensor --管道_配置路径./models/ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8/pipeline.config -训练有素的检查点dir ./models/ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8 -输出目录导出的模型/tflite

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

托科 -保存模型_dir./导出-模型/tflite/saved_model -发射-选择-tf-操作正确 -允许自定义操作 -图_def_file ./exported-models/tflite/saved_model/saved_model.pb -输出文件./导出-型号/tflite/tflite/检测tflite-输入形状1,300,300,3 -输入数组normalized_input_image_tensor -输出数组‘TFLite_Detection_PostProcess’、‘TFLite_检测_PostProcess:1’、'TFLite_Detection_PostProcess:2‘、'TFLite_Detection_PostProcess:3’ -推断类型=浮动 -允许自定义操作

备注我正在尝试使用一个经过训练的自定义模型上的谷歌TensorFlow lite提供的例子。只是每次我打开应用程序时,它都会返回这样一个错误,Mobile模型应该有精确的4个输出,找到8个。该模型被训练为识别4个类,所有这些都在labelmap.txt和管道配置中说明。

,有人知道这个错误吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-12 07:33:26

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

我不太确定在不同的模型上输出张量的数量。就我所理解和混淆的不同模型而言,fixed_shape_resizer为64x640的模型可能需要超过4个张量输出(通常是8个张量输出),这与用Java编写的Android应用程序不兼容。

对于像我这样的业余用户,请找到以下先决条件在Android应用中使用您的自定义模型

建议的设置(假设您使用的是TensorFlow版本的>= 2.3):

  • TensorFlow模型: fixed_shape_resizer为320×320的SSD模型 (在我的例子中,SSD MobileNet v2 320x320工作非常好)(张量输出必须是4)
  • Colab (适合模型训练和转换) (我尝试在本地机器上的Linux和Windows平台上进行培训和转换,不同工具和包的不兼容让我感到头疼。我用Colab来进行训练和转换。它更强大,并且与那些培训工具和脚本具有很好的兼容性。
  • 元数据编写库是由@lu-wang-g编写的 (在我的例子中,在将经过训练的模型转换为.tflite之后,如果直接将.tflite模型迁移到Android应用程序,应用程序将报告大量关于.tflite模型配置的问题。假设如果您正确地训练和转换了模型,那么您所需要的只是上面的元数据编写库。它将根据.tflite模型自动为您配置元数据。然后,您可以直接将模型迁移到应用程序。)

有关详细信息,请访问我的GitHub杂志:

https://github.com/tensorflow/tensorflow/issues/47595

票数 2
EN

Stack Overflow用户

发布于 2022-11-07 15:11:19

对于那些稍后会遇到这个问题/问题的人:对输出张量的限制是所描述的这里的Tensorflow Lite对象检测API规范的一部分,我还不知道如何使一个模型与这个需求兼容,但是如果/什么时候我会想出答案的话,我会附加我的答案。

更新

这里是官方的Google,有一个模型转换的例子。有趣的是脚本调用:

代码语言:javascript
复制
python models/research/object_detection/export_tflite_graph_tf2.py \
    --trained_checkpoint_dir {'ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8/checkpoint'} \
    --output_directory {'ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8/tflite'} \
    --pipeline_config_path {'ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8/pipeline.config'}

脚本不转换模型,但使模型在使用的操作和输入/输出格式方面与TFLite兼容。脚本中的一个注释声称只支持SSD元体系结构(也声明为这里)。同样,在repo的同一个目录中,这个脚本来自于其他脚本,它们似乎在做类似的事情,尽管没有给出明确的描述。

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

https://stackoverflow.com/questions/66488745

复制
相关文章

相似问题

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