6.1 模型量化开发
工具简介
xquant 是基于 PPQ v0.6.6+ 开发的模型量化工具,已集成适配主流芯片的量化策略。工具通过 JSON 配置文件统一调用接口,可将浮点格式的 ONNX 模型转换为 INT8 定点格式模型。
在使用 xquant 前,建议先将训练框架生成的模型转换为 ONNX 格式。目前主流框架均提供标准化的转换方案,参考 ONNX 转换教程: https://github.com/onnx/tutorials#converting-to-onnx-format
使用流程
量化流程如下图所示:
模型量化示例
以下以 Ultralytics 社区 提供的 yolov8n
模型为例,介绍 xquant 的量化操作流程。
安装量化工具包
从官方地址下载 .whl
安装包:xquant-1.2.1 下载地址
安装命令如下:
pip install xquant-1.2.1-py3-none-any.whl
安装完成后可通过以下命令验证安装成功:
pip show xquant
成功后输出如下:
获取浮点模型
-
下载原始 YOLOv8n 模型(
.pt
格式): https://docs.ultralytics.com/zh/models/yolov8/#performance-metrics -
使用 Ultralytics 提供的导出接口将
.pt
模型转换为.onnx
: 官方导出文档:https://docs.ultralytics.com/zh/modes/export/
通常建议 导出时使用如下参数:
opset_version=13
input_shape=[1, 3, 640, 640]
配置量化工程 文件
1)新建工程目录:
project_root/
├── yolov8/
│ ├── model/ # 放置 yolov8n.onnx 模型
│ └── data/ # 放置标定数据与配置文件
2)编写 yolov8_xquant_config.json
配置文件:
{
"model_parameters": {
"onnx_model": "yolov8/model/yolov8n.onnx",
"working_dir": "yolov8",
"skip_onnxsim": false
},
"calibration_parameters": {
"input_parametres": [
{
"mean_value": [0, 0, 0],
"std_value": [255, 255, 255],
"color_format": "rgb",
"data_list_path": "yolov8/data/calib_list.txt"
}
]
},
"quantization_parameters": {
"truncate_var_names": [
"/model.22/Reshape_output_0",
"/model.22/Reshape_1_output_0",
"/model.22/Reshape_2_output_0"
]
}
}
onnx_model
:模型路径mean_value
和std_value
:图像归一化参数,需与训练配置保持一致。color_format
:图像通道顺序(如 RGB/BGR)。data_list_path
:标定数据路径文件。
示例标定图像列表 calib_list.txt
内容如下:
Calib/000000428562.jpg
Calib/000000000632.jpg
Calib/000000157756.jpg
Calib/000000044279.jpg
Calib/000000131444.jpg
Calib/000000415238.jpg
Calib/000000202228.jpg
Calib/000000441491.jpg
Calib/000000068286.jpg
Calib/000000232088.jpg
⚠️ 建议标定数据选自模型训练集的子集,并保持数据分布一致。
设置量化截断节点
YOLOv8n 模型中包含后处理(坐标解码)逻辑,建议对模型在后处理节点前进行截断,防止量化误差。配置中的 truncate_var_names
用于指定量化截断点:
"truncate_var_names": [
"/model.22/Reshape_output_0",
"/model.22/Reshape_1_output_0",
"/model.22/Reshape_2_output_0"
]
可使用 Netron 可视化工具加载 yolov8n.onnx
模型确认节点名称:
执行量化
运行以下命令进行量化:
python3 -m xquant --config yolov8/data/yolov8_xquant_config.json
量化完成后将生成:
- 量化模型文件:
yolov8n.q.onnx
- 量化报告文件:
yolov8n.q_report.md