本次试验是基于yolov5n的模型进行ptq、qat的量化以及敏感层分析的试验。
Post-Training-Quantization(PTQ)是目前常用的模型量化方法之一。以INT8量化为例,PTQ处理流程如下:
-
首先在数据集上以FP32精度进行模型训练,得到训练好的baseline模型;
-
使用小部分数据对FP32 baseline模型进行calibration(校准),这一步主要是得到网络各层weights以及activation的数据分布特性(比如统计最大最小值);
-
根据2.中的数据分布特性,计算出网络各层、量化参数;
-
使用3.中的量化参数对FP32 baseline进行量化得到INT8模型,并将其部署至推理框架进行推理;
PTQ方式会使用小部分数据集来估计网络各层weights和activation的数据分布,找到合适的Scale,从而一定程度上降低模型精度的损失。
然而,PTQ方式虽然在大模型上效果较好(例如ResNet101),但是在小模型上经常会有较大的精度损失(例如MobileNet),同时不同层对于精度的影响也比较大。
接下来本文结合代码,来讲解如何使用torch_quant来对yolov5n进行ptq量化。
本次内容的代码主要是下图1中的这四个文件,下篇文章会放整体代码的下载链接。
图1: