目录
目录README.md

混合量化、前后处理自动化示例

概述

本项目展示了混合量化自动化和前后处理自动化的实现方案:

  • 混合量化自动化:将 uint8 数据类型中精度损失较大的节点自动替换为高精度数据类型,通过自动化节点选择策略提升模型精度
  • 前后处理自动化:使用 netrans 工具将前处理(数据标准化/归一化、通道变换、输入量化)和后处理(输出反量化到 float32)直接集成到推理网络中

项目结构


├── test/                               # 测试代码
│   ├── yolov5s                         # yolov5s模型相关文件
│   ├── gen_qnt_layers_median.py        # 依据中值策略自动提取生成.txt
│   └── gen_qnt_layers_topk.py          # 依据相邻层差值的topk个层策略自动提取生成.txt
├── docs/ 
│   ├── auto_pre_post_processing.md     # 前、后处理自动化流程
│   ├── mixed_quantization.md           # 混合量化自动化流程
│   ├── result_comparison.md            # 混合量化测试结果
├── tensors_compare                     # tensor对比工具
├──  README.md                          # 项目说明文档

环境要求及配置

  • 工具版本:基于 acuity6.42 的脚本实现,相关脚本在 acuity_examples_74bfdd1 目录下。
  • 示例模型:示例以 yolov5s 为例,示例工程在 test/yolov5s 目录下。
  • 工具路径: acuity6.42 工具在服务器的/repo/acuity6.42.10/Verisilicon_SW_Acuity_Toolkit_Whl_6.42.10_20250530
  • 参考文档:测试环境及代码参考链接:链接文本

前后处理自动化示例

前后处理自动化通过 netrans 工具将预处理和后处理操作集成到推理网络中,详细的测试流程请参考链接文本

  • 后处理自动流程 修改acuity_examples_74bfdd1/importer.py下的第316行代码,将add_postproc_node = False,修改为add_postproc_node = True

  • 数据标准化/归一化自动流程 在 channel_mean_value.txt 中填入相应参数即可实现自动化配置

  • 输入数据自动量化流程

    • 执行 importer.py,生成 yolov5s_inputmeta.yml 和 yolov5s_postprocess_file.yml
    • 执行 quantize.py,生成 yolov5s_asymu8.quantize
    • 查找量化文件中的量化参数并修改 yolov5s_inputmeta.yml 中的 add_preproc_node 字典信息
    • 最后执行 export_nbg.py,生成ngb文件

混合量化自动化示例

混合量化自动化是指将uint8数据类型的部分精度损失大的节点替换成高精度的数据类型,自动化生成替换节点,达到精度提升的效果,详细的流程请参考链接文本

  • 模型导入:执行 importer.py
  • 量化:执行 quantize.py
  • Tensor 保存:执行 dump.py,将每层tensor保存
  • 相似度分析:执行 tensors_compare工具,计算每层的余弦相似度,并保存到yolov5s_precision_analysis.json
  • 层选择:执行脚本 gen_qnt_layers_topk.py,自动求取相邻层差值最大的topk个层保存到cust_qnt_layers.txt
  • 混合量化:执行 quantize_hybrid.py,加载cust_qnt_layers.txt完成混合量化,生成yolov5s_asymu8_hy.quantize和yolov5s_asymu8_hy.quantize.json
  • 导出:执行 export_nbg.py,导出混合量化成功的nbg

混合量化测试结果

在对模型进行uint8量化时,根据对模型采取的不同混合量化处理策略,然后将量化好的nbg文件部署到下位机,将yolov5的源码推理部分替换为下位机推理,通过余弦相似度和map50来评估结果,详细的测试过程以及测试依赖代码请参考链接文本

评估指标:

  • 余弦相似度:衡量两个向量方向的一致性,值越接近 1 表示越相似
  • mAP50:IoU 阈值设定为 0.5 时的平均精度均值,值越高表示检测性能越好
  • fiducial_e:计算​​归一化的绝对误差,通过计算fe的均值和最大值来评估,值越接近0越好
  • 推理速度:下位机单张图片推理时间(毫秒)

不同处理策略对比:

处理策略 性能 (map50) 推理速度 (ms) 余弦相似度 fe.mean fe.max
默认流程量化 0 54.21 0.9998249 0.0001636 0.3170576
模型后部分删除 0.7 57.15 0.9998291 0.0001349 0.3155905
模型后部分混合量化 0 58.09 0.9997113 0.0001998 0.2963244

不同量化层数对比:

处理策略 性能 (map50) 推理速度 (ms) 余弦相似度 fe.mean fe.max
默认流程量化 0 54.21 0.9998249 0.0001636 0.3170576
33层混合量化 0 58.09 0.9997113 0.0001998 0.2963244
93层混合量化 0 485.16 0.999721 0.0001924 0.3039499

作者 {{liangliangou}}

关于

自动混合量化的流程以及前后处理自动化

54.9 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号