【迅为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的强大算力。
浙公网安备 33010602011771号