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

news2024/11/20 23:17:12

请添加图片描述


文章目录

    • 0.前言
    • 1.YOLOv5
      • 1.1 YOLOv5网络回顾
      • 1.2 YOLOv5网络结构图
    • 2.YOLOv8
      • 2.1 YOLOv8概述
      • 2.2 YOLOv8整体结构图
      • 2.3 YOLOv8yaml 文件与 YOLOv5yaml 文件对比
        • 2.3.1 参数部分
        • 2.3.2 主干部分
        • 2.3.3 Neck部分
        • 2.3.4 Head部分
      • 2.4 正负样本分配策略
        • 2.4.1 静态分配策略和动态分配策略有什么区别
        • 2.4.2 simOTA 策略
        • 2.4.4 Task-Aligned Assigner 策略
        • 2.4.5 损失计算
      • 2.5 各任务表现及指标
    • 参考文献


0.前言

在这里插入图片描述
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

请添加图片描述

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

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

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

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

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

在这里插入图片描述

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

YOLOv8主要有如下的优点:

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

在这里插入图片描述

模型YOLOv5 (300epoch)Params(M)FLOPs@640(B)YOLOv8 (500epoch)Params(M)FLOPs@640(B)
n28.01.94.537.33.28.7
s37.47.216.544.911.228.6
m45.421.24950.225.978.9
l49.046.5109.152.943.7165.2
x50.786.7205.753.968.2257.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 作为分类损失;使用 VFL Loss + CIOU Loss 作为回归损失。
  5. 样本匹配策略: 采用了 Task-Aligned Assigner 样本分配策略。
  6. 训练策略:新增加了最后 10 轮关闭 Mosaic 数据增强操作,该操作可以有效的提升精度。

2.2 YOLOv8整体结构图

请添加图片描述

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

2.3 YOLOv8yaml 文件与 YOLOv5yaml 文件对比

2.3.1 参数部分

请添加图片描述

左侧 yolov5s.yaml ,右侧 yolov8.yaml

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


2.3.2 主干部分

请添加图片描述

左侧 yolov5s.yaml ,右侧 yolov8.yaml

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

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

请添加图片描述


2.3.3 Neck部分

在这里插入图片描述

左侧 yolov5s.yaml ,右侧 yolov8.yaml

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


2.3.4 Head部分

请添加图片描述

头部的改动是最大的,直接将原本的耦合头改成了解耦头,值得注意力的是,这个解耦头不再有之前的 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.4.5 损失计算

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

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

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

在这里插入图片描述


2.5 各任务表现及指标

目标检测

模型尺寸
(像素)
mAPval
50-95
推理速度
CPU ONNX
(ms)
推理速度
A100 TensorRT
(ms)
参数量
(M)
FLOPs
(B)
YOLOv8n64037.380.40.993.28.7
YOLOv8s64044.9128.41.2011.228.6
YOLOv8m64050.2234.71.8325.978.9
YOLOv8l64052.9375.22.3943.7165.2
YOLOv8x64053.9479.13.5368.2257.8

分类

模型尺寸
(像素)
acc
top1
acc
top5
推理速度
CPU ONNX
(ms)
推理速度
A100 TensorRT
(ms)
参数量
(M)
FLOPs
(B) at 640
YOLOv8n-cls22466.687.012.90.312.74.3
YOLOv8s-cls22472.391.123.40.356.413.5
YOLOv8m-cls22476.493.285.40.6217.042.7
YOLOv8l-cls22478.094.1163.00.8737.599.7
YOLOv8x-cls22478.494.3232.01.0157.4154.8

实例分割

模型尺寸
(像素)
mAPbox
50-95
mAPmask
50-95
推理速度
CPU ONNX
(ms)
推理速度
A100 TensorRT
(ms)
参数量
(M)
FLOPs
(B)
YOLOv8n-seg64036.730.596.11.213.412.6
YOLOv8s-seg64044.636.8155.71.4711.842.6
YOLOv8m-seg64049.940.8317.02.1827.3110.2
YOLOv8l-seg64052.342.6572.42.7946.0220.5
YOLOv8x-seg64053.443.4712.14.0271.8344.1

参考文献

https://mp.weixin.qq.com/s/b8gpIb8UMivFm2iH7fRJ_A
目标检测算法——YOLOV8——算法详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/454394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习实战:Python基于SVD奇异值分解进行矩阵分解(八)

