【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度

这篇具有很好参考价值的文章主要介绍了【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。



0.前言

【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度
YOLO(You Only Look Once) 是由 Joseph RedmonAli Farhadi 在华盛顿大学开发的流行的目标检测和图像分割模型。第一个版本的 YOLO2015 年发布,并因其高速度和准确性而迅速赢得了广泛的关注。

YOLOv22016 年发布,通过引入批归一化、锚框和尺寸聚类等方法改进了原始模型。

YOLOv32018 年发布,通过使用更高效的骨干网络、添加特征金字塔并利用焦点损失进一步提高了模型的性能。

2020 年,YOLOv4 发布,引入了许多创新,例如使用 Mosaic 数据增强、新的无锚检测头和新的损失函数。

2021年,Ultralytics 发布了 YOLOv5,进一步提高了模型的性能,并添加了新功能,例如支持全景分割和物体跟踪。

2022年,美团发布了 YOLOv6 ,这是一款面向工业部署的目标检测模型。

2022年,YOLOv7发布,这是 AlexeyAB(YOLOv4作者)WongKinYiu(YOLOR作者) 发布的一款实时目标检测器。

2023年,Ultralytics 发布了 YOLOv8,进一步提高了模型的性能,可以同时实现分类、检测和分割等任务。


1.YOLOv5

1.1 YOLOv5网络回顾

首先回顾一下 YOLOv5 的结构

  • BackboneNew CSP-Darknet53,网络第一层 v5.0 版本前是 FOCUS 结构,v5.0 版本以后是 6×6 卷积。
  • NeckPAN 结构,v5.0 版本以前是SPP结构,v5.0版本以后是 SPPF 结构。
  • Head:常见的耦合头,和经典的YOLOv3一样。
  • Loss
    • 分类损失,采用的是BCE loss;只计算正样本的分类损失。
    • obj损失,采用的是BCE loss;这里的obj指的是网络预测的目标边界框与GT BoxCIoU,计算的是所有样本的obj损失。
    • 定位损失,采用的是CIoU loss;只计算正样本的定位损失。

1.2 YOLOv5网络结构图

【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度


2.YOLOv8

【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度

YOLOv8 项目地址:https://github.com/ultralytics/ultralytics

Ultralytics YOLOv8 是由 Ultralytics 开发的 YOLO 目标检测和图像分割模型的最新版本。YOLOv8 是一款先进的、最新的模型,基于之前 YOLO 版本的成功,并引入了新的特性和改进,进一步提高了性能和灵活性。

YOLOv8 的一个关键特性是其可扩展性。它被设计为一个框架,支持所有之前的 YOLO 版本,使得在不同版本之间切换并比较它们的性能变得非常容易。这使得 YOLOv8 成为那些想要利用最新的 YOLO 技术同时仍能够使用现有 YOLO 模型的用户的理想选择。

除了可扩展性之外,YOLOv8 还包括许多其他创新,使其成为一种适用于广泛目标检测和图像分割任务的吸引人选择。这些包括一个新的骨干网络、一个新的无锚点检测头和一个新的损失函数。此外,YOLOv8 高效并且可以在多种硬件平台上运行,从 CPUGPU

总的来说,YOLOv8 是一款强大、灵活的目标检测和图像分割工具,它提供了最新的 SOTA 技术以及使用和比较所有之前 YOLO 版本的能力,是一个兼具优点的选择。

【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度

ultralytics 并没有直接将开源库命名为 YOLOv8,而是直接使用 ultralytics 这个词,原因是 ultralytics 将这个库定位为算法框架,而非某一个特定算法,一个主要特点是可扩展性。其希望这个库不仅仅能够用于 YOLO 系列模型,而是能够支持非 YOLO 模型以及分类分割姿态估计等各类任务。

YOLOv8主要有如下的优点:

  • 用户友好的API
  • 可以同时实现分类、检测、分割和姿态估计任务
  • 速度更快、准确率更高
  • 全新的结构
  • 新的损失函数
  • Anchor free

