从零到一:在RDK X5上部署自定义YOLOv5模型的避坑指南

YOLOv11,地瓜RDK X5开发板,TROS端到端140FPS 一句话讲明白:RDK X5的BPU完全支持YOLOv11引入的TransFormer结构,同时后处理直接复用YOLOv8,保持5ms的快速水平。 阅读详情

1. 环境准备:从Windows到WSL2的平滑过渡

如果你和我一样,主要的工作环境是Windows,那么想在RDK X5上玩转YOLOv5,第一步就是搭建一个Linux开发环境。别怕,这听起来复杂,但跟着我的步骤走,绝对能避开我当初踩过的那些坑。最主流、最方便的方法就是使用Windows Subsystem for Linux 2,也就是WSL2。它本质上是在Windows里跑一个完整的Linux内核,让你能无缝使用Linux的命令行工具,同时又不用离开你熟悉的Windows桌面。

安装WSL2,最权威的指南永远是微软官方的文档。你直接在搜索引擎里搜“安装 WSL Microsoft Learn”,第一个结果就是。官方教程步骤清晰,跟着点下一步就行。但这里我要强调一个新手最容易忽略,也最致命的问题:C盘空间。WSL2默认会把所有的Linux系统文件、你后续安装的软件、下载的数据集、训练的模型,统统放在C盘的用户目录下。想象一下,你训练一个YOLOv5模型,动辄几个G的缓存和中间文件,C盘分分钟飘红。所以,在安装Ubuntu之前,甚至在你打开那个安装命令之前,先看看你的C盘还剩多少空间。我个人建议,至少预留50GB的可用空间,否则后续工作会非常掣肘。

安装完WSL2后,我们去Microsoft Store搜索并安装Ubuntu。这里有个小分歧:地平线的OE工具链官方推荐Ubuntu 20.04,但Store里最新的是22.04。实测下来,Ubuntu 22.04完全可以正常运行OE工具链,不必纠结。而且,对于想进一步探索机器人领域的同学来说,22.04是ROS2 Humble的主流支持系统,像鱼香ROS、古月居等很多优质教程都基于此。所以,直接装22.04,一步到位,为以后学习ROS2也铺好了路。装好系统,第一件事不是急着敲命令,而是迁移WSL2的安装位置。这是拯救C盘的关键操作。你需要将Ubuntu的虚拟磁盘文件移动到其他盘符(比如D盘或E盘)。网上有很多教程,核心是使用wsl --export和wsl --import命令。完成这个操作后,你再怎么折腾Linux,也不会影响C盘了。

接下来,我强烈建议你配置VS Code的WSL扩展。这能让你的开发体验提升好几个档次。你可以在Windows的VS Code里直接打开WSL子系统中的文件夹,使用Windows的图形界面来编辑Linux下的代码文件,终端也直接集成了WSL的bash,非常方便。官方同样有详细的“开始通过 WSL 使用 VS Code”教程。完成这些,你的基础战场就搭建好了。这时候,你可以打开Ubuntu终端,先更新一下软件包列表:sudo apt update && sudo apt upgrade -y。然后,我们将进入下一个关键环节:配置深度学习环境。

2. 模型训练基石:YOLOv5环境与数据准备

环境搭好了,我们得把YOLOv5请进来。这里我走了不少弯路,总结下来就是:版本对齐和环境隔离是成功的关键。首先获取YOLOv5的源码。我推荐直接参考地平线RDK的Model Zoo仓库,里面有针对RDK X5优化过的YOLOv5示例。你可以通过GitHub访问D-Robotics的rdk_model_zoo项目。找到demos/detect/YOLOv5目录,里面的README文件就是我们的行动纲领。YOLOv5版本迭代很快,Model Zoo里可能会注明测试通过的版本,比如v7.0。我们就用这个稳定的版本。克隆仓库后,记得用git checkout tags/v7.0切换到指定版本,避免用最新的main分支可能带来的兼容性问题。

