目录

netrans工具示例

概述

本示例工程介绍 Netrans 下的模型优化和精度优化方法,包括通过网络裁剪提升速度和精度、混合量化提升精度。

项目结构

详情参考:https://gitlink.org.cn/nudt_dsp/netrans_examples.git

├── yolov5s/                     # yolov5s 网络示例
├── yolov5s_crop/                # 裁剪网络示例
├── yolov5s_crop_hb/             # 混合量化示例
├── tensors_compare/             # 相似度对比工具
└── README.md                    # 项目说明文档

版本区别

模型版本 特点 应用场景
yolov5s 官方权重直接量化 基础推理场景
yolov5s_crop 倒数第三层 reshape 提前输出 尾部节点计算耗时/精度差的场景
yolov5s_crop_hb 剪枝 + 尾部混合量化 精度要求高的优化场景

环境配置

具体环境参考 Netrans 工程,与其保持一致。

下载工程:

git clone https://gitlink.org.cn/nudt_dsp/netrans_examples.git

网络剪枝

应用场景

模型尾部节点在 PNNA 核上计算耗时或精度损失大时,可通过剪枝优化。

剪枝方法

将模型输出层提前输出,裁剪尾部节点,将裁剪部分移至其他计算模块。

操作步骤

  1. 创建剪枝配置文件:在工程目录下新建 inputs_outputs.txt 文件
  2. 配置输出节点:在文件中指定新的输出节点名称(用空格分隔)
  3. 获取节点信息:使用 Netron 打开 .onnx 文件查看节点信息
  4. 执行剪枝:与常规 Netrans 示例步骤一致

示例配置

--inputs images --input-size-list '3,640,640' --outputs '377 429 481'

混合量化

混合量化仅适用于 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. 模型加载

netrans load ./yolov5s_crop_hb --mean 0 0 0 --scale 255 255 255

2. asymu8 量化

netrans quantize ./yolov5s_crop_hb asymu8

3. 配置混合量化文件

新建 cust_qnt_layers.txt,支持两种格式:

  • 子图量化格式:

    --inputs 442_52,390_57,338_62 --outputs 481_3,429_4,377_5
  • 单层量化格式(每行一层):

    442_52_acuity_mark_perm_270
    442_52

说明:--inputs 是子图在 yolov5s_crop_hb.json 中的输入名称,不同子图用逗号分隔;--outputs 是子图输出名称。

4. 执行混合量化

netrans quantize_hybrid ./yolov5s_crop_hb/ asymu8 --cust-qnt-layers cust_qnt_layers.txt --hybrid-qtype dfpi16

5. 导出模型

netrans export ./yolov5s_crop_hb/ asymu8 --use-hybrid

精度分析与层选择

1. 生成对比数据

# 生成各层 tensor 数据
netrans dump ./yolov5s_crop_hb fp16
netrans dump ./yolov5s_crop_hb asymu8

2. 对比精度损失

# 使用 TensorsCompare 工具
./tensors_compare ./yolov5s_crop_hb/dump/yolov5s_crop_hb_asymu8/ \
                  ./yolov5s_crop_hb/dump/yolov5s_crop_hb_fp16/ \
                  ./yolov5s_crop_hb/yolov5s_crop_hb.json

3. 选择量化层

  1. 查看生成的 yolov5s_crop_hb_precision_analysis.json 文件
  2. 主要参考 Cosine Similarity 值(越接近 1 相似度越高)
  3. 将精度损失大的层或子图(低相似度)加入 cust_qnt_layers.txt,改为 dfpi16 量化

4. 关键点

  • 混合量化仅适用于 asymu8 量化类型
  • 可通过 Netron 查看 yolov5s_crop_hb.json 获取层/子图名称
  • 支持子图量化和单层量化混合配置
  • 优先对精度敏感层使用 dfpi16 量化

作者 {{liangliangou}}

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

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802032778号