发新帖

TensorFlow Lite 模型量化的问题

[复制链接]
1663 9

快来加入 TensorFlowers 大家庭!

您需要 登录 才可以下载或查看,没有帐号?加入社区

x
Tensorflow 已经提供了对模型进行量化的工具 graph_transform,将浮点数量化为 8 位整型的话,模型的大小会缩小为原来的 1/4 左右,在移动端部署的时候就能有效控制 APK 的大小。
对于 TensorFlow Lite,并没有提供直接量化模型的工具,官方提供的方案是在训练的过程中,利用 create_training_graph() 和 create_eval_graph() 在 Graph 中加入 FakeQuant 节点(参考这里),然后用 toco 工具在转换 pb 文件为 tflite 文件的时候利用 FakeQuant 节点中记录的信息进行量化,我每次都是在最后一步转换 pb 为 tflite 的时候出错,提示 "xxx is lacking min/max data, which is necessary for quantization"。不知论坛里的各位有没有成功量化 TensorFlow Lite 模型的经验,如果有,恳请分享一下。
我知道答案 回答被采纳将会获得10 金币 + 16 金币 已有9人回答
本楼点评(0) 收起

精彩评论9

ZMikkelsen  TF荚荚  发表于 2018-6-1 21:41:24 | 显示全部楼层
本帖最后由 ZMikkelsen 于 2018-6-1 21:47 编辑

www.tensorfly.cn看看API
本楼点评(1) 收起
舟3332  TF芽芽  发表于 2018-6-8 21:39:33 来自手机  | 显示全部楼层
是不是在转换的时候要多给一个参数?
本楼点评(0) 收起
Yanbo  TF荚荚  发表于 2018-7-3 10:48:47 | 显示全部楼层
转换时要给出下面的参数
--default_ranges_min=-1.0 --default_ranges_max=1.0
本楼点评(0) 收起
衣农  TF荚荚  发表于 2018-7-3 11:03:56 来自手机  | 显示全部楼层
转换时要给出下面的参数
--default_ranges_min=-1.0 --default_ranges_max=1.0
本楼点评(0) 收起
快到碗里来  TF荚荚  发表于 2018-10-16 18:02:39 | 显示全部楼层
请问你现在量化成功了吗?还有你从哪里得知要量化lite文件需要使用create_training_graph() 和 create_eval_graph() 加入FakeQuant 节点.因为我看别的文档似乎并没有这么说.
本楼点评(0) 收起
舟3332  TF芽芽  发表于 2018-10-17 00:33:32 | 显示全部楼层
post training quantize 貌似也支持了。可以试试。
本楼点评(1) 收起
  • Zongjun这个方法并不是真正的quantization。Inference时依然用的是float kernel。链接:https://www.tensorflow.org/performance/post_training_quantization
    2018-10-27 01:08 回复
九幽  TF荚荚  发表于 2018-11-14 11:40:48 来自手机  | 显示全部楼层
我也在做这个,类似的问题,到处问找答案也没找到……我模型训练出来后转化的时候它说不知道FakeQuantWithMinMaxVars的数据类型,我感觉可能是程序那里少写了东西吧?有人知道这是什么问题吗?楼主能给我参考下你的训练代码吗?因为我不知道eval的部分怎么加进去……多谢~
本楼点评(0) 收起
Zongjun  TF荚荚  发表于 2018-11-15 07:11:11 | 显示全部楼层
本帖最后由 Zongjun 于 2018-11-15 07:33 编辑

楼主的问题我也碰到过。如果用Netron这个软件打开你的.tflite和.pb文件,你会发现有的该插入fake quantization node的地方并没有插入。这是因为create_training_graph这个function确实有时候会漏掉某些需要插入伪量化节点的op。解决方法是去掉这些op;用某些其他op代替之;手动插入fake quantization nodes; default ranges。
lacking min/max data, which is necessary for quantization. Either target a non-quantized output format, or change the input graph to contain min/max information, or pass --default_ranges_min= and --default_ranges_max= if you do not care about the accuracy of results.

但要注意的是:--default_ranges_min, --default_ranges_max. Type: floating-point. Default value for the (min, max) range values used for all arrays without a specified range. Allows user to proceed with quantization of non-quantized or incorrectly-quantized input files. These flags produce models with low accuracy. They are intended for easy experimentation with quantization via "dummy quantization".
本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

快速回复 返回顶部 返回列表