拿到源码,先别急着运行。我们需要一个干净的、独立的Python环境来管理依赖。Anaconda或Miniconda是首选。在WSL2的Ubuntu终端里,下载并安装Miniconda(更轻量)。安装完成后,关闭终端重新打开,或者执行source ~/.bashrc,让conda命令生效。这里我遇到一个坑:有时候新开的终端输入conda会提示“command not found”。别慌,这不是安装失败了,只是环境变量没加载。最简单粗暴的解决办法就是把当前终端关掉,重新开一个,百分之九十能解决。如果还不行,就手动执行一下source ~/miniconda3/etc/profile.d/conda.sh。

环境有了,我们创建一个专属于这个项目的conda虚拟环境:conda create -n yolov5_rdk python=3.8。为什么是Python 3.8?因为这是很多深度学习框架和工具链比较兼容的版本,过于新的版本反而容易出幺蛾子。激活环境:conda activate yolov5_rdk。然后,根据YOLOv5源码目录下的requirements.txt文件安装依赖。注意,这里可能因为网络问题导致某些包(比如torch)安装慢或失败。有两个建议:一是使用清华、阿里等国内镜像源;二是对于PyTorch,可以去官网根据你的环境(虽然我们是在WSL2里用CPU训练,但可以先按CPU版本安装)生成安装命令,通常比pip直接装requirements.txt更快更稳。

环境搞定,接下来是数据的准备。如果你想识别自定义的物体,比如我们项目里的“火苗”,就需要自己标注数据。这里我安利一个比原教程提到的更好用的工具:LabelImg。安装极其简单,在激活的虚拟环境下,pip install labelimg即可。启动它,在终端输入labelimg就会弹出图形界面。使用方法很直观:1. 打开存放图片的目录;2. 设置标注文件(.txt)的输出目录;3. 将标注格式改为YOLO(点击界面上的PascalVOC切换成YOLO)。然后就可以在图片上框选目标,并输入类别标签了。标注是个体力活,但质量直接决定模型上限。标注完成后,你需要按照YOLOv5要求的目录结构来组织数据,通常包含images/train, images/val, labels/train, labels/val这几个文件夹,并且确保图片和标注文件的名字一一对应。最后,创建一个data.yaml配置文件,指明你的类别数量、名称以及上述文件夹的路径。这个文件是后续训练和模型转换的指挥棒,路径一定要写对,否则训练时会报一堆找不到文件的错误。

3. 从训练到转换:产出可用的ONNX模型

数据准备好了,激动人心的训练环节开始。在YOLOv5目录下,训练命令看起来很简单:python train.py --data ./data/my_fire.yaml --cfg ./models/yolov5s.yaml --weights yolov5s.pt --epochs 100 --batch-size 16。这里有几个参数需要你根据实际情况调整:--data指向你刚才创建的data.yaml;--cfg选择模型结构,比如yolov5s.yaml代表小模型,训练快,适合在资源有限的设备上部署;--weights加载预训练权重,能从yolov5s.pt开始训练,这是非常重要的,能极大加速收敛并提升效果;--epochs是训练轮数;--batch-size是批大小,如果你的GPU内存小(或者在WSL2里只用CPU),需要调小这个值,比如设为4或8。

训练过程中,终端会打印损失值、精度等指标。YOLOv5还会自动在runs/train/exp目录下生成可视化结果,包括训练曲线、验证集上的预测样例等。你可以随时查看这些图片来监控训练状态。训练完成后,最好的模型权重会保存在runs/train/exp/weights/best.pt。请注意:训练时如果中断了,你可以通过--resume参数接上上次的权重继续训练,非常人性化。

模型训练好,我们得到了一个.pt文件,但这是PyTorch的格式,RDK X5的OE工具链不认识它。我们需要一个中间桥梁:ONNX。这是将模型从训练框架(如PyTorch)导出到推理引擎(如地平线BPU)的标准格式。导出ONNX,参考Model Zoo的说明是关键。你需要使用YOLOv5项目里的export.py脚本。但直接运行通常不行,因为原始的导出脚本生成的ONNX模型可能包含一些RDK X5不支持的算子。所以,我们需要对export.py或者更常见的,对YOLOv5模型定义文件models/yolo.py进行一些修改。这些修改主要是为了适配地平线芯片的算子支持列表,比如将某些操作替换为等效的、被支持的操作组合。Model Zoo的README里通常会给出需要修改的代码片段,你仔细对照,像做手术一样把代码替换进去即可。

