使用 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.
我尝试过的事情:
经过一些研究,我在 TensorFlowSharp github 页面上发现了一个问题,表明这次崩溃可能是缓冲区大小的问题,而且我的模型很大 (~93MB)。然而,对于一个小得多的网络(1.6MB),我得到了同样的错误。
作为 gradle 构建的一部分,我也尝试关闭 .pb
文件的压缩,因为这在某处也被推荐,也没有改变。
在绝望的尝试中,我尝试用我刚刚构建的文件替换 JCenter 提供的 Tensorflow android aar 中现有的 .so
文件,但这导致同样的错误。
离线编译 .so
文件并手动将它们放置在适当的 android 项目目录中。
原来这是我正在处理的 TensorFlow 提交的问题。当我合并上游 TensorFlow 存储库的最新更改时,错误消失了。
我无法想象其他人会 运行 进入这个问题;但是如果你这样做了,或者你 运行 遇到了一些类似的模糊错误,更新到更新版本的 TensorFlow 可能是你的解决方案。或者,您可以选择比我更聪明,并构建库的稳定版本。
我正在尝试基于 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.
我尝试过的事情:
经过一些研究,我在 TensorFlowSharp github 页面上发现了一个问题,表明这次崩溃可能是缓冲区大小的问题,而且我的模型很大 (~93MB)。然而,对于一个小得多的网络(1.6MB),我得到了同样的错误。
作为 gradle 构建的一部分,我也尝试关闭
.pb
文件的压缩,因为这在某处也被推荐,也没有改变。在绝望的尝试中,我尝试用我刚刚构建的文件替换 JCenter 提供的 Tensorflow android aar 中现有的
.so
文件,但这导致同样的错误。离线编译
.so
文件并手动将它们放置在适当的 android 项目目录中。
原来这是我正在处理的 TensorFlow 提交的问题。当我合并上游 TensorFlow 存储库的最新更改时,错误消失了。
我无法想象其他人会 运行 进入这个问题;但是如果你这样做了,或者你 运行 遇到了一些类似的模糊错误,更新到更新版本的 TensorFlow 可能是你的解决方案。或者,您可以选择比我更聪明,并构建库的稳定版本。