0

我在使用 Tensorflow-for-poets-2 TFLite 教程中的 MappedByteBuffer 方法加载 TFLite 模型时遇到问题。

private MappedByteBuffer loadModelFile(Activity activity,String MODEL_FILE) throws IOException {
    AssetFileDescriptor fileDescriptor = activity.getAssets().openFd(MODEL_FILE);
    FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
    FileChannel fileChannel = inputStream.getChannel();
    long startOffset = fileDescriptor.getStartOffset();
    long declaredLength = fileDescriptor.getDeclaredLength();
    return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);

特别是当返回 fileChannel.map 时,我使用 tflite_convert(以前的 toco)工具转换的模型会失败。该模型是浮点 TFLite 模式。

该问题似乎是由 startOffset 和 declaredLength 变量引起的。我在 logcat 中收到的错误是

7525-7525/dp.thexor A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 7525 (dp.thexor), pid 7525 (dp.thexor)

如果我将这些值修复为成功加载的模型中的值,则该方法成功返回 fileChannel.map。我的模型中的值是 startOffset = 2846788 declaredLength = 45525464

我知道我的 TFlite 模型可以成功映射到内存,因为 tensorflow/contrib/lite/tools/benchmark:benchmark_model 能够对其进行基准测试。

我会尝试加载量化的 TFLite 模型,但目前我的模型包含没有量化等价物(transpose_conv)的操作。

这可能是什么原因造成的?

我的 .tflite 模型可以在这里找到:https ://github.com/andrewginns/CycleGAN-Tensorflow-PyTorch/releases/download/tf1.7-py3.6.4/float.tflite

4

0 回答 0