一、宏观定位与生态区别
二、网络架构核心区别
1. Backbone(主干网络)
YOLOv5:CSPDarknet53
- 核心模块:C3模块(CSP Bottleneck with 3 convolutions)
- 结构:借鉴CSPNet,将特征图分为两部分,一部分经过卷积,一部分直接连接,减少计算量
- 激活函数:SiLU(训练) / Hardswish(部分部署)
YOLOv8:改进的CSPDarknet
- 核心模块:C2f模块(CSPDarknet with 2 convolutions and 更多分支)
C3 vs C2f 对比
C3: Conv → Bottleneck × N → Conv (单一路径)
C2f: Conv → Split → [Bottleneck × N] → Concat → Conv (多分支并行)
-
改进点:
- 更多的梯度回传分支,训练时信息流动更丰富
- 在相同计算量下,特征重用率更高
- 为后续的特征金字塔提供更丰富的语义信息
影响:YOLOv8的Backbone参数量略增,但梯度流动更顺畅,训练更容易收敛。
2. Neck(特征金字塔)
YOLOv5:PANet(Path Aggregation Network)
- 结构:FPN(自顶向下) + PAN(自底向上)的双向融合
- 融合方式:直接相加(add) 或 拼接(concat)
YOLOv8:改进的PANet
-
结构:仍然是FPN+PAN,但上采样阶段的融合方式改变
-
关键改进:
- 在FPN阶段,去除了一些1x1卷积,减少计算量
- 在PAN阶段,使用了更深的融合路径
- 输出的特征图尺寸略有调整(P3, P4, P5更加均衡)
影响:YOLOv8的特征融合效率更高,特别是在小目标检测上有所提升。
3. Head(检测头)—— 最大的架构变革
YOLOv5:耦合头(Coupled Head) + Anchor-Based
- 结构:一个卷积层同时输出分类和回归结果
- 输出:
(cls + 4 + 1) × 3(分类数 + 坐标 + 置信度)× 锚框数 - Anchor依赖:需要预先聚类Anchor,训练和推理都依赖
YOLOv8:解耦头(Decoupled Head) + Anchor-Free
-
解耦设计:
- 分类分支:单独一组卷积,输出类别概率
- 回归分支:单独一组卷积,输出边界框坐标
- 回归分支还包含 IoU分支(预测框与GT的IoU)
-
Anchor-Free:
- 不再需要预设Anchor
- 直接预测中心点 + 宽高(或上下左右距离)
- 正样本分配基于中心点距离 + 尺度匹配
三、训练策略与损失函数
1. 正负样本分配(Label Assignment)
YOLOv5:静态分配
- 基于Anchor与GT的IoU:IoU > 阈值(如0.5)为正样本
- 每个GT可能匹配多个Anchor
- 规则固定,不随训练动态调整
YOLOv8:动态分配(TaskAligned Assigner)
- 同时考虑分类得分和回归质量:
alignment_metric = classification_score^α × IoU^β
- 选择TopK个对齐分数最高的样本作为正样本
- 随着训练进行,正样本分配动态调整
影响:YOLOv8能更好地处理边界样本(如遮挡、模糊目标),因为分配策略考虑了模型当前的学习状态。
2. 损失函数
YOLOv8创新点详解:
DFL(Distribution Focal Loss) :
- 传统回归:直接预测坐标值(点估计)
- DFL:预测坐标的概率分布(比如预测框左边框在x-1, x, x+1的概率)
- 优势:提供不确定性估计,对模糊边界更鲁棒
无obj_loss:
- v5需要判断"网格内是否有目标"(obj)
- v8通过解耦头,让分类分支直接学习"目标存在且类别正确"的联合概率
3. 数据增强
YOLOv5:
- Mosaic(图像拼接,概率1.0)
- Copy-Paste(部分版本)
- 各种几何/色彩增强
YOLOv8:
- Mosaic概率降低(默认0.5,最后10epoch关闭)
- 增加了更多的色彩增强选项
- 更精细的增强参数设置
原因:YOLOv8发现Mosaic过强会导致特征偏移(模型学会依赖拼接边界),因此后期关闭。
四、性能对比(官方COCO数据集)
解读:
- 同级别下,YOLOv8 mAP提升约 3-5%
- 代价:参数量增加 30-50% ,计算量增加 50-70%
- 推理速度:YOLOv8略慢(约10-20%),但仍在可接受范围