news 2026/4/25 11:19:21

保姆级教程:在旭日X3派上用YOLOv5s-2.0实现目标检测(从训练到上板推理全流程)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在旭日X3派上用YOLOv5s-2.0实现目标检测(从训练到上板推理全流程)

旭日X3派YOLOv5s-2.0全流程开发实战:从数据集构建到边缘推理

在嵌入式AI领域,地平线旭日X3派凭借5TOPS等效算力成为边缘计算的热门选择。本文将完整呈现基于YOLOv5s-2.0模型的目标检测项目全生命周期,涵盖以下关键阶段:

  • 数据工程:构建符合BPU特性的672×672像素数据集
  • 模型训练:PyTorch环境下的参数调优技巧
  • 模型转换:ONNX导出与BPU适配的完整校准流程
  • 边缘部署:旭日X3派上的推理优化实践

1. 开发环境配置与数据准备

1.1 硬件选型与系统基础

旭日X3派开发板推荐配置:

  • 内存:4GB LPDDR4
  • 存储:16GB eMMC + TF卡扩展
  • 接口:双MIPI-CSI摄像头接口
  • 系统镜像:Ubuntu 20.04 LTS

开发主机建议环境:

# Conda环境创建(Python 3.8) conda create -n x3_yolov5 python=3.8 -y conda activate x3_yolov5 # 关键依赖安装 pip install torch==1.10.0+cu113 torchvision==0.11.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html

1.2 数据集构建规范

YOLOv5s-2.0专用数据集目录结构:

dataset/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── data.yaml

关键配置参数示例:

# data.yaml 内容示例 train: ../dataset/images/train val: ../dataset/images/val nc: 3 # 类别数 names: ['person', 'car', 'bicycle']

注意:所有图像需统一调整为672×672分辨率,与后续BPU计算特性对齐

2. 模型训练与优化技巧

2.1 YOLOv5-2.0源码适配

版本选择依据:

版本BPU支持度FPS(旭日X3)精度(mAP)
v6.0部分算子15.20.68
v2.0完整支持28.70.72

关键训练参数配置:

# train.py 修改建议 parser.add_argument('--weights', type=str, default='yolov5s.pt') parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml') parser.add_argument('--data', type=str, default='data/custom.yaml') parser.add_argument('--img-size', nargs='+', type=int, default=[672, 672]) parser.add_argument('--batch-size', type=int, default=16)

2.2 训练过程监控

典型loss曲线健康特征:

  • box_loss:应稳定收敛至0.05以下
  • obj_loss:建议控制在0.02范围内
  • cls_loss:多分类任务需<0.01

训练中断恢复方案:

python train.py --resume runs/exp/weights/last.pt

3. 模型转换与BPU适配

3.1 ONNX导出特殊处理

模型导出前必须修改:

  1. 修改models/yolo.py中的Detect层:
# 修改前 return x if self.training else (torch.cat(z, 1), ) # 修改后 return x if self.training else (torch.cat(z, 1).permute(0, 3, 1, 2), )
  1. 调整export.py关键参数:
torch.onnx.export( model, im, f, opset_version=11, input_names=['data'], dynamic_axes=None )

3.2 模型转换全流程

转换环境搭建步骤:

  1. 获取地平线工具链
wget -c ftp://xj3ftp@vrftp.horizon.ai/ai_toolchain/ai_toolchain.tar.gz tar -xzvf ai_toolchain.tar.gz
  1. 校准数据集准备:
# 校准图像预处理示例 import cv2 def preprocess(img_path): img = cv2.imread(img_path) img = cv2.resize(img, (672, 672)) img = img[:, :, ::-1] # BGR2RGB return img.transpose(2, 0, 1) # HWC to CHW

转换配置文件要点:

# yolov5s_config_X3.yaml 核心参数 model_parameters: onnx_model: 'yolov5s.onnx' output_model_file_prefix: 'yolov5s_672x672' layer_out_dump: False calibration_parameters: cal_data_dir: 'calibration_data' calibration_type: 'max' max_percentile: 0.9999

4. 板端部署与性能优化

4.1 推理环境搭建

旭日X3派系统配置:

# 安装地平线推理库 sudo apt-get install hrt-tools hobot-multimedia pip install horizon_nn==0.12.2

4.2 推理代码适配

后处理关键修改点:

# postprocess.py 调整要点 def reshape_output(data, num_classes): # 672对应不同尺度的除数 strides = [8, 16, 32] for i, stride in enumerate(strides): data[i] = data[i].reshape( 1, 3, 84//stride, 84//stride, num_classes+5 )

性能优化对比:

优化措施推理时延(ms)内存占用(MB)
原始模型68.2342
量化优化42.7215
内存复用36.1158

实际部署中发现,使用双MIPI摄像头输入时,通过DMA零拷贝技术可进一步提升15%的帧率。建议在hobot_mmz模块中配置内存池,减少动态内存分配开销。

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

D3KeyHelper终极指南:暗黑破坏神3智能按键助手完整教程

D3KeyHelper终极指南&#xff1a;暗黑破坏神3智能按键助手完整教程 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 暗黑破坏神3作为一款经典的ARPG游…

作者头像 李华
网站建设 2026/4/25 11:07:46

Music-API终极指南:一站式跨平台音乐资源解析解决方案

Music-API终极指南&#xff1a;一站式跨平台音乐资源解析解决方案 【免费下载链接】music-api Music API 项目地址: https://gitcode.com/gh_mirrors/mu/music-api 在当今数字音乐时代&#xff0c;获取稳定可靠的音乐播放地址成为了开发者和音乐爱好者的共同需求。Music…

作者头像 李华
网站建设 2026/4/25 11:04:15

别再只会敲nvidia-smi了!这5个隐藏参数帮你把GPU状态摸得一清二楚

深度挖掘nvidia-smi&#xff1a;5个高阶参数解锁GPU监控新维度 当你面对服务器上那几块满载运行的GPU时&#xff0c;是否曾感到基础监控数据如同隔靴搔痒&#xff1f;作为深度学习工程师和系统管理员的标准武器&#xff0c;nvidia-smi的基础用法早已人尽皆知。但那些隐藏在帮助…

作者头像 李华