瑞芯微 Rockchip 系列 RK3588 部署 yolo11 模型推理教程

前言

上一篇文章中,我介绍了如何在瑞芯微 Rockchip 系列芯片将主流深度学习框架模型转换为 RKNN 模型。在这篇文章,我将介绍如何在瑞芯微 Rockchip 系列 RK3588 芯片上部署 yolo11 模型推理。本文章会使用到上一篇文章转换的 rknn 模型,因此如果还没看过上一篇文章的同学,建议优先阅读上一篇文章

本教程不仅适合 RK3588 平台,也适合其他 RK 系列平台,例如 RK3566、RK3568、RK3562 等。具体平台请参考 RKNN-Toolkit2 文档

板端 NPU 驱动环境确认

确保你的板端使用了 Rockchip 固件刷入,Rockchip 固件默认自带 NPU 驱动,使用如下命令查看驱动版本:

dmesg | grep -i rknpu
# 或
cat /sys/kernel/debug/rknpu/version
# 或
cat /sys/kernel/debug/rknpu/driver_version
# 或
cat /proc/debug/rknpu/driver_version

打印如下:

[    5.641038] RKNPU fdab0000.npu: Adding to iommu group 0
[    5.645141] RKNPU fdab0000.npu: RKNPU: rknpu iommu is enabled, using iommu mode
[    5.651052] RKNPU fdab0000.npu: Looking up rknpu-supply from device tree
[    5.657737] RKNPU fdab0000.npu: Looking up mem-supply from device tree
[    5.658410] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdab0000-0xfdabffff]
[    5.663132] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdac0000-0xfdacffff]
[    5.667732] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdad0000-0xfdadffff]
[    5.673037] [drm] Initialized rknpu 0.9.8 20240828 for fdab0000.npu on minor 1
[    5.677369] RKNPU fdab0000.npu: Looking up rknpu-supply from device tree
[    5.677977] RKNPU fdab0000.npu: Looking up mem-supply from device tree
[    5.678855] RKNPU fdab0000.npu: Looking up rknpu-supply from device tree
[    5.680912] RKNPU fdab0000.npu: RKNPU: bin=0
[    5.684056] RKNPU fdab0000.npu: leakage=7
[    5.686957] RKNPU fdab0000.npu: Looking up rknpu-supply from device tree
[    5.686976] debugfs: Directory 'fdab0000.npu-rknpu' with parent 'vdd_npu_s0' already present!
[    5.697891] RKNPU fdab0000.npu: pvtm=836
[    5.706536] RKNPU fdab0000.npu: pvtm-volt-sel=2
[    5.711939] RKNPU fdab0000.npu: avs=0
[    5.716542] RKNPU fdab0000.npu: l=10000 h=85000 hyst=5000 l_limit=0 h_limit=800000000 h_table=0
[    5.731861] RKNPU fdab0000.npu: failed to find power_model node
[    5.736109] RKNPU fdab0000.npu: RKNPU: failed to initialize power model
[    5.744664] RKNPU fdab0000.npu: RKNPU: failed to get dynamic-coefficient
[  577.469647] RKNPU fdab0000.npu: RKNPU: iommu still enabled

可以看到,我的 npu 驱动版本为 0.98。

NPU 推理流程

image.png

RKNN通用 API 接口调用流程:

  1. 调用 rknn_init() 接口初始化模型;
  2. 调用 rknn_query() 接口查询模型的输入输出属性;
  3. 对输入进行前处理;
  4. 调用 rknn_inputs_set() 接口设置输入数据;
  5. 调用 rknn_run() 接口进行模型推理;
  6. 调用 rknn_outputs_get() 接口获取推理结果数据;
  7. 对输出进行后处理;
  8. 调用 rknn_outputs_release() 接口释放输出数据内存;
  9. 调用 rknn_destroy() 接口销毁RKNN

代码示例

下面我将手把手教大家如何在 RK3588 上部署 yolo11 模型推理,其他 RK 系列平台同理。

这里需要用到一个库,rknn_model_zoo,这个库里面包含了各种示例代码,方便我们快速上手。

首先,运行如下命令下载 rknn_model_zoo 库:

git clone https://github.com/airockchip/rknn_model_zoo.git

因为需要在板端运行,因此我们需要安装交叉编译工具链进行交叉编译,这里以 aarch64 为例,运行如下命令:

wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

接着,进入 rknn_model_zoo 目录,该目录下有个 build-linux.sh 文件,在文件开头位置添加如下命令:

# Projects 是你刚刚下载的 gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu 的绝对路径
GCC_COMPILER=Projects/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu

将我们在上篇文章中编译的 yolo11n.rknn 放到 当前目录下的 examples/yolo11/model 目录中,如果没有这个文件,可以运行如下命令进行下载:

wget -P examples/yolo11/model https://github.com/qaz624824554/rknn_trans_test/raw/refs/heads/master/yolo11n.rknn

接着,运行如下命令,编译 yolo11 模型示例:

chmod +x build-linux.sh

./build-linux.sh -t rk3588 -a aarch64 -d yolo11

如果看到如下输出,说明编译成功。

image.png

此时会在当前目录下生成一个 install 目录,里面包含编译好的可执行文件。目录结构如下:

install
└── rk3588_linux_aarch64
    └── rknn_yolo11_demo
        ├── lib
        │   ├── librga.so
        │   └── librknnrt.so
        ├── model
        │   ├── bus.jpg
        │   ├── coco_80_labels_list.txt
        │   └── yolo11n.rknn
        ├── rknn_yolo11_demo
        └── rknn_yolo11_demo_zero_copy

rknn_yolo11_demo 目录放到板端,并且进入该目录,接着运行如下命令进行推理:

export LD_LIBRARY_PATH=./lib

./rknn_yolo11_demo model/yolo11n.rknn model/bus.jpg

如果看到如下输出,说明推理成功,并且当前目录下会生成一个 out.png 的图片。

image.png

图片的效果如下:

out.png

至此,我们成功实现了在 RK3588 上部署了 yolo11 模型推理。

改进

由于这个推理示例代码是基于单帧单张图片的,因此无法进行实时推理。不过只要稍微改进,例如配合 opencv 库,就可以实现实时推理了,这个我会在后续的文章中进行介绍,有兴趣的同学可以点波关注哟。

猜你喜欢

转载自blog.csdn.net/Leon_Chenl/article/details/145479736
今日推荐