YOLOv8全解析:高效、精准的目标检测新时代——创新架构与性能提升
目录
前言
一、模型介绍
二、网络结构
Backbone改进
特征增强网络(neck)
检测头(head)
其它部分
三、Loss计算
四、性能表现
五、YOLOv8使用详解
添加模型
其它部分
创建数据集
数据标注
模型训练
模型预测
六、YOLOv8总结
前言
YOLO(You Only Look Once)系列模型,凭借其高效、快速的特性,已经成为目标检测领域的重要代表。作为YOLO系列中的最热门版本,YOLOv8继续沿袭了其前辈的优势,并进一步提升了性能,使得它在处理复杂场景中的目标检测任务时更加高效和精准。
· YOLOv8文档:https://v8docs.ultralytics.com/
一、模型介绍
YOLOv8 是 ultralytics 公司在 2023年1月10号开源的YOLOv5的下一个重大更新版本,也是YOLO模型系列中最热门的模型之一,因为它参考了YOLOv1到YOLOv7系列的所有模型,集各家优点于一身,在还没有开源时就收到了用户的广泛关注。YOLOv8的对各算法优点结合以及部分模块的创新,使其在图像分类、物体检测和实例分割任务中表现卓越。
二、网络结构
其主要结构如下图所示:
官方描述YOLOv8 是一个 SOTA 模型,它建立在以前YOLO版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。
从YOLOv8的网络结构可以看出,其延用了YOLOv5的网络结构思想,网络还是分为三个部分: 基于CSP(紧凑和分离)的主干网络(backbone),特征增强网络(neck),检测头(head) 三个部分。
1.Backbone改进
Backbone改进:YOLOV5中的C3模块被替换成了C2f模块,实现了进一步的轻量化。同时保持了CSP的思想,保留了YOLOv5等架构中使用的SPPF(空间金字塔池化)模块。整个YOLOv8的Backbone由CBS、C2f、SPPF三种模块组成。让YOLOv8可以在保证轻量化的同时获得更加丰富的梯度流信息。
2.特征增强网络(neck)
YOLOv8使用PA-FPN(路径聚合网络-特征金字塔网络)的思想,具体实施过程中将YOLOV5中的PA-FPN上采样阶段的卷积去除了,并且将其中的C3模块替换为了C2f模块。
3.检测头(head)
区别于YOLOV5的耦合头,YOLOV8使用了Decoupled-Head,将分类和检测头分离,使得网络的训练和推理更加高效。
代码如下图所示:
4.其它部分
Anchor-Free思想:抛弃了Anchor-Base,采用了Anchor-Free的思想。
损失函数改进:分类使用BCEloss,回归使用DFL Loss+CIOU Loss。
样本匹配方式改进:采用了Task-Aligned Assigner匹配方式。
这些改进使得YOLOv8在保持了YOLOv5网络结构的优点的同时,进行了更加精细的调整和优化,提高了模型在不同场景下的性能。
三、Loss计算
Loss 计算过程包括 2 个部分: 正负样本分配策略和Loss计算。
现代目标检测器大部分都会在正负样本分配策略上面做文章,典型的如YOLOX 的simOTA、TOOD的TaskAlignedAssigner和RTMDet 的DynamicSoftLabelAssigner ,这类 Assigner 大都是动态分配策略,而 YOLOv5采用的依然是静态分配策略。考虑到动态分配策略的优异性,YOLOv8算法中则直接引用了TOOD的TaskAlignedAssigner。
TaskAlignedAssigner 的匹配策略简单总结为: 根据分类与回归的分数加权的分数选择正样本。
s是标注类别对应的预测分值,u是预测框和gt框的iou,两者相乘就可以衡量对齐程度。
Loss计算包括 2 个分支:分类和回归分支,没有了之前的objectness分支。
分类分支依然采用 BCE Loss回归分支需要和 Distribution Focal Loss 中提出的积分形式表示法绑定,因此使用了Distribution Focal Loss,同时还使用了CIoU Loss3个Loss采用一定权重比例加权即可。
四、性能表现
YOLOv8是个模型簇,从小到大包括:YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l、YOLOv8x等。模型参数、运行速度、参数量等详见下表:
对比YOLOv5可以看出mAP和参数量都上升了不少。
五、YOLOv8使用详解
按照Ultralytics官网信息,进行YOLOv8模型训练需要使用CLI或者python来进一步操作。今天我将介绍不用代码,也可以进行YOLOv8所有模型算法的训练、部署、预测和下载!
1.添加模型
进入Coovally平台点击【全部模型】,搜索YOLOv8,在这里可以选择不同的YOLOv8版本。下载代码包或者点击另存为我的模型。进入【模型集成】页面,进行安装。
2.创建数据集
进入【图像数据】页面,点击创建数据集,输入数据集名称、描述,选择任务类型,上传压缩包文件。创建数据集时可以按照比例拆分训练集、验证集、测试集。
3.数据标注
进入【辅助标注】页面,点击创建样本集,进入样本集详情页,创建好标签进行数据标注。可以选择几组数据进行人工标注,标注完成后发布为数据集启动微调训练,剩余样本集数据即可全部自动化完成。
4.模型训练
进入数据集详情页,输入任务名称,选择模型配置模版,设置实验E-poch次数,训练次数等信息,即可开始训练。
TIP:平台也内置了YOLOv8系列的模型算法,也可以直接使用内置算法进行模型训练。
5.模型预测
模型训练完成后,完成模型转换与模型部署后,即可上传图片进行结果预测。完成后还可以将模型下载与分享。
六、YOLOv8总结
1.高效性与实时性
YOLOv8以其出色的处理速度著称,能在保持高精度检测的同时,实现实时性要求。这得益于其优化的网络结构和训练策略,使其非常适合自动驾驶、智能监控等需要快速响应的应用场景,为用户带来流畅、即时的检测体验。
2.先进的网络结构
YOLOv8采用创新的骨干网络和颈部结构,结合Transformer与CNN的优势,有效提升了图像特征提取能力。多尺度特征融合和自适应锚框选择等机制,进一步增强了模型的检测精度和鲁棒性,使其在各种复杂场景下都能表现出色。
3.创新的检测头设计
YOLOv8引入无锚分裂Ultralytics头,摒弃了传统的基于锚的检测方式,提高了检测的灵活性和准确性。这种创新设计使得模型能够更精确地检测不同形状和大小的物体,尤其适合处理复杂背景和多样化场景。
4.广泛的适用性和灵活性
YOLOv8提供多种预训练模型,支持多种计算机视觉任务,如实例分割、姿态检测等。用户可根据具体需求选择合适的模型,节省训练时间和资源,展现出其广泛的适用性和灵活性,满足多样化的应用场景需求。
综上所述,YOLOv8以其高效性、先进的网络结构、创新的检测头设计以及广泛的适用性和灵活性等优点和创新点,在目标检测领域取得了显著进展。
相关文章:

