目标检测-One Stage-YOLOv8

news2024/11/15 9:23:53

文章目录

  • 前言
  • 一、YOLOv8的网络结构和流程
  • 二、YOLOv8的创新点
  • 三、创新点详解
    • CSP、C3和C2f
    • TaskAlignedAssigner 正样本分配策略
    • Distribution Focal Loss
    • 关闭 Mosiac
  • 总结


前言

终于到了YOLO系列最新最火爆的网络–YOLOv8,前面YOLOv5中已经提到ultralytics团队集成了先进的YOLO系列目标检测最佳实践,YOLOv8则是他们的最新力作。

YOLOv8本身的创新点不多,偏向工程实践。


提示:以下是本篇文章正文内容,下面内容可供参考

一、YOLOv8的网络结构和流程

YOLOv8同样根据缩放给出了以下版本:YOLOv8nYOLOv8sYOLOv8mYOLOv8lYOLOv8x,同时包括两种输入尺度:P5 640P6 1280

YOLOv8 P5的网络结构图如下,相比于YOLOv5,可以看出改进在于:

  1. Backbone+Neck:修改CSP结构为C2f
  2. Head:使用了Decouped Head,变为Anchor-Free
    **加粗样式**

二、YOLOv8的创新点

  1. 骨干网络和 Neck 部分参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数,属于对模型结构精心微调
  2. 缩放的模型不再使用同一套参数
  3. Head部分采用先进Decouped Head,变为anchor-free
  4. Loss 计算方面采用了 TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss
  5. 训练的数据增强部分引入了 YOLOX 中的最后 10 epoch 关闭 Mosiac 增强的操作,可以有效地提升精度

三、创新点详解

CSP、C3和C2f

之前在目标检测-One Stage-YOLOv5的讲解中说到了YOLOv5(5.0) 中使用的残差块是CSP结构,在新版YOLOv5(6.0)中, 则将CSP结构改为C3结构。YOLOv8中又将C3结构改为C2f结构。

  • CSPNet被提出的主要目的是为了保证在模型检测和识别精度没有下降的情况下,减少计算量,提高推理速度。它的主要思想是通过分割梯度流,使梯度流通过不同的网络路径传播。通过拼接和过渡等操作,从而实现更丰富的梯度组合信息。
  • CSP和C3的结构和作用基本相同,区别在于C3去掉了残差单元(Res unit,也可叫Bottleneck)支路中后面的卷积层 以及 concat后的BN和Leaky relu层,并将激活函数改为SiLu。
  • 通过C3替换CSP,可以起到精简网络结构,减少计算量,降低模型推理时间的作用。这样操作在YOLOV5X上模型参数量可以从89M下降到87.7M,推理时间从6.9ms下降到6.0ms,mAP从49.2提升到50.1。
  • YOLOv8选用梯度流更丰富的C2f结构替换了YOLOv5中的C3结构,为了轻量化也缩减了骨干网络中最大stage的blocks数,同时不同缩放因子N/S/M/L/X的模型不再是共用一套模型参数,M/L/X大模型还缩减了最后一个stage的输出通道数,进一步减少参数量和计算量。
  • C2f模块就是参考了C3模块以及ELAN的思想进行的设计,让YOLOv8可以在保证轻量化的同时获得更加丰富的梯度流信息
  1. CSP(YOLOv5 -5.0)
    在这里插入图片描述

  2. C3(YOLOv5-6.0)
    在这里插入图片描述

  3. C2f(YOLOv8)
    在这里插入图片描述

TaskAlignedAssigner 正样本分配策略

TaskAlignedAssigner是一种标签分配方法,其匹配策略简单总结为: 根据分类与回归的分数加权的分数选择正样本。

  1. 计算对齐程度分数矩阵

t = s α + u β t=s^\alpha+u^\beta t=sα+uβ

s 是标注类别对应的预测分值,u 是预测框和 gt 框的 iou,两者相乘就可以得到对齐程度分数 alignment_metrics。

  1. 基于 alignment_metrics 对齐分数选取 topK 的作为正样本

Distribution Focal Loss

