step 1
安装bazel编译工具,bazel官方安装教程 ,推荐第二种Using Bazel custom APT repository安装模式(三步)
step 2
下载tensorflow源码,笔者没尝试在安装版的tf里做编译,用源码不影响平台运转,放心操作。源码地址:tensorflow/tensorflow,配置过tf源码的盆友都知道,接下来配置洪水般倾泻询问的让你进退维谷,推倒重来是常态。记住一条:关于cuDNN配置的全yes,cudn的部分通过,其他的根据需求拟定。
step 3
接下来进入编译bazel 对源码的编译,如果只编译支持cpu的,输入如下代码,参考自:https://www.cnblogs.com/shouhuxianjian/p/9416934.html
$ bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
如果需要gpu支持的,敲如下代码:
$ bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
笔者言:此步骤适宜午休前操作,这样你可以感受不到它的漫长。
step 4
好开心,午休归来阿哩哩!编译successful!恭喜,环境基本搭建完成!如果没有安装版tf的可以参考余下的步骤完成。
$bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
$ sudo pip install /tmp/tensorflow_pkg/tensorflow
好了,下面进入崭新阶段,依以下的步骤编译模型转换工具包(前方有坑预警)~
$ bazel build tensorflow/python/tools:freeze_graph(作模型固化的工具)
$ bazel build tensorflow/lite/toto:toto(其他经验分享,这部分路径有误,笔者已更正)
$ bazel build tensorflow/tools/graph_transforms:summarize_graph(查看模型结构的工具)
齐活!下面就可以按照通用方式进行tflite模型转换了,但是我们通常在模型训练完成后只有.ckpt文件,可以将.ckpt文件直接固化成pb文件,这里参考了tensorflow实现将ckpt转pb文件
这样生成的固化pb文件,可以直接进入toco命令转换了! 在toco命令中,需要有网络的输入,输出,shape等参数,可以通过这个命令(模型路径替换成自己的):
$ bazel-bin/tensorflow/tools/graph_transforms/summarize_graph –in_graph=../freeze_graph.pb 参考: Tensorflow 模型转 tflite ,在安卓端使用
通过网络结构就可找到对应输入/出参量了,进入toco模型转换,以mobilenet为例,命令如下形式(第一行的路径笔者有修正):
$ bazel-bin/tensorflow/lite/toco/toco –input_file=frozen_model.pb \
–output_file=model.tflite \ –input_format=TENSORFLOW_GRAPHDEF \
–output_format=TFLITE \ –inference_type=FlOAT \
–input_shapes=”1,224,224,3” \ –input_array=input \
–output_array=MobilenetV1/Predictions/Reshape_1 \
操作无误后,就可以喜提tflite模型了!如果有对android部署熟知或有兴趣的呼友,也可以交流一下!