yolov5 snpe量化笔记

文章讲述了ONNX作为模型转换中介的作用,特别是在将pth模型转换为SNPE的dlc格式过程中。量化步骤包括归一化到uint8和特定的batchsize要求。SNPE支持在DSP上运行模型,但量化模型的batchsize需设为1,可以通过setInputDimensions动态调整输入尺寸。
摘要由CSDN通过智能技术生成

目录

onnx作用:

量化步骤:

batch size



 

onnx作用:


pth 数据格式是 n c h w 

snpe 数据格式是 n h w c

onnx中介是因为onnx导出nxhxwxc

 github地址:

https://github.com/gesanqiu/SNPE_Tutorial

有很多readme,比如模型转换的readme

【注】:模型转换在x86 PC上进行,需要预先完成[SNPE Setup](https://developer.qualcomm.com/sites/default/files/docs/snpe/setup.html)。

模型转换本身并不复杂,因为模型本身只代表一系列运算(算子Ops),但是不同的框架(也可以说是不同的硬件平台所导致的)使用了不同的规范和实现,在各个框架之间做模型转换,通常会借助ONNX(Open Neural Network Exchange)这一规范来完成。

```Shell
snpe-onnx-to-dlc --input_network models/bvlc_alexnet/bvlc_alexnet/model.onnx
--output_path bvlc_alexnet.dlc
```

SNPE将onnx模型转换为dlc的命令很简单,转换失败最主要的原因就是算子不支持,这个需要自行去一层一层网络进行排查,转换失败的log也会给出一些提示。

注:SNPE支持的ONNX算子可以在[Support ONNX Ops](https://developer.qualcomm.com/sites/default/files/docs/snpe/supported_onnx_ops.html)中查到。

注:SNPE支持的网络层可以在[Supported Network Layers](https://developer.qualcomm.com/sites/default/files/docs/snpe/network_layers.html)中查到。

在选择模型时我们也应该从这三个方面去做平衡:

- 模型大小影响的是推理耗时,也不完全线性关系;
- 模型初始化是因为不同的runtime能处理的数据类型有限,假如说quantized模型跑在CPU上,在初始化时,SNPE首先会解量化,把原本uint8的数据转为float32再做推理,而解量化这一过程会增加模型加载和初始化的时间;
- quantize/de-quantize均会带来运算精度上的损失。

量化步骤:

1. 归一化到0-255之间,uint8类型

2.计算

只有snpe支持dsp运行模型。

准备row格式数据。

每个类别准备3-5张代表图片,总图片建议200张以上。

float32数据格式

batch size

量化模型的batch size必须为1,但是可以在构建SNPE实例是通过[setInputDimensions()](https://developer.qualcomm.com/sites/default/files/docs/snpe/group__c__plus__plus__apis.html#abb432cbbc740c42ea942d886b9c1c53e)动态resize输入尺寸。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值