Ascend-SACT/YOLOv5
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

适配环境信息

NPU硬件:A2/910B

操作系统:ARM

部署方式:单卡

1 模型介绍

YOLO 系列目标检测模型中一个极其重要且流行的版本。尽管其名称带有“v5”,但它并非由原始 YOLO 作者(Joseph Redmon)团队开发,而是由 Ultralytics 公司创建和维护。

核心定义 YOLOv5 是一个单阶段目标检测模型,它使用一个统一的神经网络直接从一个完整的图像中预测边界框和类别概率,以其极高的速度和良好的精度平衡而闻名。

主要特点与贡献 YOLOv5 的成功和流行源于以下几个关键特点:

PyTorch 框架实现

它完全基于 PyTorch 构建,这使得它对于研究和社区来说比之前基于 Darknet 的版本更易于使用、修改和调试。 用户友好性

易于训练:提供了非常清晰的脚本,只需几行代码即可在自己的数据集上开始训练。 易于部署:直接支持导出为多种格式,如 ONNX、CoreML、TensorRT 等,极大方便了模型在不同平台(如移动端、边缘设备)的部署。 模块化设计(PANet + CSPNet)

Backbone(主干网络):采用 CSPDarknet 作为特征提取器,在保证精度的同时减少了计算量。 Neck(颈部):使用 PANet 结构,有效地融合了不同尺度的特征图,从而提升了对不同大小目标的检测能力。 Head(检测头):使用独立的锚框进行目标分类和边界框回归。 多种尺度的模型 YOLOv5 提供了从轻量级到高精度的多个预训练模型,以满足不同场景的需求:

YOLOv5n / YOLOv5s:参数量小,速度极快,适合移动端或实时性要求极高的场景。 YOLOv5m:平衡了速度和精度。 YOLOv5l / YOLOv5x:参数量大,精度高,适合对准确度要求严苛且计算资源充足的场景。 先进的训练技术

集成了自动学习锚框尺寸、马赛克数据增强、自适应图片缩放等技巧,进一步提升了模型性能和训练效率。

2 背景

本次工作的核心目标是将业界最流行、生态最成熟的目标检测模型YOLOv5,从标准的GPU环境迁移到国产昇腾NPU平台上,并完成完整的推理和训练流程验证。

其背景源于以下几个关键驱动因素:

YOLOv5的霸主地位:YOLOv5凭借其PyTorch实现、极致的用户友好性和出色的性能,已成为工业界目标检测事实上的标准。确保其能在国产算力上运行,具有极高的实用价值。 全栈国产化需求:在AI算力自主可控的战略背景下,需要将主流AI应用(尤其是像目标检测这样的核心任务)从依赖NVIDIA GPU的生态中迁移出来。验证YOLOv5在昇腾NPU上从推理到训练的全流程,是构建全国产AI解决方案的关键一步。 模型生命周期全覆盖:之前的迁移可能更侧重于推理。本次工作同时验证了训练过程,这意味着基于昇腾NPU,可以完成从模型开发、训练到最终部署的完整闭环,价值更大。 将YOLOv5这样成熟且代码结构复杂的项目迁移到NPU,挑战比迁移一个简单的分类模型更大:

框架硬编码与自动检测逻辑:YOLOv5的代码库经过多年优化,其设备选择逻辑(utils/torch_utils.py 中的 select_device 函数)非常完善,会自动检测可用的CUDA设备。该逻辑深度嵌入在训练(train.py)和推理(detect.py)的初始化流程中,直接绕过或修改的难度很高。 训练过程的复杂性:推理相对单纯,而训练涉及梯度计算、优化器更新、分布式通信(如使用多卡)等复杂环节。确保这些操作在NPU上稳定、正确地进行,是比推理更大的挑战。任何环节的算子不支持或性能瓶颈都可能导致训练失败或效率低下。 保持代码的纯洁性与可维护性:直接修改YOLOv5的源代码(如 detect.py 和 train.py)会导致与上游官方仓库分叉,未来难以同步官方更新(如Bug修复、性能优化)。因此,需要一种非侵入式的适配方法。

3 解决方案

3.1 基础环境准备

镜像下载

from atomgit_hub import snapshot_download
snapshot_download("Ascend-SACT/tacotron2",  local_dir = './download')

启动容器

