TensorFlow Lite 中的动态范围量化和全整数量化如何优化?

Posted

技术标签:

【中文标题】TensorFlow Lite 中的动态范围量化和全整数量化如何优化?【英文标题】:How does dynamic range quantization and full integer quantization optimize in TensorFlow Lite? 【发布时间】:2021-05-11 22:59:14 【问题描述】:

我目前正在使用 TensorFlow Lite,并试图了解 dynamic range quantization (DRQ) 和 full-integer quantization (FIQ) 之间的区别。我知道在第一个 (DRQ) 中只有 权重 被量化,而在第二个 (FIQ) 中,权重激活(输出)被量化。

但是,我不确定我是否完全理解这意味着什么。关于权重的量化,是简单地从float32转换为int8,还是进行了另一种操作?还有,为什么需要一个有代表性的数据集来量化 FIQ 中的激活?

另外,我想知道,例如,神经网络的一层是否具有 sigmoid 激活,这意味着在 FIQ 中,该层的所有输出都将“映射”到 0 或 1(不采用任何其他之间的可能值)?

最后,在DRQ section 中,您可以读到这句话:“在推理中,权重从 8 位精度转换为浮点并使用浮点内核进行计算”。如果权重在推理时从 8 位转换为浮点精度,与根本没有量化的 TensorFlow Lite 模型相比,我们对模型的动态范围量化有什么优势(除了网络的较小尺寸)?如果不进行这种转换,模型会不会更快(以 int 精度操作)?

【问题讨论】:

【参考方案1】:

全整数量化需要有代表性的数据集来确定输入的最小值-最大值。当转换器对模型进行量化时,这些是正确确定量化节点所必需的。在 TF1.x 中,可以手动将伪量化节点注入模型中,并且似乎伪量化节点仍然存在于当前版本的 TensorFlow 中:Tensorflow documentation。文档页面还回答了您在量化权重时进行了何种操作的问题。

您链接的同一 DRQ 部分还提到“此转换完成一次并缓存以减少延迟”。

【讨论】:

以上是关于TensorFlow Lite 中的动态范围量化和全整数量化如何优化?的主要内容,如果未能解决你的问题,请参考以下文章

使用 toco 将假量化 tensorflow 模型(.pb)转换为 tensorflow lite 模型(.tflite)失败

二进制分类中的 TensorFlow lite 负预测

专访 | 基于LSTM与TensorFlow Lite,kika输入法是如何造就的

Tensorflow 静态图的动态收缩

Tensorflow 静态图的动态收缩

了解 tf.contrib.lite.TFLiteConverter 量化参数