0. 背景-为什么要做量化
尽管近几年来,模型的size在不断的压缩,但是计算量(通常几百MFLOPs左右)对于移动端还是很大。由于每个层的权重参数范围基本确定(BatchNorm),且波动不大,适合量化压缩。量化能减少访存和计算量。
1. 量化的原理
1.1 量化本质
1.2 量化原理-最大值映射
1.3 饱和截断映射
2. TensorRT的INT8量化
2.1 模型选择
2.2 工作流程
3. 基于TensorRT的Python API实例
3.1 需要注意的点
3.2 校准器类分析
4. 其他
4.1 参考文章
INT8量化介绍:https://zhuanlan.zhihu.com/p/58182172
INT8量化原理问题记录:https://www.cnblogs.com/deepllz/p/11672912.html
TensorRT的mixed precision:https://docs.nvidia.com/deeplearning/tensorrt/archives/tensorrt-700/tensorrt-developer-guide/index.html#mixed_precision
讨论:
https://blog.csdn.net/yangjf91/article/details/92794182
4.2 相关项目
TensorRT的sample:
Python版本: caffe_int8_mnist
C++版本: sampleINT8
Github的sample:
Yolov3-onnx-int8: https://github.com/mynotwo/yolov3_tensorRT_int8_calibration(这个项目的int8量化没跑通,自己改了一下)
Yolov3和v4: https://github.com/jkjung-avt/tensorrt_demos#int8_and_dla(重点推荐)
4.3 错误分析
Calibrator构建错误
Yolov3和Yolov4
目标检测推理-int8 vs float32精度
Tensorrt5-C++
https://forums.developer.nvidia.com/t/how-to-do-int8-calibration-in-c-in-tensorrt-5/71556
以上是我做tensorrt的int8过程中的一些总结和资料,希望能有所帮助