和YOLOx不同的是,YOLOv8 loss 计算包括 2 个分支: 分类和回归分支,没有了之前的 objectness 分支。其中

  • 分类分支依然采用 BCE Loss
  • 回归分支采用的是 CIoU Loss 结合 DFL(Distribution Focal Loss)的方式,具体流程如下:

ps:

  • 变为Anchor-Free后,由于其基于中心点的策略(Center-based methods)后,模型从输出“锚框大小偏移量(offest)”变为"预测目标框左、上、右、下边框距目标中心点的距离(ltrb = left, top, right, bottom)",如果距离中心点过远,则收敛较慢,且容易陷入局部最优。
  • 因此YOLOv8采用了如下方法:
  1. 先利用softmax处理后得到预测框位置的离散分布值(shape为4K x reg_max,K为预测框数量,reg_max为预设值)
  2. 然后使用DFL,通过巧妙利用交叉熵损失将预测位置迅速聚焦到目标位置附近,经过加权求和得到四个预测坐标值
  3. 最后使用CIoU Loss进一步精确坐标位置。

在这里插入图片描述

关闭 Mosiac

YOLOv8实验表明,Mosiac数据增强可以迫使模型学习新位置、部分遮挡以及针对不同周围像素的对象,增强模型鲁棒性。但如果在整个训练过程中都进行Mosiac数据增强,则会降低模型性能,在最后十个训练周期中关闭Mosiac是有利的。


总结

YOLOv8的出现进一步促进了实时目标检测的发展。其在COCO数据的精度和速度如下:

在这里插入图片描述

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

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

相关文章

开源iMES工厂管家 - 安装部署指南

环境: 总览: 下载 node-v16.17.1-win-x64:Index of /download/release/v16.17.1/ 官网:https://nodejs.org/en/download 历史版本下载:Index of /download/release/ 绿色解压安装 node-v16.17.1-win-x64:…

LeetCode 每日一题 Day 44 || 哑节点去重

82. 删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head [1,2,3,3,4,4,5] 输出:[1,2,5] 示例 2&#x…

CSS 水浪按钮

<template><view class="content"><button class="button"><view class="liquid"></view><view class="btn-txt">水浪按钮</view></button></view></template><scrip…

20240115在ubuntu20.04.6下给GTX1080M显卡安装驱动程序和CUDA

20240115在ubuntu20.04.6下给GTX1080M显卡安装驱动程序和CUDA 2024/1/15 18:05 百度搜索&#xff1a;ubuntu gtx1080m cuda https://blog.csdn.net/wb4916/article/details/129462103 20230311给Ubuntu18.04下的GTX1080M安装驱动 https://www.cnblogs.com/djiankuo/p/5886605.h…

ubuntu20.04一键通过docker-compose部署mysql 8.0.20

os&#xff1a;ubuntu20.04 docker&#xff1a;v24 docker-compose&#xff1a;v2.2.2 主要步骤 1.拉取镜像 docker pull mysql:8.0.20 2.创建目录 mkdir -p /data/docker_mysql/log mkdir -p /data/docker_mysql/data mkdir -p /data/docker_mysql/conf.d 3.创建配置文…

Hadoop分布式文件系统(三)

目录 一、Hadoop 1、MapReduce 1.1、理解MapReduce思想 1.2、分布式计算概念 1.3、MapReduce介绍 1.4、MapReduce特点 1.5、MapReduce局限性 1.6、MapReduce实例进程 1.7、MapReduce阶段组成 1.8、MapReduce数据类型 1.9、MapReduce官方示例 1.9.1、示例说明--圆周…

软件测试|如何使用selenium操作窗口滚动条

简介 我们在进行自动化测试工作的时候&#xff0c;如果页面内容过多&#xff0c;一次性加载耗时太长的话&#xff0c;会使用分段加载来加载页面内容&#xff0c;比如开始只加载页面顶端的内容&#xff0c;而如果要加载更多的数据&#xff0c;就需要我们向下滑动&#xff0c;让…

多无人机集群智能flocking

matlab2020可运行 GitHub - pareshbhambhani/MultiAgent-Flocking-framework: This is part of the current research I am working on.

pip与pip3的区别

