量化如何以及何时在 TFLite Graph 中工作?

How and when does quantization work in a TFLite Graph?

我有一个经过量化训练、冻结、使用 TOCO 转换为 tflite 的 TF 模型,现在我有 TFLite HTML 图形模型和 json。

我可以看到,对于我图中的每个张量,每个张量都有量化属性(最小值、最大值、比例、零点),我正在尝试确定这些属性中的每一个如何应用于每个张量.

例如,我理解representation of quantized data,我可以理解为将量化后的weights/biases乘以比例并加上最小值returns原来的weights/biases(差不多)。

不明白的地方:

本质上,如果我将 TFLite 模型数据解析为一个 numpy 数组,我需要了解哪些关于网络数据流的所有信息(关于量化),以便重新创建从头开始推理的模型。

我似乎找不到与此相关的任何文档。任何帮助将不胜感激。

卷积内循环执行 uint8 值的 macc。还有一个较小的外部循环用于计算 macc 的 z 偏移部分。在每个内核卷积结束时,您需要使用 input_scale * kernel_scale / output_scale 的缩小乘数从 int32 累加器缩小到 8 位 uint8 范围。这三个比例值是在训练期间学习的,位于 tflite 推理文件中。本文解释了这些操作。 http://openaccess.thecvf.com/content_cvpr_2018/papers/Jacob_Quantization_and_Training_CVPR_2018_paper.pdf