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