89 lines
2.5 KiB
Markdown
89 lines
2.5 KiB
Markdown
|
|
|||
|
# PaddleClas 模型在RKNPU2上部署方案-FastDeploy
|
|||
|
|
|||
|
## 1. 说明
|
|||
|
PaddleClas支持通过FastDeploy在RKNPU2上部署相关模型.
|
|||
|
|
|||
|
## 2. 转换模型
|
|||
|
下面以 ResNet50_vd为例子,教大家如何转换分类模型到RKNN模型.
|
|||
|
目前FastDeploy只在PaddleClas测试过ResNet50_vd模型, 欢迎用户尝试其他的PaddleClas模型进行部署.
|
|||
|
|
|||
|
### 2.1 导出ONNX模型
|
|||
|
```bash
|
|||
|
# 安装 paddle2onnx
|
|||
|
pip install paddle2onnx
|
|||
|
|
|||
|
# 下载ResNet50_vd模型文件和测试图片
|
|||
|
wget https://bj.bcebos.com/paddlehub/fastdeploy/ResNet50_vd_infer.tgz
|
|||
|
tar -xvf ResNet50_vd_infer.tgz
|
|||
|
|
|||
|
# 静态图转ONNX模型,注意,这里的save_file请和压缩包名对齐
|
|||
|
paddle2onnx --model_dir ResNet50_vd_infer \
|
|||
|
--model_filename inference.pdmodel \
|
|||
|
--params_filename inference.pdiparams \
|
|||
|
--save_file ResNet50_vd_infer/ResNet50_vd_infer.onnx \
|
|||
|
--enable_dev_version True \
|
|||
|
--opset_version 10 \
|
|||
|
--enable_onnx_checker True
|
|||
|
|
|||
|
# 固定shape,注意这里的inputs得对应netron.app展示的 inputs 的 name,有可能是image 或者 x
|
|||
|
python -m paddle2onnx.optimize --input_model ResNet50_vd_infer/ResNet50_vd_infer.onnx \
|
|||
|
--output_model ResNet50_vd_infer/ResNet50_vd_infer.onnx \
|
|||
|
--input_shape_dict "{'inputs':[1,3,224,224]}"
|
|||
|
```
|
|||
|
|
|||
|
### 2.2 编写模型导出配置文件
|
|||
|
以转化RK3588的RKNN模型为例子,我们需要编辑./rknpu2_tools/config/ResNet50_vd_infer_rknn.yaml,来转换ONNX模型到RKNN模型。
|
|||
|
|
|||
|
如果你需要在NPU上执行normalize操作,请根据你的模型配置normalize参数,例如:
|
|||
|
```yaml
|
|||
|
model_path: ./ResNet50_vd_infer/ResNet50_vd_infer.onnx
|
|||
|
output_folder: ./ResNet50_vd_infer
|
|||
|
mean:
|
|||
|
-
|
|||
|
- 123.675
|
|||
|
- 116.28
|
|||
|
- 103.53
|
|||
|
std:
|
|||
|
-
|
|||
|
- 58.395
|
|||
|
- 57.12
|
|||
|
- 57.375
|
|||
|
outputs_nodes:
|
|||
|
do_quantization: False
|
|||
|
dataset: "./ResNet50_vd_infer/dataset.txt"
|
|||
|
```
|
|||
|
|
|||
|
**在CPU上做normalize**可以参考以下yaml:
|
|||
|
```yaml
|
|||
|
model_path: ./ResNet50_vd_infer/ResNet50_vd_infer.onnx
|
|||
|
output_folder: ./ResNet50_vd_infer
|
|||
|
mean:
|
|||
|
-
|
|||
|
- 0
|
|||
|
- 0
|
|||
|
- 0
|
|||
|
std:
|
|||
|
-
|
|||
|
- 1
|
|||
|
- 1
|
|||
|
- 1
|
|||
|
outputs_nodes:
|
|||
|
do_quantization: False
|
|||
|
dataset: "./ResNet50_vd_infer/dataset.txt"
|
|||
|
```
|
|||
|
这里我们选择在NPU上执行normalize操作.
|
|||
|
|
|||
|
|
|||
|
### 2.3 ONNX模型转RKNN模型
|
|||
|
```shell
|
|||
|
python ./rknpu2_tools/export.py \
|
|||
|
--config_path ./rknpu2_tools/config/ResNet50_vd_infer_rknn.yaml \
|
|||
|
--target_platform rk3588
|
|||
|
```
|
|||
|
|
|||
|
## 3. 其他链接
|
|||
|
- [Cpp部署](./cpp)
|
|||
|
- [Python部署](./python)
|
|||
|
- [视觉模型预测结果](../../../../../docs/api/vision_results/)
|