更新precision_analysis
本示例工程侧重于向用户介绍netrans下的模型优化和精度优化方面,具体的包括通过网络裁剪提升速度和精度、混合量化提升精度。
├── yolov5s/ # yolov5s网络示例 ├── yolov5s_crop/ # 裁剪网络示例 ├── yolov5s_crop_hb/ # 混合量化示例 ├── tensors_compare/ # 相似度对比工具 ├── README.md # 项目说明文档
具体环境参考https://www.gitlink.org.cn/nudt_dsp/netrans)工程,与其保持一致
如果模型尾部节点在pnna核上计算比较耗时,或者尾部节点精度损失大,将模型输出层提前输出来实现网络裁剪,将裁剪掉的部分节点放到其他计算模块上计算来提升性能,参考示例资源下的yolov5s_crop示例
--inputs images --input-size-list '3,640,640' --outputs '377 429 481'
混合量化只适用于asymu8,把asymu8的部分层从asymu8量化修改为dfpi16、float32量化,参考示例资源下的yolov5s_crop_hb示例,此示例将裁剪和混合量化相结合 混合量化流程如下: 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
4 混合量化
netrans quantize_hybrid ./yolov5s_crop_hb/ asymu8 --cust-qnt-layers cust_qnt_layers.txt
5 将前后处理加入推理网络
netrans add_pre_post ./yolov5s_crop_hb/ asymu8 --use-hybrid
6 导出
netrans export ./examples/onnx/yolov5s_crop_hb/ asymu8 --use-hybrid
用Netron打开yolov5s_crop_hb.json,可查看节点信息,在cust_qnt_layers.txt输入如下信息,输入子图的输入名称和输出名称
--inputs 442_52,390_57,338_62 --outputs 481_3,429_4,377_5
其中–inputs ‘442_52,390_57,338_62,是子图在yolov5s_crop_hb.json中的输入名称,不同子图的输入名称用逗号分隔,–outputs 481_3,429_4,377_5是yolov5s_crop_hb.json格式的子图输出名称,不同子图的输出名称用逗号分隔
用Netron打开yolov5s_crop_hb.json,可查看节点信息,在cust_qnt_layers.txt输入如下信息,量化为dfpi16的每一层的层名称,每行只输入一个层名称。
442_52_acuity_mark_perm_270 442_52 444_22
调用dump脚本得到每层输出的tensor数据
netrans dump ./yolov5s_crop_hb float32 netrans dump ./yolov5s_crop_hb asymu8
调用TensorsCompare工具,生成每层相似度对比结果 TensorsCompare工具在yolov5s_crop_hb目录下,生成每层相似度对比结果,保存为yolov5s_crop_hb_precision_analysis.json文件,输入参数为三个,float32每层数据的文件夹、asymu8每层数据的文件夹和yolov5s_crop_hb.json文件,yolov5s_crop_hb.json为模型加载后所生成的模型结构文件
./tensors_compare ./yolov5s_crop_hb/dump/yolov5s_crop_hb_asymu8/ ./yolov5s_crop_hb/dump/yolov5s_crop_hb_float32/ ./yolov5s_crop_hb/yolov5s_crop_hb.json
对比float32模型每层和asymu8模型每层的相似度
手动选取子图或者层信息加入到cust_qnt_layers.txt
作者 {{liangliangou}}
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
netrans工具示例
概述
本示例工程侧重于向用户介绍netrans下的模型优化和精度优化方面,具体的包括通过网络裁剪提升速度和精度、混合量化提升精度。
项目结构
环境要求及配置
具体环境参考https://www.gitlink.org.cn/nudt_dsp/netrans)工程,与其保持一致
裁剪网络
如果模型尾部节点在pnna核上计算比较耗时,或者尾部节点精度损失大,将模型输出层提前输出来实现网络裁剪,将裁剪掉的部分节点放到其他计算模块上计算来提升性能,参考示例资源下的yolov5s_crop示例
混合量化
混合量化只适用于asymu8,把asymu8的部分层从asymu8量化修改为dfpi16、float32量化,参考示例资源下的yolov5s_crop_hb示例,此示例将裁剪和混合量化相结合 混合量化流程如下: 1 模型加载
2 模型量化成asymu8
3 混合量化信息填入cust_qnt_layers.txt
4 混合量化
5 将前后处理加入推理网络
6 导出
混合量化子图
用Netron打开yolov5s_crop_hb.json,可查看节点信息,在cust_qnt_layers.txt输入如下信息,输入子图的输入名称和输出名称
其中–inputs ‘442_52,390_57,338_62,是子图在yolov5s_crop_hb.json中的输入名称,不同子图的输入名称用逗号分隔,–outputs 481_3,429_4,377_5是yolov5s_crop_hb.json格式的子图输出名称,不同子图的输出名称用逗号分隔
混合量化单层
用Netron打开yolov5s_crop_hb.json,可查看节点信息,在cust_qnt_layers.txt输入如下信息,量化为dfpi16的每一层的层名称,每行只输入一个层名称。
混合量化节点、子图的筛选
调用dump脚本得到每层输出的tensor数据
调用TensorsCompare工具,生成每层相似度对比结果 TensorsCompare工具在yolov5s_crop_hb目录下,生成每层相似度对比结果,保存为yolov5s_crop_hb_precision_analysis.json文件,输入参数为三个,float32每层数据的文件夹、asymu8每层数据的文件夹和yolov5s_crop_hb.json文件,yolov5s_crop_hb.json为模型加载后所生成的模型结构文件
对比float32模型每层和asymu8模型每层的相似度
手动选取子图或者层信息加入到cust_qnt_layers.txt