【迅为RK3568开发板NPU实战】别再闲置你的NPU!手把手教你玩转RKNN-Toolkit2 的使用

实战核心:RKNN-Toolkit2 的使用

硬件板卡:迅为iTOP-RK3568开发板

 

 

在使用 RKNN SDK 之前,用户需要使用 RKNN-Toolkit2 工具将自主研发的 

算法模型转换为 RKNN 模型。RKNN 是 Rockchip NPU 平台(也就是开发板)使用的模型类型,是以.rknn 结尾的模型文件。得到 RKNN 模型之后,用户可以选择使用 C 接口在 RK3568 平台开发应用。 

在第 3 章节,我们是直接使用的已经转换好的模型 rknn 来进行的实验。所以 

这一章节我们来看下如何将其他模型类型转成 rknpu 可以使用的 rknn 类型。

 

RKNN-Toolkit2 介绍 

RKNN-Toolkit2 是为用户提供在 PC、Rockchip NPU 平台上进行模型转换、 

推理和性能评估的开发套件,用户通过该工具提供的 Python 接口可以便捷地完 

成以下功能:

Ø 模型转换: 支持 Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、 

PyTorch 等模型转为 RKNN 模型,并支持 RKNN 模型导入导出,RKNN 

模型能够在 rk3568 开发板上加载使用

Ø 量化功能: 支持将浮点模型量化为定点模型,目前支持的量化方法为非对称 

量化 ( asymmetric_quantized-8 及 asymmetric_quantized-16 ),并支持混合量 

化功能 。 asymmetric_quantized-16 目前版本暂不支持 

Ø 模型推理: 能够在 PC 上模拟 rk3568 开发板运行 RKNN 模型并获取推理 

结果; 或将 RKNN 模型分发到 iTOP-RK3568 设备上进行推理并获取推理结 

果 

Ø 性能评估: 将 RKNN 模型分发到 iTOP-RK3568 设备上运行,以评估模型在实际设备上运行时的性能 

Ø 内存评估: 评估模型运行时的内存的占用情况。使用该功能时,必须将 

RKNN 模型分发到 iTOP-RK3568 设备中运行,并调用相关接口获取内存使 

用信息 

Ø 量化精度分析: 该功能将给出模型量化前后每一层推理结果与浮点模型推理 

结果的余弦距离,以便于分析量化误差是如何出现的,为提高量化模型的精 

度提供思路

 

5.3 RKNN-Toolkit2 的使用 

在 rknn-toolkit2 工具的 examples 目录下有各种功能的 Toolkit Demo ,这里 

我们运行一个模型转换 Demo 为例子,这个 Demo 展示了在 Ubuntu18.04 上将yolov5.onnx 模型转换成 RKNN 模型,然后导出、推理、部署到 RK3568 开发板上或者模拟器上运行并取回结果的过程。模型转换的具体实现请参考 Demo 内源代码。 

5.3.1 模型运行在模拟器 

RKNN-Toolkit2 自带了一个模拟器,在 Ubuntu18.04 上运行 demo 程序即是 

在仿真 NPU 模拟器上运行 demo。以下演示如何在模拟器上运行RKNN-Toolkit2 

工具自带的 yolov5.onnx 模型转换 demo。 

作者是在 docker 下使用 RKNN-Toolkit2 工具,大家在使用之前要按照“5.2.1 

章节通过 docker 镜像安装”RKNN-Toolkit2 工具。演示过程如下: 

 

1 在 5.2.1 小节中,已经成功安装并进入了 docker 镜像中,如下图所示:

 

2 在 rknn-toolkit2/examples 下有各种功能的 Toolkit Demo,如下图所示: 

3 运行一个模型转换例子,进入到 onnx/yolov5 目录,如下图所示: 

4 转换 yolov5s.onnx 为 rknn 模型并运行模型推理图片,输入以下命令: 

python3 test.py

 

5 运行模型如下图所示:

 

由上图结果可以看出,图上有三个人和一个巴士,所在坐标与原图相符,推 

理图片成功。原图如下图所示:

 

 

6 转换后的模型默认保存路径为“examples/onnx/yolov5/yolov5s.rknn”,如下图所 

