摘要

YOLOv5 是 Ultralytics 发布并长期维护的一套目标检测框架。相比 YOLOv3 和 YOLOv4,YOLOv5 最大的特点不只是网络结构变化,而是工程化程度更高:它基于 PyTorch 实现,训练、验证、推理、模型导出和部署流程都更加方便,因此在工业检测、边缘部署、实时视频分析等场景中被大量使用。

本文将从 YOLOv5 的整体框架、Backbone、Neck、Head、Anchor 机制、损失函数、数据增强、训练流程和部署优势等方面进行系统解析,帮助读者理解 YOLOv5 为什么能够成为非常流行的目标检测实现。

说明:YOLOv5 早期并没有像 YOLOv3、YOLOv4 那样发布正式论文,本文主要参考 Ultralytics 官方 GitHub 仓库、官方文档以及 YOLO 系列通用检测思想整理。


目录


1. YOLOv5 是什么

YOLO 是 You Only Look Once 的缩写,核心思想是:模型只需要对图像进行一次前向传播,就可以同时预测目标的位置、类别和置信度。

YOLOv5 继承了一阶段检测器的基本思想,同时在工程实现、训练策略、模型缩放和部署流程上做了大量优化。它不是单一模型,而是一组不同规模的模型,例如:

  • YOLOv5n:nano 版本,参数最少,速度最快;
  • YOLOv5s:small 版本,常用于轻量级实时检测;
  • YOLOv5m:medium 版本,速度和精度更均衡;
  • YOLOv5l:large 版本,精度更高;
  • YOLOv5x:extra large 版本,参数最多,精度通常最高。

这些模型共享相似的整体结构,只是网络深度和宽度不同。


2. YOLOv5 的整体网络结构

YOLOv5 的整体结构可以分为四个部分:

模块 作用
Input 图像输入、缩放、归一化、数据增强
Backbone 提取不同层级的图像特征
Neck 融合多尺度特征,增强检测表达能力
Head 输出目标框、置信度和类别概率

整体流程如下:

输入图像
例如 640 x 640 x 3

Input
Mosaic、缩放、归一化

Backbone
CSPDarknet 系列结构

Neck
SPPF + PAN-FPN

Detect Head
80 x 80
小目标

Detect Head
40 x 40
中目标

Detect Head
20 x 20
大目标

预测框解码

置信度筛选

NMS 非极大值抑制

最终检测结果

以输入尺寸 640 x 640 为例,YOLOv5 通常输出三个尺度的检测结果:

检测尺度 特征图尺寸 下采样倍数 主要检测对象
P3 80 x 80 8 倍 小目标
P4 40 x 40 16 倍 中目标
P5 20 x 20 32 倍 大目标

这个设计延续了 YOLOv3 的多尺度检测思想,同时结合 PAN-FPN 结构增强了不同层级特征之间的信息流动。


3. 输入端:数据增强与自适应处理

YOLOv5 的输入端不仅仅是把图片 resize 到固定尺寸,还包含了多种对训练非常重要的策略。

3.1 Mosaic 数据增强

Mosaic 是 YOLOv5 中非常常用的数据增强方法。它会将 4 张图片拼接成 1 张图片,再送入网络训练。

图片 1

Mosaic 拼接图

图片 2

图片 3

图片 4

送入 YOLOv5 训练

Mosaic 的作用主要有:

  • 增加单张训练图像中的目标数量;
  • 提升模型对不同尺度目标的适应能力;
  • 增强背景变化,提高泛化能力;
  • 对小目标检测有一定帮助。

3.2 自适应图片缩放

YOLOv5 在推理时通常会对输入图像进行 letterbox 处理,也就是保持原始宽高比进行缩放,再用填充补齐到指定尺寸。

这样可以避免直接拉伸图像导致目标形变。

原始图像

按比例缩放

边缘填充

固定输入尺寸

3.3 自动 Anchor 检查

