编译部署 - Yolov5
自己部署一次
RK官方的rknn_model_zooyolov5交叉编译工具链:
RV1126B-p 链接: https://pan.baidu.com/s/1uZjPxDe-oXNBeSScQhNu-A?pwd=fanc 提取码: fanc 复制这段内容后打开百度网盘手机App,操作更方便哦
1. 准备编译环境
1.1 电脑硬件配置
编译 Ubuntu 开发环境电脑硬件配置参考:
| 硬件 | 信息 |
|---|---|
| CPU | 64位 4核 ⬆️ |
| 系统 | Ubuntu Server 24.04.3 LTS | |
| 内存 | 8GB ⬆️ |
| 存储 | 64GB ⬆️ 空闲 |
| 用户 | 普通用户, |
1.2 电脑软件配置
| 项目 | 配置 |
|---|---|
| 使用系统 | Ubuntu Server 24.04.3 LTS |
| 主板芯片 | RV1126B-p |
| SDK | rv1126b_linux6.1_sdk_v1.1.0.tar.gz (已包含 prebuilts 目录) |
| 交叉编译环境 | rv1126b_linux6.1_sdk_v1.1.0_prebuilts.zip prebuilts |
sudo apt update
sudo apt install git unzip vim
sudo apt install -y git cmake build-essential
## Ubuntu 24 server (minimized) 缺这个
sudo apt update
sudo apt install -y libgl1
sudo apt install -y libsm6 libxext6 libxrender1
sudo apt install -y libglib2.0-0 libgomp1
1.3 安装 Python 3.8
推荐使用 PPA(Personal Package Archives)仓库来安装:
-
添加 PPA 仓库:
sudo add-apt-repository ppa:deadsnakes/ppa按
Enter键继续 -
更新软件包列表:
sudo apt update -
安装 Python 3.8:
sudo apt install python3.8
sudo apt install python3.8-venv
sudo apt install python3.8-dev build-essential -
验证安装:
python3.8 --version显示
Python 3.8.x表示安装成功
1.3 创建虚拟环境
# 创建虚拟环境 venv_1126b
python3.8 -m venv venv_1126b
source venv_1126b/bin/activate
## 虚拟环境里升级 pip
pip install --upgrade pip
2. 准备软件环境
2.0 激活虚拟环境再操作
- 激活虚拟环境:
cd ~
source venv_1126b/bin/activate
2.1 准备环境转换软件
-
环境安装 rknn-toolkit2:
git clone https://github.com/airockchip/rknn-toolkit2.git
cd ~/rknn-toolkit2/rknn-toolkit2
# 卸载可能的旧环境
# pip uninstall protobuf onnx
# 安装 rknn_toolkit2 | 用 tsinghua 比较快
pip install -r packages/x86_64/requirements_cp38-2.3.2.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install packages/x86_64/rknn_toolkit2-2.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
准备环境 rknn_model_zoo
cd ~
git clone https://github.com/airockchip/rknn_model_zoo.git
3. 转换模型
3.1 获取并转换模型
-
下载模型:
cd ~/rknn_model_zoo/examples/yolov5/model/
wget https://ftrg.zbox.filez.com/v2/delivery/data/95f00b0fc900458ba134f8b180b3f7a1/examples/yolov5/yolov5n.onnx -
转换模型:
cd ~/rknn_model_zoo/examples/yolov5/python/
python3 convert.py ../model/yolov5n.onnx rv1126b u8 ../model/yolov5n_rv1126b.rknn
模型下载:
rknn_model_zoo 提供的范例模型列表见首页 readme: https://github.com/airockchip/rknn_model_zoo
当前测试模型 yolov5n: https://ftrg.zbox.filez.com/v2/delivery/data/95f00b0fc900458ba134f8b180b3f7a1/examples/yolov5/yolov5n.onnx
3.2 转换结果
转换过程:
(venv_1126b) roy@Debian-i7-7700:~/rknn_model_zoo/examples/yolov5/python$ python3 convert.py ../model/yolov5n.onnx rv1126b u8 ../model/yolov5n_rv1126b.rknn
I rknn-toolkit2 version: 2.3.2
--> Config model
done
--> Loading model
I Loading : 100%|██████████████████████████████████████████████| 121/121 [00:00<00:00, 47493.05it/s]
done
--> Building model
I OpFusing 0: 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 1577.74it/s]
I OpFusing 1 : 100%|████████████████████████████████████████████| 100/100 [00:00<00:00, 1164.83it/s]
I OpFusing 2 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 279.81it/s]
W build: found outlier value, this may affect quantization accuracy
const name abs_mean abs_std outlier value
onnx::Conv_347 0.68 0.89 -11.603
I GraphPreparing : 100%|████████████████████████████████████████| 149/149 [00:00<00:00, 9141.53it/s]
I Quantizating : 100%|████████████████████████████████████████████| 149/149 [00:04<00:00, 34.59it/s]
W build: The default input dtype of 'images' is changed from 'float32' to 'int8' in rknn model for performance!
Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of 'output0' is changed from 'float32' to 'int8' in rknn model for performance!
Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of '343' is changed from 'float32' to 'int8' in rknn model for performance!
Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of '345' is changed from 'float32' to 'int8' in rknn model for performance!
Please take care of this change when deploy rknn model with Runtime API!
I rknn building ...
I rknn building done.
done
--> Export rknn model
done
(venv_1126b) roy@Debian-i7-7700:~/rknn_model_zoo/examples/yolov5/python$ ls ../model
anchors_yolov5.txt bus.jpg coco_80_labels_list.txt download_model.sh yolov5n.onnx yolov5n_rv1126b.rknn
转换后的文件位于: ~/rknn_model_zoo/examples/yolov5/model/
包含文件:
yolov5n.onnx- 原始 ONNX 模型yolov5n_rv1126b.rknn- 转换后的 RKNN 模型anchors_yolov5.txt- 锚点文件coco_80_labels_list.txt- 标签文件bus.jpg- 测试图片download_model.sh- 范例提供了一个yolov5s_relu.onnx可以自行尝试
4. 交叉编译 YOLOV5
4.0 激活虚拟环境再操作
- 激活虚拟环境:
cd ~
source venv_1126b/bin/activate
4.1 准备交叉编译工具链
如果已经下载 SDK
直接使用 prebuilts 目录即可
下载交叉编译工具链:
下载地址见 1.2 电脑软件配置
-
下载并解压交叉编译环境:
cd ~
unzip rv1126b_linux6.1_sdk_v1.1.0_prebuilts.zip -
获取交叉编译工具路径:
RV1126B 是
aarch64获取下对应环境的路径cd prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu
(venv_1126b) roy@Debian-i7-7700:~/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu$ pwd
/home/roy/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu
输出路径: /home/roy/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu
4.2 交叉编译 yolov5
-
设置环境变量:
export PATH=/home/roy/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/:$PATH
export GCC_COMPILER=/home/roy/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu -
开始编译:
cd ~/rknn_model_zoo
chmod +x build-linux.sh
./build-linux.sh -t rv1126b -a aarch64 -d yolov5 -
编译输出内容: 程序位于
~/rknn_model_zoo/install/rv1126b_linux_aarch64/rknn_yolov5_demo
4.3 编译结果
roy@Debian-i7-7700:~/rknn_model_zoo$ cd ~/rknn_model_zoo
chmod +x build-linux.sh
./build-linux.sh -t rv1126b -a aarch64 -d yolov5
./build-linux.sh -t rv1126b -a aarch64 -d yolov5
/home/roy/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu
===================================
BUILD_DEMO_NAME=yolov5
BUILD_DEMO_PATH=examples/yolov5/cpp
TARGET_SOC=rv1126b
TARGET_ARCH=aarch64
BUILD_TYPE=Release
ENABLE_ASAN=OFF
DISABLE_RGA=OFF
DISABLE_LIBJPEG=OFF
INSTALL_DIR=/home/roy/rknn_model_zoo/install/rv1126b_linux_aarch64/rknn_yolov5_demo
BUILD_DIR=/home/roy/rknn_model_zoo/build/build_rknn_yolov5_demo_rv1126b_linux_aarch64_Release
CC=/home/roy/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc
CXX=/home/roy/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++
===================================
-- Configuring done (0.0s)
-- Generating done (0.0s)
-- Build files have been written to: /home/roy/rknn_model_zoo/build/build_rknn_yolov5_demo_rv1126b_linux_aarch64_Release
[ 50%] Built target fileutils
[ 50%] Built target imagedrawing
[ 50%] Built target imageutils
[ 66%] Built target audioutils
[100%] Built target rknn_yolov5_demo
[ 16%] Built target imageutils
[ 33%] Built target fileutils
[ 50%] Built target imagedrawing
[ 83%] Built target rknn_yolov5_demo
[100%] Built target audioutils
Install the project...
-- Install configuration: "Release"
-- Installing: /home/roy/rknn_model_zoo/install/rv1126b_linux_aarch64/rknn_yolov5_demo/./rknn_yolov5_demo
-- Set non-toolchain portion of runtime path of "/home/roy/rknn_model_zoo/install/rv1126b_linux_aarch64/rknn_yolov5_demo/./rknn_yolov5_demo" to "$ORIGIN/lib"
-- Installing: /home/roy/rknn_model_zoo/install/rv1126b_linux_aarch64/rknn_yolov5_demo/./model/bus.jpg
-- Installing: /home/roy/rknn_model_zoo/install/rv1126b_linux_aarch64/rknn_yolov5_demo/./model/coco_80_labels_list.txt
-- Installing: /home/roy/rknn_model_zoo/install/rv1126b_linux_aarch64/rknn_yolov5_demo/model/yolov5n_rv1126b.rknn
-- Installing: /home/roy/rknn_model_zoo/install/rv1126b_linux_aarch64/rknn_yolov5_demo/lib/librknnrt.so
-- Installing: /home/roy/rknn_model_zoo/install/rv1126b_linux_aarch64/rknn_yolov5_demo/lib/librga.so
roy@Debian-i7-7700:~/rknn_model_zoo$ ls /home/roy/rknn_model_zoo/install/rv1126b_linux_aarch64/rknn_yolov5_demo
lib model rknn_yolov5_demo
roy@Debian-i7-7700:~/rknn_model_zoo$ ls /home/roy/rknn_model_zoo/install/rv1126b_linux_aarch64/rknn_yolov5_demo/model/
bus.jpg coco_80_labels_list.txt yolov5n_rv1126b.rknn
5. RV1126B-p 设备验证
5.1 部署文件
-
复制模型到程序目录:
准备一个 RV1126B-p主板,并且
刷好固件 开机 -
复制模型到程序目录:
如果 rknn_yolov5_demo 没有
yolov5n_rv1126b.rknn可以手动复制一个
cp ~/rknn_model_zoo/examples/yolov5/model/yolov5n_rv1126b.rknn ~/rknn_model_zoo/install/rv1126b_linux_aarch64/rknn_yolov5_demo/model/
-
安装 ADB 工具:
sudo apt install google-android-platform-tools-installer -
连接设备并上传程序:
有线连接: 直接接入 usb 数据线
roy@Debian-i7-7700:~$ adb devices
List of devices attached
fec3d3812d367ee device
adb push ~/rknn_model_zoo/install/rv1126b_linux_aarch64/rknn_yolov5_demo/ /root/
无线连接: 先获取设备 IP 地址,例如: 10.0.1.226
roy@Debian-i7-7700:~$ adb connect 10.0.1.226
connected to 10.0.1.226:5555
roy@Debian-i7-7700:~$ adb devices
List of devices attached
10.0.1.226:5555 device
adb push ~/rknn_model_zoo/install/rv1126b_linux_aarch64/rknn_yolov5_demo/ /root/
5.2 执行验证
- 进入程序目录:
先确保连接上设备:
(venv_1126) roy@Debian-i7-7700:~$ adb devices
List of devices attached
10.0.1.226:5555 device
(venv_1126) roy@Debian-i7-7700:~$ adb shell
root@rv1126_rv1109:/#
root@rv1126bp-buildroot:~# ls
rknn_yolov5_demo
root@rv1126bp-buildroot:~# cd /root/rknn_yolov5_demo/
root@rv1126bp-buildroot:~/rknn_yolov5_demo# ls
lib model rknn_yolov5_demo
- 运行测试程序:
root@rv1126bp-buildroot:~/rknn_yolov5_demo# ./rknn_yolov5_demo ./model/yolov5n_rv1126b.rknn ./model/bus.jpg
5.3 运行结果
root@rv1126bp-buildroot:~/rknn_yolov5_demo# ./rknn_yolov5_demo ./model/yolov5n_rv1126b.rknn ./model/bus.jpg
load lable ./model/coco_80_labels_list.txt
model input num: 1, output num: 3
input tensors:
index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
output tensors:
index=0, name=output0, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003917
index=1, name=343, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
index=2, name=345, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
model is NHWC input fmt
model input height=640, width=640, channel=3
origin size=640x640 crop size=640x640
input image: 640 x 640, subsampling: 4:2:0, colorspace: YCbCr, orientation: 1
scale=1.000000 dst_box=(0 0 639 639) allow_slight_change=1 _left_offset=0 _top_offset=0 padding_w=0 padding_h=0
rga_api version 1.10.1_[0]
46 im2d_rga_impl rga_get_info(718): Can not get the correct RGA version, please check the driver, version=4.1.34669
46 im2d_rga_impl rga_check(1280): rga im2d: rga2 get info failed!
Error on improcess STATUS=0
RGA error message: Fatal error: rga im2d: rga2 get info failed!
try convert image use cpu
finish
rknn_run
person @ (110 232 203 528) 0.822
person @ (209 241 287 512) 0.809
person @ (483 222 564 515) 0.617
bus @ (115 143 564 452) 0.527
write_image path: out.png width=640 height=640 channel=3 data=0x371d8ed0
root@rv1126bp-buildroot:~/rknn_yolov5_demo# ./rknn_yolov5_demo ./model/yolov5n_rv1126b.rknn ./model/bus.jpg
最终输出: 文件信息:
root@rv1126bp-buildroot:~/rknn_yolov5_demo# ls
lib model out.png rknn_yolov5_demo
效果图:


总结
通过以上步骤,我们成功完成了:
- ✅ 搭建交叉编译环境
- ✅ 转换 Yolov5 模型为 RKNN 格式
- ✅ 编译 RKNN Yolov5 演示程序
- ✅ 在 RV1126B-p 设备上部署并验证
注意事项
| 项目 | RV1126B-p | RV1126 | 说明 |
|---|---|---|---|
| RKNN Toolkit 版本 | rknn-toolkit2 v2.x | rknn-toolkit v1.7.5 | 两者不兼容,不可混用 |
| 系统架构 | 64位 ARM (aarch64) | 32位 ARM (armhf) | 需要对应的交叉编译工具链 |
| 编译选项 | -t rv1126b -a aarch64 | -t rv1126 -a armhf | 编译脚本参数不同 |
| 部署方式 | 文件直接部署 | 文件直接部署 | 运行方式差异 |
| 模型转换警告 | 可能出现,通常不影响使用 | 可能出现,通常不影响使用 | 可忽略的量化精度警告 |
| Python 环境 | Python 3.8 + 虚拟环境 | Python 3.8 + 虚拟环境 | 确保环境一致性 |