【发布时间】:2020-11-26 12:08:10
【问题描述】:
我按照 tensorflow android 指南从源代码生成 tensorflow-lite.aar 和 tensorflow-lite-select-tf-ops.aar。
https://www.tensorflow.org/lite/guide/build_android
我当前的应用适用于,
dependencies {
...
implementation 'org.tensorflow:tensorflow-lite:2.3.0'
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:2.3.0'
}
我希望减小 tensorflow-lite-select-tf-ops.aar 的大小以减小应用程序 apk 的大小。
我正在关注build_aar.sh 流程以减少我的 tflite 模型的大小。使用的命令,
bash tensorflow/lite/tools/build_aar.sh --input_models=custom_model.tflite --target_archs=arm64-v8a
这会在bazel-bin/tmp 文件夹中为custom_model.tflite 生成tensorflow-lite.aar 和tensorflow-lite-select-tf-ops.aar。 tflite 模型是FP16 量化的。
用新生成的aar文件实现,
dependencies {
...
// implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:2.3.0'
// implementation 'org.tensorflow:tensorflow-lite:2.3.0'
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
implementation files('libs/tensorflow-lite.aar')
// implementation files('libs/tensorflow-lite-gpu.aar')
implementation files('libs/tensorflow-lite-select-tf-ops.aar')
}
但是当它们被包含在android应用程序中时会发生编译错误。
C:\folder\myapp\app\src\main\java\com\example\mapp\tflite\YoloV4Classifier.java:19: error: cannot find symbol
import org.tensorflow.lite.Interpreter;
^
symbol: class Interpreter
location: package org.tensorflow.lite
当tensorflow-lite.aar 使用bazel build -c opt --fat_apk_cpu=arm64-v8a --host_crosstool_top=@bazel_tools//tools/cpp:toolchain tensorflow/lite/java:tensorflow-lite 构建时,这个问题就消失了。但这会引入 UnsatisfiedLinkError: dlopen failed: cannot locate symbol 与之前的 tensorflow-lite-select-tf-ops.aar 和新构建的 tensorflow-lite.aar 与上述命令。
如果我同时输入从custom_model.tflite 生成的以前的tensorflow-lite.aar 和用bazel build -c opt --fat_apk_cpu=arm64-v8a --host_crosstool_top=@bazel_tools//tools/cpp:toolchain tensorflow/lite/java:tensorflow-lite 生成的新tensorflow-lite.aar,那么就会出现构建错误,
More than one file was found with OS independent path 'lib/arm64-v8a/libtensorflowlite_jni.so'
我按照基于非输入 tflite 模型的命令从源代码生成 tensorflow-lite.aar、tensorflow-lite-gpu.aar、tensorflow-lite-select-tf-ops.aar,但应用程序大小变得非常大。我试过other ways,但每一个都会带来一种新的错误。
【问题讨论】:
-
在项目中添加 tflite aars 时遇到问题,尝试first 方法
-
添加 AAR 工作正常,但问题是从源代码构建的 tensorflow-lite 找不到解释器。
-
我的意思是我遇到了同样的问题(没有找到解释器,但构建正常)并且这种方法有效
标签: android tensorflow build.gradle tensorflow-lite aar