一、PTQ量化流程
(1) 核查onnx模型
(2)准备和生成模型校准数据集
(3)PTQ量化
(4)量化模型推理
二、具体流程
(1)使用01_check_onnx.sh脚本,对onnx模型进行核查。
(2)准备模型校准数据集,数据集需要几十张到几百张左右。
(3)编写02_prepare_calibration_data.py,对校准数据集中的数据进行预处理,运行02_prepare_calibration_data.py,就会生成可用于模型PTQ量化的校准集calibration_data。
(4)进行PTQ量化,模型转换及二进制模型编译工作。首先,需要参考地平线官方提供的yaml文件示例,需要根据自己的实际模型和量化需求,写一个量化Yaml文件,包含模型参数(model_parameters)、输入参数(input_parameters)、校准参数(calibration_parameters)、编译参数(compiler_parameters)。写好量化yaml配置文件后,运行下面指令进行PTQ量化,模型转换和编译。
sudo sh ./03_build_onnx.sh
运行成功后,会在model_output文件夹下,生成量化后的quantized_model.onnx模型、model.bin二进制模型、及可以用于查看模型推理速度,每层神经结构耗时等关键信息文件。
(5)基于Netron软件对原始模型和转换模型做结构对比,判断转换后的网络结构是否与原始模型一致。
(6)编写J3环境下,使用quantized_model.onnx模型进行推理的代码,当前推理结果会和使用model.bin模型在J3板端跑的效果一致。运行下面指令进行PTQ量化后的onnx模型推理,可用来对比量化前后的误差:
python3 04_inference.py