yolov5和yolov8的区别
·
YOLOv5 和 YOLOv8 在模型结构、标签分配、损失函数、精度和速度等方面存在诸多区别,具体如下:
- 模型结构
- 主干网络(Backbone):两者都采用 CSP 思想,但 YOLOv8 用 C2f 模块替换了 YOLOv5 的 C3 模块,且每个 stage 的 blocks 数改为了 (3,6,6,3),而不是 YOLOv5 的 (3,6,9,3)。此外,YOLOv8 中 stem 卷积是 k=3 的卷积,而 YOLOv5 是 k=6 的卷积,YOLOv8 的 x 版本 depth 因子为 1.0,与 L 版本一样,不像 YOLOv5 的 x 版本 depth 因子为 1.33。
- 颈部网络(Neck):YOLOv8 同样用 C2f 模块替换了 YOLOv5 的 C3 模块,并且将 YOLOv5 中 PAN - FPN 的 top down 上采样阶段中的卷积直接删除了。
- 头部网络(Head):YOLOv8 采用了解耦头(Decoupled - Head),和 YOLOv6、PP - YOLOE 的 head 类似,除了 cls、reg 两个 branch 外还有一个 projection conv,用于 DFL,不过 reg_max 没有加 1,而 YOLOv5 采用的是耦合头。
- 标签分配(Label Assign):YOLOv5 采用 Anchor - Based 的方式,而 YOLOv8 采用了 Anchor - Free 的方式,使用 TaskAlignedAssigner(TAL)动态匹配,没有 ATSS 静态匹配阶段,不过其 topk、alpha 参数与 YOLOv6 略有不同。
- 损失函数(Loss):YOLOv8 的分类 loss 还是使用 BCE,回归 loss 是 DFL Loss+CIoU Loss,loss_weight 的设置和 YOLOv6、PP - YOLOE 略有区别,而 YOLOv5 的损失函数构成与之不同。
- 精度:同级别模型 YOLOv8 的精度至少比 YOLOv5 高出 3 个多点,nano 版本更是高出 9.3。在参数量 FLOPs 上,YOLOv8 的 n、s、m 模型有所增加,但 l、x 版本参数量反而减小了。
- 速度:在小模型上,YOLOv8 和 YOLOv5 的速度比较接近,但大模型 m、l、x 上 YOLOv8 则变慢了不少,这可能是因为 YOLOv8 的模型结构改动较大,尤其是 head 部分加大了很多。
- 代码风格:YOLOv5 的代码普遍被认为可读性较差、不规范,而 YOLOv8 的代码风格相对完善。
- 训练细节:YOLOv8 的训练 epoch 数和预训练权重等细节与 YOLOv5 不同,且目前各个 YOLO 模型在训练设置上差异较大,很难做到公平对比。
更多推荐
所有评论(0)