【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度

模型 YOLOv5 (300epoch) Params(M) FLOPs@640(B) YOLOv8 (500epoch) Params(M) FLOPs@640(B)
n 28.0 1.9 4.5 37.3 3.2 8.7
s 37.4 7.2 16.5 44.9 11.2 28.6
m 45.4 21.2 49 50.2 25.9 78.9
l 49.0 46.5 109.1 52.9 43.7 165.2
x 50.7 86.7 205.7 53.9 68.2 257.8

表格中的数据来源于COCO数据集,但是在其它数据集上并不一定是v8优于v5。


2.1 YOLOv8概述

  1. Backbone: 第一层卷积由原本的 6×6 卷积改为 3×3 卷积;参考 YOLOv7 ELAN 设计思想将 C3 模块换成了 C2f 模块,并配合调整了模块的深度。
  2. Neck:移除了 1×1 卷积的降采样层;同时也将原本的 C3 模块换成了 C2f 模块。
  3. Head:这部分改动较大,换成了解耦头结构,将分类任务和回归任务解耦;同时也将 Anchor-Based 换成了 Anchor-Free
  4. Loss:使用 BCE Loss 作为分类损失;使用 DFL Loss + CIOU Loss 作为回归损失。
  5. 样本匹配策略: 采用了 Task-Aligned Assigner 样本分配策略。
  6. 训练策略:新增加了最后 10 轮关闭 Mosaic 数据增强操作,该操作可以有效的提升精度。

2.2 YOLOv8整体结构图

【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度

图片来源https://github.com/open-mmlab/mmyolo/blob/dev/configs/yolov8(博主修正后)

2.3 YOLOv8yaml 文件与 YOLOv5yaml 文件对比

2.3.1 参数部分

【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度

左侧 yolov5s.yaml ,右侧 yolov8.yaml

因为YOLOv8采用Anchor free的范式,所以在 yaml 文件中移除了 anchor 的参数部分,并且YOLOv8将多个不同版本的模型写到了一起,除此之外在深度因子宽度因子后又新增了一个最大通道数的参数,我觉得这可能和YOLOv7的模型理念有些相似,单凭宽度因子调整的通道数应该不是最优的,所以s\m\l没有遵循同一套的缩放系数。


2.3.2 主干部分

【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度

左侧 yolov5s.yaml ,右侧 yolov8.yaml

主干部分改进主要有以下三点:

  • 第一层卷积由原本的 6×6 卷积改为 3×3 卷积 。
  • 所有的 C3 模块改为 C2f 模块 。
  • 深度由 C3 模块 3、6、9、3 改为C2f3、6、6、3

【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度


2.3.3 Neck部分

【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度

左侧 yolov5s.yaml ,右侧 yolov8.yaml

依然采用 PAN 结构,但是删除了降维用的 1×1 卷积。


2.3.4 Head部分

【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度

头部的改动是最大的,直接将原本的耦合头改成了解耦头,值得注意力的是,这个解耦头不再有之前的 objectness 分支,而是直接解耦成了两路,并且其回归分支使用了 Distribution Focal Loss 中提出的积分形式表示法。


2.4 正负样本分配策略

2.4.1 静态分配策略和动态分配策略有什么区别

在目标检测中,正负样本分配策略通常用于在训练期间为每个样本分配一个权重,以便模型更加关注困难的样本和重要的样本。动态分配策略静态分配策略是两种常见的正负样本分配策略。

静态分配策略通常是在训练开始之前确定的,固定为一组预先定义的权重,这些权重不会在训练过程中改变。这种分配策略通常基于经验得出,可以根据数据集的特点进行调整,但是不够灵活,可能无法充分利用样本的信息,导致训练效果不佳。

