目标检测——YOLOv8算法解读

news2024/11/16 11:52:28

作者:Ultralytics公司
代码:https://github.com/ultralytics/ultralytics


YOLO系列算法解读:
YOLOv1通俗易懂版解读、SSD算法解读、YOLOv2算法解读、YOLOv3算法解读、YOLOv4算法解读、YOLOv5算法解读、YOLOR算法解读、YOLOX算法解读、YOLOv6算法解读、YOLOv7算法解读、YOLOv8算法解读

PP-YOLO系列算法解读:
PP-YOLO算法解读、PP-YOLOv2算法解读、PP-PicoDet算法解读、PP-YOLOE算法解读、PP-YOLOE-R算法解读


文章目录

  • 1、算法概述
  • 2、YOLOv8细节
    • 2.1 YOLOv8的C2f结构
    • 2.2 YOLOv8的SPPF模块
    • 2.3 YOLOv8的neck和head
    • 2.4 YOLOv8的损失函数


1、算法概述

YOLOv8和YOLOv5都是由小型初创公司Ultralytics创建并维护的,和YOLOv5一样,也没有形成论文,但工程readme里面链接了参考文档(https://docs.ultralytics.com/models/yolov8/),该文档非常丰富,包含如何快速运行、训练、验证、预测及导出其他格式模型,还包含除检测任务的其他任务的扩展如:分割、分类和姿态估计,同时也包含YOLO系列其他模型的汇总介绍。
YOLOv8的主要特点有:
1、模型更快更准确;
2、模型除了能完成目标检测任务,也可以无缝衔接到实例分割、图像分类以及姿态估计任务;
3、与之前的YOLO版本兼容可扩展,ultralytics相当于一个YOLO统一框架;
4、YOLOv8采用新的backbone,与YOLOv5相比采用了anchor-free策略,模型也采用了新的损失函数;
5、YOLOv8支持导出多种格式的模型,并且可以在CPU/GPU上运行。


2、YOLOv8细节

YOLOv8网络结构如下所示,图片来自github用户@RangeKing
在这里插入图片描述
对比YOLOv8和YOLOv5的yaml格式网络结构配置
在这里插入图片描述
可以看到网络规模n/s/m/l/x的深度、宽度配置比例没有改变,但max_channels,YOLOv8的减少了。
Backbone部分,YOLOv8将YOLOv5采用的C3结构升级成了C2f,其余通道数配置均未改变
Head部分,相对于YOLOv5,上采样之前减少了卷积操作,同样将C3升级成了C2f

2.1 YOLOv8的C2f结构

YOLOv8中的C2f结构如下图红框部分:
在这里插入图片描述
由子模块ConvModule和多个DarknetBottleneck所组成,而DarknetBottleneck又包含两个3x3卷积的ConvModule;
对比YOLOv5的C3结构,如下:
在这里插入图片描述
其中ConvModule对应CBS,结构没有改变,DarknetBottleneck相对于YOLOv5的Bottleneck结构,将其第一个1x1的CBS换成了3x3的CBS结构,即YOLOv8的DarknetBottleneck包含两个3x3卷积,值得注意的是,YOLOv8和YOLOv5一样,都在backbone部分的Bottleneck应用了shortcut连接,而neck部分没有应用shortcut。最大的不同是C2f中每个DarknetBottleneck均分出一半通道的特征图直接连接到最后,多个DarknetBottleneck分出来的通道以及最后一个DarknetBottleneck的输出通过Concat操作合并在一起,并经过1x1的ConvModule得到想要的输出通道,这有点像YOLOv7的E-ELAN结构,优化了梯度在网络之间的传播路径,下面具体看代码实现:
在这里插入图片描述

2.2 YOLOv8的SPPF模块

之前YOLOv5以及YOLO其他系列均采用SPP模块,结构如下:
在这里插入图片描述
而YOLOv8采用的SPPF是将池化操作的并行分支改为了串行操作,并在每个池化后接了shortcut,结构如下:
在这里插入图片描述
代码对应如下:
在这里插入图片描述

2.3 YOLOv8的neck和head

Neck部分变化得比较少,一是上采样之前减少了卷积操作,二是将C3升级成了C2f。
变化比较大的是head部分,像YOLOv6一样,YOLOv8解耦了分类和回归分支,并且取消了obj分支(为什么这么做,请参阅论文[1]),并且变成了anchor-free,如下:
当为YOLOv8l模型时,w=1.0,最大通道数为512
在这里插入图片描述
而YOLOv5l的耦合方式检测头结构如下:
在这里插入图片描述

2.4 YOLOv8的损失函数

由上部分可知,检测头解耦后,每个特征尺度的检测头有两个分支:分类分支和回归分支,结构如下:
在这里插入图片描述
分类分支还是采用BCE损失,回归分支是采用CIoU与DFL(Distribution Focal Loss)共同控制。

参考文献:
[1] Generalized Focal Loss(https://arxiv.org/pdf/2006.04388.pdf)
知乎:大白话 Generalized Focal Loss(https://zhuanlan.zhihu.com/p/147691786)

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

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

相关文章

7. Django 模型与数据库

第7章 模型与数据库 Django对各种数据库提供了很好的支持, 包括PostgreSQL, MySQL, SQLite和Oracle, 而且为这些数据库提供了统一的API方法, 这些API统称为ORM框架. 通过使用Django内置的ORM框架可以实现数据库连接和读写操作. 本章以SQLite数据库为例, 分别讲述Django的模型…

统一威胁情报如何赋能SOC应对复杂威胁?

安全运营中心(SOC)是组织网络安全战略的核心组成部分,扮演着至关重要的角色。其负责实时监控整个IT基础设施,以检测、响应和预防各类网络安全威胁。网络安全威胁日益复杂且多变的数字化时代,攻击平面泛化、基础设施复杂…

10天精通Python爬虫:详细路线速成,开启兼职副业新篇章!

爬虫,即网络爬虫,是一种自动化程序,用于从互联网上抓取数据。在现代信息社会,爬虫技术广泛应用于数据分析、搜索引擎优化、竞品分析等领域。学习爬虫不仅可以提高数据处理能力,还可以为未来的职业发展打下坚实基础。 …

java基础之java容器-Collection,Map

java容器 java容器分类一. Collection1. List①. ArrayList② . LinkedList③ . Vector 2. Queue队列①. LinkedList②. PriorityQueue 3. Set集合①. HashSet②. TreeSet 二. Map1. HashMap2.TreeMap3. Hashtable java容器分类 java容器分为两大类,分别是Collecti…

修复所有 bug 并不能解决所有问题

原文:jeffpsherman - 2024.04.08 在软件领域,如同在制造业,有些问题是由于 bug 或“特殊原因”引发的,而有些则是“常见原因”,这是由于系统设计和实现的性质所导致的。修复 bug 就是移除特殊原因,消除 bu…

项目经理学习PMP对自己工作有多大帮助?

PMP是一种项目管理认证,也是最流行和含金量较高的认证之一。因此,你问它对项目管理有多大帮助,我可以说PMP可以被视为量身定制给项目管理岗人员的一个证书,你能理解它的重要性吗? 随着国家经济建设由基础设施向高端产业…

新闻 | 电子系协同智能中心与昌平区未来高教园及多所高校开展交流,共话智能无人平台建设

2024年4月8日,清华大学电子工程系在北京昌平两岸共盈科技产业园电子系地空协同智能无人平台基地成功举办“美团杯”智能无人机挑战赛,清华大学电子系党委书记沈渊、昌平区未来城管委会校城融合处处长熊玉川、清华大学团委副书记黄峰等出席。此外来自昌平…

CSS详解(一)

1、css工作中使用场景 美化网页(文字样式、背景样式、边框样式、盒子模型、定位、动画、),布局页面(flex布局、响应式布局、媒体查询) 2、CSS 规则 通常由两个主要部分组成选择器和样式声明 2.1选择器 选择器指定了…

Unity打包PC端exe,压缩打包为一个exe文件

目录 一.打包成功 1.打包输出文件 二.压缩输出目录为exe单个文件 1.添加到压缩文件 2.其他设置 1.点击“高级→自压缩选项” 2.修改解压后运行程序 3.设置模式 4.更新 三、生成.exe 一.打包成功 1.打包输出文件 1、一个后缀为 BurstDebugInformation_DoNotShip的文…

unittest断言_assert_使用python自带的断言

既可以使用: 1. self.assertEqual(ex1, ex2) #判断ex1 是否相等ex2 2. self.assertIn(ex1 ,ex2) # ex2是否包含ex1 注意:所谓的包含不能跳字符 3. self.assertTrue(ex) # 判断ex是否为True又可以使用: """目标断言扩展&…

C#实现 IDbConnection / IDbCommand 等相关通用数据接口

目录 关于数据接口 对象执行流程 范例运行环境 设计与实现 引用 GetConnection方法 GetCommand方法 GetParameter方法 小结 关于数据接口 在.net 应用中,与数据库进行连接、访问和执行经常会用到数据接口的相关对象,如下: 1、 Con…

【mysql】mysql命令使用大全,你想要的都在这里

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

《前端面试题》- React - 如何区分函数组件和类组件

问题 如何区分函数组件和类组件? 答案 可以使用instanceof 或者Component.prototype.isReactComponent。 示例 函数组件 export default function FunctionComonent() {if(FunctionComonent.prototype.isReactComponent){console.log(FunctionComonent是类组件…

前端JS必用工具【js-tool-big-box】,Number数值转换的方法调用学习

这一小节,我们针对前端工具包(npm)js-tool-big-box的使用做一些讲解,主要是针对Number数值型转换的一些方法使用。 目录 前言 1 安装和引入 2 千位逗号分割 3 判断是否大于0 4 判断是否大于0的整数 5 生成指定范围内的随机数…

Allegro画PCB时如何只删除走线的一部分

如何只删除走线的一部分 1、第一步: 2、第二步: 3、第三步,点击相应的走线段就能删除了。 说明:上面的Cline和Line只的是电线和线,您按下删除后,就可以删除这两种东西,但删除的是一整条折线.把这两个取消掉,换成Cline Segs和Ot…

计算机服务器中了helper勒索病毒怎么办,helper勒索病毒解密流程工具

在网络技术飞速发展的今天,越来越多的企业离不开网络,网络可以为企业带来更高的生产效率,提供更多的便捷服务,但网络是一把双刃剑,在为人们提供便利的同时,也为企业的数据安全带来严重威胁。近日&#xff0…

通过 API从 0 到 1 构建 本地 GPTs——1.构建Builder‘s Prompt

目的:帮助小白用户生成结构化 prompt 功能清单 搭建本地 gpts 能力,构建本地企业知识库助手Builder’s Prompt -对话引导构建 prompt 示例,生成助手信息function_call的用法prompt 示例 GPTs 的 Create 能力 用于引导用户构建结构化的 pr…

【数据分析面试】33.计算加权平均值 (Python: enumerate())

题目 假设你在分析薪资数据。经理让你使用最近加权平均值来计算平均薪资,并为提供了过去’n’年的数据。 最近加权应确保最近几年的薪资权重大于时间较久几年的薪资。 编写函数实现下面计算功能:输入previous_salaries是最近n年的薪资列表&#xff0c…

使用Canal实现MySQL主从同步

说明:本文介绍如何使用Canal实现MySQL主从同步的效果,关于Canal入门使用参考:Canal入门使用 启动Canal 首先,设置Canal服务器里,目标节点(即监测的MySQL节点)的配置,启动Canal服务…

心理学上有个概念叫:习惯性反驳(附上解决办法)

在心理学上,有一个词,叫做习惯性反驳。 什么意思呢? 就是不管你说什么,他都要反驳你,最后把你带入负面的情绪黑洞,搞得你非常崩溃。 一个总是习惯性反驳的人,其实是非常可怕的。 习惯性反驳的3个…