news 2026/5/5 13:53:44

YOLO11+RK3588实战,端侧部署完整流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO11+RK3588实战,端侧部署完整流程

YOLO11+RK3588实战,端侧部署完整流程

1. 为什么选择YOLO11部署到RK3588

你是否也遇到过这样的问题:训练好的目标检测模型,在服务器上跑得飞快,但一放到边缘设备上就卡顿、掉帧、甚至根本跑不起来?或者好不容易部署成功,结果精度大幅下降,识别不准、漏检严重?

YOLO11不是简单的版本迭代。它用全新的C3k2模块替代了传统C2f结构,配合轻量级C2PSA注意力机制,在保持推理速度的同时显著提升了小目标和遮挡场景下的检测能力。而RK3588作为瑞芯微旗舰级AI SoC,拥有高达6TOPS的NPU算力、双VPU硬解码能力,以及对RKNN工具链的深度优化支持——两者结合,正是端侧高性能实时检测的理想组合。

本文不讲空泛理论,不堆砌参数指标,而是带你从零开始,走完一条可复现、可验证、可落地的完整路径:
在标准Linux环境完成YOLO11模型训练
将.pt模型无损导出为ONNX格式
在x86虚拟机中完成ONNX→RKNN转换(适配RK3588)
在开发板上编译运行C++推理程序,输出带框标注的检测结果

全程基于真实项目文件、真实命令、真实截图逻辑重构,所有步骤均已在Ubuntu 22.04 + RK3588 SDK v2.3.0环境下实测通过。


2. 环境与项目准备:四份关键代码仓库

YOLO11在RK3588上的端侧部署不是单点突破,而是四个环节的协同闭环。我们需提前准备好以下四个开源项目,并严格对应版本:

项目角色仓库地址版本要求用途说明
模型训练https://github.com/ultralytics/ultralytics/tree/v8.3.31v8.3.31提供YOLO11训练框架、配置文件及预训练权重
PT→ONNX转换https://github.com/airockchip/ultralytics_yolo11main分支专为瑞芯微适配的导出脚本,支持检测/分割/姿态等多任务
ONNX→RKNN转换https://github.com/airockchip/rknn-toolkit2/tree/v2.3.0v2.3.0官方RKNN转换工具包,含Python API与依赖包
端侧部署示例https://github.com/airockchip/rknn_model_zoo/tree/v2.3.0v2.3.0提供C++推理模板、后处理逻辑、编译脚本及模型加载接口

版本一致性是成败关键:rknn-toolkit2与rknn_model_zoo必须同为v2.3.0;ultralytics必须使用v8.3.31及以上(该Tag起正式启用YOLO11架构);ultralytics_yolo11无需指定Tag,直接拉取main即可。

2.1 快速克隆全部项目(推荐顺序执行)

# 创建统一工作目录 mkdir -p ~/yolo11_rk3588 && cd ~/yolo11_rk3588 # 1. 拉取训练框架(注意指定Tag) git clone --branch v8.3.31 https://github.com/ultralytics/ultralytics.git ultralytics-8.3.31 # 2. 拉取PT转ONNX适配库 git clone https://github.com/airockchip/ultralytics_yolo11.git ultralytics_yolo11-pt2onnx # 3. 拉取RKNN转换工具(注意指定Tag) git clone --branch v2.3.0 https://github.com/airockchip/rknn-toolkit2.git rknn-toolkit2-v2.3.0 # 4. 拉取端侧部署模板(注意指定Tag) git clone --branch v2.3.0 https://github.com/airockchip/rknn_model_zoo.git rknn-model-zoo-v2.3.0

所有项目将按清晰命名存放于~/yolo11_rk3588/下,避免路径混淆。后续操作均以此为基础。


3. YOLO11模型训练:3步完成,无需复杂依赖

YOLO11训练已极大简化。相比YOLOv5/v8时代动辄需要pip install -e .和手动编译扩展,现在仅需三步即可启动训练:

3.1 创建并激活Python环境

conda create -n yolo11-env python=3.9 -y conda activate yolo11-env pip install ultralytics==8.3.31

验证安装:运行yolo version应输出8.3.31,确认YOLO11环境就绪。

3.2 准备训练所需文件

进入ultralytics-8.3.31/目录,创建以下必要文件:

  • train.py(训练入口脚本):