相比之下,动态分配策略可以根据训练的进展和样本的特点动态地调整权重。在训练初期,模型可能会很难区分正负样本,因此应该更加关注那些容易被错分的样本。随着训练的进行,模型逐渐变得更加强大,可以更好地区分样本,因此应该逐渐减小困难样本的权重,同时增加易分样本的权重。动态分配策略可以根据训练损失或者其他指标来进行调整,可以更好地适应不同的数据集和模型。

总的来说,动态分配策略通常比静态分配策略更加灵活和高效,可以帮助模型更好地利用样本信息,提高训练效果。虽然动态分配策略可以在训练过程中根据模型的学习情况来适当调整正负样本的比例,但也存在一些缺点。

  1. 动态分配策略需要不断地监控模型在训练集上的表现,并根据表现调整正负样本的比例,因此会增加训练的计算量和时间成本。
  2. 动态分配策略可能会导致过拟合。因为动态分配策略会在训练过程中频繁地改变正负样本的比例,可能会导致模型过于关注某些样本,而忽略了其他样本,从而导致过拟合。
  3. 动态分配策略的结果难以复现。由于动态分配策略的调整是基于模型当前的学习情况,因此同样的训练过程可能会得到不同的正负样本比例,使得实验的结果难以复现和比较。

2.4.2 simOTA 策略

simOTAYOLOX目标检测算法中的一种正负样本分配策略,全称为Similarity Overlap Threshold Assigner。它的主要思想是通过计算anchorground truth之间的相似度,来动态地分配正负样本。

在传统的目标检测算法中,通常使用IoU来度量anchorground truth之间的重叠程度,然后根据设定的阈值来判断是否将anchor分配为正样本或负样本。但这种方法存在一个问题,就是对于一些尺寸较小的目标,由于它们的IoU值通常比较低,因此很容易被分配为负样本,从而影响了检测性能。

simOTA的核心思想是:根据目标的相似度来确定正负样本的阈值,进而实现样本的自适应分配。在训练时,首先将所有的目标两两配对,并计算它们的相似度得分。然后,通过对相似度分数进行统计,得到一个阈值范围,用于确定正负样本的分配阈值。具体而言,相似度得分越高,对应的IoU阈值就越高,样本就越容易被视为正样本;相反,相似度得分越低,对应的IoU阈值就越低,样本就更容易被视为负样本。

通过引入相似度信息,simOTA可以更加灵活地处理目标间的差异性,从而提高模型的泛化能力和检测性能。实验结果表明,simOTA可以显著提高YOLOX模型在各种基准数据集上的表现,同时具有更好的鲁棒性和泛化性能。

相比传统的IoU分配方法,simOTA能够更好地处理尺寸较小的目标,从而提高了目标检测的性能。


2.4.4 Task-Aligned Assigner 策略

Task-Aligned Assigner是一种TOOD中正负样本分配策略的方法,其基本原理是在训练过程中动态地调整正负样本的分配比例,以更好地适应不同的任务和数据分布,YOLOv8就是采用了这种策略。

具体而言,Task-Aligned Assigner基于一个关键的假设,即在不同的任务和数据集中,正负样本的分布情况可能会有所不同,因此需要针对具体的任务和数据分布,调整正负样本的分配比例,从而达到更好的检测效果。

为了实现这一目的,Task-Aligned Assigner提出了一个基于“任务自适应”的正负样本分配方法。具体而言,它使用一个任务感知的分配模块来估计不同任务下正负样本的分布情况,并基于这个分布情况动态调整正负样本的分配比例。

分配模块首先计算每个Anchor和每个Ground Truth Box之间的相似度,然后通过一个多任务学习框架,将相似度与正负样本标签的分布情况进行建模。最终,通过这个分布情况来动态地调整正负样本的分配比例,以更好地适应不同的任务和数据分布。

在具体实现中,Task-Aligned Assigner采用了一种基于动态阈值的分配方法。具体而言,它在计算AnchorGround Truth Box之间的IoU时,采用了一个基于任务自适应的动态阈值来判断正负样本的分配。通过这种方式,Task-Aligned Assigner能够根据具体的任务和数据分布,自适应地调整正负样本的分配比例,从而获得更好的检测性能。