pip 和 pip3 都是 Python 的包管理工具&#xff0c;用于安装第三方库。它们的区别在于&#xff1a; pip 是 Python 2 和 Python 3 通用的包管理工具&#xff0c;它可以安装适用于 Python 2 和 Python 3 的库。pip3 是专门用于 Python 3 的包管理工具&#xff0c;它只能安装适用…

如何通过ISPC使用Xe(核显)进行计算

我一直以为 ISPC 的 Xe 是只包含独立显卡的&#xff0c;比如 A770 这些&#xff0c;没想到看了眼文档是可以使用核显的&#xff0c;但只能在 Linux 和 Windows 上&#xff0c;macOS 不行&#xff0c;就想试试看。 写本文是因为 ISPC 已经出现了三四个版本的大改&#xff0c;但…

深入了解WPF控件:基础概念与用法(三)

掌握WPF控件&#xff1a;熟练常用属性&#xff08;三&#xff09; DataGrid 用于显示和编辑数据的表格控件。它可以从多种数据源&#xff08;如SQL数据库、LINQ查询或任何其他可绑定的数据源&#xff09;中显示和编辑数据&#xff0c;支持排序、筛选、分页等功能。 DataGrid…

时间序列数据库选型: influxdb; netdiscover列出docker实例们的ip,docker管理工具lazydocker、scope

influxdb influxdb: 有收费版本、有开源版本 influxdb 安装、启动(docker) docker run -itd --name influxdb-dev -p 8086:8086 influxdb #influxdb的web客户端(端口8003)被去掉了 #8006是web-service端口#docker exec -it influxdb-dev bashinfluxdb 自带web界面 从后面的…

Express(二):文件下载 - 分片下载

效果&#xff08;比较下载速度&#xff09; 服务端 请求响应头 源码 const express require(express); const path require("path"); const fs require("fs"); const router express.Router();const fileName 下载文件.zip; const filePath path.j…

基于LabVIEW的声音信号采集分析系统开发

摘要&#xff1a;以美国国家仪器(NI)公司开发的LabVIEW虚拟仪器为软件开发平台&#xff0c;设计了一个可以同步实现声音信号采集和分析的多功能模块化软件系统&#xff0e;借助LabVIEW图形化软件相应的声音读取、写入和存储函数实现对声音信号的采集、存储、时域分析和频域分析…

精确掌控并发:滑动时间窗口算法在分布式环境下并发流量控制的设计与实现

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;15&#xff09;篇&#xff0c;也是流量控制系列的第&#xff08;2&#xff09;篇。点击上方关注&#xff0c;深入了解支付系统的方方面面。 上一篇介绍了固定时间窗口算法在支付渠道限流的应用以及使用redis…

Spring Boot异常处理!!!

SpringBoot默认的处理异常的机制&#xff1a;SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请求&#xff0c;然后跳转到默认显示异常的页面…

vue:使用【3.0】:条件模块

一、条件层级效果图 二、代码 <template><ContentWrap><!-- 添加条件分支:level1 --><div class"btnBox" v-if"isEdit"><el-button type"primary" click"add">添加条件分支</el-button></div…

如何优化大型语言模型,让AI回应更智能、更准确?

什么是检索增强生成&#xff08;RAG)&#xff1f; 检索增强生成&#xff08;RAG&#xff09;是一种优化大型语言模型输出的过程&#xff0c;它在生成回应之前会参考其训练数据源之外的权威知识库。大型语言模型&#xff08;LLM&#xff09;在大量数据上进行训练&#xff0c;使…

Windows10解决大小核调度问题

文章目录 1.开启高性能模式2.下载安装PowerSettingsExplorer3.修改配置生效的异类策略异类线程调度策略异类短时间线程调度策略 4.你的电源策略5.CPU展示 该教程是给笔记本电脑用的&#xff0c;经过我实践是成功的。 1.开启高性能模式 使用管理员模式的PowerShell输入下列指令 …

微信小程序上传并显示图片

实现效果&#xff1a; 上传前显示&#xff1a; 点击后可上传&#xff0c;上传后显示&#xff1a; 源代码&#xff1a; .wxml <view class"{{company_logo_src?blank-area:}}" style"position:absolute;top:30rpx;right:30rpx;height:100rpx;width:100rp…