YOLOv5 在训练自定义数据集时,可以根据数据集标注框分布检查 Anchor 是否合适。如果默认 Anchor 与数据集目标尺寸差异较大,模型训练效果可能会下降。


4. Backbone:CSPDarknet 特征提取网络

Backbone 是目标检测网络的特征提取部分。YOLOv5 的 Backbone 通常被称为 CSPDarknet 系列结构,它借鉴了 CSPNet 的思想,通过 Cross Stage Partial 结构减少重复梯度信息,在保证特征表达能力的同时降低计算量。

4.1 Conv 基础模块

YOLOv5 中最基础的卷积模块通常由三部分组成:

Conv2d + BatchNorm2d + SiLU

结构如下:

输入特征

Conv2d

BatchNorm

SiLU 激活

输出特征

其中:

  • Conv2d 用于提取空间特征;
  • BatchNorm 用于稳定训练过程;
  • SiLU 激活函数增强非线性表达能力。

4.2 C3 模块

C3 是 YOLOv5 中非常重要的模块,它属于 CSP 结构的一种实现。C3 会将输入特征分成两条路径:一条经过 Bottleneck 堆叠进行深层特征提取,另一条作为跨阶段连接保留原始信息,最后再进行拼接融合。

输入特征

分支 1
Conv + Bottleneck

分支 2
Conv 直连

Concat 拼接

Conv 融合

输出特征

C3 模块的优势:

  • 减少重复计算;
  • 改善梯度流动;
  • 保留更多原始特征;
  • 在速度和精度之间取得较好平衡。

4.3 Backbone 下采样过程

640 x 640 输入为例,Backbone 会逐步降低特征图分辨率:

640 x 640 x 3
输入图像

320 x 320
浅层特征

160 x 160
纹理与边缘

80 x 80
小目标特征 P3

40 x 40
中目标特征 P4

20 x 20
大目标特征 P5

浅层特征分辨率高,细节信息丰富;深层特征分辨率低,语义信息更强。YOLOv5 后续会通过 Neck 将这些不同层级的特征融合起来。


5. Neck:SPPF 与 PAN-FPN 多尺度融合

Neck 是连接 Backbone 和 Head 的部分,主要作用是融合不同尺度的特征。YOLOv5 的 Neck 通常包含 SPPF 和 PAN-FPN 结构。

5.1 SPPF 模块

SPPF 是 Spatial Pyramid Pooling - Fast 的缩写,可以理解为快速空间金字塔池化。它通过多次最大池化扩大感受野,让网络能够在不显著增加计算量的情况下获取更丰富的上下文信息。

输入特征

MaxPool 1

MaxPool 2

MaxPool 3

Concat

Conv 融合

输出特征

SPPF 的作用:

  • 增大感受野;
  • 融合不同尺度上下文信息;
  • 比传统 SPP 更高效;
  • 对大目标和复杂背景检测有帮助。

5.2 PAN-FPN 特征融合

YOLOv5 的 Neck 可以理解为 FPN 和 PAN 的结合:

  • FPN 是自顶向下融合,把深层语义信息传递给浅层特征;
  • PAN 是自底向上融合,把浅层定位信息再传递回深层特征。

结构如下:

P5 深层特征
20 x 20

上采样

与 P4 拼接
40 x 40

C3 融合

上采样

与 P3 拼接
80 x 80

C3 融合
小目标检测特征

下采样

与中层特征拼接

C3 融合
中目标检测特征

下采样

与深层特征拼接

C3 融合
大目标检测特征

这种结构的好处是:浅层特征和深层特征可以双向流动,使检测头同时获得位置信息和语义信息。


6. Head:三尺度目标检测头

YOLOv5 的检测头负责在三个尺度上输出预测结果。每个尺度对应不同大小的目标。

PAN-FPN 输出特征

80 x 80 检测头
小目标

40 x 40 检测头
中目标