Task-Aligned Assigner的公式如下:
t = s α × u β t=s^α\times u^β t=sα×uβ
使用上面公式来对每个实例计算 Anchor-level 的对齐程度:su 分别为分类得分和 IoU 值,αβ 为权重超参。t 可以同时控制分类得分和 IoU 的优化来实现 Task-Alignment,可以引导网络动态的关注于高质量的Anchor。采用一种简单的分配规则选择训练样本:对每个实例,选择 m 个具有最大 t 值的 Anchor 作为正样本,选择其余的 Anchor 作为负样本。然后,通过损失函数(针对分类与定位的对齐而设计的损失函数)进行训练。

YOLOv8源码中各个参数取值如下:

【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度


2.4.5 损失计算

Loss 计算包括 2个分支:分类和回归分支,没有了之前的 objectness 分支。

  • 分类分支依然采用 BCE Loss
  • 回归分支需要和 Distribution Focal Loss 中提出的积分形式表示法绑定,因此使用了 Distribution Focal Loss, 同时还使用了 CIoU Loss

3Loss 采用一定权重比例加权即可,默认的比例是7.5:0.5:1.5

【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度


2.5 各任务表现及指标

目标检测

模型 尺寸
(像素)
mAPval
50-95
推理速度
CPU ONNX
(ms)
推理速度
A100 TensorRT
(ms)
参数量
(M)
FLOPs
(B)
YOLOv8n 640 37.3 80.4 0.99 3.2 8.7
YOLOv8s 640 44.9 128.4 1.20 11.2 28.6
YOLOv8m 640 50.2 234.7 1.83 25.9 78.9
YOLOv8l 640 52.9 375.2 2.39 43.7 165.2
YOLOv8x 640 53.9 479.1 3.53 68.2 257.8

分类

模型 尺寸
(像素)
acc
top1
acc
top5
推理速度
CPU ONNX
(ms)
推理速度
A100 TensorRT
(ms)
参数量
(M)
FLOPs
(B) at 640
YOLOv8n-cls 224 66.6 87.0 12.9 0.31 2.7 4.3
YOLOv8s-cls 224 72.3 91.1 23.4 0.35 6.4 13.5
YOLOv8m-cls 224 76.4 93.2 85.4 0.62 17.0 42.7
YOLOv8l-cls 224 78.0 94.1 163.0 0.87 37.5 99.7
YOLOv8x-cls 224 78.4 94.3 232.0 1.01 57.4 154.8

实例分割

模型 尺寸
(像素)
mAPbox
50-95
mAPmask
50-95
推理速度
CPU ONNX
(ms)
推理速度
A100 TensorRT
(ms)
参数量
(M)
FLOPs
(B)
YOLOv8n-seg 640 36.7 30.5 96.1 1.21 3.4 12.6
YOLOv8s-seg 640 44.6 36.8 155.7 1.47 11.8 42.6
YOLOv8m-seg 640 49.9 40.8 317.0 2.18 27.3 110.2
YOLOv8l-seg 640 52.3 42.6 572.4 2.79 46.0 220.5
YOLOv8x-seg 640 53.4 43.4 712.1 4.02 71.8 344.1

参考文献

https://mp.weixin.qq.com/s/b8gpIb8UMivFm2iH7fRJ_A
目标检测算法——YOLOV8——算法详解文章来源地址https://www.toymoban.com/news/detail-415400.html

