TensorFlow 模型优化工具包:模型大小减半,精度几乎不变!

- 编辑:admin -

TensorFlow 模型优化工具包:模型大小减半,精度几乎不变!

雷锋网 AI 开发者按:近日,TensorFlow 强势推出能将凯发真人在线娱乐手机版下载模型规模压缩却几乎不影响精度的半精度浮点量化工具。小体积、高精度,还能够有效的改善 CPU 和硬件加速器延迟。TensorFlow 发出相应的文章对该工具做了简要的说明,雷锋网 AI 开发者将其整理编译如下。


TensorFlow 模型优化工具包:模型大小减半,精度几乎不变!

我们非常高兴能够将训练后的 float16 quantization 作为模型优化工具包的一部分。这套工具包括了:

混合量化

全整数量化

修剪

在计算中,半精度是二进制浮点计算机数字格式,占用计算机存储器中的 16 位。在 IEEE 754-2008 标准中,16 位 base-2 格式称为 binary16。它用于在高精度对于执行算术计算不是必需的应用中存储浮点值,并且 IEEE 754 标准将 binary16 指定为具有以下格式:

Sign bit: 1 bit

Exponent width: 5 bits

Significand precision: 11 bits

TensorFlow 模型优化工具包:模型大小减半,精度几乎不变!

图 1 IEEE 754 标准下 binary16 的格式

训练后的 float16 quantization 减少了 TensorFlow Lite 模型的大小,同时以少量的精度损失为代价。它将模型常量从全精度浮点量化为减少精度的浮点数据类型。

训练后的 float16 quantization 是量化 TensorFlow Lite 模型很好的方法,因为它对精度的影响极小并且能够使得模型大小显著减小。在这里可以通过查看该文档,以帮助你了解不同的量化选项和场景。

TensorFlow 模型优化工具包:模型大小减半,精度几乎不变!

图 2 帮助确定合适量化场景的决策树

尤其是在部署到边缘时,降低精度将产生很大的收益。

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

精确度损失可忽略不计。深度学习模型通常能够在使用相较于最初训练时更少精确度的情况下,产生良好的推理结果。并且在我们对多个模型的实验中,我们发现推理质量几乎没有损失。例如图 4 中,MobileNet V2 top 1 的测试结果显示,其精度降低值小于 0.03%。

模型尺寸测试结果

训练后的 float16 quantization 对精度的影响很小,并可以使得深度学习模型的大小减小约 2 倍。

以下是在 MobileNet V1 和 V2 模型以及 MobileNet SSD 模型的一些测试结果。其中,MobileNet v1 和 v2 的结果基于 ImageNet 图像识别任务测得,而 MobileNet SSD 模型则在 COCO 目标检测任务上评估而得。

TensorFlow 模型优化工具包:模型大小减半,精度几乎不变!

图 3 不同模型下模型大小变化

模型精度测试结果

在 ILSVRC 2012 图像分类任务中,我们评估了标准 Mobilenet Float32 模型。在 COCO 目标检测任务中,我们对 Mobilenet SSD float32 模型及其 fp16 变体进行了评估。

TensorFlow 模型优化工具包:模型大小减半,精度几乎不变!

图 4 不同模型下精度损失测试结果

用户可以在 TensorFlow Lite converter 上指定训练后的 float16 quantization,即使用经过训练的 float32 模型,将优化设置为 DEFAULT,然后再将目标规范支持的类型设置为 float16 常量。

TensorFlow 模型优化工具包:模型大小减半,精度几乎不变!

图 5 模型参数相关设置

转换模型后,用户就可以像任何其它 TensorFlow Lite 模型那样直接运行该模型了。默认情况下,模型将在 CPU 上运行,通过将 16 位参数「上采样」为 32 位,然后在标准 32 位浮点运算中执行操作。在今后的优化过程中,我们也希望能够有更多的硬件支持加速 fp16 计算,这样半精度值就不再需要进行「上采样」的操作,而是直接进行计算。

同时,用户还可以在 GPU 上运行模型。我们已经增强了 TensorFlow Lite GPU 代理,以接收 16 位精度参数并直接运行。

在应用程序中,用户可以通过 TfLiteGpuDelegateCreate 函数创建 GPU 代理。需要注意的是在为代理指定选项时,请确保将 precision_loss_allowed 设置为 1,从而使其能够在 GPU 上直接使用 float16 操作。

TensorFlow 模型优化工具包:模型大小减半,精度几乎不变!

图 6 在 GUP 上运行模型的参数设置

有关 GPU 委托的概述,可以参阅我们之前的帖子;如果想进一步了解该工具,可以在 CoLab 教程中查看 float16 quantization 工具的使用示例。

原文链接:

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

CoLab 教程:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/performance/post_training_float16_quant.ipynb 

雷锋网 AI 开发者

雷锋网原创文章,未经授权禁止转载。详情见转载须知。

你会喜欢下面的文章? You'll like the following article.