当前位置: 首页 > 知识库问答 >
问题:

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

唐伟
2023-03-14

遇到的问题:

E/AndroidRuntime:致命异常:主进程:org.tensorflow.lite.examples。检测,PID:14719 java.lang.AssertionError:ObjectDetector初始化时出错:移动SSD模型预计正好有4个输出,发现8个

问题描述

  • Android应用程序来源:TensorFlow Lite物体检测示例,来自谷歌

模型说明

>

  • 是否使用自定义模型?对

    使用的预训练模型:ssd\u mobilenet\u v2\u fpnlite\u 640x640\u coco17\u tpu-8

    推理类型:浮点

    班级数量:4

    系统信息

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

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

    1、保存的_模型。pb导出:

    exporter_main_v2.pyinput_typeimage_tensorpipeline_config_pathssd_mobilenet_v2_fpnlite_640x640_coco17_tpupipeline.configtrained_checkpoint_diroutput_directoryexported_models

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

    toco
    --保存的模型目录。/exported models/tflite/saved\u model
    --emit select tf ops true
    --允许自定义操作
    --图形定义文件。/exported models/tflite/saved\u model/saved\u model。pb
    --输出文件/导出模型/tflite/tflite/detect。tflite
    --输入形状1300300,3
    --输入数组归一化\u输入图像张量
    --输出数组“tflite\u检测后处理”,“tflite\u检测后处理:1”,“tflite\u检测后处理:2”,“tflite\u检测后处理:3”
    --推断类型=浮点
    --允许自定义操作

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

    有人知道这个错误吗?

  • 共有1个答案

    蔡宏大
    2023-03-14

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

    对于不同机型输出的张量数量我不是很确定,就我理解和乱搞不同机型而言,fixed_shape_resizer640×640的机型很可能需要4个以上的张量输出(通常是8个张量输出),与Java编写的Android应用不兼容。

    对于像我这样的业余用户,请找到以下先决条件,以便在Android应用程序建议的设置中使用您的自定义模型(假设您使用的是TensorFlow版本

    >

  • TensorFlow模型:具有320 x 320的fixed_shape_resizer的SSD模型(在我的情况下,SSD MobileNet v2 320x320工作得非常好)(张量输出必须为4)

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

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

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

  •  类似资料:
    • 我们在前几节分别介绍了边界框、锚框、多尺度目标检测和数据集,下面我们基于这些背景知识来构造一个目标检测模型:单发多框检测(single shot multibox detection,SSD)[1]。它简单、快速,并得到了广泛应用。该模型的一些设计思想和实现细节常适用于其他目标检测模型。 模型 图9.4描述了单发多框检测模型的设计。它主要由一个基础网络块和若干个多尺度特征块串联而成。其中基础网络块

    • 我刚刚开始尝试libgdx并理解...我查看了示例项目...我的问题 : 原始球编号1和6。其他球,球的(1和6)将随机去其他地方。(速度1)。例如,如果一个i是任何球上的火炬,它的速度最高可达3…游戏对象应该在while循环中。球图像有时(随机),球应该返回自己的360度。并在TecureRegion上获取图片。有类似的例子吗?或者我该怎么做? (抱歉英语不好) 谢谢。。。

    • 我在将SSD对象检测模型转换为EdgeTPU的uint8 TFLite时遇到问题。 据我所知,我一直在不同的论坛上搜索堆栈溢出线程和github问题,我认为我正在采取正确的步骤。我的jupyter笔记本肯定出了问题,因为我无法实现我的提议。 我正在与您分享我在Jupyter笔记本上解释的步骤。我认为情况会更加清楚。 转换步骤返回警告。 警告:absl:对于包含无法量化的不支持操作的模型输入,属性将

    • 我实际上是在用R建立一个电动汽车时间偏离的预测模型,作为数据,我有两年前的时间偏离历史,我希望建立一个以日期(日)为输入的预测模型,模型的输出将是时间偏离。一个步骤可以考虑在两个开始之间间隔一个小时(例如:-->) > 我试图将问题看作是以(1表示“有一个离开”,0表示“无”)聚类一个,并应用随机森林模型(日和小时作为输入,1或0作为输出),但该模型找不到输出和输入之间的联系,而不考虑日或小时,该

    • 英文原文:http://emberjs.com/guides/object-model/computed-properties/ 什么是计算属性? 简单地来说,计算属性就是将函数声明为属性。通过定义一个如同函数一般的计算属性,Ember将会自动调用该函数来获取计算属性的值,此后就可以如同使用普通静态属性一样来使用计算属性。 在需要使用一个或者多个属性的变形,或者手动修改其数据的时候非常有用。 计算

    • 我完成了对我的模型的培训,该模型由20个类组成,精度达到0.9993,目前正在进行测试。我正在学习本教程,但我在 培训数据定义为: 这就是我对cnn的定义 这里也是我对我的模型的总结 我得到的错误是 ---------------------------------------------------------------------------中的ValueError回溯(最近一次调用)---