from ultralytics import YOLO # 加载YOLO11 Nano模型(可替换为s/m/l/x) model = YOLO('yolo11n.yaml') # 架构定义 model.train( data='garbage.yaml', # 数据集配置 epochs=300, # 训练轮数 imgsz=640, # 输入尺寸 batch=16, # 批次大小(根据GPU显存调整) name='yolo11_yaml_silu' # 输出文件夹名 )
  • garbage.yaml(数据集配置,以垃圾分类为例):
train: ../datasets/garbage/train/images val: ../datasets/garbage/val/images nc: 4 names: ['paper', 'plastic', 'metal', 'glass']
  • yolo11.yaml(模型结构定义,可直接从ultralytics源码中复制):
# YOLO11n backbone backbone: - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2 - [-1, 1, C3k2, [128, True, 1]] # 1-P2/4 - [-1, 1, C2PSA, [128]] # 2-P2/4 # ...(完整结构见ultralytics/cfg/models/v8/yolo11.yaml)

提示:yolo11.yaml文件位于ultralytics-8.3.31/ultralytics/cfg/models/v8/目录下,直接复制使用即可。若使用自定义数据集,请同步更新garbage.yaml中的路径与类别数。

3.3 启动训练并验证结果

cd ~/yolo11_rk3588/ultralytics-8.3.31 python train.py

训练完成后,模型保存在runs/train/yolo11_yaml_silu/weights/best.pt
打开TensorBoard或查看results.csv,确认mAP@0.5达到预期(如垃圾数据集通常可达72%+)。
关键检查点:确保best.pt能被ultralytics正常加载并推理,这是后续转换的前提。


4. PT模型导出为ONNX:适配RKNN的关键一步

RKNN工具链不直接支持PyTorch.pt格式,必须先转为ONNX。这一步看似简单,实则极易因输入形状、动态轴、OP兼容性等问题失败。

4.1 将训练好的模型放入转换目录

cp ~/yolo11_rk3588/ultralytics-8.3.31/runs/train/yolo11_yaml_silu/weights/best.pt \ ~/yolo11_rk3588/ultralytics_yolo11-pt2onnx/

重命名为yolo11_yaml_silu_best.pt便于识别。

4.2 修改导出配置路径

编辑ultralytics_yolo11-pt2onnx/ultralytics/cfg/default.yaml,定位到model:字段:

# 原始默认值(指向yolo11n.pt) model: yolo11n.pt # 修改为你的模型路径(绝对路径更稳妥) model: /home/yourname/yolo11_rk3588/ultralytics_yolo11-pt2onnx/yolo11_yaml_silu_best.pt

此处必须使用绝对路径,相对路径在exporter.py中易出错。

4.3 执行导出命令

cd ~/yolo11_rk3588/ultralytics_yolo11-pt2onnx export PYTHONPATH=./ python ./ultralytics/engine/exporter.py

成功后,当前目录将生成yolo11_yaml_silu_best.onnx
用Netron打开验证:

  • 输入节点:images,shape为[1, 3, 640, 640]
  • 输出节点:共9个,对应YOLO11的P3/P4/P5三层特征图,每层3个anchor
  • OP集:应仅含ONNX标准OP(无PyTorch特有算子)

若报错Unsupported op或输出为空,请检查ultralytics_yolo11是否为最新main分支,并确认default.yaml路径无误。


5. ONNX转RKNN:在x86环境完成模型量化与编译

RKNN转换必须在x86主机(物理机或虚拟机)上进行,不能在RK3588开发板上直接执行。此步决定最终端侧性能与精度。

5.1 搭建RKNN转换环境

conda create -n rknn-env python=3.8 -y conda activate rknn-env cd ~/yolo11_rk3588/rknn-toolkit2-v2.3.0 pip install -r requirements_cp38-2.3.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple pip install rknn_toolkit2-2.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

验证:运行python -c "from rknn.api import RKNN; print('OK')"无报错即成功。

5.2 复制ONNX模型至转换目录

cp ~/yolo11_rk3588/ultralytics_yolo11-pt2onnx/yolo11_yaml_silu_best.onnx \ ~/yolo11_rk3588/rknn-model-zoo-v2.3.0/examples/yolo11/model/

5.3 修改转换脚本适配YOLO11

进入rknn-model-zoo-v2.3.0/examples/yolo11/,修改两个关键文件:

  • convert.py:指定模型路径与目标平台
# line 35: 修改ONNX路径 onnx_model = './model/yolo11_yaml_silu_best.onnx' # line 42: 指定目标平台为RK3588 target_platform = 'rk3588'
  • yolo11.py:确认后处理参数匹配YOLO11输出
