Files
2024-08-27 14:42:45 +08:00

4.5 KiB
Raw Permalink Blame History

English | 简体中文

PaddleDetection RKNPU2部署示例

1. 说明

RKNPU2 提供了一个高性能接口来访问 Rockchip NPU支持如下硬件的部署

  • RK3566/RK3568
  • RK3588/RK3588S
  • RV1103/RV1106

在RKNPU2上已经通过测试的PaddleDetection模型如下:

  • Picodet
  • PPYOLOE(int8)
  • YOLOV8

如果你需要查看详细的速度信息,请查看RKNPU2模型速度一览表

2. 使用预导出的模型列表

ONNX模型转RKNN模型

为了方便大家使用我们提供了python脚本通过我们预配置的config文件你将能够快速地转换ONNX模型到RKNN模型

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导出模型 ,注意在转换时请设置export.nms=True.
  • ONNX模型转换RKNN模型的过程请参考转换文档进行转换。

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模型。

# 以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参数例如:

mean:
  -
    - 123.675
    - 116.28
    - 103.53
std:
  -
    - 58.395
    - 57.12
    - 57.375

修改outputs参数

由于Paddle2ONNX版本的不同转换模型的输出节点名称也有所不同请使用Netron对模型进行可视化并找到以下蓝色方框标记的NonMaxSuppression节点红色方框的节点名称即为目标名称。

4. 模型可视化

例如使用Netron可视化后得到以下图片:

找到蓝色方框标记的NonMaxSuppression节点可以看到红色方框标记的两个节点名称为p2o.Div.79和p2o.Concat.9,因此需要修改outputs参数修改后如下:

outputs_nodes:
  - 'p2o.Mul.179'
  - 'p2o.Concat.9'

5. 详细的部署示例