修改完成后,运行导出命令:python export.py --weights ./runs/train/exp/weights/best.pt --include onnx --opset 11。这里--opset指定ONNX算子集版本,一般用11或12比较通用。如果一切顺利,你会在权重文件同级目录下得到一个.onnx文件。强烈建议,在进入下一步之前,用ONNX Runtime或Netron这样的工具简单验证一下这个ONNX模型是否能被正确加载和进行形状推断,确保导出过程没有产生错误。这个.onnx文件,就是我们交给地平线工具链的“原材料”。

4. 地平线工具链实战:模型量化与上板

这是整个流程中最具“地平线特色”,也最容易出错的一步。我们需要在Docker容器里使用地平线的Open Explorer(OE)工具链,把ONNX模型“编译”成RDK X5能直接运行的.bin文件。这个过程叫模型量化。首先,我们需要Docker环境。在Windows上,去Docker官网下载安装Docker Desktop。安装时,务必在设置里找到“Resources” -> “Advanced”,将磁盘镜像的存储位置改到一个非C盘的大容量分区!这是我血泪的教训,编译模型时产生的中间文件巨大,默认C盘路径分分钟撑爆你的系统盘。

安装好Docker Desktop后,确保它在运行,并且设置里勾选了“Use the WSL 2 based engine”。这样,Docker就能和WSL2完美协作了。接下来,我们需要地平线提供的OE工具链Docker镜像。你可以从地平线开发者社区或FTP服务器获取。镜像文件很大(几个GB),建议直接用wget命令在WSL2的终端里下载CPU版本(对于模型转换,CPU版本足够,也更简单)。下载完成后,使用docker load命令加载镜像。然后,运行一个至关重要的命令来启动容器,并将本地目录挂载到容器内,方便文件交换:

docker run -it --rm \
  -v /home/你的用户名/OE_workspace:/open_explorer \
  -v /home/你的用户名/model_data:/data/horizon_x5/data \
  openexplorer/ai_toolchain_ubuntu_20_x5_cpu:v1.2.6

请把/home/你的用户名/OE_workspace和/home/你的用户名/model_data替换成你WSL2系统里的真实路径。这个命令的意思是,启动一个交互式容器,将本地的OE_workspace文件夹映射到容器的/open_explorer(工具链工作目录),将model_data映射到容器的/data目录(存放模型和数据)。之前导出的ONNX文件,现在就把它复制到本地的model_data文件夹里,这样在容器里就能访问到了。

进入容器后,首先cd /data,确认你的ONNX文件在里面。第一步,使用hb_mapper checker工具检查模型兼容性:hb_mapper checker --model-type onnx --march bayes-e --model your_model.onnx。这个命令会分析ONNX模型,列出所有算子,并告诉你哪些是支持的,哪些不支持。如果有不支持的算子,你就得返回上一步,修改模型结构或导出方式。如果检查通过,就可以准备量化了。

量化需要一个配置文件(.yaml)。地平线工具链提供了一些样例,在/open_explorer/ddk/samples/ai_toolchain/horizon_model_convert_sample/04_detection/03_yolov5s_onnx这样的路径下可以找到。你需要根据你的模型修改这个yaml文件,核心是以下几项:

  • model_name: 你的模型名字。
  • onnx_model: ONNX文件的路径。
  • output_model_file_prefix: 输出文件前缀。
  • input_parameters下的input_name、input_shape:必须和你的模型输入节点名、形状完全一致。
  • calibration_data下的cal_data_dir: 指向一个存放校准数据集的目录。这是量化的关键!你需要准备几十到几百张训练集中的图片(不需要标注),放在一个文件夹里,工具链会通过这些图片来计算量化参数。图片格式和预处理方式(如BGR/RGB,归一化)必须在yaml文件里正确配置。

