当前位置:   article > 正文

从环境搭建到tflite的转换_获取 input_array 和 output_array 项,将模型转换为 tflite 格式

获取 input_array 和 output_array 项,将模型转换为 tflite 格式

转载自https://zhuanlan.zhihu.com/p/59496851  有改动

 

三月七日凌晨,谷歌连夜发布了有关于Tensorflow最新成果和技术,这应该是贾扬清离开脸书后另一个深度学习界令人惊呼的事件了吧!(旁白:反正你说是就是呗)笔者对Tensorflow 2.0 Alpha 还是Beta不是很感冒,倒是对tensorflow lite 1.0的更新激动到高呼:卧槽,牛比!(破音)

TF2019开发者大会

全球即将同步直播:TensorFlow Dev Summit 2019​mp.weixin.qq.com图标

点击可看大会回顾

自17年开发者大会,tflite作为tensorflow的移动轻量版随之发布以来,在支持的运算和网络上做了较多兼容的工作,可一直无法让人满意,如此多喜闻乐见的网络没有办法在移动端部署,开发者也只能望洋兴叹。终于!此次大会为开发者带来了福音。支持的op将进一步拓展,RNN/LSTM将完美支持,再辅以前期(not前妻)的移动端GPU加速,吾孰能知否移动端开发的此刻的躁动。

TensorFlow Lite 2019 年发展蓝图​www.zhuanzhi.ai

抱歉,下面才是文章的主旨内容部分!

目前移动端部署,多是采用pb文件和tfmobile,tflite是tfmobile的轻化(light)版,相比tfmobile通常有更小的二进制大小,更少的依赖和更好的性能,大会规划的蓝图似乎让lite真正作为接替者走上历史的舞台(说得自己都诚惶诚恐).早期看了很多转换tflite模型的技术博客,糟了不少坑,纸短情长,无以在此言表。以下是个人重构的tflite丝滑版流畅的转换情景。

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代码

这样生成的固化pb文件,可以直接进入toco命令转换了! 在toco命令中,需要有网络的输入,输出,shape等参数,可以通过这个命令(模型路径替换成自己的):

$ bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --in_graph=../freeze_graph.pb 参考: Tensorflow 模型转 tflite ,在安卓端使用

模型结构参数

通过网络结构就可找到对应输入/出参量了,进入toco模型转换,(第一行tensoflow 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_array=input  \   --output_array=MobilenetV1/Predictions/Reshape_1  --input_shapes="1,224,224,3" 

操作无误后,就可以喜提tflite模型了!

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/154256
推荐阅读