YOLOv5 原理详解(纯文字背诵版·极致详细)
YOLOv5:Focus 开头 + C3 模块 + SPPF,Anchor-Based 耦合头,三尺度 3 个锚框,BCE + BCE + CIoU 三大损失,Mosaic 全程开,自动锚框聚类,PAN 颈部 + CSPDarknet 主干,易用性天花板,工业界永远的神。
YOLOv5 是 Ultralytics 在 2020 年发布的现象级目标检测模型,虽然现在已经被 YOLOv8/v10/v11 超越,但它曾经连续三年统治工业界和实际落地项目,至今仍然是无数公司生产环境的绝对主力。它的最大贡献不是精度最高,而是把极致易用性、训练速度、部署友好度做到了巅峰——一句命令就能训练、导出到十多种平台,彻底把目标检测门槛拉到地板。
YOLOv5 依然继承了 YOLOv4 的几乎全部优秀设计,同时用 PyTorch 重写得更加干净优雅。核心仍然是单阶段检测器,整张图只看一次,端到端预测所有物体的位置和类别。
网络结构同样分为 Backbone(主干) + Neck(颈部) + Head(检测头三个大模块。我们还是按从输出到输入的顺序背,更好记忆。
一、检测头(Head)—— 经典 Anchor-Based + Coupled Head
YOLOv5 的检测头完全延续 YOLOv3/v4 的经典设计:Anchor-Based + 耦合头。
- Anchor-Based(有锚框) 每个尺度预设 3 个不同长宽比的锚框(总共 9 个锚框,分到三个尺度),每个网格单元负责预测这 3 个锚框的调整量(tx, ty, tw, th)和 objectness)。预测时会产生大量候选框,最后通过 NMS 去除重复。
- Coupled Head(耦合头) 一个卷积同时输出五部分信息:
- 4 个回归值(中心点偏移 + 宽高缩放)
- 1 个 objectness 分数(这个锚框里有没有物体)
- nc 个类别分数(nc 是类别数,COCO 是 80)
分类和回归完全共享特征,耦合在一起训练(和 YOLOv8 的解耦头完全相反)。
- 三尺度输出 同样是 P3、P4、P5 三个尺度(8倍、16倍、32倍下采样):
- P3(大特征图):负责小物体,锚框面积小
- P4:中等物体
- P5(小特征图):大物体,锚框面积大
每个网格单元输出向量长度 = 3 × (4 + 1 + nc) = 3×(5+nc)
二、标签分配策略(正负样本分配)
YOLOv5 使用经典的基于 IoU 的固定分配方式(和 YOLOv8 的动态 TaskAlignedAssigner 完全不同)。
具体规则(必须背熟): 一个真实物体(ground truth)会和所有预设锚框计算 IoU,取 IoU 最大的那个锚框所在的网格作为正样本。 同时,如果某个锚框与该物体的 IoU > 阈值(通常 0.7),也算正样本(多分配)。 其余所有锚框如果是 IoU < 0.3 就是负样本,中间区间被忽略(不参与训练)。
这种方式简单粗暴,但对锚框设计非常敏感,不同数据集必须重新聚类锚框。
三、损失函数(背诵口诀:BCE + BCE + GIoU/CIoU)
YOLOv5 的三大损失超级经典:
- 分类损失 + objectness 损失:都用 Binary Cross Entropy with Logits Loss(BCEWithLogitsLoss),带 sigmoid,把多类别当成 80 个二分类来处理(比 v4 的普通 BCE 更稳定)
- 边界框回归损失:
- YOLOv5s/m:使用 CIoU Loss(Complete IoU Loss)
- YOLOv5l/x:使用 CIoU Loss(完整 IoU,包含中心点距离、重叠率、长宽比三项惩罚)
CIoU 是当时最强的 IoU 类损失(直到后来出现了 EIoU、SIoU、Wise-IoU 等)
四、Neck 部分—— PAN + SPPF(YOLOv5 对标基础版)
YOLOv5 的 Neck 几乎和 YOLOv4 一模一样:
经典 PAN 结构(Path Aggregation Network):
- 自底向上路径:把浅层定位信息传给深层
- 自顶向下路径:把深层语义信息传给浅层
关键模块是 C3 模块(也叫 BottleneckCSP)
C3 模块结构(必须背下来): 输入 → Split(分成两路) → 一路直接走 → 另一路依次经过 n 个 Bottleneck(每个 Bottleneck 是 1×1 卷积降维 → 3×3 卷积 → 1×1 升维 + 残差) → 两路 Concat → 最后 1×1 卷积调整通道
还有 SPPF 模块(YOLOv5 新增的优化版 SPP): 用三个串联的 MaxPool(5×5, stride=1) 替代原来的 SPP(原来是 5、9、13 三个并行池化),速度更快,效果几乎一样。
五、Backbone 主干网络—— CSPDarknet53 终极优化版
YOLOv5 的 Backbone 是 CSP 化的 Darknet53,开头有个 Focus 模块(后来 v6.0 才改成 6×6 卷积)。
Focus 模块(经典结构,必须背): 输入图像 → 切片操作(把 640×640×3 变成 320×320×12)→ 一个隔一个取像素,相当于把通道堆起来)→ 再接一个 3×3 卷积变成 320×320×64
这样比直接下采样更省计算,信息损失更少。
整体流程(以 YOLOv5s 为例): Focus → Conv → C3 ×1 → Conv → C3 ×3 → Conv → C3 ×9 → Conv → C3 ×9 → Conv → C3 ×3 → SPPF → PAN 颈部
所有核心模块都是 C3,只有开头有 Focus(大模型 l/x 更深更宽)。
六、训练策略(工业级杀手锏)
- Mosaic 数据增强全程开启(四张图拼接成一张,最后一个 epoch 才关)
- 自动锚框聚类(每个数据集自动计算最佳锚框)
- MixUp、HSV 随机增强、随机缩放、平移、翻转等超强增强
- Label Smoothing(标签平滑)
- 自动学习率(Cosine Annealing + Warmup)
- EMA(指数移动平均)权重可选
- Hyp.scratch 超参数文件,一键超强训练
真正做到“无脑起飞”的模型——改个 data.yaml,命令一行,几个小时就出顶级精度。
总结背诵口诀(一句话记完所有核心点)
“YOLOv5:Focus 开头 + C3 模块 + SPPF,Anchor-Based 耦合头,三尺度 3 个锚框,BCE + BCE + CIoU 三大损失,Mosaic 全程开,自动锚框聚类,PAN 颈部 + CSPDarknet 主干,易用性天花板,工业界永远的神。”
更多推荐

所有评论(0)