实战核心: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


由上图结果可以看出,图上有三个人和一个巴士,所在坐标与原图相符,推
理图片成功。原图如下图所示:

通过迅为电子提供的完整工具链和详细文档,我们轻松从模型转换到真机运行,整个流程清晰明了,让开发者能够快速上手,真正发挥RK3568NPU的强大算力。
-
开发板
+关注
关注
26文章
6411浏览量
120686 -
NPU
+关注
关注
2文章
386浏览量
21341 -
RK3568
+关注
关注
5文章
654浏览量
8106 -
迅为电子
+关注
关注
0文章
98浏览量
399
发布评论请先 登录
【迅为RK3568开发板NPU实战】别再闲置你的NPU!手把手教你玩转RKNN-Toolkit2 的使用
评论