引言

以下内容从网络结构锚框机制损失函数三个角度,通俗易懂且准确地解析 YOLOv5 的核心实现逻辑。
在这里插入图片描述


1. 网络结构解析

YOLOv5 采用经典的“Backbone → Neck → Head”三段式设计:

  • Backbone:提取多尺度特征(CSPDarknet53)。
  • Neck:特征融合(PANet改进的BiFPN)。
  • Head:输出检测结果(多尺度预测头)。

1.1 Backbone:CSPDarknet53

  • Focus 模块:将输入图像空间分割并通道拼接,实现下采样(宽高减半,通道数翻倍),保留原始信息 [[3]]。
  • C3 模块:基于 CSP(跨阶段部分连接)结构,通过残差块提取特征,减少冗余计算 [[3]]。
  • SPP 模块:使用多尺度最大池化(如 5 × 5 5 \times 5 5×5 9 × 9 9 \times 9 9×9 13 × 13 13 \times 13 13×13)扩大感受野,增强大目标检测能力。

1.2 Neck:PANet 改进的 BiFPN

  • 自顶向下(FPN):从深层特征图上采样并与浅层特征拼接,传递语义信息。
  • 自底向上(PAN):从浅层特征图下采样并与深层特征拼接,传递定位信息。
  • 双向融合:兼顾语义和定位精度,解决小目标检测难题。

1.3 Head:多尺度检测头

  • 三尺度输出
    • P3(80×80):检测小目标。
    • P4(40×40):检测中等目标。
    • P5(20×20):检测大目标 [[3]]。
  • 预测分支:每个锚框输出 ( t x , t y , t w , t h , t o b j , t c l s ) (t_x, t_y, t_w, t_h, t_{obj}, t_{cls}) (tx,ty,tw,th,tobj,tcls),分别表示边界框偏移、宽高、置信度和类别概率。
  • 边界框公式
    b x = ( σ ( t x ) + c x ) × s t r i d e b y = ( σ ( t y ) + c y ) × s t r i d e b w = a n c h o r w × exp ⁡ ( t w ) × s t r i d e b h = a n c h o r h × exp ⁡ ( t h ) × s t r i d e \begin{aligned} b_x &= (\sigma(t_x) + c_x) \times stride \\ b_y &= (\sigma(t_y) + c_y) \times stride \\ b_w &= anchor_w \times \exp(t_w) \times stride \\ b_h &= anchor_h \times \exp(t_h) \times stride \end{aligned} bxbybwbh=(σ(tx)+cx)×stride=(σ(ty)+cy)×stride=anchorw×exp(tw)×stride=anchorh×exp(th)×stride
    其中 ( c x , c y ) (c_x, c_y) (cx,cy) 为网格坐标, ( a n c h o r w , a n c h o r h ) (anchor_w, anchor_h) (anchorw,anchorh) 为锚框尺寸, s t r i d e stride stride 为特征图步长。

2. 锚框(Anchor)机制

锚框是 YOLOv5 中的关键设计,用于训练匹配真实框和推理候选框。

2.1 锚框定义与作用

  • 定义:每个尺度(P3-P5)预设 3 组锚框,形状基于数据集分布聚类生成。
  • 作用
    • 提供候选框起点,加速收敛。
    • 多尺度锚框覆盖不同尺寸目标。

2.2 自动 Anchor 聚类

  1. K-means 聚类
    • 基于标注框宽高 ( w , h ) (w, h) (w,h) 进行聚类,距离度量为 1 − I o U 1 - IoU 1IoU,生成 9 组初始锚框。
  2. 遗传算法微调
    • 对聚类结果进一步优化,最大化平均 IoU,适配特定数据集。
  3. 尺度划分
    • 将 9 组锚框按尺寸分配到 P3(小)、P4(中)、P5(大),确保匹配合理性。

2.3 正负样本匹配

  • IoU 匹配规则
    • 对每个真实框,匹配 IoU > 0.5 的锚框为正样本;若无,则选 IoU 最大的锚框。
  • 忽略样本
    • IoU 在 $ [0.4, 0.5) $ 的锚框标记为忽略,不参与损失计算。
  • 负样本
    • IoU < 0.4 的锚框为负样本,仅计算置信度损失。

3. 损失函数设计

YOLOv5 的损失函数由三部分组成:位置回归损失、置信度损失和分类损失。

3.1 位置回归损失(CIoU)

  • CIoU 公式
    L o s s CIoU = 1 − I o U + ρ 2 c 2 + α ν Loss_{\text{CIoU}} = 1 - IoU + \frac{\rho^2}{c^2} + \alpha \nu LossCIoU=1IoU+c2ρ2+αν
    其中 ρ \rho ρ 为预测框与真实框中心距离, c c c 为最小外接框对角线长度, ν \nu ν 衡量宽高比差异。
  • 优势
    • 综合优化重叠度、中心距离和宽高比,提升定位精度 [[3]]。

3.2 置信度损失(BCE)

  • 对正样本(目标存在)和负样本(背景)使用二元交叉熵损失:
    L o s s obj = − ∑ [ y log ⁡ ( p ) + ( 1 − y ) log ⁡ ( 1 − p ) ] Loss_{\text{obj}} = - \sum [y \log(p) + (1 - y) \log(1 - p)] Lossobj=[ylog(p)+(1y)log(1p)]
    忽略样本不参与计算。

3.3 分类损失(BCE 或 CE)

  • 单标签:使用交叉熵损失。
  • 多标签:使用 BCE 独立预测每个类别。

3.4 多尺度总损失

L o s s total = ∑ s ∈ { P 3 , P 4 , P 5 } ( λ box L o s s CIoU ( s ) + λ obj L o s s obj ( s ) + λ cls L o s s cls ( s ) ) Loss_{\text{total}} = \sum_{s \in \{P3,P4,P5\}} \left( \lambda_{\text{box}} Loss_{\text{CIoU}}^{(s)} + \lambda_{\text{obj}} Loss_{\text{obj}}^{(s)} + \lambda_{\text{cls}} Loss_{\text{cls}}^{(s)} \right) Losstotal=s{P3,P4,P5}(λboxLossCIoU(s)+λobjLossobj(s)+λclsLosscls(s))
其中 λ box , λ obj , λ cls \lambda_{\text{box}}, \lambda_{\text{obj}}, \lambda_{\text{cls}} λbox,λobj,λcls 为超参数,平衡各部分损失。


4. 总结

YOLOv5 通过 CSPDarknet53 提取高效特征,结合 PANet 实现多尺度双向融合,并采用 CIoU 损失与动态锚框匹配策略,在实时检测中达到精度与速度的平衡。其无锚点版本 YOLOv5u 进一步提升了灵活性。

5. 参考文献

https://docs.ultralytics.com/zh/yolov5/tutorials/architecture_description/
https://zhuanlan.zhihu.com/p/172121380

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