草庐IT

深入探讨YOLOv8 网络架构

猛男技术控 2023-12-23 原文

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

有关深入探讨YOLOv8 网络架构的更多相关文章

  1. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  2. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  3. ruby - Ruby 和 Ruby on Rails 中的三层架构 - 2

    我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby​​1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails

  4. ruby - 检查网络文件是否存在,而不下载它? - 2

    是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby​​不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案

  5. ruby - 404 未找到,但可以从网络浏览器正常访问 - 2

    我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT

  6. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  7. 【网络】-- 网络基础 - 2

    (本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。    如:有三个人,每个人做的不同的事物,但是是需要协作的完成。    而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据

  8. 常见网络安全产品汇总(私信发送思维导图) - 2

    安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un

  9. 【Linux操作系统】——网络配置与SSH远程 - 2

    Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好

  10. ruby - 在 Ruby 中训练神经网络 - 2

    在神经网络方面,我完全是个初学者。我整天都在与ruby​​-fann和ai4r搏斗,不幸的是我没有任何东西可以展示,所以我想我会来到StackOverflow并询问这里的知识渊博的人。我有一组样本——每天都有一个数据点,但它们不符合我能够找出的任何明确模式(我尝试了几次回归)。不过,我认为看看是否有任何方法可以仅从日期预测future的数据会很好,而且我认为神经网络将是生成希望表达这种关系的函数的好方法.日期是DateTime对象,数据点是十进制数,例如7.68。我一直在将DateTime对象转换为float,然后除以10,000,000,000得到一个介于0和1之间的数字,我一直在将

随机推荐