模型量化Calibration

  • 量化校准过程(预处理阶段),我们使用验证集中的一小部分图片(通常为整个数据集的 1-5%)来收集数据分布的信息,包括最小值 / 最大值、基于熵理论的最佳阈值、基于对称量化的量化因子等。最终,这些量化参数会被记录在新生成的量化模型中。
  • Calibration

           如果要让最后的精度损失不大,是要考虑一些先验知识的,这个先验知识就是每一层在 FP32精度下的激活值分布,只有根据这个才能找到更加合理的 阈值|T|。也就是说首先得有一个以FP32精度训练好的模型。基本上现有的深度学习框架都是默认 FP32精度的,有些模型还支持FP16精度训练,貌似 Caffe2和MXNet是支持FP16的,其他的不太清楚。所以基本上只要没有特别设定,训练出来的模型肯定是 FP32 的。

    那激活值分布如何得到?难道我们要将FP32的模型先在所有的测试集(或验证集)上跑一边记录下每一层的FP32激活值,然后再去推断 |T|?

    这里的做法是 从验证集 选取一个子集作为校准集(Calibration Dataset ),校准集应该具有代表性,多样性,最好是验证集的一个子集,不应该只是分类类别的一小部分。激活值分布就是从校准集中得到的。

    按照NVIDIA 官方的说法

    Note: The calibration set must be representative of the input provided to TensorRT at runtime; for example, for image classification networks, it should not consist of images from just a small subset of categories. For ImageNet networks, around

猜你喜欢

转载自blog.csdn.net/jwy2014/article/details/103700407