目标检测再升级!YOLOv8模型训练和部署

news2024/11/23 3:16:41

一个不知名大学生,江湖人称菜狗
original author: jacky Li
Email : 3435673055@qq.com

Time of completion:2023.1.12
Last edited: 2023.1.12

 

目录

目标检测再升级!YOLOv8模型训练和部署

简介

YOLOv8创新改进点

区别

1、C2f模块是什么?与C3有什么区别?

损失函数

 样本的匹配

参考

作者有言


目标检测再升级!YOLOv8模型训练和部署

简介

YOLOv8 是 Ultralytics 开发的 YOLO(You Only Look Once)物体检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的SOTA模型,它建立在先前YOLO成功基础上,并引入了新功能和改进,以进一步提升性能和灵活性。它可以在大型数据集上进行训练,并且能够在各种硬件平台上运行,从CPU到GPU。

YOLOv8还有一个关键特性是它的可扩展性,由于其被设计成一个框架,支持所有以前YOLO的版本,使得在不同版本之间切换和比较它们的性能变得容易。

YOLOv8创新改进点

1.Backbone。使用的依旧是CSP的思想,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻量化,同时YOLOv8依旧使用了YOLOv5等架构中使用的SPPF模块;

2.PAN-FPN。毫无疑问YOLOv8依旧使用了PAN的思想,不过通过对比YOLOv5与YOLOv8的结构图可以看到,YOLOv8将YOLOv5中PAN-FPN上采样阶段中的卷积结构删除了,同时也将C3模块替换为了C2f模块

3.Decoupled-Head。是不是嗅到了不一样的味道?是的,YOLOv8走向了Decoupled-Head;

4.Anchor-Free。YOLOv8抛弃了以往的Anchor-Base,使用了Anchor-Free的思想;

5.损失函数。YOLOv8使用VFL Loss作为分类损失,使用DFL Loss+CIOU Loss作为分类损失;

6.样本匹配。YOLOv8抛弃了以往的IOU匹配或者单边比例的分配方式,而是使用了Task-Aligned Assigner匹配方式。

区别

1、C2f模块是什么?与C3有什么区别?

我们不着急,先看一下C3模块的结构图,然后再对比与C2f的具体的区别。针对C3模块,其主要是借助CSPNet提取分流的思想,同时结合残差结构的思想,设计了所谓的C3 Block,这里的CSP主分支梯度模块为BottleNeck模块,也就是所谓的残差模块。同时堆叠的个数由参数n来进行控制,也就是说不同规模的模型,n的值是有变化的。

其实这里的梯度流主分支,可以是任何之前你学习过的模块,比如,美团提出的YOLOv6中就是用来重参模块RepVGGBlock来替换BottleNeck Block来作为主要的梯度流分支,而百度提出的PP-YOLOE则是使用了RepResNet-Block来替换BottleNeck Block来作为主要的梯度流分支。而YOLOv7则是使用了ELAN Block来替换BottleNeck Block来作为主要的梯度流分支。

损失函数

对于YOLOv8,其分类损失为VFL Loss,其回归损失为CIOU Loss+DFL的形式,这里Reg_max默认为16。

VFL主要改进是提出了非对称的加权操作,FL和QFL都是对称的。而非对称加权的思想来源于论文PISA,该论文指出首先正负样本有不平衡问题,即使在正样本中也存在不等权问题,因为mAP的计算是主正样本。

q是label,正样本时候q为bbox和gt的IoU,负样本时候q=0,当为正样本时候其实没有采用FL,而是普通的BCE,只不过多了一个自适应IoU加权,用于突出主样本。而为负样本时候就是标准的FL了。可以明显发现VFL比QFL更加简单,主要特点是正负样本非对称加权、突出正样本为主样本。

针对这里的DFL(Distribution Focal Loss),其主要是将框的位置建模成一个 general distribution,让网络快速的聚焦于和目标位置距离近的位置的分布。

DFL 能够让网络更快地聚焦于目标 y 附近的值,增大它们的概率;

DFL的含义是以交叉熵的形式去优化与标签y最接近的一左一右2个位置的概率,从而让网络更快的聚焦到目标位置的邻近区域的分布;也就是说学出来的分布理论上是在真实浮点坐标的附近,并且以线性插值的模式得到距离左右整数坐标的权重。

 样本的匹配

