RK3588部署YOLOv5
设备概述
1、设备组成
-
笔记本电脑:作为操作终端,用于远程连接和控制其他设备。
-
虚拟机:运行在笔记本上的虚拟环境,操作系统为 Ubuntu 22.04.5 LTS。虚拟机的作用主要是提供一个隔离的开发环境,便于进行软件安装、配置和开发工作,同时避免对宿主机系统造成影响。
-
RK3588(鲁班猫5):一款基于RK3588芯片的开发板,操作系统为 Ubuntu 22.04.5 LTS。该开发板具有较强的计算能力和丰富的接口,适用于嵌入式开发和边缘计算场景,是运行YOLOv5模型推理的核心硬件平台。
2、远程连接工具
-
远程桌面连接:用于连接虚拟机,方便在笔记本上操作虚拟机内的环境。它提供了图形界面的交互方式,适合进行复杂的配置和开发工作。
-
WindTerm:一款功能强大的终端工具,支持多种连接方式(如SSH等),用于连接RK3588开发板。通过WindTerm,可以方便地执行命令、管理文件,并且支持多会话和多种协议,提高了操作效率。
总体流程
工具下载➡环境搭建与配置➡开发板连接与配置➡模型转换➡交叉编译➡传输程序➡运行与测试
1、工具下载
一共是需要下载三个工具:rknn-toolkit2、rknn_model_zoo和交叉编译工具
-
RKNN-Toolkit2 是用于模型转换、量化、推理和性能评估的核心工具。
-
RKNN Model Zoo 提供了丰富的示例代码和应用场景,帮助开发者快速部署AI模型。
-
交叉编译工具 用于将代码编译为目标硬件平台可运行的版本,是嵌入式开发中的重要工具。
相关指令(虚拟机端):
# 在桌面创建一个专用目录
mkdir ~/RK3588_yolov5
# 进入杠创建的目录
cd ~/RK3588_yolov5
# 下载rknn-toolkit2
wget -c https://github.com/airockchip/rknn-toolkit2/archive/refs/heads/master.zip -O rknn-toolkit2.zip
# 解压
unzip rknn-toolkit2.zip
# 重命名文件夹
mv rknn-toolkit2-master rknn-toolkit2
# 删除压缩包
rm ~/RK3588_yolov5/rknn-toolkit2.zip
# 下载rknn_model_zoo--解压--重命名--删除压缩包
wget -c https://github.com/airockchip/rknn_model_zoo/archive/refs/heads/main.zip -O rknn_model_zoo.zip
unzip rknn_model_zoo.zip
mv rknn_model_zoo-main rknn_model_zoo
rm ~/RK3588_yolov5/rknn_model_zoo.zip
# 下载交叉编译工具--解压--删除文件夹
wget -c https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
tar -xJf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
rm gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
参数详解:
-
wget:是一个用于从网络下载文件的命令行工具。 -
-c:表示继续下载未完成的文件(如果之前下载中断,可以继续下载)。 -
https://github.com/airockchip/rknn-toolkit2/archive/refs/heads/master.zip:这是rknn-toolkit2项目的压缩包下载链接。 -
-O rknn-toolkit2.zip:指定下载的文件保存为rknn-toolkit2.zip。
2、环境搭建与配置
创建环境(虚拟机端)
# 更新软件源并安装必要工具
sudo apt update
sudo apt install -y python3-opencv libopencv-dev python3-dev python3-pip cmake git wget curl
# 创建名为RK3588-YOLOv5的Python 3.8环境
conda create -n RK3588-YOLOv5 python=3.8 -y
# 激活环境
conda activate RK3588-YOLOv5
安装rknn-toolkit2(虚拟机端)
# 进入项目根目录
cd ~/RK3588_yolov5
# 安装依赖
pip install -r rknn-toolkit2/rknn-toolkit2/packages/x86_64/requirements_cp38-2.3.2.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装RKNN Toolkit
pip install rknn-toolkit2/rknn-toolkit2/packages/x86_64/rknn_toolkit2-2.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
# 验证安装是否成功
python -c "from rknn.api import RKNN; print('RKNN模块导入成功')"
RKNN Toolkit已经被打包为 Python 包,可以通过pip直接安装。指令:pip install rknn-toolkit2,但是因为需要将一些内容传输到板子上,所以这里使用的是克隆仓库的方法
3、开发板连接与配置
查找开发板需要的运行文件(虚拟机端)
# 进入虚拟机中的RKNN目录
cd ~/RK3588_yolov5/rknn-toolkit2/rknpu2
# 确认我们需要传输的文件
echo "需要传输的文件:"
echo "1. rknn_server: runtime/Linux/rknn_server/aarch64/usr/bin/"
echo "2. librknnrt.so: runtime/Linux/librknn_api/aarch64/"
# 查看文件详情
ls -la runtime/Linux/rknn_server/aarch64/usr/bin/
ls -la runtime/Linux/librknn_api/aarch64/

