YOLOv5 是 Ultralytics 在 2020 年发布的现象级目标检测模型,虽然现在已经被 YOLOv8/v10/v11 超越,但它曾经连续三年统治工业界和实际落地项目,至今仍然是无数公司生产环境的绝对主力。它的最大贡献不是精度最高,而是把极致易用性、训练速度、部署友好度做到了巅峰——一句命令就能训练、导出到十多种平台,彻底把目标检测门槛拉到地板。

YOLOv5 依然继承了 YOLOv4 的几乎全部优秀设计,同时用 PyTorch 重写得更加干净优雅。核心仍然是单阶段检测器,整张图只看一次,端到端预测所有物体的位置和类别。

网络结构同样分为 Backbone(主干) + Neck(颈部) + Head(检测头三个大模块。我们还是按从输出到输入的顺序背,更好记忆。

一、检测头(Head)—— 经典 Anchor-Based + Coupled Head

YOLOv5 的检测头完全延续 YOLOv3/v4 的经典设计:Anchor-Based + 耦合头。

  1. Anchor-Based(有锚框) 每个尺度预设 3 个不同长宽比的锚框(总共 9 个锚框,分到三个尺度),每个网格单元负责预测这 3 个锚框的调整量(tx, ty, tw, th)和 objectness)。预测时会产生大量候选框,最后通过 NMS 去除重复。
  2. Coupled Head(耦合头) 一个卷积同时输出五部分信息:
  • 4 个回归值(中心点偏移 + 宽高缩放)
  • 1 个 objectness 分数(这个锚框里有没有物体)
  • nc 个类别分数(nc 是类别数,COCO 是 80)

分类和回归完全共享特征,耦合在一起训练(和 YOLOv8 的解耦头完全相反)。

  1. 三尺度输出 同样是 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 的三大损失超级经典:

  1. 分类损失 + objectness 损失:都用 Binary Cross Entropy with Logits Loss(BCEWithLogitsLoss),带 sigmoid,把多类别当成 80 个二分类来处理(比 v4 的普通 BCE 更稳定)
  2. 边界框回归损失:
    • 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 更深更宽)。

六、训练策略(工业级杀手锏)

  1. Mosaic 数据增强全程开启(四张图拼接成一张,最后一个 epoch 才关)
  2. 自动锚框聚类(每个数据集自动计算最佳锚框)
  3. MixUp、HSV 随机增强、随机缩放、平移、翻转等超强增强
  4. Label Smoothing(标签平滑)
  5. 自动学习率(Cosine Annealing + Warmup)
  6. EMA(指数移动平均)权重可选
  7. Hyp.scratch 超参数文件,一键超强训练

真正做到“无脑起飞”的模型——改个 data.yaml,命令一行,几个小时就出顶级精度。

总结背诵口诀(一句话记完所有核心点)

“YOLOv5:Focus 开头 + C3 模块 + SPPF,Anchor-Based 耦合头,三尺度 3 个锚框,BCE + BCE + CIoU 三大损失,Mosaic 全程开,自动锚框聚类,PAN 颈部 + CSPDarknet 主干,易用性天花板,工业界永远的神。”

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