量化感知训练

由 TensorFlow 模型优化维护

量化有两种形式:训练后量化和量化感知训练。从 训练后量化 开始,因为它更易于使用,尽管量化感知训练通常更能提高模型精度。

本页面概述了量化感知训练,以帮助您确定它如何适合您的用例。

概述

量化感知训练模拟推理时量化,创建下游工具将用于生成实际量化模型的模型。量化模型使用较低精度(例如 8 位而不是 32 位浮点数),从而在部署期间带来优势。

使用量化部署

量化通过模型压缩和延迟减少带来改进。使用 API 默认值,模型大小缩小了 4 倍,并且我们在测试的后端中通常会看到 CPU 延迟提高 1.5 到 4 倍。最终,可以在兼容的机器学习加速器(例如 EdgeTPU 和 NNAPI)上看到延迟改进。

该技术在生产中用于语音、视觉、文本和翻译用例。当前代码支持 这些模型的子集

使用量化和相关硬件进行实验

用户可以配置量化参数(例如位数)以及在一定程度上配置底层算法。请注意,对于这些与 API 默认值不同的更改,目前没有支持的后端部署路径。例如,TFLite 转换和内核实现仅支持 8 位量化。

特定于此配置的 API 处于实验阶段,不受向后兼容性的约束。

API 兼容性

用户可以使用以下 API 应用量化

  • 模型构建:keras,仅限 Sequential 和 Functional 模型。
  • TensorFlow 版本:TF 2.x for tf-nightly。
  • TensorFlow 执行模式:急切执行

我们正在路线图中添加以下方面的支持

  • 模型构建:阐明子类模型如何有限地支持或不支持
  • 分布式训练:tf.distribute

通用支持矩阵

以下方面提供支持

  • 模型覆盖范围:使用 允许列表层 的模型,在 Conv2D 和 DepthwiseConv2D 层之后使用 BatchNormalization,以及在有限情况下使用 Concat
  • 硬件加速:我们的 API 默认值与 EdgeTPU、NNAPI 和 TFLite 后端等加速器兼容。请参阅路线图中的注意事项。
  • 使用量化部署:目前仅支持卷积层的逐轴量化,不支持逐张量量化。

我们正在路线图中添加以下方面的支持

  • 模型覆盖范围:扩展到包括 RNN/LSTM 和通用 Concat 支持。
  • 硬件加速:确保 TFLite 转换器可以生成全整型模型。有关详细信息,请参阅 此问题
  • 使用量化用例进行实验
    • 使用跨越 Keras 层或需要训练步骤的量化算法进行实验。
    • 稳定 API。

结果

使用工具进行图像分类

模型 非量化 Top-1 准确率 8 位量化准确率
MobilenetV1 224 71.03% 71.06%
Resnet v1 50 76.3% 76.1%
MobilenetV2 224 70.77% 70.01%

这些模型在 ImageNet 上进行了测试,并在 TensorFlow 和 TFLite 中进行了评估。

图像分类技术

模型 非量化 Top-1 准确率 8 位量化准确率
Nasnet-Mobile 74% 73%
Resnet-v2 50 75.6% 75%

这些模型在 ImageNet 上进行了测试,并在 TensorFlow 和 TFLite 中进行了评估。

示例

除了 量化感知训练示例 之外,请参阅以下示例

  • 使用量化的 MNIST 手写数字分类任务上的 CNN 模型:代码

有关类似内容的背景信息,请参阅用于高效整数算术推理的神经网络量化和训练 论文。本文介绍了此工具使用的一些概念。实现并不完全相同,并且此工具中使用了其他概念(例如逐轴量化)。