YOLOv8全解析:高效、精准的目标检测新时代——创新架构与性能提升
目录 前言 一、模型介绍 二、网络结构 Backbone改进 特征增强网络(neck) 检测头(head) 其它部分 三、Loss计算 四、性能表现 五、YOLOv8使用详解 添加模型 其它部分 创建数据集 数据标注 模型训练 模型预测 六、YOLOv8总结 前言 YOLO(You Only Lo…...
【Python】使用Selenium 操作浏览器 自动化测试 记录
【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等-CSDN博客文章浏览阅读389次。【自动化】Python SeleniumUtil 工具。https://blog.csdn.net/G971005287W/article/details/144565691?spm1001.2014.3001.5501【学习记录】浏览器指纹相关学习记录&am…...

GDPU软件工程习题(挖空版)
答案: GDPU软件工程24期末复习-CSDN博客 1.8 练习题 一、填空题 软件工程是一门综合性的交叉学科,它涉及计算机学科、( )学科、( )学科和( )学科。软件工程研究的主要内容是 ( )、( )、( ) 三个方…...

【活动邀请·深圳】深圳COC社区 深圳 AWS UG 2024 re:Invent re:Cap
re:Invent 是全球云计算领域的顶级盛会,每年都会吸引来自世界各地的技术领袖、创新者和实践者汇聚一堂,分享最新的技术成果和创新实践,深圳 UG 作为亚马逊云科技技术社区的重要组成部分,将借助 re:Invent 的东风,举办此…...

Hutool工具包的常用工具类的使用介绍
前言 Hutool 是一个轻量级的 Java 工具类库,提供了非常丰富的工具方法,可以大大减少开发时的重复性工作。它的目标是让 Java 开发更简单、更高效。Hutool 提供了多种常用功能,以下是一些常用工具类的使用介绍: 1. StrUtil - 字符…...

C++简明教程(文章要求学过一点C语言)(2)
一、什么是代码文件(头文件和源文件) 想象你在写一篇很长的故事(这就好比是一个 C 程序),你可能会把故事分成不同的章节(类似于 C 中的文件)。 头文件(.h):它…...

防火墙技术与网络安全
网络已经成为了人类所构建的最丰富多彩的虚拟世界,网络的迅速发展,给我们的工作和学习生活带来了巨大的改变。我们通过网络获得信息,共享资源。如今,Internet遍布世界任何一个角落,并且欢迎任何一个人加入其中…...

html 中 表格和表单的关系与区别
在 HTML 中,表格 (<table>) 和表单 (<form>) 是两种常用于展示数据和收集用户输入的元素。它们具有不同的功能和结构。以下是关于这两者的详细介绍: 1. HTML 表格(<table>) 表格用于展示结构化的数据…...

基于Java的购物网站毕业论文
标题:基于 Java 的购物网站 内容:1.研究背景 1.1.国内研究进展 近年来,随着我国电子商务市场的不断发展,越来越多的企业开始涉足电子商务领域。其中,基于 Java 的购物网站成为了众多企业的首选。Java 语言具有跨平台、安全性高、稳定性好等优…...

Redis——缓存预热+缓存雪崩+缓存击穿+缓存穿透
文章目录 1、 缓存预热2、 缓存雪崩3、 缓存击穿4、 缓存穿透总结 1、 缓存预热 什么是预热: mysql加入新增100条记录,一般默认以mysql为准作为底单数据,如何同步给redis(布隆过滤器)这100条新数据。 为什么需要预热…...

wxWidgets使用wxStyledTextCtrl(Scintilla编辑器)的正确姿势
开发CuteMySQL/CuteSqlite开源客户端的时候,需要使用Scintilla编辑器,来高亮显示SQL语句,作为C/C领域最成熟稳定又小巧的开源编辑器,Scintilla提供了强大的功能,wxWidgets对Scintilla进行包装后的是控件类:…...

【ETCD】【实操篇(二)】如何从源码编译并在window上搭建etcd集群?
要在 Windows 上编译 etcd 及 etcdctl 工具,并使用 bat 脚本启动 etcd 集群,首先需要准备好开发环境并确保依赖项正确安装。下面是从 etcd 3.5 源码开始编译和启动 etcd 集群的详细步骤: 目录 1. 安装 Go 环境2. 获取 etcd 源码3. 编译 etcd…...

服务器数据恢复—V7000存储中多块磁盘出现故障导致业务中断的数据恢复案例
服务器存储数据恢复环境: 一台V7000存储上共12块SAS机械硬盘(其中1块是热备盘),组建了2组Mdisk,创建了一个pool。挂载在小型机上作为逻辑盘使用,小型机上安装的AIXSybase。 服务器存储故障: V7…...

冯诺依曼架构与哈佛架构的对比与应用
冯诺依曼架构(Von Neumann Architecture),也称为 冯诺依曼模型,是由著名数学家和计算机科学家约翰冯诺依曼(John von Neumann)在1945年提出的。冯诺依曼架构为现代计算机奠定了基础,几乎所有现代…...

Hive其四,Hive的数据导出,案例展示,表类型介绍
目录 一、Hive的数据导出 1)导出数据到本地目录 2)导出到hdfs的目录下 3)直接将结果导出到本地文件中 二、一个案例 三、表类型 1、表类型介绍 2、内部表和外部表转换 3、两种表的区别 4、练习 一、Hive的数据导出 数据导出的分类&…...