标签分配是目标检测非常重要的一环,在YOLOv5的早期版本中使用了MaxIOU作为标签分配方法。然而,在实践中发现直接使用边长比也可以达到一阿姨你的效果。而YOLOv8则是抛弃了Anchor-Base方法使用Anchor-Free方法,找到了一个替代边长比例的匹配方法,TaskAligned。

为与NMS搭配,训练样例的Anchor分配需要满足以下两个规则:

  1. 正常对齐的Anchor应当可以预测高分类得分,同时具有精确定位;

  2. 不对齐的Anchor应当具有低分类得分,并在NMS阶段被抑制。基于上述两个目标,TaskAligned设计了一个新的Anchor alignment metric 来在Anchor level 衡量Task-Alignment的水平。并且,Alignment metric 被集成在了 sample 分配和 loss function里来动态的优化每个 Anchor 的预测。

参考

[1].https://github.com/uyolo1314/ultralytics.
[2].https://github.com/meituan/YOLOv6.
[3].https://arxiv.org/abs/2209.02976.
[4].https://github.com/PaddlePaddle/PaddleDetection.
[5].https://github.com/PaddlePaddle/PaddleYOLO.
[6].https://github.com/open-mmlab/mmyolo.

作者有言

如果需要该框架的训练部署地址,请给博主点一下关注把!!!链接放下面了,需要的自取 GitHub - DataXujing/YOLOv8: Official YOLOv8模型训练和部署:fire: Official YOLOv8模型训练和部署. Contribute to DataXujing/YOLOv8 development by creating an account on GitHub.https://github.com/DataXujing/YOLOv8
如果感觉博主讲的对您有用,请点个关注支持一下吧,将会对此类问题持续更新……

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

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

相关文章

探索与创新:低代码助力金融数字化转型发展

“十四五”规划和 2035 年远景目标纲要提出“加快数字化发展,建设数字中国”,并就打造数字经济新优势、加快数字社会建设步伐、提高数字政府建设水平、营造良好数字生态作出战略部署。这为数字中国的下一步发展指明了方向,提供了指引。可以说…

CentOS环境下Rabbit集群部署

前言本次Rabbit集群部署所使用的的软件版本erlang:erlang-23.3.3-1.el7.x86_64.rpm ,rabbitmq:rabbitmq-server-3.8.23-1.el7.noarch.rpm本次Rabbit集群部署需要安装在两台CentOS服务器分别为svr-app-rabbitmq01、svr-app-rabbitmq02&#xf…

Trime同文输入法JNI加载过程

Trime同文输入法JNI加载过程JNI初始化顺序第一步、加载librime_jni.so库第二步、自动注册机制第三步、正式加载librime_jni.so库插入一个话题、简化打印记录第四步、执行Rime.java中的init()方法LoadModules()LoadModule()rime_core_initialize()调用顺序Class不是class关键字&…

3D应用无需下载即点即用,云应用带来更轻量的元宇宙

最近一个程序员朋友告诉我,公司市场部想做一个元宇宙相关的互动游戏,于是给技术团队提了一个带用户线上沉浸式环游园区的H5开发需求。他摸着所剩无几的头发据理力争:这个需求真的做不了!我听了很疑惑,现在许多品牌都在…

工作流引擎架构设计

原文链接: 工作流引擎架构设计 最近开发的安全管理平台新增了很多工单申请流程需求,比如加白申请,开通申请等等。最开始的两个需求,为了方便,也没多想,就直接开发了对应的业务代码。 但随着同类需求不断增…

深度学习PyTorch 之 网络结构可视化

深度学习&PyTorch 之 DNN-回归 深度学习&PyTorch 之 DNN-回归(多变量) 分别介绍了DNN回归的方法和代码,但是模型建立好了,他到底是个什么样子呢? 我们这节给大家介绍一个查看模型结构的方法 可视化介绍 我们…

【信管8.1】项目人力资源管理概念及过程

项目人力资源管理概念及过程不管你做什么事,要成就什么事业,要做什么项目,这一切,都是由人来完成的。因此,人力资源对于项目管理来说,是非常重要的一个管理过程。同时,人力资源管理也是整个管理…

2023/1/11 Web前端Promise从入门到精通

ES6引入的进行异步编程的解决方案,从语法上说它是一个构造函数。 异步编程包括但不限于:文件操作、数据库操作、AJAX、定时器 为什么要用Promise? 之前进行异步编程直接通过回调函数的方式进行,会导致回调地狱。 回调函数&#…

