电脑win10 装的 vmware 16pro 操作系统ubuntu20.04
开发板 rk3588 一根 usb-typeC的数据线 用来PC与开发板通信
在ROCKCHIP芯片上的EVB板子上使用
RKNN-Toolkit2 和 RKNPU工具 将onnx模型转化为rknn模型 并进行板端推理
第一步是安装RKNN-toolkit2
大致逻辑是在ubuntu 上安装RKNN-toolkit2 工具 在pc端 利用此工具将onnx模型转化为 rknn模型
先是下载python解释器 我用的是python3.6.5,利用该解释器创建虚拟环境,用的是virtualenv,
在py365虚拟环境中下载运行yoloV5所需的依赖包,所有的包安装好后(至少要保证进入python3.6.5 导入任何一个包 不会出错)
开始安装RKNN-Toolkit2,检查是否安装成功 在虚拟环境中 运行
python3
from rknn.api import RKNN
下一步就是进入到该目录下,执行test.py程序.
python3 test.py
这时 会得到一个rknn文件和一个 推理的图片,转换和推理模型 均运行在pc端的模拟器环境中
也可以更改python代码 设置 target、device_id
第二步RKNN-Toolkit2 连板调试
首先要保证PC端可以与RK3588进行通信 ,usb-typec 线连接成功后(Tpyec插头可以试着翻转一下插入)
adb devices
会出现设备的序列号,可以在设备管理器中查看检测到的设备 比对序列号,此时我们可以通过pc端控制板子 也可以进行文件传输
更新板子的 rknn_server 和 librknnrt.so
librknnrt.so: 是一个板端的 runtime 库。
rknn_server: 是一个运行在板子上的后台代理服务,用于接收 PC 通过 USB 传输过来的协议,
然后执行板端 runtime 对应的接口,并返回结果给 PC
RK3588 自动启动 rknn _server 所以就不需要 restart_rknn.sh
可以查看rknn_server是否正在启动
PC端运行
adb shell
pgrep rknn_server
传输文件
BORAD_ARCH 在64位Linux系统中 对应aarch64目录
1. adb push Linux/rknn_server/${BOARD_ARCH}/usr/bin/下的所有文件到/usr/bin目录
2. adb push Linux/librknn_api/${BOARD_ARCH}/librknnrt.so到/usr/lib目录
adb push
是一个用于将文件从计算机(主机)传输到连接的 Android 设备上的命令。
在板端执行 ,更改文件权限
chmod +x /usr/bin/rknn_server
chmod +x /usr/bin/start_rknn.sh
chmod +x /usr/bin/restart_rknn.sh
开始进行连板调试 更改test.py代码,设置 target_platform,target,device_id 为RK3588 以及设备号
执行转换和推理 test.py 这时就是利用RK3588进行转换和推理 并且将结果返回给PC
第三步 RKNPU2 的编译及使用方法
由于板子为Linux系统 则需下载gcc交叉编译器
推荐版本 gcc-9.3.0-x86_64_arrch64-linux-gnu
这里介绍一下 gcc交叉编译器
GCC(GNU Compiler Collection)是一个开源的编译器集合,它可以在多个平台上进行编译,并提供了针对不同语言(如C、C++、Fortran等)的编译器。其中,gcc交叉编译器是GCC的一个组件,它用于将源代码从一种平台(称为主机)编译成另一种平台(称为目标)上可执行的代码。
交叉编译器主要用于在一种体系结构上开发和编译软件,然后将其部署到另一种体系结构上运行。这种情况通常发生在嵌入式系统和跨平台开发中,例如在开发嵌入式Linux系统时,可以使用GCC交叉编译器在一个平台上编译ARM架构的代码,然后将结果代码部署到ARM处理器的目标设备上运行。
通过使用交叉编译器,开发者可以利用一个主机平台上的强大开发环境来开发和测试软件,然后将其部署到不同的目标平台上,从而提高开发效率和灵活性。
修改编译工具的路径
更改bulid-linux_RK3588.sh的 GCC_COMPILER,TOOL_CHAIN,
将之前转换后的rknn文件复制到rknpu2/examples/rknn_yolov5_demo/model/RK3588/
开始进行编译rknn_yolov5_demo 执行./bulid-linux_RK3588.sh
将编译好的程序和 rknn文件 推送到板子的data文件夹中
进入板子系统 adb shell 进入程序所在目录 设置库文件路径
进行板端推理
运行程序识别相应的图片中物体的类别。
用法 Usage: ./rknn_yolov5_demo
命令: ./rknn_yolov5_demo ./model/RK3566_RK3568/yolov5s-640-640.rknn ./model/bus.jpg