CMake function使用
在 CMake 中,function 用于定义一个可复用的代码块,可以在 CMake 脚本中多次调用。它类似于其他编程语言中的函数。函数内的变量默认是局部的,不会影响外部的变量,除非显式地使用 PARENT_SCOPE 来修改父级作用域中的变量。 基本语…...

【AI学习】Huggingface复刻Test-time Compute Scaling技术
OpenAI ChatGPT o1 背后的关键技术Test-time Compute Scaling,Huggingface实现并开源了! Hugging Face 团队发布了一篇关于“开源模型中的推理阶段计算扩展”(Test-time Compute Scaling) 的研究文章。Hugging Face 团队通过复现…...

前端导出PDF的组件及方法
前端导出PDF的组件及方法 在Web应用程序中,导出PDF文件是一项常见的需求。无论是为了打印、分享还是存档,能够将网页内容转换为PDF格式都非常有用。幸运的是,前端开发者有多种方法和组件可以实现这一功能。在本文中,我们将详细介…...

Mac升级macOS 15 Sequoia后,无法ssh连接本地虚拟机
现象 macOS 15后,无法ssh连接本地启动的虚拟机,提示错误: No route to host,也ping不通。包括UTM、Parallels Desktop这两个虚拟机软件。之前都是没问题的,通过一些简单排查,目前没发现什么问题。 在虚拟…...

