大小端转换_优雅地进行Tensorflow Lite模型转换

本文介绍了如何优雅地进行Tensorflow Lite模型转换,从安装bazel到编译tensorflow源码,再到使用bazel构建模型转换工具,最后详细阐述了如何将.ckpt文件转换为.pb文件,并使用toco命令生成.tflite模型。通过这个流程,开发者可以在移动端更顺利地部署深度学习模型。
摘要由CSDN通过智能技术生成

40f970bdeb986b5d2f736d15e8445584.png

初涉知乎江湖,知道大佬很多,请温柔以待!!!

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

f44ecdf0e4a96d8ba00a417e0d4902c0.png
TF2019开发者大会
全球即将同步直播:TensorFlow Dev Summit 2019​mp.weixin.qq.com
4fbbd60c0215ae44b01d0ed924cdcd96.png

点击可看大会回顾

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

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

3aa37f0919b42483a68c720143105255.png

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

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

step 1

安装bazel编译工具,bazel官方安装教程 ,推荐第二种Using Bazel custom APT repository安装模式(三步)

58bd45c051119db77f571a85328d2243.png

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文件

f317bf2a09397843087e7cd376828aed.png
转换pb代码

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

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

e4ec69ffff9036a176d6430067e2529f.png
模型结构参数

通过网络结构就可找到对应输入/出参量了,进入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部署熟知或有兴趣的呼友,也可以交流一下!

Delta first writen for Miniredzuzu~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值