到了这里,关于【2】YOLOv8原理解析:重新定义实时目标检测的速度和精度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • YOLOv8目标检测:自定义数据集训练与评估

    摘要:在本教程中,我们将详细介绍如何使用自定义数据集训练YOLOv8模型,并用Python代码评估模型性能。 正文: 一、准备自定义数据集 为了训练YOLOv8模型,我们需要一个标注好的自定义数据集。数据集应包含图像文件和对应的标注文件,标注文件中包含目标类别和边界框信

    2024年02月06日
    浏览(38)
  • 在自定义数据集上训练 YOLOv8 进行目标检测

    这是目标检测中令人惊叹的 AI 模型之一。在这种情况下,您无需克隆存储库、设置要求并配置模型,就像在 YOLOv5 及其之前的版本中所做的那样。 在 YOLOv8 中,不需要执行这些手动任务。您只需安装 Ultralytics 即可,我将向您展示如何通过一个简单的命令安装它。 这是一个提

    2024年02月01日
    浏览(40)
  • 用于增强现实的实时可穿带目标检测:基于YOLOv8进行ONNX转换和部署

    点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID | 计算机视觉研究院 学习群 | 扫码在主页获取加入方式 计算机视觉研究院专栏 Column of Computer Vision Institute 今天给大家介绍了一种在增强现实(AR)环境中使用机器学习(ML)进行实时目标检测的软件体

    2024年02月04日
    浏览(37)
  • Yolov8目标检测

    Yolov8只支持yolo格式的数据,所以,需要将数据集格式调整为 新建一个模型配置文件yolov8.yaml,里面添加数据路径和类别: 具体参数可参看链接 训练完会生成一个文件夹存放所有结果 在生成的predict文件夹下就能看到效果了(像标注的效果) 使用不同方式(比如opencv)调图片去检测

    2024年02月15日
    浏览(28)
  • YOLOv8目标检测算法

    YOLOv8目标检测算法相较于前几代YOLO系列算法具有如下的几点优势: 更友好的安装/运行方式 速度更快、准确率更高 新的backbone,将YOLOv5中的C3更换为C2F YOLO系列第一次尝试使用anchor-free 新的损失函数 YOLOv8 是 Ultralytics 公司继 YOLOv5 算法之后开发的下一代算法模型,目前支持图像

    2024年02月13日
    浏览(30)
  • yolov8 目标检测与跟踪

    参考: https://github.com/ultralytics/ultralytics https://github.com/TommyZihao/Train_Custom_Dataset/blob/main/%E7%9B%AE%E6%A0%87%E8%BF%BD%E8%B8%AA/%E5%85%AC%E5%BC%80%E8%AF%BE/ https://www.rstk.cn/news/42041.html?action=onClick *** 跟踪与检测都是用的YOLOv8目标检测一样的权重,跟踪算法暂时支持BoT-SORT 、 ByteTrack两种 视频下载

    2024年02月09日
    浏览(31)
  • Yolov8小目标检测(1)

      💡💡💡 本文目标: 通过原始基于yolov8的红外弱小目标检测,训练得到初版模型,进行问题点分析; 💡💡💡 Yolo小目标检测 ,独家首发创新(原创),适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文章提供每一步步骤和源码,带你轻松实现小目标检测涨点 💡💡💡 重

    2024年02月11日
    浏览(22)
  • YOLOv8『小目标』检测指南

    目前博主课题组在进行物体部件的异常检测项目,项目中需要先使用 YOLOv8 进行 目标检测 ,然后进行 图像切割 ,最后采用 WinCLIP 模型 进行部件 异常检测 但是在实际操作过程中出现问题, YOLOv8 模型目标检测在 大目标精确度不错 ,但是在 小目标检测中效果极差 我们之前的

    2024年02月08日
    浏览(29)
  • 睿智的目标检测66——Pytorch搭建YoloV8目标检测平台

    又搞了个YoloV8,看起来似乎在抢这个名字。 https://github.com/bubbliiiing/yolov8-pytorch 喜欢的可以点个star噢。 很多细节与YoloV7关系并不大,大概不是同一组人开发的原因。 1、主干部分:与此前的YoloV5系列差距不大,不过相比之前第一次卷积的卷积核缩小了,是3而不是6。另外CSP模

    2024年02月06日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包