20 x 20 检测头
大目标

每个检测头需要预测:

预测内容 含义
x, y 预测框中心点位置
w, h 预测框宽高
objectness 当前预测框是否包含目标
class scores 目标类别概率

如果类别数为 nc,每个 Anchor 的输出维度为:

5 + nc

如果使用 COCO 数据集,类别数为 80,则每个 Anchor 的输出维度为:

5 + 80 = 85

如果每个尺度有 3 个 Anchor,那么每个检测尺度的输出通道数为:

3 x (5 + nc)

COCO 数据集下就是:

3 x 85 = 255

7. Anchor 与预测框解码

YOLOv5 的检测头默认仍然使用 Anchor-based 思想。Anchor 是预先设定的一组候选框尺寸,模型在 Anchor 的基础上预测偏移量。

为什么要使用 Anchor?

  • 目标尺寸差异很大,Anchor 给模型提供了初始参考;
  • 模型只需要学习相对偏移,训练更稳定;
  • 不同尺度的 Anchor 可以分别负责大、中、小目标;
  • 对自定义数据集可以重新聚类 Anchor,提高匹配程度。

预测过程可以理解为:

网格 Cell

检测预测

Anchor 宽高

网络输出偏移量

解码预测框

映射回原图坐标

对于自定义数据集,如果目标普遍很小或长宽比特殊,默认 Anchor 可能不适合。这时需要通过 AutoAnchor 或重新聚类方式调整 Anchor。


8. YOLOv5 的损失函数

YOLOv5 的损失函数通常由三部分组成:

YOLOv5 总损失

边界框回归损失
Box Loss

目标置信度损失
Objectness Loss

分类损失
Class Loss

8.1 Box Loss

Box Loss 用于衡量预测框与真实框之间的位置差异。YOLOv5 中常使用 CIoU 等 IoU 系列损失来优化边界框回归。

相比只计算坐标差值,IoU 系列损失更关注预测框和真实框的重叠程度,能更直接地优化目标检测评价指标。

8.2 Objectness Loss

Objectness Loss 用于判断当前预测框是否包含目标。对于包含目标的预测框,模型应该输出较高置信度;对于背景区域,模型应该输出较低置信度。

8.3 Class Loss

Class Loss 用于判断目标属于哪个类别。对于多类别检测任务,模型需要在定位准确的基础上给出正确类别。

整体来看,YOLOv5 训练时既要让框的位置更准,也要让模型知道哪里有目标、目标属于什么类别。


9. YOLOv5 的训练流程

YOLOv5 的训练流程非常工程化,用户只需要准备好数据集配置文件和标注文件,就可以使用命令启动训练。

训练流程如下:

准备数据集
images + labels

编写 data.yaml

选择模型配置
yolov5s/m/l/x

加载预训练权重

数据增强
Mosaic、HSV、翻转等

模型前向传播

计算损失

反向传播更新参数

验证集评估 mAP

保存 best.pt 和 last.pt

常见训练命令示例:

python train.py --img 640 --batch 16 --epochs 100 --data data.yaml --weights yolov5s.pt

参数含义:

参数 含义
--img 输入图像尺寸
--batch batch size
--epochs 训练轮数
--data 数据集配置文件
--weights 预训练权重

自定义数据集的 data.yaml 示例:

train: ./datasets/mydata/images/train
val: ./datasets/mydata/images/val

nc: 3
names: ["helmet", "person", "car"]

其中:

  • train 表示训练集图片路径;
  • val 表示验证集图片路径;
  • nc 表示类别数量;
  • names 表示类别名称。

10. YOLOv5 的推理与后处理

训练完成后,可以使用 detect.py 进行推理:

python detect.py --weights runs/train/exp/weights/best.pt --source test.jpg

推理流程如下:

输入图片或视频

Letterbox 缩放

归一化并转换张量

模型前向推理

预测框解码

置信度阈值筛选