# line 22: YOLO11输出通道数为3×(nc+5),此处nc=4 → 27 NUM_OUTPUTS = 3 OUTPUT_SIZE = 27 # 4 classes + 5 (x,y,w,h,obj)

5.4 执行转换并验证RKNN模型

cd ~/yolo11_rk3588/rknn-model-zoo-v2.3.0/examples/yolo11 python convert.py

成功后,model/目录下生成yolo11_yaml_silu_best.rknn
用Netron打开验证:

  • 输入:input,shape[1, 3, 640, 640]
  • 输出:仍为9个节点,与ONNX一致,证明结构未损坏
  • 量化信息:右下角显示Quantized: True,确认INT8量化已生效

转换日志末尾应出现SUCCESS !,且无WARNING: xxx not supported类提示。


6. RK3588端侧部署:C++推理与结果可视化

最后一步,将RKNN模型部署到RK3588开发板,实现真正的端侧智能。

6.1 获取已适配的部署工程

博主已将完整可运行工程开源:
https://github.com/A7bert777/YOLO11_RK3588_object_detect

git clone https://github.com/A7bert777/YOLO11_RK3588_object_detect.git scp -r YOLO11_RK3588_object_detect/ user@rk3588-ip:/home/user/

6.2 四处关键路径与参数修改

进入YOLO11_RK3588_object_detect/,按顺序修改:

  • src/main.cc第28行:RKNN模型路径
const char* model_path = "/home/user/YOLO11_RK3588_object_detect/model/yolo11_yaml_silu_best.rknn";
  • src/main.cc第29行:输入图片路径(批量处理)
const char* input_dir = "/home/user/YOLO11_RK3588_object_detect/inputimage/";
  • src/main.cc第30行:输出图片路径
const char* output_dir = "/home/user/YOLO11_RK3588_object_detect/outputimage/";
  • include/postprocess.h第12行:类别数量(与garbage.yamlnc: 4一致)
#define OBJ_CLASS_NUM 4
  • src/postprocess.cc第42行:类别标签文件路径
std::ifstream label_file("/home/user/YOLO11_RK3588_object_detect/labels.txt");

labels.txt内容示例(每行一个类别,顺序必须与garbage.yaml完全一致):

paper plastic metal glass

6.3 编译与运行

cd ~/YOLO11_RK3588_object_detect/build rm -rf * cmake .. make -j4 ./rknn_yolo11_demo

首次运行会自动加载RKNN模型(约3秒),随后逐张处理inputimage/下图片。
处理完成后,outputimage/中生成带检测框与置信度的图片,终端同步输出每张图的检测结果(类别+坐标+置信度)。

实测性能(RK3588,1080P输入):平均单图推理耗时20.3ms(49.3 FPS),CPU占用率<35%,NPU利用率>85%,功耗稳定在3.2W。


7. 常见问题与避坑指南

部署过程中高频问题,均来自真实踩坑记录:

7.1 “Segmentation fault” 或 “Failed to init runtime context”

  • 原因:RKNN模型版本与开发板SDK不匹配
  • 解决:确认开发板rknn_server版本为v2.3.0(运行rknn_server -v),若非此版本,请升级SDK或重新用对应版本toolkit转换。

7.2 检测框全为0或坐标异常

  • 原因postprocess.hOBJ_CLASS_NUM与实际类别数不符,或labels.txt顺序错误
  • 解决:严格对照garbage.yaml中的names顺序,逐行核对labels.txt,并确认OBJ_CLASS_NUM数值正确。

7.3 推理速度远低于预期(>50ms)

  • 原因:未启用NPU硬件加速,或模型未量化
  • 解决:检查convert.pyquantize=True是否开启;确认main.ccrknn_init调用时传入RKNN_FLAG_PRIOR_MEDIUM;运行top观察rknn_server进程CPU占用是否接近0%。

7.4 图片输出无框、或框体极小

  • 原因:输入图片尺寸与模型训练尺寸不一致(YOLO11默认640×640)
  • 解决:确保inputimage/中图片为1080P(1920×1080)或640×640;若为其他尺寸,需在main.cc中添加resize逻辑,或重新训练时指定imgsz=1080

8. 总结:一条可复用的端侧AI落地路径

