在泰山派3M-RK3576开发板上部署YOLO11目标检测模型实战指南
本文详细介绍了在泰山派3M-RK3576开发板上部署YOLO11目标检测模型的完整实战流程。通过环境搭建、模型转换(PyTorch→ONNX→RKNN)和交叉编译等步骤,最终利用RK3576芯片的NPU实现高性能边缘AI推理,为嵌入式开发者提供了一份清晰的部署指南。
在泰山派3M-RK3576开发板上部署YOLO11目标检测模型实战指南
最近有不少朋友在问,怎么把最新的YOLO11模型部署到泰山派3M-RK3576开发板上跑起来。正好我最近也在做这个项目,今天就把完整的部署流程分享给大家,从环境搭建、模型转换到最终在开发板上运行,手把手带你走一遍。
YOLO11是Ultralytics推出的新一代目标检测模型,保持了YOLO系列“单阶段、端到端、实时”的特点,在精度和速度上做了更好的平衡。泰山派3M-RK3576搭载了Rockchip的RK3576芯片,内置NPU(神经网络处理单元),专门用来加速AI推理。把YOLO11部署上去,就能在边缘设备上实现高性能的实时目标检测。
这篇文章适合有一定嵌入式开发基础,想在边缘设备上跑AI模型的开发者。我会尽量把每个步骤都讲清楚,包括可能遇到的坑和解决办法。
1. 环境准备
在开始之前,咱们得先把开发环境搭建好。整个过程主要在你的Ubuntu开发机(x86架构)上完成,最后把编译好的程序放到泰山派开发板(ARM架构)上运行。
1.1 安装Miniforge3
为了避免不同Python环境之间的冲突,我推荐使用Miniforge3来管理Python环境。它比Anaconda更轻量,更适合开发使用。
打开终端,执行以下命令:
# 下载Miniforge3安装脚本
wget -c https://mirrors.bfsu.edu.cn/github-release/conda-forge/miniforge/LatestRelease/Miniforge3-Linux-x86_64.sh
# 运行安装脚本
bash Miniforge3-Linux-x86_64.sh
安装过程中会提示几个问题:
- 按Enter键继续
- 按空格键查看许可协议
- 输入
yes同意协议 - 提示是否初始化时,也输入
yes
安装完成后,初始化conda环境变量:
source ~/miniforge3/bin/activate
注意:成功之后,命令行前面会显示一个
(base),表示你现在在base环境中。
1.2 创建RKNN-Toolkit2环境
RKNN-Toolkit2是Rockchip官方的模型转换工具,咱们需要用它把ONNX模型转换成RKNN格式。先创建一个专门的环境:
# 创建名为YOLO11-RKNN-Toolkit2的环境,使用Python 3.10
conda create -n YOLO11-RKNN-Toolkit2 python=3.10
遇到Proceed ([y]/n)?提示时,输入y继续。
创建完成后激活环境:
conda activate YOLO11-RKNN-Toolkit2
现在命令行前面应该变成了(YOLO11-RKNN-Toolkit2)。在这个环境里安装必要的依赖:
# 安装rknn-toolkit2
pip install rknn-toolkit2 -i https://mirrors.aliyun.com/pypi/simple
# 安装指定版本的onnx(1.18.0)
pip install onnx==1.18.0 -i https://mirrors.aliyun.com/pypi/simple
安装完成后,先退出这个环境:
conda deactivate
1.3 创建YOLO11环境
接下来创建另一个环境,专门用来处理YOLO11模型:
# 创建名为Tspi3-YOLO11的环境
conda create -n Tspi3-YOLO11 python=3.10
同样输入y继续,然后激活环境:
conda activate Tspi3-YOLO11
命令行会显示(Tspi3-YOLO11)。安装YOLO11相关的工具:
pip install ultralytics onnx onnxscript -i https://mirrors.aliyun.com/pypi/simple
验证一下安装是否成功:
yolo -v
如果显示版本号(比如8.3.248),说明安装成功了。
2. 模型转换
这是最关键的一步,咱们要把YOLO11的PyTorch模型转换成能在RKNPU上跑的RKNN模型。整个过程分三步:
- 下载预训练好的.pt模型文件
- 导出为ONNX格式
- 转换成RKNN格式
2.1 下载.pt模型文件
.pt文件是PyTorch训练好的模型权重文件,没有这个文件,模型就是个空壳子,没法做检测。
Ultralytics官方提供了预训练好的模型,咱们下载YOLO11n(nano版本),这个版本最小最快,适合在嵌入式设备上跑:
wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n.pt
这里简单说一下YOLO11的版本区别:
- n (nano):最小最快,精度相对较低,适合端侧设备
- s (small):小型
- m (medium):中型
- l (large):大型
- x (extra-large):最大最慢,精度最高
对于泰山派3M-RK3576,我建议从nano版本开始,如果性能有余量再尝试更大的版本。
2.2 导出ONNX模型
直接使用Ultralytics官方的导出功能可能无法在RKNPU上获得最佳性能,所以咱们要用Rockchip优化过的版本。
首先确保你在Tspi3-YOLO11环境中:
conda activate Tspi3-YOLO11
然后克隆Rockchip优化过的YOLO11项目:
git clone https://github.com/airockchip/ultralytics_yolo11.git
cd ultralytics_yolo11
这个版本针对RKNPU做了专门优化:
- 修改了输出结构,移除了后处理结构(后处理对量化不友好)
- 将dfl结构移到模型外部处理,因为在NPU上处理性能不佳
- 模型输出新增了置信度总和,用于加速后处理的阈值筛选
接下来修改配置文件,告诉模型你的.pt文件在哪里。编辑ultralytics_yolo11/ultralytics/cfg/default.yaml文件:
# 找到第5行附近的model配置,修改为你的.pt文件绝对路径
model: /home/lipeng/workspace/yolo11n.pt # 改成你实际的路径
注意:这里一定要用绝对路径,相对路径可能会出问题。
设置Python路径:
export PYTHONPATH=./
开始导出ONNX模型:
python ./ultralytics/engine/exporter.py
导出成功后,会在当前目录生成yolo11n.onnx文件。这个文件就是咱们下一步要转换的ONNX模型。
2.3 转换ONNX到RKNN
现在退出YOLO11环境,回到RKNN-Toolkit2环境:
conda deactivate
conda activate YOLO11-RKNN-Toolkit2
克隆Rockchip的模型仓库,里面包含了转换脚本:
git clone https://github.com/airockchip/rknn_model_zoo.git
cd rknn_model_zoo/examples/yolo11/python
运行转换脚本:
# 语法:python3 convert.py onnx_model_path [platform] [dtype] [output_rknn_path]
python convert.py /home/lipeng/workspace/yolo11n.onnx rk3576 i8
这里解释一下参数:
- 第一个参数:你的ONNX模型路径
- 第二个参数:平台选择,泰山派3M用
rk3576 - 第三个参数:数据类型,
i8表示int8量化,fp表示浮点 - 第四个参数(可选):输出路径,不指定就默认输出到当前目录
提示:对于RK3576平台,可以选择
i8(int8量化)或fp(浮点)。int8量化后模型更小、推理更快,但精度可能会有轻微损失。一般建议先用int8,如果精度不够再尝试浮点。
转换成功后,会在rknn_model_zoo/examples/yolo11/model目录下生成yolo11.rknn文件。这个就是最终能在RKNPU上跑的模型了。
3. 交叉编译Demo
模型转换好了,接下来需要编译一个能在泰山派上运行的程序。Rockchip官方提供了C++写的Demo,咱们需要交叉编译。
3.1 退出环境并安装交叉编译工具
先退出conda环境:
conda deactivate
看到命令行前面显示(base)就可以了。
安装交叉编译工具链。因为咱们要在x86的PC上编译出能在ARM架构的泰山派上运行的程序,所以需要aarch64-linux-gnu工具链:
sudo apt update && \
sudo apt install -y cmake make gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
3.2 编译Demo
进入rknn_model_zoo目录:
cd rknn_model_zoo/
给编译脚本添加执行权限:
sudo chmod +x ./build-linux.sh
开始编译YOLO11的Demo:
./build-linux.sh -t rk3576 -a aarch64 -d yolo11
参数说明:
-t rk3576:目标平台是RK3576-a aarch64:架构是aarch64(64位ARM)-d yolo11:要编译的Demo名称,必须和examples目录下的文件夹名称一致
编译过程可能需要几分钟。完成后,会在install/目录下生成编译好的文件:
install/
`-- rk3576_linux_aarch64
`-- rknn_yolo11_demo
|-- lib
| |-- librga.so
| `-- librknnrt.so
|-- model
| |-- bus.jpg # 测试图片
| |-- coco_80_labels_list.txt # COCO数据集标签
| `-- yolo11.rknn # RKNN模型文件
|-- rknn_yolo11_demo # Demo可执行文件
`-- rknn_yolo11_demo_zero_copy # 零拷贝版本
注意:
<demo name>这个参数一定要和rknn_model_zoo/examples中的目标文件夹名称保持一致,因为脚本会根据这个参数选择编译哪个Demo。
4. 在开发板上运行Demo
4.1 传输文件到开发板
现在需要把编译好的Demo传到泰山派开发板上。我推荐使用ADB工具,泰山派默认开启了ADB调试。
首先通过USB-C数据线连接开发板和电脑,然后:
adb push rknn_model_zoo/install/rk3576_linux_aarch64/rknn_yolo11_demo /home/lckfb/
这个命令会把整个rknn_yolo11_demo文件夹推送到开发板的/home/lckfb/目录下。
提示:如果ADB连接有问题,可以参考泰山派官方文档。除了ADB,你也可以用TF卡、SSH或U盘来传输文件。
4.2 在开发板上运行
通过ADB shell或者SSH登录到泰山派开发板:
adb shell
进入Demo目录:
cd /home/lckfb/rknn_yolo11_demo/
设置动态库路径(这一步很重要,不然会报找不到库的错误):
export LD_LIBRARY_PATH=./lib
给Demo添加执行权限:
sudo chmod +x rknn_yolo11_demo
运行Demo:
sudo ./rknn_yolo11_demo model/yolo11.rknn model/bus.jpg
命令格式是:./可执行文件 <RKNN模型路径> <输入图片路径>
运行成功后,会在当前目录生成一个out.png文件,这就是检测结果图片。你可以看到图片上画出了检测框和标签。
如果一切顺利,你应该能看到类似这样的输出:
Read model/bus.jpg ...
img width = 640, img height = 640
Loading model...
model input num: 1, output num: 2
index=0, name=images, n_dims=4, dims=[1, 3, 640, 640], n_elems=1228800, size=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=0, scale=0.003922
index=0, name=output0, n_dims=4, dims=[1, 116, 8400], n_elems=974400, size=974400, fmt=UNDEFINED, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003906
index=1, name=output1, n_dims=4, dims=[1, 4, 8400], n_elems=33600, size=33600, fmt=UNDEFINED, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003906
model is NHWC input format
once run use 16.000000 ms
loadLabel use 0.000000 ms
run use 16.000000 ms
post process use 0.000000 ms
这里可以看到推理时间(once run use 16.000000 ms),大约是16毫秒,相当于每秒能处理60多帧,完全能满足实时检测的需求。
5. 常见问题与调试技巧
在实际部署过程中,你可能会遇到一些问题。这里分享几个我踩过的坑:
问题1:模型转换失败
- 现象:运行
convert.py时报错 - 可能原因:ONNX版本不兼容
- 解决:确保使用
onnx==1.18.0,其他版本可能会有问题
问题2:Demo运行时报"找不到库"
- 现象:
error while loading shared libraries: librknnrt.so - 解决:一定要先执行
export LD_LIBRARY_PATH=./lib,或者把lib目录下的.so文件复制到系统的库路径
问题3:检测结果不对
- 现象:能运行但检测框乱画
- 可能原因:模型输入尺寸不匹配
- 解决:YOLO11默认输入是640x640,确保你的图片预处理保持一致
问题4:性能不如预期
- 尝试:使用
rknn_yolo11_demo_zero_copy零拷贝版本,这个版本性能更好 - 调整:尝试不同的量化类型(i8/fp),或者换用YOLO11s/m等不同规模的模型
性能优化建议:
- 如果对精度要求不高,优先使用int8量化,速度更快
- 调整输入图片尺寸,尺寸越小推理越快(但检测小目标能力会下降)
- 使用多线程处理,在NPU推理的同时用CPU做图像预处理和后处理
到这里,整个YOLO11在泰山派3M-RK3576上的部署流程就完成了。从环境搭建到模型转换,再到交叉编译和最终运行,每个步骤我都验证过。实际项目中,你可以把这个Demo作为起点,集成到自己的应用里,比如智能监控、机器人视觉或者工业质检等场景。
如果遇到其他问题,可以多看看Rockchip官方文档和GitHub上的issue,很多问题别人已经遇到并解决了。嵌入式AI部署就是这样,大部分时间都在调环境和解决兼容性问题,一旦跑通后面就顺畅了。
更多推荐



所有评论(0)