【MTK工具】【TFLITE】借助MTK工具将TensorFlow模型pb文件转化为TFLITE

MTK工具文档:https://neuropilot.mediatek.com/auth/resources/login?redirect_uri=/resources/common/latest/en/docs/converter-and-quantization

MTK工具是联发科所研发的。提供了易使用的界面,包括将网格模式转化为一种更好的量化网格模型的解决方案。在此就不多赘述为何使用该工具了,开发中有需求进行的实践。

 

本文主要是进行TF-Frozen-pb到TFLite的转换。实现如下:

(1)下载工具包

下载链接见参考文档,只用到了Neuropilot_converter_quantizer_package_2.0_2019_07_17工具。

(2)安装

文档中提到了四种方法,这里采用了最简单的pip方法。

①解压安装包
tar -xf neuropilot_converter_quantizer_package_2.0_2019_07_17.tar.gz
②安装工具包
pip install 所安装的路径/volumes/neuropilot-release/neuropilot-package/dist/neuropilot-1.0.0rc0-cp35-cp35m-linux_x86_64.whl --user
③测试是否安装完成
$(python3 -c 'import neuropilot.path; print(neuropilot.path.export_paths())') 也可以进入Python,import neuropilot 不报错就是安装好了

tips:安装包是用于Python3.5的,版本不符合需要建立相应虚拟环境

虚拟环境的使用(使用了anaconda,安装方法可以搜索一下):

 ①建立:conda create -n 虚拟环境名 python=X.X   安装后虚拟环境文件可以在Anaconda安装目录envs文件下找到

还可以同时安装需要的包,如:conda create -n env_name numpy matplotlib python=2.7

②激活:

Linux:  source activate 虚拟环境名

Windows: activate 虚拟环境名

tips:可以用python --version检查版本

③安装相应需要的包

conda install -n 虚拟环境名[package]

④退出虚拟环境

不用时即可退出:

Linux:  source deactivate  /  Windows: deactivate

(3).pb文件的生成:

from tensorflow.python.framework import graph_util
### 保存pb文件 ###
input_graph_def = self.graph.as_graph_def()
constant_graph = graph_util.convert_variables_to_constants(self.session, input_graph_def, ['output'])

with tf.gfile.FastGFile(checkpoint + 'model.pb', mode='wb') as f:
f.write(constant_graph.SerializeToString())

其中的‘output’是在TensorFlow模型中设定的图输出的name

(4)使用工具:

输入指令

toco \
--graph_def_file=.pb文件 \
--input_format=TENSORFLOW_GRAPHDEF \
--output_file=converted_model.tflite \
--output_format=TFLITE \
--inference_type=FLOAT \
--inference_input_type=FLOAT \
--input_arrays=图中的输入 name\
--output_arrays=图中的输出 name\
--input_shapes=输入图的shape \
--partial_quant=true 
/

红色部分填写自己所保存模型的相关信息,最后一句是用于量化模型,可不进行

错误及解决

(1)ValueError: NodeDef mentions attr 'explicit_paddings' not in Op<name=Conv2D; signature=input:T, filter:T -> output:T; attr=T:type,allowed=[DT_HALF, DT_BFLOAT16, DT_FLOAT, DT_DOUBLE]; attr=strides:list(int); attr=use_cudnn_on_gpu:bool,default=true; attr=padding:string,allowed=["SAME", "VALID"]; attr=data_format:string,default="NHWC",allowed=["NHWC", "NCHW"]; attr=dilations:list(int),default=[1, 1, 1, 1]>; NodeDef: {{node conv1d/conv1d}}. (Check whether your GraphDef-interpreting binary is up to date with your GraphDef-generating binary.)

答:生成pb使用的TensorFlow和运行toco指令的TensorFlow版本不符合。用同一版本运行即可

(2)-bash:syntax error near unexpected token `newline'

答:指令中存在不能识别的字符,例如<>

(3)提示找不到input/output

答:检查自己填写的参数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值