文章目录

  • 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)
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 作为分类损失;使用 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)
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——算法详解

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

  1. YOLOv7如何提高目标检测的速度和精度,基于优化算法提高目标检测速度

    目录 一.学习率调度 二.权重衰减和正则化 三.梯度累积和分布式训练 1.梯度累积 2.分布式训练 四.自适应梯度裁剪 大家好,我是哪吒. 上一篇介绍了YOLOv7如何提高目标检测的速度和精度,基于模 ...

  2. 使用 YOLOv8 和 Streamlit 构建实时对象检测和跟踪应用程序:第2部分-探索模型和目标检测

    在教程系列的第 1 部分中,我们向您介绍了使用 YOLOv8 和 Streamlit 的实时对象检测和跟踪应用程序.我们还使用一些演示图像演示了该应用程序的功能. 我们详细解释了我们为这个项目选择 Y ...

  3. 【目标检测】英雄联盟能用YOLOv5实时目标检测了 支持onnx推理

    目录 一.项目介绍 二.项目结构 三.准备数据 1.数据标注 2.数据转换格式 四.执行训练 1.anchors文件 2.标签文件 3.预训练模型 4.训练数据 5.修改配置 6.执行训练 五.执行预 ...

  4. 使用SlimYOLOv3框架实现实时目标检测

    1. 介绍 人类可以在几毫秒内在我们的视线中挑选出物体.事实上,你现在就环顾四周,你将观察到周围环境并快速检测到存在的物体,并且把目光回到我们这篇文章来.大概需要多长时间? 这就是实时目标检测.如果我 ...

  5. ibm db2获取目标时间与当前时间的差值_高帧频视觉实时目标检测系统

    基于机器视觉的智能目标检测系统应用非常广泛,尤其在航天军工等领域中,经常涉及高速目标的实时检测和控制,对目标检测的智能性和实时性提出了更严格的要求.在这种应用中,视觉系统相对雷达.声纳具有信息量大.抗 ...

  6. YOLO_ Real-Time Object Detection 实时目标检测

    YOLO: Real-Time Object Detection 实时目标检测 You only look once(YOLO)是一种先进的实时目标检测系统.在Pascal Titan X上,它以每秒 ...

  7. ibm db2获取目标时间与当前时间的差值_【学术论文】高帧频视觉实时目标检测系统...

    摘要 为了实现高速场景下的智能实时目标检测,设计了一种基于ZYNQ7000系列FPGA的高速相机平台,并利用该平台进行目标检测算法实现,形成了一套高帧频实时目标检测系统样机. 该系统将高速CMOS图像 ...

  8. MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《9》

    MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)<1>:论文源地址,克隆MXNet版本的源码,安装环境与测试,以及对下载的源码的每个目录做什么用的,做个解释. MXN ...

  9. Yolo:实时目标检测实战(下)

    Yolo:实时目标检测实战(下) YOLO:Real-Time Object Detection After a few minutes, this script will generate all ...

最新文章

  1. java连接redis无法连接,报异常RedisConnectionException
  2. 网络宣传推广教大家网站的过期页面更合理的处理方法
  3. Bootstrap之栅格系统
  4. 获取会话名称时错误 5_5种可重复的数据科学工具
  5. 设计模式 -(1)简单工厂模式(创建型)
  6. MySQL Study之--MySQL下图形工具的使用(phpMyAdmin)
  7. 计算机辅助设计autocad2005(建筑)四级考试,计算机辅助设计(AutoCAD平台)
  8. android 框架作用是什么意思,Android系统上的Xp框架有什么用
  9. js经纬度十进制度和度分秒互转
  10. Proxmark3教程2:用Pm3Gui_Pro V5.2 新功能 IC卡匠数据维护
  11. 【VS开发】ClientToScreen 和ScreenToClient 用法
  12. Linux上Meson安装及使用
  13. 解决:远程服务器(阿里云 VHost)和本地文件传输 windows
  14. 雾霾天气下运动目标检测技术MATLAB
  15. 计算图像中任意四个点连成的四边形面积与Ground truth的IOU(Python)
  16. 2022 -7-18 第八小组 顾宇佳 学习笔记
  17. python操作xlsx格式文件
  18. Metasploit工具配置使用
  19. iOS 图标上的数字
  20. 七月算法机器学习笔记4 凸优化

热门文章

  1. golang美国纽约时间
  2. RocketMQ(十二)消息堆积与消息延迟
  3. 学习python打卡第一天
  4. 小时转换为机器学习特征_通过机器学习将pdf转换为有声读物
  5. Eric6启动时“无法定位序数4540于动态链接库LIBEAY32.dll”的错误
  6. 合肥一学生高考“牛文”曝光 2009安徽高考作文《弯道超越》
  7. javamail 获取邮箱文件夹列表
  8. 使用chrony做时间同步
  9. 第一份工作今天上班做HR,领导让我做一个招聘流程,怎么做呀?
  10. 云顶之弈机器人怎么拉人_LOL云顶之弈机器人刺客流怎么玩