使用scp传输文件(虚拟机端)
# 实际操作时需要将<开发板IP>替换为真实的IP,注意<>在这里只是占位符,替换后不能再有
# 传输rknn_server和相关脚本
scp runtime/Linux/rknn_server/aarch64/usr/bin/rknn_server cat@<开发板IP>:~/tmp_rknn_server
scp runtime/Linux/rknn_server/aarch64/usr/bin/start_rknn.sh cat@<开发板IP>:~/tmp_start_rknn.sh
scp runtime/Linux/rknn_server/aarch64/usr/bin/restart_rknn.sh cat@<开发板IP>:~/tmp_restart_rknn.sh
# 传输librknnrt.so
scp runtime/Linux/librknn_api/aarch64/librknnrt.so cat@<开发板IP>:~/tmp_librknnrt.so
将文件移动到系统目录(板端)
# 将文件移动到系统目录(需要sudo权限)
sudo mv ~/tmp_rknn_server /usr/bin/rknn_server
sudo mv ~/tmp_start_rknn.sh /usr/bin/start_rknn.sh
sudo mv ~/tmp_restart_rknn.sh /usr/bin/restart_rknn.sh
sudo mv ~/tmp_librknnrt.so /usr/lib/librknnrt.so
设置所有文件的执行权限(板端)
sudo chmod +x /usr/bin/rknn_server
sudo chmod +x /usr/bin/start_rknn.sh
sudo chmod +x /usr/bin/restart_rknn.sh
验证文件已正确安装(板端)
echo "验证文件安装:"
ls -la /usr/bin/rknn_server
ls -la /usr/bin/start_rknn.sh
ls -la /usr/bin/restart_rknn.sh
ls -la /usr/lib/librknnrt.so

启动 rknn_server(板端)
# 使用 restart_rknn.sh 脚本(它会以后台方式启动)
sudo /usr/bin/restart_rknn.sh
# 检查进程是否已启动
sleep 2 # 等待2秒让服务启动
ps aux | grep rknn_server

4、模型转换
运行模型下载脚本(虚拟机端)
# 确保在 model 目录
cd ~/RK3588_yolov5/rknn_model_zoo/examples/yolov5/model
# 给脚本添加执行权限并运行
chmod +x download_model.sh
./download_model.sh
# 检查 ONNX 模型文件是否已存在
ls -lh yolov5s_relu.onnx

查看转换脚本(虚拟机端)
# 进入 python 目录查看转换脚本
cd ../python
ls -la

转换模型(虚拟机端)
python convert.py ../model/yolov5s_relu.onnx rk3588 i8 ../model/yolov5s_relu.rknn

在虚拟机上用ONNX模型测试(虚拟机端)
# 使用ONNX模型运行测试,正常云心后会弹出来检测有框的图片
python yolov5.py --model_path ../model/yolov5s_relu.onnx --img_show
5、交叉编译
修改并启动编译脚本(虚拟机端)
为什么要在脚本中加这句话:
GCC_COMPILER:这是一个环境变量,告诉编译脚本使用哪个交叉编译器,~/gcclinaro.../bin/aarch64-linux-gnu:这是交叉编译器的前缀路径,~代表的是实际路径
注意:是路径前缀,不是完整的编译器文件名,脚本会自动在后面添加 -gcc 或 -g++ 来调用具体编译器,实际会使用:aarch64-linux-gnu-gcc 和 aarch64-linux-gnu-g++
# 切换到 rknn_model_zoo 目录,因为编译脚本 build-linux.sh 位于这个目录下。
cd ~/RK3588_yolov5/rknn_model_zoo
# 使用 vi 文本编辑器打开编译脚本。
vi build-linux.sh
# 将这句话放在zoo的build_linux.sh开头
GCC_COMPILER=/home/ubuntu-cv/RK3588_yolov5/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu
# 启动脚本
./build-linux.sh -t rk3588 -a aarch64 -d yolov5
参数详解:
| 参数 | 全称 | 作用 | 示例值 | 说明 |
|---|---|---|---|---|
-t |
target | 目标平台 | rk3588 |
指定RK3588开发板 |
-a |
arch | 架构类型 | aarch64 |
64位ARM架构 |
-d |
demo | 示例名称 | yolov5 |
编译YOLOv5示例 |
-b |
build_type | 编译类型 | Debug/Release |
可选的调试/发布版本 |
-m |
memory sanitizer | 内存检查 | 无值 | 启用地址消毒器(调试用) |

6、传输程序
将交叉编译的程序传输到开发板(虚拟机端)
# 进入编译输出目录
cd ~/RK3588_yolov5/rknn_model_zoo/install/rk3588_linux_aarch64/
# 创建压缩包(确保在当前目录)
tar -czf rknn_yolov5_demo.tar.gz rknn_yolov5_demo/
# 传输压缩包到开发板
scp rknn_yolov5_demo.tar.gz cat@<开发板IP>:~/
7、运行与测试
解压并运行程序(板端)
# 解压文件
tar -xzf ~/rknn_yolov5_demo.tar.gz -C ~/
# 进入相应目录
cd /home/cat/rknn_yolov5_demo/
# 设置依赖库环境
export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH
# 运行程序
./rknn_yolov5_demo model/yolov5s_relu.rknn model/bus.jpg

成功运行后文件夹中就会多出来一个out.png

更多推荐



所有评论(0)