graph TD
A[开始混合量化流程] --> B[模型加载]
B --> C[asymu8量化]
C --> D[准备混合量化配置]
D --> E{选择量化方式}
E --> F[子图量化]
E --> G[单层量化]
F --> H[配置输入输出]
H --> I[填写层配置文件]
G --> J[配置层名称]
J --> K[填写层配置文件]
I --> L[执行混合量化]
K --> L
L --> M[添加后处理网络]
M --> N[导出最终模型]
N --> O[量化完成]
C --> P[精度分析分支]
P --> Q[生成float32数据]
P --> R[生成asymu8数据]
Q --> S[对比层相似度]
R --> S
S --> T[分析精度结果]
T --> U{精度损失严重?}
U --> V[将该层/子图加入 cust_qnt_layers.txt]
U --> W[保持asymu8量化]
V --> D
W --> D
netrans工具示例
概述
本示例工程介绍 Netrans 下的模型优化和精度优化方法,包括通过网络裁剪提升速度和精度、混合量化提升精度。
项目结构
详情参考:https://gitlink.org.cn/nudt_dsp/netrans_examples.git
版本区别
环境配置
具体环境参考 Netrans 工程,与其保持一致。
下载工程:
网络剪枝
应用场景
模型尾部节点在 PNNA 核上计算耗时或精度损失大时,可通过剪枝优化。
剪枝方法
将模型输出层提前输出,裁剪尾部节点,将裁剪部分移至其他计算模块。
操作步骤
inputs_outputs.txt文件.onnx文件查看节点信息示例配置
混合量化
混合量化仅适用于 asymu8,将 asymu8 的部分层修改为 dfpi16 或 float32 量化。以下示例将裁剪和混合量化相结合。
流程图
graph TD A[开始混合量化流程] --> B[模型加载] B --> C[asymu8量化] C --> D[准备混合量化配置] D --> E{选择量化方式} E --> F[子图量化] E --> G[单层量化] F --> H[配置输入输出] H --> I[填写层配置文件] G --> J[配置层名称] J --> K[填写层配置文件] I --> L[执行混合量化] K --> L L --> M[添加后处理网络] M --> N[导出最终模型] N --> O[量化完成] C --> P[精度分析分支] P --> Q[生成float32数据] P --> R[生成asymu8数据] Q --> S[对比层相似度] R --> S S --> T[分析精度结果] T --> U{精度损失严重?} U --> V[将该层/子图加入cust_qnt_layers.txt] U --> W[保持asymu8量化] V --> D W --> D
操作步骤
1. 模型加载
2. asymu8 量化
3. 配置混合量化文件
新建
cust_qnt_layers.txt,支持两种格式:子图量化格式:
单层量化格式(每行一层):
4. 执行混合量化
5. 导出模型
精度分析与层选择
1. 生成对比数据
2. 对比精度损失
3. 选择量化层
yolov5s_crop_hb_precision_analysis.json文件cust_qnt_layers.txt,改为 dfpi16 量化4. 关键点
yolov5s_crop_hb.json获取层/子图名称