☰
RDK X5部署YOLO目标检测全流程:从PyTorch到BPU的实战指南
2026/10/21 14:00:39 网站建设 项目流程

简介:面向RDK X5平台的YOLOv5部署教程源码包,专为刚接触模型落地的新手开发者打造。资源以HTML文档为入口,附带Git忽略配置与编辑器配置,共3个文件、仅6KB,体量虽小但信息密度高,适合与作者撰写的部署教程配合使用,也便于在本地快速翻阅和修改。教程内容覆盖从WSL2系统安装、Ubuntu环境配置、YOLOv5源码获取、Python虚拟环境创建,到数据集训练、ONNX模型导出、Docker镜像拉取挂载与模型量化的完整链路,并整理了常见踩坑点、避坑指南及实用第三方链接,包括官方文档与社区方案。目前已有587人学习,凭借紧凑的配置样例,读者能减少在环境适配和依赖问题上的试错,更快在RDK X5上完成YOLOv5目标检测部署。对正在做智能消防机器人等嵌入式视觉项目,或准备参加地瓜创客孵化营的开发者而言,这是一份高性价比的实操参考。 RDK X5这块板子拿到手之后,我第一个想跑的项目就是YOLO目标检测。在PC上用PyTorch推理一个YOLO模型很简单,但部署到RDK X5这种嵌入式平台上,要过模型导出、量化校准、BPU编译、板端推理和后处理这一整条链路,每一环都能踩出不少坑。这篇文章从零到一讲清楚RDK X5部署YOLO的完整流程,并给出可直接复用的源码,适合手里有RDK X5、想把YOLO检测真正跑起来的朋友。

有人问我为什么不直接在PC上跑,非要在开发板上折腾。道理很简单:做机器人、做边缘设备,算力必须在现场,不能把摄像头画面传回电脑再回来。RDK X5就是专门为这种场景设计的,BPU加速单元专门跑神经网络,拿它来跑YOLO目标检测是这套板子的核心玩法之一。

1. 为什么选择在RDK X5上部署YOLO

1.1 RDK X5的底子和BPU能力

RDK X5用的是地平线旭日X5 SoC,CPU部分是8核Cortex-A55,主频不低,日常跑Linux和ROS没压力。关键是它有一颗BPU,提供10 TOPS左右的INT8算力,目标检测这种密集计算扔到BPU上,CPU就空闲下来做业务逻辑和传感器处理。

我之前在树莓派4B上试过纯CPU推理YOLOv8s,640x640输入大概只有一两帧,基本没法用。同一份模型转到RDK X5上,BPU调度得当的话二十多帧没问题,差别非常大。对于做机器人视觉、安防边缘盒子和工业质检的朋友来说,这个性能水平足够用。

1.2 板端部署和PC推理是两条完全不同的路线

在PC上推理,PyTorch直接加载权重就行,模型内部什么算子都能自适应。但BPU不是万能的,它只认有限的算子集合和量化数据格式。所以嵌入式部署多了一道“模型转换”工序:先把PyTorch模型导出成ONNX,再用工具链把ONNX转换成BPU能执行的HBM文件,最后板端用SDK加载HBM进行推理。

这个流程比PC推理麻烦不少,但搞定之后收益也很明显:模型跑在独立算力单元上,CPU负载低,功耗可控,整体稳定性高。下面我就按照这条链路逐步展开。

2. 部署前的环境与工具链准备

2.1 板端系统的基础配置

RDK X5到手后先刷官方Ubuntu镜像,步骤官网有,这里不啰嗦。刷完后建议直接用SSH连接,后续命令都是在终端里执行。

板端的Python推理库需要单独装,我在实际环境里用下面几条命令:

sudo apt update sudo apt install -y python3-pip pip3 install hobot-dnn opencv-python numpy

hobot-dnn是地瓜官方的Python推理库,里面提供了pyeasy_dnn接口,简单封装了BPU加载、输入输出管理。装好之后可以用一行命令验证环境是否正常:

