遇到的问题:
E/AndroidRuntime:致命异常:主进程: org.tensorflow.lite.examples.detection,PID: 14719 java.lang.AssertionError:当初始化ObjectDetector:移动SSD模型时发生错误,预计只有4个输出
问题描述
模型描述
系统信息
使用保存的模型转换命令:
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和管道配置中说明。
,有人知道这个错误吗?
发布于 2021-03-12 07:33:26
经过进一步研究,我认为前面提到的问题是由于模型有8个张量输出,但是用Java编写的Android应用程序只能支持4个张量输出(至少Google提供的示例只支持4个张量输出)。
我不太确定在不同的模型上输出张量的数量。就我所理解和混淆的不同模型而言,fixed_shape_resizer为64x640的模型可能需要超过4个张量输出(通常是8个张量输出),这与用Java编写的Android应用程序不兼容。
对于像我这样的业余用户,请找到以下先决条件在Android应用中使用您的自定义模型
建议的设置(假设您使用的是TensorFlow版本的>= 2.3):
有关详细信息,请访问我的GitHub杂志:
发布于 2022-11-07 15:11:19
对于那些稍后会遇到这个问题/问题的人:对输出张量的限制是所描述的这里的Tensorflow Lite对象检测API规范的一部分,我还不知道如何使一个模型与这个需求兼容,但是如果/什么时候我会想出答案的话,我会附加我的答案。
更新
这里是官方的Google,有一个模型转换的例子。有趣的是脚本调用:
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的同一个目录中,这个脚本来自于其他脚本,它们似乎在做类似的事情,尽管没有给出明确的描述。
https://stackoverflow.com/questions/66488745
复制相似问题