目标检测之Yolov5
引言
以下内容从网络结构、锚框机制与损失函数三个角度,通俗易懂且准确地解析 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 聚类
- K-means 聚类:
- 基于标注框宽高 ( w , h ) (w, h) (w,h) 进行聚类,距离度量为 1 − I o U 1 - IoU 1−IoU,生成 9 组初始锚框。
- 遗传算法微调:
- 对聚类结果进一步优化,最大化平均 IoU,适配特定数据集。
- 尺度划分:
- 将 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=1−IoU+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)+(1−y)log(1−p)]
忽略样本不参与计算。
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
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)