更换文档检测模型
This commit is contained in:
121
paddle_detection/deploy/fastdeploy/rockchip/rknpu2/README.md
Normal file
121
paddle_detection/deploy/fastdeploy/rockchip/rknpu2/README.md
Normal file
@@ -0,0 +1,121 @@
|
||||
[English](README.md) | 简体中文
|
||||
|
||||
# PaddleDetection RKNPU2部署示例
|
||||
|
||||
## 1. 说明
|
||||
RKNPU2 提供了一个高性能接口来访问 Rockchip NPU,支持如下硬件的部署
|
||||
- RK3566/RK3568
|
||||
- RK3588/RK3588S
|
||||
- RV1103/RV1106
|
||||
|
||||
在RKNPU2上已经通过测试的PaddleDetection模型如下:
|
||||
|
||||
- Picodet
|
||||
- PPYOLOE(int8)
|
||||
- YOLOV8
|
||||
|
||||
如果你需要查看详细的速度信息,请查看[RKNPU2模型速度一览表](https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/cn/faq/rknpu2/rknpu2.md)
|
||||
|
||||
## 2. 使用预导出的模型列表
|
||||
|
||||
### ONNX模型转RKNN模型
|
||||
|
||||
为了方便大家使用,我们提供了python脚本,通过我们预配置的config文件,你将能够快速地转换ONNX模型到RKNN模型
|
||||
|
||||
```bash
|
||||
python tools/rknpu2/export.py --config_path tools/rknpu2/config/picodet_s_416_coco_lcnet_unquantized.yaml \
|
||||
--target_platform rk3588
|
||||
```
|
||||
|
||||
### RKNN模型列表
|
||||
|
||||
为了方便大家测试,我们提供picodet和ppyoloe两个模型,解压后即可使用:
|
||||
|
||||
| 模型名称 | 下载地址 |
|
||||
|-----------------------------|-----------------------------------------------------------------------------------|
|
||||
| picodet_s_416_coco_lcnet | https://bj.bcebos.com/paddlehub/fastdeploy/rknpu2/picodet_s_416_coco_lcnet.zip |
|
||||
| ppyoloe_plus_crn_s_80e_coco | https://bj.bcebos.com/paddlehub/fastdeploy/rknpu2/ppyoloe_plus_crn_s_80e_coco.zip |
|
||||
|
||||
|
||||
## 3. 自行导出PaddleDetection部署模型以及转换模型
|
||||
|
||||
RKNPU部署模型前需要将Paddle模型转换成RKNN模型,具体步骤如下:
|
||||
|
||||
* Paddle动态图模型转换为ONNX模型,请参考[PaddleDetection导出模型](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.4/deploy/EXPORT_MODEL.md)
|
||||
,注意在转换时请设置**export.nms=True**.
|
||||
* ONNX模型转换RKNN模型的过程,请参考[转换文档](https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/cn/faq/rknpu2/export.md)进行转换。
|
||||
|
||||
### 3.1 模型转换example
|
||||
|
||||
#### 3.1.1 注意点
|
||||
|
||||
PPDetection模型在RKNPU2上部署时要注意以下几点:
|
||||
|
||||
* 模型导出需要包含Decode
|
||||
* 由于RKNPU2不支持NMS,因此输出节点必须裁剪至NMS之前
|
||||
* 由于RKNPU2 Div算子的限制,模型的输出节点需要裁剪至Div算子之前
|
||||
|
||||
#### 3.1.2 Paddle模型转换为ONNX模型
|
||||
|
||||
由于Rockchip提供的rknn-toolkit2工具暂时不支持Paddle模型直接导出为RKNN模型,因此需要先将Paddle模型导出为ONNX模型,再将ONNX模型转为RKNN模型。
|
||||
|
||||
```bash
|
||||
# 以Picodet为例
|
||||
# 下载Paddle静态图模型并解压
|
||||
wget https://paddledet.bj.bcebos.com/deploy/Inference/picodet_s_416_coco_lcnet.tar
|
||||
tar xvf picodet_s_416_coco_lcnet.tar
|
||||
|
||||
# 静态图转ONNX模型,注意,这里的save_file请和压缩包名对齐
|
||||
paddle2onnx --model_dir picodet_s_416_coco_lcnet \
|
||||
--model_filename model.pdmodel \
|
||||
--params_filename model.pdiparams \
|
||||
--save_file picodet_s_416_coco_lcnet/picodet_s_416_coco_lcnet.onnx \
|
||||
--enable_dev_version True
|
||||
|
||||
# 固定shape
|
||||
python -m paddle2onnx.optimize --input_model picodet_s_416_coco_lcnet/picodet_s_416_coco_lcnet.onnx \
|
||||
--output_model picodet_s_416_coco_lcnet/picodet_s_416_coco_lcnet.onnx \
|
||||
--input_shape_dict "{'image':[1,3,416,416], 'scale_factor':[1,2]}"
|
||||
```
|
||||
|
||||
#### 3.1.3 编写yaml文件
|
||||
|
||||
**修改normalize参数**
|
||||
|
||||
如果你需要在NPU上执行normalize操作,请根据你的模型配置normalize参数,例如:
|
||||
|
||||
```yaml
|
||||
mean:
|
||||
-
|
||||
- 123.675
|
||||
- 116.28
|
||||
- 103.53
|
||||
std:
|
||||
-
|
||||
- 58.395
|
||||
- 57.12
|
||||
- 57.375
|
||||
```
|
||||
|
||||
**修改outputs参数**
|
||||
|
||||
由于Paddle2ONNX版本的不同,转换模型的输出节点名称也有所不同,请使用[Netron](https://netron.app)对模型进行可视化,并找到以下蓝色方框标记的NonMaxSuppression节点,红色方框的节点名称即为目标名称。
|
||||
|
||||
## 4. 模型可视化
|
||||
例如,使用Netron可视化后,得到以下图片:
|
||||
|
||||

|
||||
|
||||
找到蓝色方框标记的NonMaxSuppression节点,可以看到红色方框标记的两个节点名称为p2o.Div.79和p2o.Concat.9,因此需要修改outputs参数,修改后如下:
|
||||
|
||||
```yaml
|
||||
outputs_nodes:
|
||||
- 'p2o.Mul.179'
|
||||
- 'p2o.Concat.9'
|
||||
```
|
||||
|
||||
|
||||
## 5. 详细的部署示例
|
||||
- [RKNN总体部署教程](https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/cn/faq/rknpu2/rknpu2.md)
|
||||
- [C++部署](cpp)
|
||||
- [Python部署](python)
|
||||
Reference in New Issue
Block a user