构建适合andriod的tensorflow lite


前言

在vm中安装ubun18.0.4进行编译,在tensorflow转化为tersorflow lite时,如果其中包含选择运算符要通过tensorflow的源代码构建tensorflow-lite.aar和tensorflow-lite-select-tf-ops.aar


一、环境配置

1、下载tensorflow的源代码,https://github.com/tensorflow/tensorflow,下载后解压;
2、下载anconda配置python环境,然后配置tensorflow的依赖包:
pip3 install six numpy wheel

pip3 install keras_applications==1.0.6 --no-deps

pip3 install keras_preprocessing==1.0.5 --no-deps

3、配置bazel的环境,首先访问网站https://github.com/bazelbuild/bazel/releases,并通过tensorflow源文件目录中的bazelversion确定bazel的版本;
安装c++编译器
sudo apt install g++ unzip zip

安装JDk
Ubuntu 16.04 (LTS) uses OpenJDK 8 by default:
sudo apt-get install openjdk-8-jdk

#Ubuntu 18.04 (LTS) uses OpenJDK 11 by default:
sudo apt-get install openjdk-11-jdk

安装 bazel
chmod +x bazel--installer-linux-x86_64.sh
./bazel--installer-linux-x86_64.sh --user
在有些linux上运行此命令,会报错,可以通过bash ./bazel--installer-linux-x86_64.sh --user 来安装
最后是bazel加到环境变量中
export PATH=“ P A T H : PATH: PATH:HOME/bin”
4、下载android studio用来管理SDK和NDK,SDK的版本为23,ndk的版本为20.0.5594570,build-tools的版本为28.0.3,百度网盘链接:https://pan.baidu.com/s/1EBCkewKkFhUWJl996lvlGw
提取码:6v0w;
sdk和ndk的版本尽量安装推荐版本配置,不然在编译的过程中会出现各种关于SDK和ndk的错误,遇到这种错误,可以尝试更换不同的版本。

二、使用步骤

1、配置build

首先通过cd tensorflow-master
进入tensorflow-master的目录中。
运行python ./configure.py
此脚本会提示您指定 TensorFlow 依赖项的位置,并要求指定其他构建配置选项,前面是否的地方都可以选择否在遇到
Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]:时一定要选择是,在配置SDK和ndk,最终配置为:
build --action_env ANDROID_NDK_HOME="/home/cui/Android/Sdk/ndk/20.0.5594570"
build --action_env ANDROID_NDK_API_LEVEL=“21”
build --action_env ANDROID_BUILD_TOOLS_VERSION=“28.0.3”
build --action_env ANDROID_SDK_API_LEVEL=“23”
build --action_env ANDROID_SDK_HOME="/home/cui/Android/Sdk"

2、运行

在tensorflow-master的目录下面运行:
bazel build -c opt --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a
–host_crosstool_top=@bazel_tools//tools/cpp:toolchain
//tensorflow/lite/java:tensorflow-lite
最终会生成一个文件,具体可以查看tensorflow lite官网https://tensorflow.google.cn/lite/guide/build_android

生存一个更小的aar文件可以运行下面 的命令,其中model1和model2是tensorflow模型转换为lite模型的路径
bash tensorflow/lite/tools/build_aar.sh
–input_models=model1,model2
–target_archs=x86,x86_64,arm64-v8a,armeabi-v7a


常见问题

一、出现/home/cui/anaconda3/bin/…/lib/libstdc++.so.6: version `GLIBCXX_3.4.29’ not found的错误
解决方法:1、通过conda install lidstdc
2、首先运行 sudo find / -name libstdc++.so.6*找出所有包含的文件
在这里插入图片描述
在通过strings /home/cui/anaconda3/lib/libstdc++.so.6 | grep GLIBCXX 命令查看那个文件包含GLIBXX_3.4.29
在/home/cui/anaconda3/lib/libstdc++.so.6中在这里插入图片描述
不包含GLIBCXX_3.4.26
在/home/cui/.local/share/Trash/expunged/2025593289/build/x86_64-pc-linux-gnu/libstdc+±v3/src/.libs/libstdc++.so.6文件中
在这里插入图片描述
包含文件
通过运行sudo cp /home/cui/.local/share/Trash/expunged/2025593289/build/x86_64-pc-linux-gnu/libstdc+±v3/src/.libs/libstdc++.so.6 /home/cui/anaconda3/lib/libstdc++.so.6
报包含GLINCXX_3.4.29的文件复制到/home/cui/anaconda3/lib/libstdc++.so.6这样就可以解决问题。

二、出现gcc: internal compiler error: Killed (program cc1plus)或gcc: fatal error: Killed signal terminated program cc1plus问题
1、可以尝试跟换高版本的gcc,安装教程见:https://blog.csdn.net/qq_43504064/article/details/101010507
在更换gcc版本后,要把/home/cui/.cache/bazel/_bazel_cui/718cb3af8fd966db845c7ceafef8ac17文件删除,在每次配置更改了,这个文件也要尽量删除
2、扩大运行内存,实际的运行内存和交换内存的总和要在24G以上,在虚拟机的处理数为2时,可通过安装sudo apt-get install gparted 安装gparted ,用sudo gparted运行,在里面设置交换内存。注意,在每次重启和开关机后,交换内存都要重新启动一下,可以参看的链接https://blog.csdn.net/weixin_43158056/article/details/96450139

三、出现Cannot build with error Server terminated abruptly
解决方法:扩大内存,扩大交换内存,可以是free -m查看

四、出现this rule is missing dependency declarations for the following files included by ‘external/zlib/infback.c’:
‘/usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h’
‘/usr/lib/gcc/x86_64-linux-gnu/9/include/syslimits.h’
‘/usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h’
这种类似错误,可以尝试删除/home/cui/.cache/bazel/_bazel_cui/718cb3af8fd966db845c7ceafef8ac17文件并运行sudo apt-get build-essential

五、出现
/home/emadboctor/tensorflow/tensorflow/tools/pip_package/BUILD:65:1 C++ compilation of rule ‘//tensorflow/core/kernels:sparse_reduce_op’ failed 类似错误可以尝试更换高版本的gcc

六、如有错误的地方,欢迎在下面评论去指出,其他问题也可以发在下面评论区,相互交流学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值