yolov5 snpe量化笔记

目录

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输入尺寸。
 

你可能感兴趣的:(yolo,深度学习,计算机视觉)