使用 Bazel 构建 Android 后出现模糊的 TensorFlow 错误

Obscure TensorFlow error after building for Android with Bazel

我正在尝试基于 TensorFlow Android 演示构建一个简单的 Android 应用程序;然而,我使用的模型需要一个内核 Op,默认情况下 TensorFlow aar 不包含该内核 Op。这让我走上了从源代码编译库的道路。

我已经通过 gradle 获得了要构建的 apk,使用 bazel 作为本机构建工具;然而,每当我尝试从 .pb 文件(实际上是 protobuff 格式的任何模型)加载模型时,应用程序崩溃并出现错误,声称模型是 "Not a valid TensorFlow Graph serialization: Invalid GraphDef".

有人遇到过这个问题吗?我猜有些东西没有正确编译,但我什至不确定从哪里开始寻找错误。

这是我正在使用的 Bazel 构建命令(为方便起见,在多行中,几乎是从演示中逐字提取的):

/usr/local/bin/bazel build -c opt 
tensorflow/examples/android/app:tensorflow_native_libs
--crosstool_top=//external:android/crosstool --cpu=arm64-v8a
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain

注意:build.gradle 文件和 Bazel BUILD 文件基本保持不变;我更改了一些路径(我将 android 示例移动到子目录 app/ 中,以允许多项目 gradle 设置),并包含额外的必需内核 Op.

我尝试过的事情:

原来这是我正在处理的 TensorFlow 提交的问题。当我合并上游 TensorFlow 存储库的最新更改时,错误消失了。

我无法想象其他人会 运行 进入这个问题;但是如果你这样做了,或者你 运行 遇到了一些类似的模糊错误,更新到更新版本的 TensorFlow 可能是你的解决方案。或者,您可以选择比我更聪明,并构建库的稳定版本。