文章目录 1 前言1.1 奇异值分解1.2 奇异值分解的应用 2 简单计算SVD2.1 NumPy 计算 SVD2.2 scikit-learn 计算截断 SVD2.3 scikit-learn 计算随机 SVD 3 demo数据演示3.1 导入函数3.2 导入数据3.3 计算SVD 4 讨论 1 前言 1.1 奇异值分解 奇异值分解(Singular Valu…

【李老师云计算】实验二:Spark集群的搭建与求解最大值

索引 前言1. Spark部署1.1 下载Spark1.2 解压Spark1.3 修改环境变量1.4 修改主机Spark配置文件1.4.1 slaves.template文件配置1.4.2 spark-env.sh.template文件配置 1.5 分享主机Spark到从机1.6 启动Spark集群(★重启后的操作)1.7 通过jps查看是否启动成功1.8 通过网页查看是否…

Vue+Echarts 项目演练(上)整体页面结构的构建

项目分辨率响应式创建 项目顶部信息条创建 页面主体创建 接项目搭建与初始化之后继续对项目进行部署工作 项目展示: 技术栈: 1. vue3.0vue-router4.0axios 2. flex 布局 3. LESS 4. rem 屏幕适配 5. echarts5.0 项目分辨率响应式创建 对插件…

centos 8 配置LVS+ keepalived 高可用

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放&#xff0…

3105—IIS部署

一、部署子站点 1—父站点web.config配置 新增并设定location段落 <configuration><location path"." allowOverride"false" inheritInChildApplications"false"><system.webServer><handlers><add name"aspNe…

【Matlab】基于紧格式动态线性化的无模型自适应控制

例题来源&#xff1a;侯忠生教授的《无模型自适应控制&#xff1a;理论与应用》&#xff08;2013年科学出版社&#xff09;。 对应书本 4.2 单输入单输出系统(SISO)紧格式动态线性化(CFDL)的无模型自适应控制(MFAC) 例题4.1 题目要求 matlab代码 clc; clear all;%% 期望轨迹…

neo4j jdk安装版本搭配

jdk下载版本为jdk11 neo4j 为neo4j-community-4.3.15 可使用 非常流畅 没有毛病&#xff01;&#xff01;&#xff01; 这里直接给出结论&#xff0c;对于想知道这两个版本为什么适配的小伙伴可以继续往下看 出现这个界面后在网页打开browser 输入账号和密码后就可以登录了&…

【架构设计】什么是CAP理论?

1、理论 CAP理论是指计算机分布式系统的三个核心特性&#xff1a;一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容错性&#xff08;Partition Tolerance&#xff09;。 在CAP理论中&#xff0c;一致性指的是多个节点上的数据…

Vector - CAPL - CANoe硬件配置函数 - 01

CAN ACK自应答 在测试CAN&CANFD通信或者网络管理的时候&#xff0c;我们经常遇到使用报文&#xff08;网络管理报文或者通信报文&#xff09;唤醒被测件这个测试点&#xff0c;如果测试比较多的情况下&#xff0c;我们就会发现&#xff0c;如果CANoe没有接被测件或者被测件…

Python标准数据类型-Number(数字)

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1 &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;零基础入门篇 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又一座的高山…

《Java集合》ConcurrentSkipListMap

目录 数据结构findPredecessordoGetdoRemovedoPut新值插入底层创建新值的索引连接索引 数据结构 java源码中对ConcurrentSkipListMap的描述如下&#xff1a; 图中&#xff0c;第0层为具体的数据&#xff0c;第1层的每一个node都有两个子node&#xff0c;一个指向同层的右边&am…

kong(3):动态负载均衡实现

nginx下负载均衡配置 upstream tulingmall-product-upstream {server 192.168.65.190:8866 weight100;server 192.168.65.190:8867 weight100; } server {listen 80;location /pms/ {proxy_pass http://tulingmall-product-upstream;} } 通过 Kong Admin API 进行上述的负载均…

srm采购管理系统有那些功能

srm采购管理系统&#xff0c;是通过系统的手段对采购过程进行管理和控制&#xff0c;实现降低成本、提高效益、提高企业核心竞争力的目的。那么 srm采购管理系统有哪些功能呢&#xff1f; 计划管理 srm采购管理系统提供了各种物料需求计划的功能&#xff0c;以帮助企业制定并控…

前端项目实战:网易云静态页面——导航栏

文章目录 一、实现目标二、顶部实现&#xff08;背景为黑色部分&#xff09;1. 内容布局2. 左边部分网易云logo左边的列表列表元素高亮指向每个列表元素的小红色三角“下载客户端”后的hot标志 3. 右边部分登陆创作者中心搜索 三、底部实现&#xff08;背景为红色部分&#xff…

Echarts 项目演练(上)整体页面结构的构建

项目分辨率响应式创建 项目顶部信息条创建 页面主体创建 接项目搭建与初始化之后继续对项目进行部署工作 项目展示&#xff1a; 技术栈&#xff1a; 1. vue3.0vue-router4.0axios 2. flex 布局 3. LESS 4. rem 屏幕适配 5. echarts5.0 项目分辨率响应式创建 对插件…

arduino esp-01s开发环境配置(备忘)

很久没玩arduion了&#xff0c;前天一个网友提了一个问题要我帮忙&#xff0c;结果电脑重新做了系统&#xff0c;又要重新设置环境&#xff0c;结果忘记了&#xff0c;做个备忘&#xff0c;省得以后又要重新研究。 1、附加开发板管理器网址&#xff1a;http://arduino.esp8266…

L1-002 打印沙漏

L1-002 打印沙漏 分数 20 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 ************ *****所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中…

机器学习——为什么逻辑斯特回归(logistic regression)是线性模型

问&#xff1a;逻辑斯蒂回归是一种典型的线性回归模型。 答&#xff1a;正确。逻辑斯蒂回归是一种典型的线性回归模型。它通过将线性回归模型的输出结果映射到[0,1]区间内&#xff0c;表示某个事物发生的概率&#xff0c;从而适用于二分类问题。具体地说&#xff0c;它使用sig…

Flink CDC 在易车的应用实践

摘要&#xff1a;本文整理自易车数据平台负责人王林红&#xff0c;在 Flink Forward Asia 2022 数据集成专场的分享。本篇内容主要分为四个部分&#xff1a; Flink 应用场景DTS 平台建设Flink CDC Hudi 应用实践未来规划 点击查看直播回放和演讲 PPT 一、Flink 应用场景 Flink…

Mybatis-Plus详解(新建maven项目、查询所有信息、打印SQL日志、实现CRUD(增删改查)、分页、条件查询且分页,前后端分离式开发)

Mybatis-Plus详解(新建maven项目、查询所有信息、打印SQL日志、实现CRUD(增删改查)、分页、条件查询且分页&#xff0c;前后端分离式开发) MyBatis-Plus(opens new window) (简称MP) 是一个MyBatis(opens new window)的增强工具&#xff0c;在MyBatis的基础上只做增强不做改变…