示: 

 

 

5.3.2 模型运行在 RK3568 开发板 

1 首先连接好开发板硬件,连接好烧写线,屏幕,调试串口和电源。开发板烧写 

Android11 系统。在本小节中,作者使用的开发环境是 Ubuntu18.04,使用 pip3 

安装 RKNN-Toolkit2 工具。

2 开发板系统启动之后,提示如下,我们将开发板连接到 Ubuntu18.04 上。

 

3 在 ubuntu18.04 上使用 adb 命令来连接开发板。如果没有安装 adb 命令,可以使用命令“apt install adb”安装。输入以下命令查看 iTOP-RK3568 开发板 

adb devices 

 

4 如上图所示,iTOP-rk3568 开发板设备 id 号为“67188a9846568f84”,说明设备已经成功通过 adb 工具连接到开发板。

5 打开一个终端命令窗口,进入 RKNPU2 工程目录,

cd rknpu2 

6 adb 获得开发板 root 权限,输入以下命令: 

adb root 

7 重新挂载开发板,输入以下命令: 

adb remount 

8 更新板子的 rknn_server 和 librknnrt.so,rknn_server 和 librknnrt.so 介绍如下 

所示: 

librknnrt.so: 是一个板端的 runtime 库。 

rknn_server: 是一个运行在板子上的后台代理服务,用于接收 PC 通过 USB 传 

输过来的协议,然后执行板端 runtime 对应的接口,并返回结果给 PC。 

 

9 推送拷贝 rknn_server 到开发板,输入以下命令: 

adb push runtime/RK356X/Android/rknn_server/arm64/rknn_server /vendor/bin/ 

 

10 推送拷贝 librknnrt.so 到开发板,输入以下命令: 

adb push runtime/RK356X/Android/librknn_api/arm64-v8a/librknnrt.so /vendor/lib64 

 

11 打开 adb shell 命令行,即可操作 iTOP-rk3568 开发板。

adb shell

 

12 修改 rknn_server 权限,并同步修改的内容,输入以下命令: 

chmod +x /vendor/bin/rknn_server 

 

13 重启设备,输入以下命令: 

reboot 

14 Android 系统启动时会自动运行 rknn_server, "ps -ef|grep rknn_server"可以查看是否运行,如下图所示: 

15 我们进入 rknn-toolkit2-1.3.0 文件夹。以 demo(onnx/yolov5)为例,使用 rk3568 

平台进行推理。输入以下命令进入 examples/onnx/yolov5 文件夹。 

cd examples/onnx/yolov5 

 

16 修改 examples/onnx/yolov5/test.py 文件,我们修改对应的平台为 rk3568,修改如下所示,“-”代表需要删除的内容,“+”代表需要新增的内容。 

if __name__ == '__main__': 

# Create RKNN object 

rknn = RKNN(verbose=True)

rknn = RKNN() 

# Pre-process config 

print('--> Config model') 

rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128]) 

rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128], 

target_platform='rk3568') 

print('done') 

# Load model 

@@ -62,7 +62,7 @@ if __name__ == '__main__': 

# Init runtime environment 

print('--> Init runtime environment') 

ret = rknn.init_runtime() 

ret = rknn.init_runtime(target='rk3568') 

if ret != 0: 

print('Init runtime environment failed!') 

exit(ret) 

修改完,保存文件并退出。 

 

17 激活虚拟化环境,输入以下命令 

source venv/bin/activate 

 

18 在运行模型之前,首先检查开发板是否被识别到,输入 adb devices,如下图 

所示: 

adb devices 

19 进入到 examples/onnx/yolov5 文件夹,输入以下命令,执行模型转换和推理模型的 test.py 脚本。 python test.py

 

 

由上图结果可以看出,图上有三个人和一个巴士,所在坐标与原图相符,推 

理图片成功。原图如下图所示:

 

 

通过迅为电子提供的完整工具链和详细文档,我们轻松从模型转换到真机运行,整个流程清晰明了,让开发者能够快速上手,真正发挥RK3568 NPU的强大算力。

posted on 2025-11-11 14:26  topeet  阅读(18)  评论(0)    收藏  举报

导航