TensorFlow lite和keras模型集成

时间:2018-08-10 06:35:34

标签: android-studio tensorflow keras tensorflow-lite

我一直试图将我的keras模型.tflite文件放入Google的Tflitecamera演示中。但是我遇到分配错误(无法在具有12288字节的TensorFlowLite缓冲区和具有1072812字节的ByteBuffer之间进行转换)。  我认为这是因为错误的字节缓冲区分配。

ByteBuffer.allocate(             DIM_BATCH_SIZE                 * getImageSizeX()                 * getImageSizeY()                 * DIM_PIXEL_SIZE                 * getNumBytesPerChannel());

任何人都可以对此有所了解。我是TensorFlow的新手。

以下是日志

08-10 11:56:28.905 28066-28066 / android.example.com.tflitecamerademo E / MultiWindowProxy:getServiceInstance失败! 08-10 11:56:35.675 28066-28092 / android.example.com.tflitecamerademo E / AndroidRuntime:FATAL EXCEPTION:CameraBackground     流程:android.example.com.tflitecamerademo,PID:28066     java.lang.IllegalArgumentException:无法在具有12288个字节的TensorFlowLite缓冲区和具有1072812个字节的ByteBuffer之间进行转换。         在org.tensorflow.lite.Tensor.throwExceptionIfTypeIsIncompatible(Tensor.java:175)         在org.tensorflow.lite.Tensor.setTo(Tensor.java:65)         在org.tensorflow.lite.NativeInterpreterWrapper.run(NativeInterpreterWrapper.java:126)         在org.tensorflow.lite.Interpreter.runForMultipleInputsOutputs(Interpreter.java:168)         在org.tensorflow.lite.Interpreter.run(Interpreter.java:145)         在com.example.android.tflitecamerademo.ImageClassifierFloatInception.runInference(ImageClassifierFloatInception.java:103)         在com.example.android.tflitecamerademo.ImageClassifier.classifyFrame(ImageClassifier.java:136)         在com.example.android.tflitecamerademo.Camera2BasicFragment.classifyFrame(Camera2BasicFragment.java:702)         在com.example.android.tflitecamerademo.Camera2BasicFragment.-wrap0(Camera2BasicFragment.java)         在com.example.android.tflitecamerademo.Camera2BasicFragment $ 4.run(Camera2BasicFragment.java:597)         在android.os.Handler.handleCallback(Handler.java:822)         在android.os.Handler.dispatchMessage(Handler.java:104)         在android.os.Looper.loop(Looper.java:207)         在android.os.HandlerThread.run(HandlerThread.java:61)

1 个答案:

答案 0 :(得分:1)

您可以在以下链接中找到此错误的原因:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/java/src/main/java/org/tensorflow/lite/Tensor.java

正如您在第170到181行中看到的那样,如果输出缓冲区的容量不等于字节数,则将发生此错误。