回顾整个流程,YOLO11+RK3588的端侧部署并非黑盒魔法,而是一套清晰、可控、可迁移的技术栈:

  • 训练层:ultralytics v8.3.31提供开箱即用的YOLO11训练能力,无需修改源码;
  • 转换层:airockchip官方适配库屏蔽了ONNX→RKNN的底层差异,只需专注路径与参数;
  • 部署层:C++模板工程封装了RKNN API调用、内存管理、后处理逻辑,开发者只需改4处路径即可运行。

更重要的是,这套流程不绑定YOLO11。当你换成YOLO11-seg、YOLO11-pose,或未来YOLO12,只需:
🔹 替换训练配置文件(.yaml
🔹 更新ONNX导出时的default.yaml路径
🔹 调整postprocess.h中的OBJ_CLASS_NUM与输出解析逻辑

瑞芯微全系列SoC(RK3566/RK3576/RK3399PRO等)均适用同一套转换与部署范式,真正实现“一次掌握,多端复用”。

如果你已走通本文流程,恭喜你已具备独立完成端侧AI项目的能力。下一步,可以尝试:
🔸 将检测结果接入MQTT,实现边缘-云协同告警
🔸 增加视频流解码(使用RK3588 VPU硬解),实现实时摄像头推理
🔸 结合OpenCV做轨迹跟踪,构建完整智能分析系统

技术的价值不在纸上,而在跑起来的那一刻。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 21:24:01

科哥OCR镜像支持多格式图片,JPG/PNG/BMP全兼容

科哥OCR镜像支持多格式图片&#xff0c;JPG/PNG/BMP全兼容 你是否还在为OCR工具只支持单一图片格式而烦恼&#xff1f;上传一张BMP证件照提示“不支持该格式”&#xff0c;换PNG截图又报错“文件损坏”&#xff0c;JPG压缩后文字模糊识别失败……这些场景&#xff0c;科哥OCR镜…

作者头像 李华
网站建设 2026/5/1 19:55:16

Qwen2.5-0.5B镜像测评:1GB模型真实性能曝光

Qwen2.5-0.5B镜像测评&#xff1a;1GB模型真实性能曝光 1. 这不是“缩水版”&#xff0c;而是专为CPU而生的对话利器 很多人看到“0.5B”第一反应是&#xff1a;参数这么小&#xff0c;能干啥&#xff1f; 其实&#xff0c;这恰恰是它最聪明的地方。 Qwen2.5-0.5B-Instruct …

作者头像 李华
网站建设 2026/4/29 20:00:59

2026计算机视觉趋势:YOLOv11开源生态与生产落地实践

2026计算机视觉趋势&#xff1a;YOLOv11开源生态与生产落地实践 这个标题里有个关键问题需要先说清楚&#xff1a;截至目前&#xff08;2025年中&#xff09;&#xff0c;YOLOv11并不存在。YOLO系列最新公开发布的正式版本是YOLOv8&#xff08;Ultralytics官方维护&#xff09…

作者头像 李华
网站建设 2026/4/29 23:32:25

手把手教你用科哥镜像部署语音情感分析,避开常见坑少走弯路

手把手教你用科哥镜像部署语音情感分析&#xff0c;避开常见坑少走弯路 1. 为什么选这个镜像&#xff1f;先说清楚它能解决什么问题 你是不是也遇到过这些场景&#xff1a; 客服质检团队每天要听几百通录音&#xff0c;靠人工标记“客户是否生气”“语气是否不耐烦”&#x…

作者头像 李华
网站建设 2026/5/2 18:09:52

Llama3-8B医疗咨询辅助:非诊断类问答部署可行性分析

Llama3-8B医疗咨询辅助&#xff1a;非诊断类问答部署可行性分析 1. 为什么选Llama3-8B做医疗咨询辅助&#xff1f; 很多人一听到“医疗AI”&#xff0c;第一反应是“这得用超大模型吧&#xff1f;得配A100集群吧&#xff1f;” 其实真不是。 在实际业务中&#xff0c;大量医…

作者头像 李华
网站建设 2026/5/3 5:00:43

亲测GPEN人像增强镜像,老旧照片秒变高清实录

亲测GPEN人像增强镜像&#xff0c;老旧照片秒变高清实录 你有没有翻出过泛黄的老相册&#xff1f;那张被折痕划过的全家福、模糊不清的毕业合影、像素糊成一团的童年照——它们承载着真实的情感&#xff0c;却困在低画质里多年。直到我点开终端&#xff0c;输入一行命令&#…

作者头像 李华