Skip to main content

Rockchip Quick Start RKNN SDK

:::info 文档信息

发布日期:2022-01-14 · 页数:27 · 语言:英文

原始文档:Rockchip_Quick_Start_RKNN_SDK_CN-1.2.0.pdf

:::

在线预览​

若预览无法显示,请直接下载 PDF 后用本地阅读器打开。


瑞芯微电子股份有限公司

密级状态:绝密( ) 秘密( ) 内部( ) 公开(√ )​

RKNN SDK 快速上手指南​

(技术部,图形计算平台中心)​

文件状态: [ ] 正在修改 [√] 正式发布当前版本:1.2.0
作 者:HPC
完成日期:2022-01-14
审 核:熊伟
完成日期:2022-01-14

瑞芯微电子股份有限公司​

Rockchip Electronics Co., Ltd​

(版本所有,翻版必究)​

更新记录​

版本修改人修改日期修改说明核定人
1.2.0许东晨2022-1-14初始版本卓鸿添

1 主要说明​

此文档向零基础用户详细介绍如何快速在 ROCKCHIP 芯片的 EVB 板子上使用

RKNN-Toolkit2 和RKNPU2 工具转换yolov5s.onnx 模型为yolov5s.rknn 模型并进行板端推理。

支持的平台:RK3566、RK3568、RK3588、RK3588S

RKNPU2 工程下载地址:https://github.com/rockchip-linux/rknpu2

RKNN-Toolkit2 工程下载地址:https://github.com/rockchip-linux/rknn-toolkit2

2 准备工具​

  1. 一台操作系统Ubuntu18.04 的电脑

  2. 一块EVB 板子(RK3566、RK3568、RK3588、RK3588S)

RK3566 RK3588

  1. 一条连接板子和电脑的数据线

RK356X:USB-A——Micro USB RK3588:USB-A——USB-C 4. 一个电源适配器

RK356X:输出12V-2A RK3588:输出 12V-3A

3 快速入门使用 RKNN-Toolkit2 和 RKNPU2​

3.1 安装 RKNN-Toolkit2​

本章节介绍两种安装使用 RKNN-Toolkit2 的方法,“通过 pip install 安装”和“通过 Docker

镜像安装”,用户可自行选择安装方式。如果不是Ubuntu18.04 系统的电脑推荐使用“通过Docker

镜像安装”方式,已集成所有所需的安装包依赖,简单可靠。

3.1.1 通过 Docker 镜像安装并推理​

Docker

电脑若没有安装工具,请先按照此安装教程

(https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/)安装Docker 工具,再进行下一步。

2.打开一个终端命令行窗口,cd 进入RKNN-Toolkit2 工程的docker 文件夹,根据工程的保

存路径修改cd 命令中的路径

cd <输入RKNN-Toolkit2 工程其中docker 文件夹的路径>

cd ~/Projects/rknn-toolkit2-1.2.0/docker
ls

查看到当前目录下有一个docker 镜像文件 rknn-toolkit2-1.2.0-cp36-docker.tar.gz。

3.加载docker 镜像

docker load --input rknn-toolkit2-1.2.0-cp36-docker.tar.gz

4.查看当前所有的 docker 镜像

docker images

查看到镜像rknn-toolkit2:1.2.0-cp36 已加载成功。

5.运行docker 容器

docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb \
-v~/Projects/rknn-toolkit2-1.2.0/examples/onnx/yolov5:/rknn yolov5 demo \
_ _ rknn-toolkit2:1.2.0-cp36 /bin/bash

将目录映射进Docker 环境可通过附加“-v <host src folder>:<image dst folder>”。

绿色部分为RKNN-Toolkit2 工程中examples/onnx/yolov5 本地文件夹路径(根据本机路径

修改)映射到docker 容器中/rknn_yolov5_demo 文件夹。

成功进入docker 容器后,命令ls 查看到文件夹 rknn_yolov5_demo 映射成功。

6.在docker 容器中进入 rknn_yolov5_demo 目录

cd rknn_yolov5_demo

7.转换 yolov5s.onnx 为 rknn 模型并行推理图片

python3 ./test.py

此脚本是在PC 模拟器上运行,若需要连板调试请参考章节3.2。

转换模型和推理脚本 test.py 运行成功,转换后的模型默认保存路径为

/rknn-toolkit2-1.2.0/examples/onnx/yolov5/yolov5s-640-640.rknn ,推理的图片结果保存在

/rknn-toolkit2-1.2.0/examples/onnx/yolov5/result.jpg。

3.1.2 通过 pip install 安装并推理​

1.打开一个终端命令行窗口,安装Python3.6 和 pip3

sudo apt-get install python3 python3-dev python3-pip

2.安装所需的依赖包

