深入探讨YOLOv8 网络架构

news/2025/2/23 2:13:51/

YOLOv8 架构:深入探讨

YOLOv8 尚未发表论文,因此我们无法直接了解其创建过程中进行的直接研究方法和消融研究。话虽如此,我们分析了有关模型的存储库和可用信息,以开始记录 YOLOv8 中的新功能。

如果您想自己查看代码,请查看YOLOv8 存储库并查看此代码差异以了解一些研究是如何完成的。

在这里,我们提供了有影响力的模型更新的快速总结,然后我们将查看模型的评估,这不言自明。

GitHub 用户 RangeKing 制作的下图显示了网络架构的详细可视化。

在这里插入图片描述

YOLOv8 架构,GitHub 用户 RangeKing 制作的可视化

无锚检测

YOLOv8 是一个无锚模型。这意味着它直接预测对象的中心而不是已知锚框的偏移量。

YOLO中anchor box的可视化

锚框是早期 YOLO 模型中众所周知的棘手部分,因为它们可能代表目标基准框的分布,而不是自定义数据集的分布。

YOLOv5 的检测头,在netron.app中可视化

Anchor free 检测减少了框预测的数量,从而加速了非最大抑制 (NMS),这是一个复杂的后处理步骤,在推理后筛选候选检测。

YOLOv8 的检测头,在netron.app中可视化

新的卷积

stem 的第一个6x6conv 被替换为 a 3x3,主要构建块被更改,并且C2f替换了C3。该模块总结如下图,其中“f”是特征数,“e”是扩展率,CBS是由a Conv、a BatchNorm、a组成的block SiLU

在中, (两个具有剩余连接的 3x3C2f的奇特名称)的所有输出都被连接起来。而在仅使用最后一个输出。Bottleneck``convs``C3``Bottleneck

新的 YOLOv8C2f模块

Bottleneck与 YOLOv5 中的相同,但第一个 conv 的内核大小从更改1x13x3. 从这些信息中,我们可以看到 YOLOv8 开始恢复到 2015 年定义的 ResNet 块。

在颈部,特征直接连接而不强制使用相同的通道尺寸。这减少了参数数量和张量的整体大小。

关闭马赛克增强

深度学习研究倾向于关注模型架构,但 YOLOv5 和 YOLOv8 中的训练例程是它们成功的重要部分。

YOLOv8 在在线训练期间增强图像。在每个时期,模型看到它所提供的图像的变化略有不同。

其中一种增强称为马赛克增强。这涉及将四张图像拼接在一起,迫使模型学习新位置、部分遮挡和不同周围像素的对象。

棋盘照片马赛克增强

然而,如果在整个训练过程中执行,这种增强根据经验显示会降低性能。在最后十个训练时期将其关闭是有利的。

这种变化是在 YOLOv5 repo 和 YOLOv8 研究中加班时对 YOLO 建模给予仔细关注的典范。

YOLOv8 精度改进

YOLOv8 研究的主要动机是对COCO 基准进行实证评估。随着网络和训练例程的每一部分都得到调整,新的实验将运行以验证更改对 COCO 建模的影响。

YOLOv8 COCO 精度

COCO(Common Objects in Context)是评估对象检测模型的行业标准基准。在 COCO 上比较模型时,我们查看推理速度的 mAP 值和 FPS 测量。模型应该以相似的推理速度进行比较。

下图显示了 YOLOv8 在 COCO 上的准确性,使用的数据由 Ultralytics 团队收集并发布在他们的YOLOv8 README中:

YOLOv8 COCO评测

在撰写本文时,YOLOv8 COCO 的准确性是推理延迟相当的模型的最新水平。

RF100 精度

在 Roboflow,我们从包含超过 100,000 个数据集的存储库Roboflow Universe中提取了 100 个样本数据集,以评估模型对新领域的泛化能力。我们的基准测试是在英特尔的支持下开发的,是计算机视觉从业者的基准测试,旨在为以下问题提供更好的答案:“该模型在我的自定义数据集上的表现如何?”

我们在我们的RF100基准测试中与 YOLOv5 和 YOLOv7 一起评估了 YOLOv8,下面的箱线图显示了每个模型的_mAP@.50。_

我们将每个模型的小型版本运行 100 个 epoch,我们只用一个种子运行一次,因此由于梯度抽签,我们对这个结果持保留态度**。**

下面的箱线图告诉我们,当针对 Roboflow 100 基准进行测量时,YOLOv8 有更少的离群值和更好的 mAP。
在这里插入图片描述

YOLOs _mAP@.50_对抗 RF100

以下条形图显示了每个 RF100 类别的平均_mAP@.50_。同样,YOLOv8 优于所有以前的模型。

YOLO 相对于 RF100 类别的平均_mAP@.50_

