java.lang.IllegalArgumentException: ByteBuffer不是一个有效的flatbuf



拜托,我迫切需要帮助,我已经试图解决这个问题10天了。我训练的TensorFlow生命模型在这里。我运行了蟒蛇推理测试,它成功了。然而,它不可能在Android样本对象检测应用程序上工作https://github.com/tensorflow/examples/tree/master/lite/examples/object_detection/android

通过调试这个长modelHandle = createModelWithBuffer(this.modelByteBuffer, errorHandle); specifically this part in NativeInterpreterWrapper.class

的问题
NativeInterpreterWrapper(ByteBuffer buffer, Options options) {
this.inferenceDurationNanoseconds = -1L;
this.isMemoryAllocated = false;
this.delegates = new ArrayList();
this.ownedDelegates = new ArrayList();
TensorFlowLite.init();
if (buffer != null && (buffer instanceof MappedByteBuffer || buffer.isDirect() && buffer.order() == ByteOrder.nativeOrder())) {
this.modelByteBuffer = buffer;
long errorHandle = createErrorReporter(512);
long modelHandle = createModelWithBuffer(this.modelByteBuffer, errorHandle);
this.init(errorHandle, modelHandle, options);
} else {
throw new IllegalArgumentException("Model ByteBuffer should be either a MappedByteBuffer of the model file, or a direct ByteBuffer using ByteOrder.nativeOrder() which contains bytes of model content.");
}
}

系统信息我写自定义代码(而不是使用在TensorFlow中提供的股票示例脚本):操作系统平台MACOS sierra 10.13Android Studio 4我已经尝试了所有可能的解决方案,并更新了NDK在Gradle中使用

buildscript {
repositories {
google()
jcenter()
mavenLocal()
}
aaptOptions {
noCompress "tflite"
noCompress "lite"
}
implementation 'org.tensorflow:tensorflow-lite-metadata:0.0.0-nightly'
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly'
//also tried
implementation 'org.tensorflow:tensorflow-lite-metadata:0.1.2-nightly' //and no difference
//...

请帮帮我,我不知道是文件本身还是android库。

您的模型文件有可能被损坏。我遇到了同样的问题,然后我意识到我的模型文件被损坏了,它只有4mb的大小,而实际的模型大小超过160mb。

最新更新