sudo apt-get install libxslt1-dev zlib1g-dev libglib2.0 libsm6 \

libgl1-mesa-glx libprotobuf-dev gcc

3.进入Toolkit2 工程文件夹,根据工程的保存路径修改cd 命令中的路径

cd <输入Toolkit2 工程的路径>

cd ~/rknn-toolkit2-1.2.0

4.安装必要相应版本的依赖包

pip3 install -r doc/requirements-1.2.0.txt

备注:

1)若在安装过程中出现“匹配不到 XX 版本”的错误,可能由于是 pip 版本太低造成。

可先执行以下升级 pip 版本命令,pip 升级至版本 21.3.1,再执行重新执行上述安装命令。

python3 -m pip install --upgrade pip

5.安装RKNN-Toolkit2(Python3.6 for x86_64)

pip3 install \

package/rknn_toolkit2-1.2.0_f7bb160f-cp36-cp36m-linux_x86_64.whl

6.检查RKNN-Toolkit2 是否安装成功

python3

from rknn.api import RKNN

若没有出现错误,说明安装成功。同时按住Ctrl+D 退出Python3。

  1. cd 进入rknn-toolkit2-1.2.0/examples/onnx/yolov5 目录
cd examples/onnx/yolov5

8.转换yolov5s.onnx 为 rknn 模型并运行模型推理图片

python3 test.py

此脚本是在PC 模拟器上运行,若需要连板调试请参考章节3.2。

转换模型和推理脚本 test.py 运行成功,转换后的模型默认保存路径为

/rknn-toolkit2-1.2.0/examples/onnx/yolov5/yolov5s-640-640.rknn ,推理的图片结果保存在

/rknn-toolkit2-1.2.0/examples/onnx/yolov5/result.jpg。

3.2 RKNN-Toolkit2 连板调试​

通过3.1.1 和3.1.2 方式转换和推理模型均运行在PC 端的模拟器环境中,可设置脚本中的target

和 device_id 进行连板调试。

3.2.1 连接板子至电脑​

  1. 按图中接口连接 RK3566 EVB 板子的电源、连接数据线至电脑,打开电源开关。

  2. 查看板子设备

adb devices

查看RK3566 设备的ID 为DKUZ8B0PAB,连接成功。若无设备显示可参考附录5.2。

3.2.2 更新板子的 rknn_server 和 librknnrt.so​

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

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

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

详细可参考rknpu2/rknn_server_proxy.md 的详细说明。

下面以RK356X 安卓平台64 位为例子介绍说明。

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

cd ~/Projects/rknpu2

2)更新板子的rknn_server 和 librknnrt.so

adb root
adb remount
adb push \

runtime/RK356X/Android/rknn_server/arm64-v8a/vendor/bin/rknn_server \ /vendor/bin/

adb push \

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

adb shell
chmod +x /vendor/bin/rknn_server

sync reboot

3)查看更新是否成功

adb shell

su setenforce 0 pgrep rknn_server

查看到有rknn_server 进程id,更新成功。

3.2.3 连板调试​

1)查看设备ID 命令 adb devices查看到此例子RK3566 设备的ID 为DKUZ8B0PAB。若无设备显示可参考附录5.2。

2)修改脚本target 和device_id

修改对应平台类型值(rk3566、rk3568、rk3588)和设备 ID,保存后再执行脚本生成适用

于板子的模型并进行推理图片,本例子中使用 rk3566 平台板子进行推理。

3)执行转换和推理模型的 test.py 脚本:

python3 test.py

3.3 RKNPU2 的编译及使用方法​

此章节以 rknn_yolov5_demo 在 RK3566 Android 64 位平台上运行为例,介绍如何使用

RKNPU2。

3.3.1 下载编译所需工具​

下载完成后进行解压无需安装,记录文件夹的绝对路径。

1)板子为Android 系统则需NDK,下载地址:

https://developer.android.google.cn/ndk/downloads/older_releases#ndk-17c-downloads

点击“我同意这些条款”。

往下找到Android NDK r17c(建议的版本)选择 Linux 64 位(x86)的软件包。2)板子为linux 系统则需下载gcc 交叉编译器

推荐版本 gcc-9.3.0-x86_64_arrch64-linux-gnu,下载地址:

https://github.com/rockchip-linux/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-

linux-gnu

3.3.2 修改 examples/rknn_yolov5_demo/build-XXX.sh 的编译工具路径​

  1. Android 系统

修改ANDROID_NDK_PATH 为本地电脑 android-ndk-r17c 的保存路径并保存。2) Linux 系统

修改 TOOL_CHAIN 为本地电脑 gcc-9.3.0-x86_64_arrch64-linux-gnu 的保存路径并保

存。

3.3.3 更新 RKNN 模型​

