YOLOv5 VS YOLOv8

news/2024/11/29 22:53:07/

1 概述

YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本。
https://github.com/ultralytics/yolov5
https://github.com/ultralytics/ultralytics

在这里插入图片描述

2 网络结构

YOLOv5 N/S/M/L/X 骨干网络的通道数设置使用同一套缩放系数;
YOLOv8 N/S/M/L/X 骨干网络的通道数设置不一样,使用不同的缩放系数。YOLOv7 网络设计也采用类似的方式作用于所有模型。

scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs

YOLOv5:
在这里插入图片描述

YOLOv8:
在这里插入图片描述

2-1 Backbone

a) 第一个卷积层的 kernel 从 6x6 变成了 3x3
b) 所有的 C3 结构换成了梯度流更丰富的 C2f 结构, C2f 比 C3 多了更多的跳层连接和额外的 Split 操作
在这里插入图片描述

c) Backbone 中 C2f 的 block 数从 3-6-9-3 改成了 3-6-6-3

2-2 Neck

a) 所有的 C3 结构换成了梯度流更丰富的 C2f 结构, C2f 比 C3 多了更多的跳层连接和额外的 Split 操作
b) 去掉了 Neck 模块中的 2 个卷积连接层

2-3 Head

a)从原先的耦合头变成了解耦头
b) YOLOv5 的 Anchor-Based 变成了 Anchor-Free
c) 回归分支使用了 Distribution Focal Loss 中提出的积分形式表示法

3 Loss

a)正负样本分配策略
YOLOX 使用 simOTA、TOOD 使用 TaskAlignedAssigner 和 RTMDet 使用 DynamicSoftLabelAssigner,
YOLOv5 采用的依然是静态分配策略,YOLOv8 直接使用 TOOD 的 TaskAlignedAssigner。
TaskAlignedAssigner 的匹配策略简单总结为: 根据分类与回归的分数加权的分数选择正样本。
b) Loss计算
Loss 计算包括 2 个分支: 分类和回归分支,没有了yolov5的 objectness 分支。
分类分支依然采用 BCE Loss;
回归分支 Distribution Focal Loss;同时还使用了 CIoU Loss。
3 个 Loss 采用一定权重比例加权即可。

4 Data augmentation

a) 引入YOLOX 中提出的最后 10 个 epoch 关闭 Mosaic 的操作
在这里插入图片描述

b) 对于不同大小模型,部分超参会进行修改,如大模型会开启 MixUp 和 CopyPaste。

5 Training strategy

a) 训练总 epoch 数从 300 提升到了 500

6 Inference

YOLOv8 的推理过程和 YOLOv5 几乎一样,唯一差别在于前面需要对 Distribution Focal Loss 中的积分表示 bbox 形式进行解码,变成常规的 4 维度 bbox.
在这里插入图片描述
yolov8 推理和后处理过程为:
(1) bbox 积分形式转换为 4d bbox 格式
对 Head 输出的 bbox 分支进行转换,利用 Softmax 和 Conv 计算将积分形式转换为 4 维 bbox 格式
(2) 维度变换
YOLOv8 输出特征图尺度为 80x80、40x40 和 20x20 的三个特征图。Head 部分输出分类和回归共 6 个尺度的特征图。将 3 个不同尺度的类别预测分支、bbox 预测分支进行拼接,并进行维度变换。为了后续方便处理,会将原先的通道维度置换到最后,类别预测分支 和 bbox 预测分支 shape 分别为 (b, 80x80+40x40+20x20, 80)=(b,8400,80),(b,8400,4)。
(3) 解码还原到原图尺度
分类预测分支进行 Sigmoid 计算,而 bbox 预测分支需要进行解码,还原为真实的原图解码后 xyxy 格式。
(4) 阈值过滤
遍历 batch 中的每张图,采用 score_thr 进行阈值过滤。在这过程中还需要考虑 multi_label 和 nms_pre,确保过滤后的检测框数目不会多于 nms_pre。
(5) 还原到原图尺度和 nms
基于前处理过程,将剩下的检测框还原到网络输出前的原图尺度,然后进行 nms 即可。最终输出的检测框不能多于 max_per_img。


http://www.ppmy.cn/news/481400.html

相关文章

python(11):python读取excel、csv文件

1.python读取excel文件 要读取Excel表格的指定行和列范围,可以使用Python中的第三方库pandas。pandas库提供了强大的数据分析和处理工具,包括读取和处理Excel文件的功能。以下是一个示例代码,演示了如何使用pandas库读取Excel表格中的指定行…

[进阶]Java:线程安全问题、取钱模拟

什么是线程安全问题? 多个线程,同时操作同一个共享资源的时候,可能会出现业务安全问题。 线程安全问题出现的原因? 存在多个线程在同时执行同时访问一个共享资源存在修改该共享资源 代码演示如下: 账户类&#xff…

云时代——华为云产品体验

数字化时代,企业上云大势所趋! 在华为云我也是有着自己的云产品的,现在我很懊悔,懊悔产品买早了!! 现在正值双十一的时候,华为云双十一的优惠太好了,好的我都想再次行动起来了&…

腾讯云2023新春盛惠提前享-千元复工复产优惠券等你来领取!

腾讯云迎来了2023年的第一波优惠活动,本次优惠活动迎来了提前享购的机会,第一个测试复工复产大礼包,总计1188元,其中还有优惠券可叠加活动使用,其次还有买赠专区活动,在此专区个人专享选购的云服务器都可以…

【华为云技术分享】云图说 | 初识云耀云服务器,打造“极优、极简”的云上体验

描述:华为云HECS(Hyper Elastic Cloud Server,云耀云服务器)是专为中小企业和个人开发者打造的新一代云服务器,助力企业上云更轻松! 华为云HECS(Hyper Elastic Cloud Server,云耀云…

【0元限免】华为云服务器等多款云产品免费试用

华为云服务成立于2011年,隶属于华为公司。华为云服务在北京、深圳、南京、美国等多地设立有研发和运营机构,贯彻华为公司"云、管、端"的战略方针,汇集海内外优秀技术人才,专注于云计算中公有云领域的技术研究与生态拓展…

华为云耀服务器与弹性云服务器的区别

云耀云服务器 云耀云服务器(Halo Elastic Cloud Server,HECS)是可以快速搭建简单应用的新一代云服务器,具备独立、完整的操作系统和网络功能。提供快速应用部署和简易的管理能力,适用于网站搭建、开发环境等低负载应用…

华为云服务之弹性云服务器ECS的深度使用和云端实践【华为云至简致远】

【摘要】 什么是弹性云服务器ECS?ECS的产品架构是什么?它有哪些优势和有应用场景?弹性云服务器ECS的使用流程是怎样的?如何运用弹性云服务器ECS搭建微信公众号后台并收发文本消息?让我们带着这些疑问,去弹性…