配置文件准备好后,执行量化编译命令:hb_mapper makertbin --model-type onnx --config your_config.yaml。这个过程会消耗一些时间,如果一切正常,最终会生成一个.bin文件,这就是能在RDK X5上加载运行的模型文件!如果报错,最常见的两个原因是:1. yaml配置文件里路径或参数写错了;2. 校准数据没准备好,或者预处理配置不对。你需要仔细核对错误信息,回头检查。

5. 上板部署与效果验证

拿到珍贵的.bin文件,万里长征就走完了九十九步。最后一步是把它放到RDK X5上跑起来。你需要通过SSH或者SCP将.bin文件传输到RDK X5的某个目录下。同时,地平线提供了模型推理的示例代码(C++或Python),通常在RDK的系统镜像里或者开发者社区可以找到。你需要做的是,参照示例代码,编写你自己的推理程序。这个过程主要涉及:

  1. 加载模型:使用地平线提供的运行时库(如hobot_dnn)加载.bin文件。
  2. 准备输入数据:从摄像头(如USB摄像头或MIPI摄像头)读取一帧图像,按照模型要求进行预处理(缩放、裁剪、颜色空间转换、归一化等),这个预处理必须和之前训练、量化时的预处理方式严格一致。
  3. 执行推理:将处理好的图像数据送入模型。
  4. 解析输出:模型输出的是一组数据,你需要根据YOLOv5的后处理逻辑(在示例代码中通常有体现),将这些数据解码成边界框坐标、类别置信度和类别索引。
  5. 绘制结果:将检测框和标签画在图像上,并通过HDMI或者网络推流显示出来。

这里最大的坑可能是前后处理不对齐。比如训练时图片归一化是/255.0,而推理代码里忘了除;或者训练时输入是640x640,而摄像头来的图像是1920x1080,你却没有正确地resize和padding。这些都会导致检测结果异常甚至崩溃。我的建议是,先用一组静态图片(最好是校准集里的)在RDK X5上测试,确保预处理和模型输出解析正确,再接入实时视频流。

当你在RDK X5的屏幕上看到实时视频里,火焰(或你的目标物体)被准确地框选出来时,那种成就感是无与伦比的。整个过程从零开始,涉及了操作系统、开发环境、深度学习框架、模型转换、嵌入式部署多个层面,确实充满挑战。但只要你耐心地、一步一步地走,严格对照文档和教程,注意我上面提到的每一个坑点,就一定能成功。这套流程不仅适用于YOLOv5和火源识别,你完全可以替换成其他需要识别的物体,比如安全帽、行人、车辆等,方法论是完全相通的。最重要的是动手去做,在解决问题的过程中,你的收获会远远超出一份简单的部署教程。

地平线RDK-X5 部署yolov5算法 1. 芯片介绍2. 部署工具链3. 流程4. 对比5.总结。 阅读详情

相关推荐

RDK X5零基础实战指南:从硬件搭建到YOLOv5模型部署全流程

本文提供RDK X5零基础实战指南,涵盖硬件搭建、系统烧录、网络配置到YOLOv5模型部署全流程。详细讲解如何通过地瓜机器人官方镜像快速上手,实现物体识别应用,并解决常见问题,助力开发者高效完成边缘AI项目部署。

honey的博客 1122

rdkx5部署yolov11

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的约瑟夫-雷德蒙(Joseph Redmon)和阿里-法哈迪(Ali Farhadi)开发。YOLO 于 2015 年推出,因其高速度和高精确度而迅速受到欢迎。2016 年发布的YOLOv2 通过纳入批量归一化、锚框和维度集群改进了原始模型。2018 年推出的YOLOv3 使用更高效的骨干网络、多锚和空间金字塔池进一步增强了模型的性能。

A12220618的博客 3613

YOLO12在RDK X5上的部署,体验纯视觉Transformer的YOLO目标检测!

YOLOv12构建以注意力为核心的YOLO框架,通过创新方法和架构改进,打破CNN模型在YOLO系列中的主导地位,实现具有快速推理速度和更高检测精度的实时目标检测。

吴超的博客 3373

[RDK X5] 性能翻倍!告别繁琐!3行代码极速搞定YoloV8项目嵌入