# 启动容器,映射第5张卡 (Device 5),配置 Host IPC 模式
docker run -it --rm --privileged --net=host \
   --name yolov5_npu_test \
   --ipc=host \
   --device=/dev/davinci5 \
   --device=/dev/davinci_manager \
   --device=/dev/devmm_svm \
   --device=/dev/hisi_hdc \
   -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
   -v /usr/local/Ascend/add-ons:/usr/local/Ascend/add-ons \
   -v /usr/local/sbin/npu-smi:/usr/local/bin/npu-smi \
   -v /home/backup/Models/YOLOv5:/workspace/yolov5 \
   my_yolov12_final:v1.0 /bin/bash

适配修改

使用 sed 命令对 detect.py 进行非侵入式修改,强制旁路 CUDA 检查逻辑

# 1. 引入 NPU 后端库
sed -i '1i import torch_npu' detect.py

# 2. 劫持设备选择逻辑 (Bypass select_device)
# 将 device 选择逻辑替换为强制指定 npu:0
sed -i "s/device = select_device(device)/device = torch.device('npu:0')/g" detect.py

3.2 推理验证

# 执行推理 (FP16 默认开启)
python3 detect.py --weights ../yolov5s.pt --source data/images/bus.jpg

推理结果

本次推理使用YOLOv5s模型对图像"bus.jpg"进行目标检测。模型成功识别出4个人和1辆公交车,处理耗时15.1毫秒,展现了高效的检测能力。模型结构包含213层,参数量为722万,计算量达16.4 GFLOPs。检测结果保存在runs/detect/exp2目录

3.3 训练验证

训练脚本

python3 train.py \
  --img 640 \
  --batch 16 \
  --epochs 3 \
  --data coco128.yaml \
  --weights ../yolov5s.pt \
  --noval

训练结果

状态: 通过 (Pass) 收敛情况: Loss 正常下降,3 Epochs 后 mAP@0.5 达到 0.74 左右。 性能指标: * Epoch 0: JIT 编译预热 (较慢)。 Epoch 1+: 稳定在 6~7秒 / Epoch (coco128 数据集)。 产出物: runs/train/exp*/weights/best.pt 生成成功,可用于推理。

4 迁移的价值与成功意义

本次迁移验证的成功,具有里程碑式的意义,其价值体现在技术、应用和生态三个层面:

一、 技术价值:创新且高效的适配方案

非侵入式“热补丁”:采用 sed 命令在运行时直接修改Python脚本,是一种极其巧妙且高效的“热补丁”技术。它在不永久性破坏源代码的前提下,动态地完成了NPU设备指定的劫持。这种方法比直接修改源文件更干净,易于回滚和复现。 全流程验证:成功验证了推理(detect.py)和训练(train.py) 两大核心流程。训练过程的成功尤其关键,它证明YOLOv5在NPU上的前向传播、反向传播、损失计算、优化器步骤等整套训练机制都是完整可用的。 性能得到初步验证:训练脚本在coco128小数据集上3个epoch后达到mAP@0.5=0.74,且loss正常下降,表明模型在NPU上能够正常收敛。Epoch时间稳定在6~7秒,显示了NPU计算的稳定性。 二、 应用价值:为工业部署扫清障碍

证明了可行性:为无数基于YOLOv5的工业应用(如安防监控、自动驾驶、工业质检、遥感探测)迁移到昇腾平台提供了坚实的技术依据和可行性证明。企业可以放心地规划基于“昇腾NPU + YOLOv5”的技术路线。 覆盖模型全生命周期:这意味着开发者可以在昇腾服务器上完成YOLOv5模型的定制化训练和优化,然后直接部署到基于昇腾的边缘设备上,形成完整的国产化解决方案,彻底摆脱对GPU的依赖。 降低迁移门槛:本次验证所采用的简单直接的修改方法,大大降低了其他团队复现和迁移YOLOv5乃至其他Ultralytics系列模型的技术门槛。 三、 生态价值:强力助推国产AI生态

攻克“标杆模型”:YOLOv5是目标检测领域的“标杆”。它的成功迁移,是对昇腾NPU软硬件栈成熟度的一次强力背书,向业界宣告昇腾平台已具备承载主流工业级AI模型的能力。 提供标准化范式:这种通过修改设备选择逻辑来适配NPU的方法,为迁移整个Ultralytics模型家族(如YOLOv8, YOLOv11等)乃至其他基于PyTorch的视觉模型提供了一个可复制、标准化的技术范式。