python3 -c "from hobot_dnn import pyeasy_dnn; print('ok')"

这一步卡住的朋友先检查镜像版本,官方不同版本预装的Python环境差异挺大,别在装库上浪费太多时间。

2.2 PC上的模型转换工具链

模型转换必须在PC上完成,RDK X5板端不做这件事。地瓜提供了一套OE工具链,通常是Docker镜像,拉下来用就行。官方文档里会给具体镜像地址,这里重点说工作目录的组织方式。

准备一个工作目录,把ONNX模型、校准图片和YAML配置文件都放进去,然后挂载到容器里执行转换。校准图片不需要人工标注,但尽量贴近真实业务场景。我一般准备150到300张,覆盖不同角度、距离和光线,内容太单一会影响量化效果。

注意:镜像版本不同,工具链的YAML字段也会有差异。拿到新环境先跑一次官方示例,确认字段没问题再转自己的模型。

3. 把YOLOv8 ONNX模型转换成RDK X5可运行的HBM

3.1 导出ONNX并检查模型结构

我用Ultralytics官方的YOLOv8s做演示。先导出ONNX:

pip install ultralytics onnx onnxsim yolo export model=yolov8s.pt format=onnx opset=11

导出后建议用Netron打开看一眼结构,确认输出节点是什么样子。YOLOv8的head通常是两个输出分支,一个回归分支、一个分类分支。如果导出版本带了额外后处理节点,先去掉,否则后续工具链解析容易出问题。

工具链对高版本opset的算子支持参差不齐,我习惯统一用opset=11,遇到不支持的算子再单独处理。

3.2 编写量化配置文件YAML

这是模型转换的核心环节。我直接给出一个可用的模板:

model_parameters: onnx_model: yolov8s.onnx march: bayes input_shape: [1, 3, 640, 640] input_type: rgb input_layout: nchw norm_type: no_preprocess mean: [0, 0, 0] scale: [0.003921568627451, 0.003921568627451, 0.003921568627451] calibration_parameters: calibration_type: default calibration_data: ./calib_data calibration_batch_size: 4 max_calibration_size: 64 compiler_parameters: optimize_level: O3 debug: false core_num: 2

字段作用一定要搞清楚:

  • march:BPU架构名。RDK X5大多数工具链版本叫bayes,也有叫x5的,具体看你安装的版本,填错会直接报错。
  • input_shape:必须是[1,3,640,640]这种写法,与模型导出时一致。
  • norm_type:no_preprocess表示预处理不做归一化,归一化逻辑全放在板端代码里,这样更容易排查问题。
  • scale: 如果模型本身没有归一化,也可以把归一化交给工具链做,把norm_type改成preprocess并设置mean和scale。两个方案都能用,关键是板端预处理必须和这里保持一致。

3.3 执行转换并读懂日志

配置写好后,进入工具链容器执行:

hb_mapper makertbin --config yolov8s_config.yaml --model-type onnx

转换日志一定要仔细看,重点看算子分配情况。如果绝大部分算子都落到BPU,说明转换很顺利;如果出现大量CPU算子,后续推理速度会明显下降,这时候需要回头检查是不是用了不支持的算子或结构。

转换完成后会生成一个.hbm文件,复制到RDK X5上备用。这个文件就是模型在BPU上的最终形态,包含了权重、算子和量化信息。

4. 板端推理源码实现

4.1 加载模型并查看输入属性

在RDK X5上新建一个Python文件,先把模型加载进来:

import cv2 import numpy as np from hobot_dnn import pyeasy <p> <a href="https://download.csdn.net/download/lemon/92487207" style="color:#ec7500;font-size:14px;"> 本文还有配套的精品资源,点击获取 </a> <img alt="menu-r.4af5f7ec.gif" src="https://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif" style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;"> </p>

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询