本文介绍了YOLOv8在RDK X5平台上的优化部署方案,针对高分辨率图像推理延迟问题,提出多线程优化方法。通过实验对比单线程与多线程的预处理、推理和后处理耗时,发现多线程能显著提升性能,尤其是处理高分辨率图像时,完整流程耗时从380ms降至153ms。文章还提供了C++和Python的极简部署方案,三行代码即可完成模型部署,大幅降低开发门槛。项目基于OpenWanderary框架实现,有效解决了实际落地中的延迟问题和语言性能瓶颈。

小玺大大 2095

地平线RDK-X5实战:从零部署YOLOv5模型的完整避坑指南(含GPS模块集成)

本文详细介绍了在地平线RDK-X5开发板上从零部署YOLOv5目标检测模型的完整流程,包括开发环境搭建、Docker容器配置、模型转换与优化,以及GPS模块的集成与调试。特别针对实际开发中的常见问题提供了解决方案,帮助开发者高效实现边缘计算与定位功能的融合应用。

ll5678的博客 745

地平线RDK-X5实战:YOLOv11模型转ONNX踩坑记录(附完整代码)

本文详细记录了在地平线RDK-X5开发板上将YOLOv11模型转换为ONNX格式的全流程,包括环境配置、模型结构改造、ONNX导出及地平线工具链实战。特别针对转换过程中的常见问题和优化技巧提供了实用解决方案,帮助开发者高效完成边缘计算部署。

qsc9012345的博客 850

RDKx5上部署yolov10和tros部署

玩RDKx5碰到了不少坑……故有此贴记录一下。本帖的路线为,yolo训练(大佬的博客代劳) --> yolo转onnx及校准数据集准备 --> docker中模型格式转换 --> 模型部署上板 --> tros部署yolo

LTOCY的博客 3908

地平线RDK X5实战:YOLOv5模型从训练到部署的完整转换指南

本文提供了在地平线RDK X5开发板上部署YOLOv5模型的完整实战指南。详细介绍了从环境准备、模型训练与PyTorch(.pt)文件导出、ONNX模型验证优化,到最终转换为地平线专用.bin模型文件并进行板端推理测试的全流程。重点解析了模型转换配置、量化校准及部署调试中的关键步骤与常见问题,帮助开发者高效完成AI模型在边缘设备的落地应用。

wdx012345的博客 958

地瓜派RDK X5部署YOLOv11n完整实战:从7 FPS到47 FPS的性能优化之路

本文详细记录了在RDKX5开发板上部署YOLOv11n模型的全过程。初始部署遭遇性能瓶颈(仅7.67FPS),通过分析发现Softmax算子被分配到CPU运行是主要问题。经过环境搭建、模型优化(修改输出头、int16量化Softmax)、性能调优等步骤,最终实现47FPS的实时检测性能。关键突破包括:1)通过node_info配置将Softmax指定到BPU运行;2)修改Ultralytics输出头为6个tensor;3)使用NV12格式输入减少预处理耗时。文章提供了完整的代码实现、量化配置和故障排查指南,

hueuyang的博客 2408

地平线RDK-X5实战:YOLOv11模型转换与部署全流程解析

本文详细解析了如何将最新的YOLOv11模型部署到地平线RDK-X5边缘计算开发板的全过程。核心内容包括模型结构修改、地平线工具链的模型转换步骤,以及最终的板端部署与推理测试,为开发者提供了从零到一实现高性能边缘AI目标检测的实战指南。

weixin_29038345的博客 1167

地平线RDK X5 部署YOLOv5 pt文件转onnx转bin

2.验证onnx,没有任何报错就是通过了,注意opset的版本,我的pt转onnx代码。新建yaml文件,把calibration_type改成skip就不用数据集了。启动成功并进入挂载的data,把自己的onnx文件拖入挂载的数据集文件。b.下载OE包,要对应版本,我下载的1.2.6。1.环境安装,地平线官方拉取docker,下载完成后在文件目录下安装docker。启动docker 参考官方提供。我的为 替换自己的文件地址即可。a.下载docker镜像。我采用本地安装的方法,3.onnx转换bin。

m0_52475939的博客 2289

RDK X5部署YOLO算法教程(面向小白) --RDK X5 第一期地瓜创客孵化营总结

