跳到主要内容

D12CRknn

0 前言

环境与工具:

  • x86_64 ubuntu22.04主机一台
  • YY3588 开发板一台
  • YY3588标配电源一个
  • USB typeA 转 typeC 调试线一根

1 准备工作

1.1 硬件准备

YY3588开发板接上电源接口和adb调试接口,adb 另一端接上ubuntu22.04主机;如下图:

yy3588硬件adb连接图.png

1.2 开发环境准备

1.2.1 安装 Python3.10

# 提示:使用普通用户即可
$ sudo apt update
$ sudo apt search python3.10
# 选择一个安装即可
$ sudo apt install xxx
# 检查安装是否成功
$ python --version

1.2.2 安装 adb

$ sudo apt install adb
# 查看开发板信息,出现开发板信息说明安装成功
$ adb devices
List of devices attached
e917a56d5822e215 device

1.2.3 下载 RKNN 相关仓库

资料下载,点击跳转
downloads.png

$ mkdir yyt_RKNN_Projects
$ cd yyt_RKNN_Projects
$ mv /path/to/rknn-toolkit2 /path/to/rknn_model_zoo -t ./

1.2.4 安装依赖库和 RKNN-Toolkit2

  • 查看是否安装

    # 没有报错则为已经安装(已经安装可以跳过此章节)
    $ python
    $ from rknn.api import RKNN
  • 安装

    $ cd yyt_RKNN_Projects/rknn-toolkit2/rknn-toolkit2
    $ pip install -r packages/x86_64/requirements_cp310-2.3.0.txt
    $ pip install -r packages/x86_64/rknn_toolkit2-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

1.2.5 安装编译工具

$ sudo apt install cmake

2 简单推理

2.1 准备模型

$ cd yyt_RKNN_Projects/rknn_model_zoo/examples/yolov5/model
# 可以自己下载模型,也可以使用我们下载好的模型,在RKNN相关仓库资料里面
$ ./download_model.sh
# 下载好的模型路径 model/yolov5s_relu.onnx

2.2 模型转换

$ cd yyt_RKNN_Projects/rknn_model_zoo/examples/yolov5/python
$ python convert.py ../model/yolov5s_relu.onnx rk3588 i8 ../model/yolov5s_relu.rknn

2.3 运行 Python Demo

$ cd Projects/rknn_model_zoo/examples/yolov5/python
# 将RKNN相关仓库资料里面的adbd.zip推送到板端
$ unzip adbd.zip
$ adb push adbd/linux-aarch64/adbd /usr/bin/adbd
$ adb shell "chmod +x /usr/bin/adbd"
$ adb reboot
# 等待板子启动后
$ sudo adb kill-server
# 调试命令
## 连板调试
$ adb shell "restart_rknn.sh"
$ python yolov5.py --model_path ../model/yolov5s_relu.rknn --target rk3588 --img_save
## 主机调试
$ python yolov5.py --model_path ../model/yolov5s_relu.onnx --img_save

rknn运行过程代码截图.png

两种调试结果的输出图片均在result目录下面,默认输入有2张照片(bus.jpg、women.jpg)

  • before
    before.png
  • after
    after.png

更新rknpu2驱动和库

更新rknpu2驱动

  1. 下载驱动:

目前瑞芯微官方的rknpu2驱动最新为 0.9.8,在 rknn-llm 源码下。

网址: https://github.com/airockchip/rknn-llm

rknn-1.png

  1. 解压获取驱动包,并把驱动包放到SDK源码下。

rknn-2.png

rknn-3.png

  1. 执行以下命令解压更新驱动
tar -xjvf rknpu_driver_0.9.8_20241009.tar.bz2 -C kernel-6.1/

再把sdk源码下的 kernel-6.1/drivers/rknpu/rknpu_devfreq.c 一条语句注释掉

rknpu-4.png

  1. 编译kernel
# 编译
cd kernel-6.1
make clean
cd ..
./build.sh kernel
  1. 拿一块yy3588开发板,登录Debian系统查看当前rknpu驱动版本
cat /sys/kernel/debug/rknpu/version

rknpu-4.png

  1. 编译完成后,将生成的 boot.img 文件(位于 SDK/rockdev/ 目录)烧录到设备的 boot 分区即可。

rknpu-4.png

  1. 测试是否升级成功:重启开机执行
cat /sys/kernel/debug/rknpu/version

rknpu-4.png

更新rknn api

  • librknnrt.so: 是一个板端的 runtime 库。
  • rknn_server: 是一个运行在板子上的后台代理服务,用于接收 PC 通过 USB 传输过来的协议, 然后执行板端 runtime 对应的接口,并返回结果给 PC。
  1. 下载 rknpu2

网址: https://github.com/airockchip/rknn-toolkit2

rknpu-8.png

  1. 解压,使用adb把rknpu2导入到板子
adb push C:\Users\stack\Downloads\rknn-toolkit2-master\rknpu2\runtime\Linux /home/youyeetoo
  1. 更新rknpu2库
adb shell
cd /home/youyeetoo

# 板子查看rknpu2 库和进程版本
sudo strings /usr/bin/rknn_server | grep "rknn_server version:"
sudo strings /usr/lib/librknnrt.so | grep "librknnrt version:"

# 查看下载的版本
sudo strings Linux/librknn_api/aarch64/librknnrt.so | grep "librknnrt version:"
sudo strings Linux/rknn_server/aarch64/usr/bin/rknn_server | grep "rknn_server version:"

# 如果两个版本不一样,再执行下面命令更新
sudo chmod +x Linux/rknn_server/aarch64/usr/bin/*
sudo cp Linux/rknn_server/aarch64/usr/bin/* /usr/bin/
sudo cp Linux/librknn_api/aarch64/* /usr/lib/
sudo cp Linux/librknn_api/include/* /usr/include/
sudo reboot