- 遇到 的 问题 : * *
E/Android 运行 时 :致命 异常 :主要 流程 :org . 张 量 流 . lite . 示例 . 检测 , PID :14719 java . lang . Assert 错误 :初始 化 ObjectDetector 时 出错 :预计 移动 SSD 型号 正好 有 4 个 输出 , 但 发现 有 8 个
- 问题 描述 * *
- Android 应用 程序 来源 :来自 Google 的 TensorFlow Lite 对象 检测 示例
- 启动 示例 应用 程序 时 显示 错误
- 型号 说明 * *
- 是否 使用 自 定义 模型 ? * * 是 * *
- 使用 的 预 训练 模型 :ssd _ 手机 网络 _v2 _ 手机 _640x640_coco17_tpu - 8
- 推论 类型 :浮动
- 类别 数目 :4
- 系统 信息 * *
- 操作 系统 平台 和 分发 :( Linux Ubuntu 20.14 )
- TensorFlow 版本 :2.4.1
- TensorFlow 安装 自 :皮普
- 使用 的 保存 模型 转换 命令 : * *
- 1 . Saved _ Model . pb 导出 : * *
导出 器 _ 主 文件 _ v2.py
- 输入 类型 图像 张 量
- 管道 配置 路径 ./models/ssd 移动 网络 版本 2 fpnlite_640x640_coco17_tpu - 8/管道 配置
- 已 培训 的 检查 点 目录/型号/ssd 移动 网络 v2_fpnlite 640x640_coco17_tpu - 8
- 输出 目录 导出 的 模型/tflite
- 2 . 将 保存 的 模型 ( . pb ) 转换 为 tflite * *
托 科
- 保存 的 模型 目录/导出 的 模型/文件/保存 的 模型
- 发送 选择 tf-ops 真
- 允许 自 定义 操作
- 图形 定义 文件 ./导出 模型/tflite/已 保存 模型/已 保存 模型 . pb
- 输出 文件 ./导出 的 模型/tflite/tflite/检测 . tflite
- 输入 形状 1,300,300,3
- 输入 数组 标准 化 输入 图像 张 量
- 输出 数组 " TFLite 检测 后 处理 " 、 " TFLite 检测 后 处理 : 1 " 、 " TFLite 检测 后 处理 : 2 " 、 " TFLite 检测 后 处理 : 3 "
- 推理 类型 = 浮点 型
- 允许 自 定义 操作
- 备注 * * 我 尝试 在 Google TensorFlow lite 提供 的 示例 中 使用 经过 训练 的 自 定义 模型 。 只是 每次 我 打开 应用 程序 时 , 它 都 返回 这样 的 错误 , 移动 SSD 模型 预计 有 4 个 输出 , 但 找到 了 8 个 。 该 模型 经过 训练 以 识别 4 个 类 , 所有 这些 都 在 labelmap.txt 和 管道 配置 中 声明 。
- 有人 知道 这个 错误 吗 ? * *
2条答案
按热度按时间xqkwcwgp1#
经过进一步的研究,我认为上述问题是由于模型有8Tensor输出,但用Java编写的Android应用程序只能支持4Tensor输出而提出的(至少Google提供的示例只支持4Tensor输出)
我不是很确定不同模型上输出的Tensor的数量。据我了解和摆弄不同的模型,fixed_shape_resizer为640 x 640的模型很可能需要4个以上的Tensor输出(通常是8个Tensor输出),这与用Java编写的Android应用不兼容。
对于任何像我这样的业余用户,请找到以下先决条件,以便在Android application
建议设置(假设您使用的是TensorFlow版本〉= 2.3):
(In我的情况下,SSD MobileNet v2 320 x320工作得非常好)(Tensor输出必须为4)
*Colab(非常适合模型培训和转换)
(我尝试过在本地机器上进行Linux和Windows平台的训练和转换,不同工具和包的不兼容性让我很头疼。我使用了Colab进行训练和转换。它的功能更强大,与那些训练工具和脚本有很好的兼容性。)
(In在我的例子中,在将训练好的模型转换为.tflite之后,如果您直接将.tflite模型迁移到Android应用程序,应用程序将报告大量关于.tflite模型配置的问题。假设您正确地训练并转换了模型,你所需要的只是上面的元数据编写器库。2它会自动根据.tflite模型为你配置元数据。然后,您可以直接将模型迁移到应用程序。)
有关详细信息,请访问我的GitHub问题:
https://github.com/tensorflow/tensorflow/issues/47595
ygya80vv2#
对于那些稍后会遇到这个问题的人:对输出Tensor数量的限制是此处描述的Tensorflow Lite对象检测API规范的一部分我还不知道如何使模型与此要求兼容,但如果我能弄清楚,我会附上我的答案。
更新
Here是Google Colab的官方代码,其中包含一个模型转换的示例。
该脚本不会转换您的模型,但会使模型在使用的操作和输入/输出格式方面与TFLite兼容。脚本中的注解声明仅支持SSD元架构(也声明为here)。此外,在该脚本所在的repo的同一目录中,还有其他脚本似乎在做类似的事情,但没有给出明确的描述。