YOLOv5 网络架构深度解析:从 CSPDarknet 到 PAN-FPN 的工程化目标检测框架
摘要
YOLOv5 是 Ultralytics 发布并长期维护的一套目标检测框架。相比 YOLOv3 和 YOLOv4,YOLOv5 最大的特点不只是网络结构变化,而是工程化程度更高:它基于 PyTorch 实现,训练、验证、推理、模型导出和部署流程都更加方便,因此在工业检测、边缘部署、实时视频分析等场景中被大量使用。
本文将从 YOLOv5 的整体框架、Backbone、Neck、Head、Anchor 机制、损失函数、数据增强、训练流程和部署优势等方面进行系统解析,帮助读者理解 YOLOv5 为什么能够成为非常流行的目标检测实现。
说明:YOLOv5 早期并没有像 YOLOv3、YOLOv4 那样发布正式论文,本文主要参考 Ultralytics 官方 GitHub 仓库、官方文档以及 YOLO 系列通用检测思想整理。
目录
- 1. YOLOv5 是什么
- 2. YOLOv5 的整体网络结构
- 3. 输入端:数据增强与自适应处理
- 4. Backbone:CSPDarknet 特征提取网络
- 5. Neck:SPPF 与 PAN-FPN 多尺度融合
- 6. Head:三尺度目标检测头
- 7. Anchor 与预测框解码
- 8. YOLOv5 的损失函数
- 9. YOLOv5 的训练流程
- 10. YOLOv5 的推理与后处理
- 11. YOLOv5 各版本模型对比
- 12. YOLOv5 的优点与不足
- 13. 总结
- 参考资料
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 为例,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 张图片,再送入网络训练。
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激活函数增强非线性表达能力。
4.2 C3 模块
C3 是 YOLOv5 中非常重要的模块,它属于 CSP 结构的一种实现。C3 会将输入特征分成两条路径:一条经过 Bottleneck 堆叠进行深层特征提取,另一条作为跨阶段连接保留原始信息,最后再进行拼接融合。
C3 模块的优势:
- 减少重复计算;
- 改善梯度流动;
- 保留更多原始特征;
- 在速度和精度之间取得较好平衡。
4.3 Backbone 下采样过程
以 640 x 640 输入为例,Backbone 会逐步降低特征图分辨率:
浅层特征分辨率高,细节信息丰富;深层特征分辨率低,语义信息更强。YOLOv5 后续会通过 Neck 将这些不同层级的特征融合起来。
5. Neck:SPPF 与 PAN-FPN 多尺度融合
Neck 是连接 Backbone 和 Head 的部分,主要作用是融合不同尺度的特征。YOLOv5 的 Neck 通常包含 SPPF 和 PAN-FPN 结构。
5.1 SPPF 模块
SPPF 是 Spatial Pyramid Pooling - Fast 的缩写,可以理解为快速空间金字塔池化。它通过多次最大池化扩大感受野,让网络能够在不显著增加计算量的情况下获取更丰富的上下文信息。
SPPF 的作用:
- 增大感受野;
- 融合不同尺度上下文信息;
- 比传统 SPP 更高效;
- 对大目标和复杂背景检测有帮助。
5.2 PAN-FPN 特征融合
YOLOv5 的 Neck 可以理解为 FPN 和 PAN 的结合:
- FPN 是自顶向下融合,把深层语义信息传递给浅层特征;
- PAN 是自底向上融合,把浅层定位信息再传递回深层特征。
结构如下:
这种结构的好处是:浅层特征和深层特征可以双向流动,使检测头同时获得位置信息和语义信息。
6. Head:三尺度目标检测头
YOLOv5 的检测头负责在三个尺度上输出预测结果。每个尺度对应不同大小的目标。
每个检测头需要预测:
| 预测内容 | 含义 |
|---|---|
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,提高匹配程度。
预测过程可以理解为:
对于自定义数据集,如果目标普遍很小或长宽比特殊,默认 Anchor 可能不适合。这时需要通过 AutoAnchor 或重新聚类方式调整 Anchor。
8. YOLOv5 的损失函数
YOLOv5 的损失函数通常由三部分组成:
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 的训练流程非常工程化,用户只需要准备好数据集配置文件和标注文件,就可以使用命令启动训练。
训练流程如下:
常见训练命令示例:
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
推理流程如下:
NMS 是目标检测后处理中非常重要的一步。同一个目标可能会被多个框同时预测,NMS 会保留置信度最高的框,并去掉与它高度重叠的其他框。
11. YOLOv5 各版本模型对比
YOLOv5 提供了不同规模的模型,方便用户根据硬件条件和精度要求选择。
| 模型 | 特点 | 适合场景 |
|---|---|---|
| YOLOv5n | 最轻量,速度最快 | 移动端、边缘设备 |
| YOLOv5s | 轻量且实用 | 实时检测、普通项目 |
| YOLOv5m | 精度与速度平衡 | 工业检测、视频分析 |
| YOLOv5l | 精度更高,计算量更大 | 服务器端检测 |
| YOLOv5x | 最大模型,精度最高 | 对精度要求高的任务 |
一般来说:
- 如果设备算力有限,优先选择
YOLOv5n或YOLOv5s; - 如果希望速度和精度平衡,可以选择
YOLOv5m; - 如果更关注检测精度,可以选择
YOLOv5l或YOLOv5x。
模型选择没有绝对答案,需要结合数据集难度、目标大小、部署设备和实时性要求综合判断。
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 能够被广泛使用的重要原因。
参考资料
- Ultralytics YOLOv5 GitHub 仓库:https://github.com/ultralytics/yolov5
- Ultralytics YOLO 官方文档:https://docs.ultralytics.com/
- YOLOv5 模型介绍与预训练模型:https://github.com/ultralytics/yolov5
- CSPNet: A New Backbone that can Enhance Learning Capability of CNN:https://arxiv.org/abs/1911.11929
- YOLOv4: Optimal Speed and Accuracy of Object Detection:https://arxiv.org/abs/2004.10934
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)