tensorflow lite手机端移植记录

最近在研究怎么将服务器跑的模型移植到手机端,需要一些问题记录下~

前提知识:

1)熟悉 Graph、GraphDef和MetaGraphDef的含义和区别

2)熟悉tf lite官网上的文档,包括python api和命令行CLI的使用方法(lite converter和lite interpreter)

3)熟悉quantization_aware traning的官网示例(区别于post quantization)

4)熟悉mobilenet_v1官方的train和eval示例

如果熟悉了上面的前提知识,那么手机端lite移植也就不难了~

步骤:

1)使用quantization_aware的方式训练模型(quant delay延迟加载)得到checkpoint文件。(包含模型变量的参数值)

2)将train graph转为eval graph。(模型图的前向传播图,只包含结果,不包含参数值)

3)基于eval graph,得到frozen graph(freeze_graph命令行工具),将变量转为常量~。(将ckpt文件中变量值附加到前向传播图中,作为参数常量存在,也就是“frozen”的意思[将变量冻结为常量]~)

4)调用toco命令行工具,将frozen graph转为lite graph(指定输入和输出的name、输入的大小、inference的输入和输出类型、GraphDef或其他包含GraphDef的格式文件等等)。

采坑:

1)量化的graph目标不是train graph,而是eval graph

2)python api方式转为lite一直报错,转为freeze_graph+toco解决

3)freeze_graph和toco命令行的参数说明

4)input_shape要前后始终统一

5)要熟悉Graph、GraphDef、MetaGraphDef等区别

6)熟悉summary.save、savedModel、save_graph_def和export_meta_graph等api的区别

7)熟悉tf的整个流程,深刻理解tensor和operation的作用和地位

8)post quantization和quantization-aware训练模型,量化处理的方式不一样(详情见tf官方文档)

如何保证量化之后的精度:

待定~

-- over --

发布了64 篇原创文章 · 获赞 24 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qm5132/article/details/97437288