NMS 去除重复框

绘制检测结果

NMS 是目标检测后处理中非常重要的一步。同一个目标可能会被多个框同时预测,NMS 会保留置信度最高的框,并去掉与它高度重叠的其他框。

多个重叠框

按置信度排序

保留最高分框

删除 IoU 过高的框

最终检测框


11. YOLOv5 各版本模型对比

YOLOv5 提供了不同规模的模型,方便用户根据硬件条件和精度要求选择。

模型 特点 适合场景
YOLOv5n 最轻量,速度最快 移动端、边缘设备
YOLOv5s 轻量且实用 实时检测、普通项目
YOLOv5m 精度与速度平衡 工业检测、视频分析
YOLOv5l 精度更高,计算量更大 服务器端检测
YOLOv5x 最大模型,精度最高 对精度要求高的任务

一般来说:

  • 如果设备算力有限,优先选择 YOLOv5nYOLOv5s
  • 如果希望速度和精度平衡,可以选择 YOLOv5m
  • 如果更关注检测精度,可以选择 YOLOv5lYOLOv5x

模型选择没有绝对答案,需要结合数据集难度、目标大小、部署设备和实时性要求综合判断。


12. YOLOv5 的优点与不足

12.1 优点

YOLOv5 的优点主要包括:

  • 基于 PyTorch,代码易读,训练方便;
  • 工程化程度高,支持训练、验证、推理和导出;
  • 模型规模丰富,适合不同硬件平台;
  • 数据增强策略成熟,泛化能力较好;
  • 多尺度检测结构适合不同大小目标;
  • 支持 ONNX、TensorRT、CoreML、TFLite 等多种部署格式;
  • 社区活跃,使用资料丰富。

12.2 不足

YOLOv5 也存在一些不足:

  • 早期没有正式论文,学术引用时需要注意;
  • Anchor-based 机制需要关注 Anchor 与数据集的匹配程度;
  • 对极小目标、密集遮挡目标仍然存在漏检风险;
  • 不同版本代码变化较快,复现实验时要固定版本;
  • 对高精度工业场景,仍需要结合数据清洗、标注质量和参数调优。

13. 总结

YOLOv5 是 YOLO 系列中非常具有代表性的工程化目标检测框架。它并不是简单地在 YOLOv4 后面继续编号,而是在 PyTorch 生态下重新组织了训练、推理、部署和模型缩放流程,使目标检测项目的落地门槛大大降低。

理解 YOLOv5 的关键,可以抓住以下主线:

  • Backbone 使用 CSPDarknet 思想提取多层级特征;
  • C3 模块减少计算量并改善梯度流动;
  • SPPF 模块扩大感受野,提高上下文表达能力;
  • Neck 使用 PAN-FPN 融合浅层细节和深层语义;
  • Head 在三个尺度上分别检测小、中、大目标;
  • Anchor 机制为边界框预测提供先验参考;
  • 训练阶段依赖 Mosaic、AutoAnchor、预训练权重等工程技巧;
  • 推理阶段通过置信度筛选和 NMS 得到最终检测结果。

从实际应用角度看,YOLOv5 的价值不仅在于网络结构本身,更在于它把目标检测从“论文算法”推进到了“容易训练、容易部署、容易复现”的工程工具阶段。这也是 YOLOv5 能够被广泛使用的重要原因。


参考资料

  1. Ultralytics YOLOv5 GitHub 仓库:https://github.com/ultralytics/yolov5
  2. Ultralytics YOLO 官方文档:https://docs.ultralytics.com/
  3. YOLOv5 模型介绍与预训练模型:https://github.com/ultralytics/yolov5
  4. CSPNet: A New Backbone that can Enhance Learning Capability of CNN:https://arxiv.org/abs/1911.11929
  5. YOLOv4: Optimal Speed and Accuracy of Object Detection:https://arxiv.org/abs/2004.10934
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