3.2 RK3566 yolov5s-640-640.rknn把章节转换后的平台模型复制到

rknpu2/examples/rknn_yolov5_demo/model/RK356X/目录下。

3.3.4 编译 rknn_yolov5_demo​

1)在终端命令窗口进入 rknn_yolov5_demo 文件夹

cd examples/rknn_yolov5_demo/

2)运行build-android_RK356X.sh 脚本编译程序

./build-android_RK356X.sh备注:

1)此例子为编译RK356X 的安卓64 位平台。若需要编译其他平台请选择相应的脚本。

详情可参考/rknpu2/examples/rknn_yolov5_demo/README.md。

2)若在编译时出现 cmake 错误,可执行以下命令安装cmake 后再运行编译脚本。

sudo apt install cmake

3.3.5 在板端运行 rknn_yolov5_demo​

1)把编译好的程序和所需的文件 install/rknn_yolov5_demo_Android 文件夹上传到板子的

/data/文件夹下

adb root
adb push install/rknn_yolov5_demo_Android /data/

2)进入板子系统

adb shell
  1. cd 进入程序所在的目录
cd /data/rknn_yolov5_demo_Android/

4)设置库文件路径

export LD_LIBRARY_PATH=./lib

5)运行程序识别相应的图片中物体的类别

用法 Usage: ./rknn_yolov5_demo <rknn model> <jpg>

./rknn_yolov5_demo ./model/RK356X/yolov5s-640-640.rknn ./model/bus.jpg 6)打开一个新终端窗口并下载结果图片 out.jpg 至本地电脑中查看

adb pull /data/rknn_yolov5_demo_Android/out.jpg ./

4 参考文档​

RKNN-Toolkit2有关更详细的用法和接口说明,请参考

《Rockchip_User_Guide_RKNN_Toolkit2_CN.pdf》手册。

RKNPU API有关更详细的用法和接口说明,请参考

《Rockchip_RKNPU_User_Guide_RKNN_API_V1.2.0_CN.pdf》手册。

5 附录​

5.1 查看和设置开发板的 CPU、DDR 和 NPU 频率​

通常,板子上的各个单元的频率是动态调频,这种情况下测试出来的模型性能会有波动。为

了防止性能测试结果不一致,在性能评估时,建议固定板子上的相关单元的频率再做测试。相关

单元的频率查看和设置命令如下:

5.1.1 CPU 定频命令​

1)查看CPU 频率

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

或

cat /sys/kernel/debug/clk/clk_summary | grep arm

2)固定CPU 频率

# 查看CPU 可用频率

cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies

408000 600000 816000 1008000 1200000 1416000 1608000 1704000 # 设置CPU 频率,例如,设置1.7GHz

echo userspace > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
echo 1704000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_setspeed

5.1.2 DDR 定频命令​

1)查看DDR 频率

cat /sys/class/devfreq/dmc/cur_freq

或

cat /sys/kernel/debug/clk/clk_summary | grep ddr

2)固定DDR 频率(需固件支持)

# 查看DDR 可用频率

cat /sys/class/devfreq/dmc/available_frequencies

# 设置DDR 频率,例如,设置1560MHz

echo userspace > /sys/class/devfreq/dmc/governor
echo 1560000000 > /sys/class/devfreq/dmc/userspace/set_freq

5.1.3 NPU 定频命令​

1)查看NPU 频率(需固件支持)

对于RK356X:

cat /sys/kernel/debug/clk/clk_summary | grep npu

或

cat /sys/class/devfreq/fde40000.npu/cur_freq

对于RK3588:

cat /sys/kernel/debug/clk/clk_summary | grep clk_npu_dsu0

2)固定NPU 频率(需固件支持)

对于RK356X:

# 查看NPU 可用频率

cat /sys/class/devfreq/fde40000.npu/available_frequencies

# 设置NPU 频率,例如,设置1 GHz

echo userspace > /sys/class/devfreq/fde40000.npu/governor
echo 1000000000 > /sys/kernel/debug/clk/clk_scmi_npu/clk_rate

对于RK3588:

# 设置NPU 频率,例如,设置1GHz

echo 1000000000 > /sys/kernel/debug/clk/clk_npu_dsu0/clk_rate

5.2 命令adb devices 查看不到设备​

  1. 检查连线是否正确、重插拔或更换电脑USB 插口

  2. 在本地电脑和docker 容器中使用USB 连接的板子时,同一时间只能有一端使用adb server。

故若在一端执行命令(adb devices)时查看不到设备,可在另一命令端执行命令

adb kill-server

终止外部adb service,再返回原先命令终端窗口执行命令(adb devices)查看设备。

  1. 出现以下错误时,是未安装 adb。需要执行安装命令安装 adb。
sudo apt install adb