RDK X5部署YOLO算法教程(面向小白)

lllllllmmz的博客 3095

清华YOLOE在RDK X5上的部署, 可实例分割超四千种目标!

YOLOE(实时看见一切)是零样本、可提示的 YOLO 模型的一项新进展,专为开放词汇检测和分割设计。与以往只能局限于固定类别的 YOLO 模型不同,YOLOE 使用文本、图像或内部词汇提示,能够实现实时检测任何对象类别。YOLOE 基于 YOLOv10 构建,并受到 YOLO-World 的启发,在几乎不影响速度和精度的情况下实现了最先进的零样本性能。清华的论文: https://arxiv.org/pdf/2503.07465v1。

吴超的博客 1991

地平线 RDK X5 部署 YOLOv5 保姆级教程:从 .pt 到 .bin 的完整避坑指南

本文详细介绍了如何在地平线RDK X5开发板上部署YOLOv5模型的全过程。主要内容包括:1)在Windows环境下将训练好的YOLOv5模型(.pt)转换为ONNX格式,重点解决了Opset版本限制等常见问题;2)使用Docker配置官方工具链环境,通过交叉编译将ONNX模型转换为BPU专用的.bin格式;3)提供了完整的避坑指南,包括路径处理、量化校准等关键步骤的解决方案。该教程特别适合参加智能车比赛或需要在地平线平台上实现高性能目标检测的开发者,可帮助用户充分发挥RDK X5的10 TOPS算力优势,

x2016307的博客 1686

地平线RDK X5实战:YOLOv5模型从训练到部署全流程(含onnx/bin转换避坑指南)

本文详细介绍了在地平线RDK X5开发套件上实现YOLOv5模型从训练到部署的全流程,包括pt模型转换、ONNX导出及bin文件生成的关键步骤与避坑指南。通过实战案例分享环境配置、模型优化、转换技巧和性能调优等核心内容,帮助开发者高效完成AI模型在边缘计算设备上的部署。

weixin_33670786的博客 475

RoboMaster- RDK X5能量机关实现案例(一)识别

在RoboMaster的25赛季,我主要负责了能量机关的视觉方案开发,目前整体算法已经搭建完成,实际方案上我使用的上位机是Jetson Orin NX 16GB,其具备100TOPS的算力,在经过TensorRT优化部署后,实现了1080P原始图像从识别到PNP解算再到得到预测结果的每帧耗时仅为2.5ms,由于算法部分已经完成,且正值寒假,我准备利用手头的RDK X5进行能量机关的识别的算法验证,试试RDK X5作为RoboMaster的上位机可不可行

xiongqi123123的博客 1925

在RDK X5 上基于yolov8的魔方还原机器人

先讲一下我做这个项目的想法吧,这是我一年前自己从零开发的项目,整个项目是我和朋友两个人做的,我主要做的是嵌入式、下位机的一些东西,包括机器人的结构设计、光源布置、底层硬件选型、嵌入式的一些工作。整个系统的上位机全部是由我朋友写的,上位机主要是用python写的,主要是用opencv进行识别,其中也用到了一些仿射变换算法等。但是最终由于个人以及赛区原因,很遗憾最终没有进入国赛。为了弥补之前的遗憾,也为了恶补一下软件方面知识,刚好遇到了地瓜机器人的项目,所以我把整个项目重启了。

m0_55810156的博客 3344

Verilog仿真时读取bin文件模拟输入数据流,将输出数据流写入bin文件

需要关注的是,一般会省略文件起始地址和读取长度,那么mem为多大,就会从文件中读取多大的数据出来填充mem。如果只需要读取一次文件,那么代码到此就结束了,但是如果还需要每一帧都读取该文件转换为数据流,则在循环里判断新的一帧信号是否到来,在新的一帧再次打开一次文件,从头开始读取数据。

qq_41137205的博客 2772
上一篇: 自动驾驶小白必看:用Python+OpenCV实现摄像头内参标定的完整流程(附代码)
下一篇: 海康摄像机萤石云不在线?5分钟搞定EasyNVR多设备接入配置(附详细排查步骤)
Light
博客等级 码龄27年 39粉丝 1340原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值