Pytorch | 利用MI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用MI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集MI-FGSM介绍背景算法原理 MI-FGSM代码实现MI-FGSM算法实现攻击效果 代码汇总mifgsm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器: Pytorch | 从零构建AlexNet对CIFAR10进行…...

linux 无网络安装mysql
下载地址 通过网盘分享的文件:mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz 链接: https://pan.baidu.com/s/1qm48pNfGYMqBGfoqT3hxPw?pwd0012 提取码: 0012 安装 解压 tar -zxvf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz mv /usr/mysql-5.7.33-linux-glibc2.1…...

自毁程序密码—阿里聚安全(IDA动态调试)
App信息 包名:com.yaotong.crackme Java层分析 MainActivity 很容易就能看出来是在securityCheck函数里进行安全校验。securityCheck是一个native函数,到so中进行分析。 SO层分析 定位函数位置 在导出函数里搜索 securityCheck 数据类型修复和…...

【华为OD-E卷-寻找关键钥匙 100分(python、java、c++、js、c)】
【华为OD-E卷-寻找关键钥匙 100分(python、java、c、js、c)】 题目 小强正在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成) 的箱子,并给出箱子编号,箱子编…...

vscode 使用说明
文章目录 1、文档2、技巧显示与搜索宏定义和包含头文件 3、插件4、智能编写5、VSCode 与 C(1)安装(2)调试(a)使用 CMake 进行跨平台编译与调试(b)launch.json(cÿ…...

【Linux系统编程】:信号(2)——信号的产生
1.前言 我们会讲解五种信号产生的方式: 通过终端按键产生信号,比如键盘上的CtrlC。kill命令。本质上是调用kill()调用函数接口产生信号硬件异常产生信号软件条件产生信号 前两种在前一篇文章中做了介绍,本文介绍下面三种. 2. 调用函数产生信号 2.1 k…...

Android Studio AI助手---Gemini
从金丝雀频道下载最新版 Android Studio,以利用所有这些新功能,并继续阅读以了解新增内容。 Gemini 现在可以编写、重构和记录 Android 代码 Gemini 不仅仅是提供指导。它可以编辑您的代码,帮助您快速从原型转向实现,实现常见的…...

【day09】面向对象——静态成员和可变参数
【day08】面向对象——封装重点:1.封装:a.将细节隐藏起来,不让外界直接调用,再提供公共接口,供外界通过公共接口间接使用隐藏起来的细节b.代表性的:将一段代码放到一个方法中(隐藏细节),通过方法名(提供的公共接口)去调用private关键字 -> 私有的,被private修饰之后别的类不…...

Android学习(七)-Kotlin编程语言-Lambda 编程
Lambda 编程 而 Kotlin 从第一个版本开始就支持了 Lambda 编程,并且 Kotlin 中的 Lambda 功能极为强大。Lambda 表达式使得代码更加简洁和易读。 2.6.1 集合的创建与遍历 集合的函数式 API 是入门 Lambda 编程的绝佳示例,但在开始之前,我们…...

彻底认识和理解探索分布式网络编程中的SSL安全通信机制
探索分布式网络编程中的SSL安全通信机制 SSL的前提介绍SSL/TLS协议概述SSL和TLS建立在TCP/IP协议的基础上分析一个日常购物的安全问题 基于SSL的加密通信SSL的安全证书SSL的证书的实现安全认证获取对应的SSL证书方式权威机构获得证书创建自我签名证书 SSL握手通信机制公私钥传输…...

【libuv】Fargo信令2:【深入】client为什么收不到服务端响应的ack消息
客户端处理server的ack回复,判断链接连接建立 【Fargo】28:字节序列【libuv】Fargo信令1:client发connect消息给到server客户端启动后理解监听read消息 但是,这个代码似乎没有触发ack消息的接收: // 客户端初始化 void start_client(uv_loop_t...