TensorFlow iOS端编译过程记录
参考
TensorFlow GitHub中的iOS端编译指导
当然,编译过程中产生的问题都可以在issues中找找
环境准备
系统:mac os 10.14
bazel: 0.24.1
TensorFlow:1.14.0
Python:3.6.3
需要翻墙
编译过程中如果提示缺少什么工具,使用Python安装即可,这里我就不写了,因为编译踩坑过程很漫长,中间安装了什么忘记了
编译过程
进入TensorFlow根目录:
cd tensorflow-1.14.0
编译:
tensorflow/contrib/makefile/build_all_ios.sh -g /Users/mask/Desktop/model_7_15_GA_4.pb -T
其中:
model_7_15_GA_4.pb:是自己的模型
如果只想单独编译一个cpu:
tensorflow/contrib/makefile/build_all_ios.sh -a arm64 -g /Users/mask/Desktop/model_7_15_GA_4.pb -T
然后就是漫长的编译过程
提示
经过漫长的验证,1.14.0版本的TensorFlow编译iOS端是没有问题的,只要把需要的环境配置好即可。
最后,会在tensorflow/contrib/makefile/gen/lib/中出现libtensorflow-core.a
补充说明
1、Op问题
加载pb模型,NO OpKernel was registered to Op ‘…’ 问题
可使用以下命令查找op所在的文件:
grep 'REGISTER.*"..."' tensorflow/core/kernels/*.cc
或者
grep 'REGISTER.*"..."' tensorflow/core/ops/*.cc
找到后打开文件tensorflow/contrib/makefile/tf_op_files.txt在其中添加.cc文件后重新编译。
Xcode中使用编译的.a包
引用的文件太多太杂
Build Settings -> Linking -> Other Linker Flags中加入:
"$(SRCROOT)/../tensorflow-1.14.0/tensorflow/contrib/makefile/gen/protobuf_ios/lib/libprotobuf-lite.a"
"$(SRCROOT)/../tensorflow-1.14.0/tensorflow/contrib/makefile/gen/protobuf_ios/lib/libprotobuf.a"
"$(SRCROOT)/../tensorflow-1.14.0/tensorflow/contrib/makefile/downloads/nsync/builds/lipo.ios.c++11/nsync.a"
-force_load
"$(SRCROOT)/../tensorflow-1.14.0/tensorflow/contrib/makefile/gen/lib/libtensorflow-core.a"
Build Settings -> Search Paths -> Header Search Paths中加入:
$(SRCROOT)/../tensorflow-1.14.0
$(SRCROOT)/../tensorflow-1.14.0/tensorflow/contrib/makefile/downloads
$(SRCROOT)/../tensorflow-1.14.0/tensorflow/contrib/makefile/gen/proto
$(SRCROOT)/../tensorflow-1.14.0/tensorflow/contrib/makefile/downloads/protobuf/src/
$(SRCROOT)/../tensorflow-1.14.0/tensorflow/contrib/makefile/downloads/eigen
$(SRCROOT)/../tensorflow-1.14.0/tensorflow/contrib/makefile/downloads/absl
$(SRCROOT)/../tensorflow-1.14.0/tensorflow/contrib/makefile/downloads/nsync/public
Build Settings -> Search Paths -> Library Search Paths中加入:
$(SRCROOT)/../tensorflow-1.14.0/tensorflow/contrib/makefile/gen/lib
$(SRCROOT)/../tensorflow-1.14.0/tensorflow/contrib/makefile/gen/protobuf_ios/lib
Apple Clang - Language C++ -> C++ Language Dialect选择
GUN++ 11[-std=gun++11]
Build Phases -> Link Binary With Libraries中加入
libc++.tbd
Accelerate.framework