TensorFlow模型优化工具:float16量化,模型大小轻轻松松减少一半

2019 年 8 月 17 日 极市平台

加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。关注 极市平台 公众号 ,回复 加群,立刻申请入群~


作者:TensorFlow

编译:ronghuaiyang

【导读】一个Tensorflow训练后量化的工具,不用再单独训练一个低精度模型了,原来的全精度模型直接就可以转换。

我们非常激动地添加训练后float16量化作为模型优化工具包的一部分。这是一套工具,包括:混合量化,全整数量化和剪枝。


训练后的float16量化减少了TensorFlow Lite模型的尺寸(高达50%),同时牺牲了很少的精度。它量化模型常量(如权重和偏差值)从全精度浮点数(32位)到降低精度浮点数数据类型(IEEE FP16)。


训练后的float16量化是量化TensorFlow Lite模型的一个很好的起点,因为它对精度的影响很小,而且模型大小显著减小。你可以查看我们的文档:

https://www.tensorflow.org/lite/performance/posttrainingquantization

(包括一个新的浮点图!),以帮助您了解不同的量化选项和场景。



降低精度的好处


降低精度有很多好处,特别是当部署到边缘设备时:


减少2倍的模型大小。模型中的所有常量值都存储在16位浮点数中,而不是32位浮点数。由于这些常量值通常控制整个模型大小,因此通常会将模型大小减少大约一半。


可忽略的精度损失。深度学习模型通常能够在使用比最初训练时更少的精度的情况下产生良好的推理结果。在我们对几个模型的实验中,我们发现推理质量几乎没有损失。例如,下面我们展示了MobileNet V2的Top 1精度降低了<0.03%。(见下面的结果)。


尺寸减少了2倍,微乎其微的精度损失


训练后float16量化对深度学习模型的精度影响最小,并可使模型的尺寸缩小约2倍。例如,以下是MobileNet V1和V2模型以及MobileNet SSD模型的一些结果。MobileNet v1和v2的精度结果基于ImageNet图像识别任务。SSD模型是在COCO物体检测任务上评估的。

模型准确率


在[ILSVRC 2012图像分类任务上评估标准Mobilenet float32模型及其fp16变体,COCO物体检测任务上评估Mobilenet SSD float32模型及其fp16变体。

如何使用训练后float16量化


你可以在TensorFlow Lite转换器上指定训练后的float16量化,方法是使用你训练后的float32模型,将优化设置为默认,目标规范支持的类型设置为float16常量


  
  
    
  1. import tensorflow as tf

  2. converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)

  3. converter.optimizations = [tf.lite.Optimize.DEFAULT]

  4. converter.target_spec.supported_types = [tf.lite.constants.FLOAT16]

  5. Tflite_quanit_model = converter.convert()


一旦转换了模型,就可以像其他TensorFlow Lite模型一样直接运行它。默认情况下,模型将在CPU上运行,将16位参数“上采样”到32位,然后执行标准的32位浮点运算。随着时间的推移,我们希望看到更多的硬件支持来加速fp16的计算,从而允许我们将upsample降低到float32,并直接计算这些半精度值。

你也可以在GPU上运行你的模型。我们增强了TensorFlow Lite GPU委托来接受降低的精度参数并直接运行它们(而不是像在CPU上那样转换为float32)。在你的应用中,你可以通过 TfLiteGpuDelegateCreate函数创建GPU委托。当为委托指定选项时,请确保将 precision_loss_allowed设置为1,以便在GPU上使用浮点16操作


  
  
    
  1. //Prepare GPU delegate.

  2. const TfLiteGpuDelegateOptions options = {

  3. .metadata = NULL,

  4. .compile_options = {

  5. .precision_loss_allowed = 1, // FP16

  6. .preferred_gl_object_type = TFLITE_GL_OBJECT_TYPE_FASTEST,

  7. .dynamic_batch_enabled = 0, // Not fully functional yet

  8. },

  9. };


英文原文:

https://medium.com/tensorflow/tensorflow-model-optimization-toolkit-float16-quantization-halves-model-size-cc113c75a2fa



-完-



*延伸阅读


添加极市小助手微信(ID : cv-mart),备注:研究方向-姓名-学校/公司-城市(如:目标检测-小极-北大-深圳),即可申请加入目标检测、目标跟踪、人脸、工业检测、医学影像、三维&SLAM、图像分割等极市技术交流群,更有每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流一起来让思想之光照的更远吧~


△长按添加极市小助手


△长按关注极市平台


觉得有用麻烦给个在看啦~  


登录查看更多
2

相关内容

【ACL2020-伯克利】预训练Transformer提高分布外鲁棒性
专知会员服务
19+阅读 · 2020年4月14日
专知会员服务
44+阅读 · 2020年3月6日
【Google】利用AUTOML实现加速感知神经网络设计
专知会员服务
29+阅读 · 2020年3月5日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
Rocket Training: 一种提升轻量网络性能的训练方法
极市平台
5+阅读 · 2019年6月15日
Tensorflow框架是如何支持分布式训练的?
AI100
9+阅读 · 2019年3月26日
使用TensorFlow目标检测和OpenCV分析足球视频
极市平台
5+阅读 · 2018年7月10日
用 TensorFlow 目标检测 API 发现皮卡丘!
AI研习社
5+阅读 · 2018年6月4日
TensorFlow图像分类教程
机器学习研究会
33+阅读 · 2017年12月29日
深度学习入门篇--手把手教你用 TensorFlow 训练模型
全球人工智能
4+阅读 · 2017年10月21日
Arxiv
5+阅读 · 2020年3月16日
Self-Attention Graph Pooling
Arxiv
5+阅读 · 2019年4月17日
Arxiv
8+阅读 · 2018年11月21日
Arxiv
31+阅读 · 2018年11月13日
Arxiv
7+阅读 · 2018年2月26日
VIP会员
相关资讯
Rocket Training: 一种提升轻量网络性能的训练方法
极市平台
5+阅读 · 2019年6月15日
Tensorflow框架是如何支持分布式训练的?
AI100
9+阅读 · 2019年3月26日
使用TensorFlow目标检测和OpenCV分析足球视频
极市平台
5+阅读 · 2018年7月10日
用 TensorFlow 目标检测 API 发现皮卡丘!
AI研习社
5+阅读 · 2018年6月4日
TensorFlow图像分类教程
机器学习研究会
33+阅读 · 2017年12月29日
深度学习入门篇--手把手教你用 TensorFlow 训练模型
全球人工智能
4+阅读 · 2017年10月21日
Top
微信扫码咨询专知VIP会员