我创建了一个自定义模型。
之后,复制了此链接“ https://github.com/tensorflow/examples/tree/master/lite/examples/object_detection/android”
用自己的.tflite更改了默认.tflite
更改缓冲区后(我的模型未量化)(我应该由缓冲区1080000设置,默认值为270000)
但是错误在TFLiteObjectDetectionAPIModel.java和行tfLite.runForMultipleInputsOutputs(inputArray, outputMap);
中
控制台中的错误是“ java.lang.IllegalArgumentException:无效的输出张量索引:1”
我用谷歌搜索并测试了大多数答案,但是我找不到真正的答案!
我已将“ tfLite.runForMultipleInputsOutputs(inputArray, outputMap);
”更改为“ tfLite.run(imgData, outputLocations);
”
而且该错误没有任何问题,但是此代码“ tfLite.runForMultipleInputsOutputs(inputArray, outputMap);
”没有任何响应
有什么建议的帮助吗?
我的模型是“ https://dinasys.ir/androidTF/assets2.zip”或“ https://dinasys.ir/androidTF/assets3.zip”
它们是相同的,但是资产3已接受了11个小时的培训,而其他3则少于10个小时。
最佳答案
我在我的项目中尝试使用您的模型。
在tfLite.run
模式下存在问题,它无法解析DataType,但是在tfLite.runForMultipleInputsOutputs
模式下一切正常。
您应该知道,根据文档使用TF-Lite for Java,tflite.run()的两个参数都必须是张量。但是对于输出参数,您仅传递单个浮点数。因此,我很确定这是tfLite.run
模式错误"cannot resolve DataType of java.lang.Float"
的根本原因。
注意:根据文档,还支持原始的ByteBuffers
以及支持的数据类型(float
,int
,long
,byte
)的多维数组。您只需要对输出执行相同的操作。
我为您上传项目。
使用此link进行下载。
您也可以从here克隆它
如有任何疑问,请随时发表评论。
关于android - Android中的自定义 tensorflow 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58745286/