Qt扫盲-QMenu理论总结

QMenu理论总结一、概述二、常用操作1. 添加Action2. 信号槽3. 可撕下菜单4. 展示菜单一、概述 QMenu其实就是菜单控件,菜单控件本质上就是一个选择项目。它可以是菜单栏中的下拉菜单,也可以是独立的上下文菜单。当用户单击相应的位置或按下指定的快捷键…

【大数据】第一章:了解Hadoop生态圈

大数据特点(4V) Volume(大量) 非常非常多,大企业数据接近1EB Velocity(高速) 比如在双十一,数据爆增 Variety(多样) 很多样子的数据,比如,代码,图片,视频,JSON&am…

【C++】八大排序

文章目录前言1. 插入排序2. 希尔排序3. 选择排序4. 堆排序5. 冒泡排序6. 快速排序(重点)6.1 快速排序(hoare版本)6.2 快速排序(挖坑法)6.3 快速排序(前后指针法)6.4 快速排序(非递归)6.5 快速排序(优化)7. 归并排序7.1 归并排序(递归实现)7.2 归并排序非递归实现8. 计数排序排序…

Docker搭建PHP运行环境

目录 Docker 安装 PHP Docker 安装 Nginx ​编辑运行nginx容器 nginx安装成功 Nginx PHP 部署PHP项目 启动 PHP: 启动 nginx: 查看正在运行的容器: 访问域名测试搭建结果 Docker相关命令描述 Docker 安装 PHP 这里我们拉取官方的镜像,标签…

代码随想录算法训练营第8天 344.反转字符串、541. 反转字符串II、剑指Offer58-II.左旋转字符串

代码随想录算法训练营第8天 344.反转字符串、541. 反转字符串II、剑指Offer58-II.左旋转字符串 反转字符串 力扣题目链接(opens new window) 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 对于字符串,我…

Linux驱动开发基础__Linux 系统对中断处理的演进

目录 1 Linux 对中断的扩展:硬件中断、软件中断 2 中断处理原则 1:不能嵌套 3 中断处理原则 2:越快越好 4 要处理的事情实在太多,拆分为:上半部、下半部 5 下半部要做的事情耗时不是太长:tasklet…

154. 滑动窗口

文章目录QuestionIdeasCodeQuestion 给定一个大小为 n≤106 的数组。 有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。 你只能在窗口中看到 k 个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子: 该数组为 [1 3 -1 -3 5 3 6 7]&…

知识点滴 - 数据库视图概念

视图是数据库中一个非常简单的概念,写过SQL的人几乎大致了解视图。本文除了在回顾视图的本质及相关操作知识时,会重点阐述它蕴含的分层思想在数据分析工作中的作用。 1,视图的本质与作用 视图是一个数据库中的虚拟表,它的本质是S…

模板特化与static成员初始化

我们知道在 c 的类中&#xff0c;如果有static成员数据&#xff0c;则需要在类外进行定义&#xff0c;而类内那只是声明。这个在类模板中也是一样的&#xff0c;需要在类外进行定义。普通类模板的 static 数据的初始化&#xff0c;如下代码&#xff1a; template <class T&…

SpringBoot在Controller层接收参数的常用方法(超详细)

前言 在工作中&#xff0c;比如要实现一个功能&#xff0c;前端传什么参数&#xff0c;后端的controller层中怎么接收参数 &#xff0c;封装成了什么实体对象&#xff0c;有些参数是在URL上使用&#xff0c;有些参数是在body上使用&#xff0c;service层中做了什么逻辑&#xf…

数据结构(根据王道整理)

数据结构 文章目录数据结构线性结构与非线性结构链表kmp算法栈二叉树完全二叉树二叉树的存储结构二叉树的访问树的深度二叉树的层次遍历由遍历序列构造二叉树已知后序跟中序建立二叉树线索二叉树序言&#xff08;土办法解决找前驱&#xff09;线索二叉树存储结构中序线索二叉树…

几道基础的二叉树、树的题

几道基础的二叉树、树的题LeetCode144.二叉树的前序遍历思路及实现方法一&#xff1a;递归方法二&#xff1a;迭代LeetCode145.二叉树的后序遍历思路及实现方法一&#xff1a;递归方法二&#xff1a;迭代LeetCode94.二叉树的中序遍历思路及实现方法一&#xff1a;递归方法二&am…