相对于 YOLOv5 评估,YOLOv8 模型在每个数据集上产生了相似的结果,或者显着提高了结果。

YOLOv8 存储库和 PIP 包

YOLOv8代码库旨在成为社区使用和迭代模型的地方。由于我们知道这个模型会不断改进,我们可以将最初的 YOLOv8 模型结果作为基线,并期待随着新迷你版本的发布而进行未来的改进。

我们希望的最好结果是研究人员开始在 Ultralytics 存储库之上开发他们的网络。研究一直在 YOLOv5 的分支中进行,但如果模型在一个位置制作并最终合并到主线中会更好。

YOLOv8 存储库布局

YOLOv8 模型使用与 YOLOv5 相似的代码和新结构,其中分类、实例分割和对象检测任务类型由相同的代码例程支持。

模型仍然使用相同的YOLOv5 YAML 格式进行初始化,数据集格式也保持不变。

YOLOv8 CLI

ultralytics软件包随 CLI 一起分发。许多 YOLOv5 用户都熟悉这一点,其中核心训练、检测和导出交互也是通过 CLI 完成的。

yolo task=detect mode=val model={HOME}/runs/detect/train/weights/best.pt data={dataset.location}/data.yaml

您可以将 a taskin [detect, classify, segment]、 a modein [train, predict, val, export]、 amodel作为未初始化.yaml或先前训练的.pt文件传递。

YOLOv8 Python 包

除了可用的 CLI 工具外,YOLOv8 现在作为 PIP 包分发。这使本地开发变得更加困难,但释放了将 YOLOv8 编织到 Python 代码中的所有可能性。

from ultralytics import YOLO# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from scratch
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)# Use the model
results = model.train(data='coco128.yaml', epochs=3)  # train the model
results = model.val()  # evaluate model performance on the validation set
results = model('https://ultralytics.com/images/bus.jpg')  # predict on an image
success = YOLO('yolov8n.pt').export(format='onnx')  # export a model to ONNX format

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

相关文章

【C++修炼之路】类和对象(中)—— 筑基篇

👑作者主页:安 度 因 🏠学习社区:StackFrame 📖专栏链接:C修炼之路 文章目录一、前言二、类的六个默认成员函数三、构造函数1、概念2、特性四、析构函数1、概念2、特性五、拷贝构造函数1、概念2、特性六、运…

SpringBoot启动流程源码解析

提起微服务,SpringBoot是我们经常要谈的一个话题。SpringBoot的搭建过程非常简单,几分钟就可以搞定一个小demo。启动类也很简单。 一共两步。 SpringBootApplication public class Application{public static void main(String[] args) {SpringApplicat…

凸优化学习:PART3凸函数的扩展——拟凸函数和对数凸函数

拟凸函数(Quasi Convex function) 拟凸函数是非凸优化中较容易的一种 定义及例子 函数f:Rn→Rf:\R^n\rightarrow \Rf:Rn→R称为拟凸函数(或者单峰函数),如果其定义域及所有下水平集 Sα{x∈domf∣f(x)≤α},α∈RS_{\…

Java设计模式--建造者模式

目录 1. 概述 2. 建造者的四个角色 3. 用例图 4. 示例代码 5. 实际应用 6. 建造者模式的注意事项和细节 1. 概述 建造者模式(创建型):又叫生成器模式,可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现…

Tarjan算法的中的low值

参考链接: 强连通分量 - OI Wiki (oi-wiki.org)graphs - Tarjan’s SCC : example showing necessity of lowlink definition and calculation rule? - Computer Science Stack Exchange《算法竞赛》罗永军,郭卫斌 错误解释: lowlowlow值是…

Python-项目实战--飞机大战-pygame快速入门(2)

项目准备新建飞机大战项目新建一个hm_01_pygame入门.py导入游戏素材图片游戏的第一印象把一些静止的图像绘制到游戏窗口中根据用户的交互或其他情况,移动这些图像,产生动画效果根据图像之间是否发生重叠,判断敌机是否被摧毁等其他情况1.使用p…

【单元测试】C++单元测试框架Google Test入门之六:运行参数

文章目录一、前言二、基本介绍三、参数列表3.1 测试案例集合3.2 测试案例输出3.3 对案例的异常处理四、XML报告输出格式五、总结一、前言 使用gtest编写的测试案例通常本身就是一个可执行文件,因此运行起来非常方便。同时,gtest也为我们提供了一系列的运…

Spring Boot(五):Spring Boot项目配置详解

文章目录 Spring Boot项目配置详解 一、properties配置文件 二、yml配置文件 1、基本格式要求 2、配置文件存放位置 3、配置文件存放读取优先级 三、bootstrap配置文件 四、SpringBoot项目结构 Spring Boot项目配置详解 一、properties配置文件 SpringBoot默认读取项…