【yolov8】与yolov5的区别及改进详解

图像识别技术在物联网、智能监控等领域广泛应用。而深度学习中的目标检测技术,能够帮助我们对图像中的目标进行识别,进而实现自动化控制。目前,Yolov8和Yolov5是目标检测领域热门的模型。

  • yolo目标检测原理
  • yolov5详解
  • yolov8
    • yolov8结构图
    • Conv模块
    • C2f模块和C3模块
    • 耦合头Coupled Head和解耦头 Decoupled Head
    • Anchor-Based和Anchor-free
      • Anchor-Based
      • Anchor-free
  • 总结:

yolo目标检测原理

使用yolo进行目标检测的主要思想是将目标检测任务转化为一个回归问题,通过前向传播过程完成目标的定位和分类。yolo通常采用backbone-neck-head的网络结构。

  • Backbone 主要负责从输入图像中提取高层次的语义特征。这些特征对于目标检测等任务非常关键,因为它们捕获了图像中的上下文和抽象信息。backbone通常包含多个卷积层和池化层,构建了一个深层次的特征提取器。
  • Neck位于backbone和head之间,通常用来进一步整合调整由backbone提取的特征,有利于将不同层次的特征融合,提升网络对目标的感知能力
  • Head检测头负责将目标进行定位和分类,生成最终的目标检测结果。head通常包括边界框回归层(用于预测目标的位置)和分类层(用于预测目标的类别)。

yolov5详解

v5的模块详解早就准备好了

yolov8

YOLOv8是Ultralytics公司于2023年1月10日发布的YOLOv5的下一个重大更新版本。它是一种用于目标检测的先进深度学习算法,支持图像分类、物体检测和实例分割任务。
yolov5和yolov8的推理过程几乎一样,在backbone和neck部分,两者都使用了CSP梯度分流的思想,且都使用了SPPF模块,不同的是yolov8使用梯度流更丰富的C2f结构,对不同尺度模型调整了不同的通道数。在head部分,将之前的耦合头结构换成了目前主流的解耦头结构,将分类和检测头分离,同时也从Anchor-Based换成了Anchor-Free。

yolov8结构图

在这里插入图片描述
将yolov8和yolov5结构图对比可发现,yolov5中的C3模块全部替换成C2f模块。

Conv模块

在这里插入图片描述
Conv 模块由单个 Conv2d、BatchNorm2d 和激活函数构成,用于提取特征并整理特征图

Conv模块中Conv2d的paddingg是自动计算的,通过修改stride来决定特征图缩小的倍数。在backbone中Conv模块的stride全部为2,kernel均为3。因此Conv每次会将特征图的宽高减半,下采样特征图,同时提取到目标特征。

BatchNorm2d为批归一化层,对每批的数据做归一化,能够有效地加速神经网络的训练过程,提高模型的泛化能力。

SiLu为激活函数,增加了数据的非线性。

C2f模块和C3模块

在这里插入图片描述
YOLOv8 参考了 C3 模块的残差结构以及YOLOv7的 ELAN 思想,设计出了 C2f 结构,可以在保证轻量化的同时获得更加丰富的梯度流信息,并根据模型尺度来调整通道数,大幅提升了模型性能;
可以看到,C2f模块相比于C3模块有更多的跳层连接,并增加了额外的split操作,取消了分支中的卷积操作,这样丰富了梯度回传时的支流,加强了特征信息并减少计算量。

耦合头Coupled Head和解耦头 Decoupled Head

在这里插入图片描述

耦合头的设计是在网络的末尾,通过一系列的卷积和全连接层,同时预测不同尺度的边界框位置、尺寸和类别。这种设计使得YOLOv5可以在不同尺度上并行地进行目标检测,即使用一层卷积同时完成分类和定位任务。
解耦头的设计是将分类和检测头分离,两条并行的分支分别取提取类别特征和位置特征,然后各用一层1×1卷积完成分类和定位任务。以提高目标检测的准确性。

Decoupled Head不仅是模型精度上会提高,同时网络的收敛速度也加快了,使用Decoupled Head的表达能力更好,增强了模型的鲁棒性,可以更好地建模位置和类别之间的关系,提高目标检测性能。。

Anchor-Based和Anchor-free

anchor也叫做锚,预先设置目标可能存在的大概位置,然后再在这些预设边框的基础上进行精细化的调整。而它的本质就是为了解决标签分配的问题。

目标检测领域的发展从anchor-free到anchor-base,现在又有回到anchor-free的趋势。
anchor-free和anchor-based是两种不同的目标检测方法,区别在于是否使用预定义的anchor框来匹配真实的目标框

Anchor-Based

在同一个像素点上,生成多个不同大小和比例的候选框,覆盖几乎所有位置和尺度,每个参考框负责检测与其交并比大于阈值 (训练预设值,常用0.5或0.7) 的目标,然后通过anchor中有没有认识的目标和目标框偏离参考框的偏移量完成目标检测,不再需要多尺度遍历滑窗,极大的提升了速度。

在训练过程中,模型学习预测每个锚框的偏移量(相对于真实目标框的偏移),以调整它们以更好地匹配目标的位置。模型还负责为每个锚框预测目标类别。

通常,在预测结束后,采用NMS非极大值抑制来排除高度重叠的锚框,以确保每个目标只有一个最终的检测结果。

优点:
适用于多尺度和多宽高比的目标。
对于密集目标排列的情况,锚框可以提高检测性能。

缺点
对于目标数量较少的情况,锚框设计可能浪费计算资源。
对于小目标检测较为困难。

Anchor-free

无锚框在构建模型时将其看作一个点,即目标框的中心点。不依赖于预定义的锚框,而是直接预测目标的中心点。直接学习目标框的位置,通常通过回归目标框的四个顶点坐标来实现。
同样,模型负责为每个目标预测其类别,在预测结束后,采用NMS进行后处理。
优点:
相对简洁,无需设计大量的锚框。
更适合小目标检测。

缺点
对于多尺度和多宽高比的目标,可能性能较差。
在密集目标排列的情况下,容易出现定位不准确的问题。

总结:

YOLOv8 模型包括 Input、Backbone、Neck 和 Head 4部分。其中Input选用了Mosaic数据增强方法,并且对于不同大小的模型,有部分超参数会进行修改,典型的如大模型会开启 MixUp 和 CopyPaste数据增强,能够丰富数据集,提升模型的泛化能力和鲁棒性。Backbone 主要用于提取图片中的信息,提供给Neck和Head使用。Neck 部分主要起特征融合的作用,充分利用了骨干网络提取的特征,采用FPN +PAN结构,能够增强多个尺度上的语义表达和定位能力。Head输出端根据前两部分处理得到的特征来获取检测目标的类别和位置信息,做出识别。

yolov8和yolov5结构大体一致,不同的是yolov8主干网络使用的时梯度流更丰富的C2f模块,将分类和检测头分离,解决了分类和定位关注侧重点不同的问题,同时也采用了无锚框的目标检测,能够提升检测速度。

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

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

相关文章

智能优化算法应用:基于学校优化算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于学校优化算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于学校优化算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.学校优化算法4.实验参数设定5.算法结果6.参考…

追逐代码的梦,计算机行业的心路历程

标题:追逐代码的梦,计算机行业的心路历程 当初选择计算机行业,并非出于一时冲动,而是深深被数字的魔力所吸引。我笑着回答:“因为我梦想成为神奇的码农!我想像编织魔法一样编写程序,创造出炫酷…

Linux中shell的运行原理

在Linux中,每次输入命令时,前面都会出现一串字母,我们称之为命令行提示符 实际上,命令行提示符是一种外壳程序 外壳程序的概念: 前面我们提到过,在Linux中,一切皆文件,所谓的命令就…

程序员的实用网站导航与推荐

当你遇到问题时 Stack Overflow:订阅他们的每周新闻和任何你感兴趣的主题Google:全球最大搜索引擎必应:在你无法使用Google的时候CSDN:聊胜于无AI导航一号AI导航二号 新闻篇 OSCHINA:中文开源技术交流社区 针对初学…

UE Windows平台下Linux的交叉编译项目打包

UE Windows平台下Linux的交叉编译项目打包 交叉编译(Cross-compilation) 使得在以Windows为中心的工作流程中工作的游戏开发者能够以Linux为目标对项目进行打包。目前,只有Windows支持交叉编译。 交叉编译支持的平台 Windows | Linux-x86_…

每日3道PWN(第二天)

ciscn_2019_n_1 参考: [BUUCTF-pwn]——ciscn_2019_n_1-CSDN博客 [BUUCTF]PWN5——ciscn_2019_n_1_ciscn_2019_n_4-CSDN博客 BUUCTF—ciscn_2019_n_1 1-CSDN博客 checksec一下 64位栈溢出 按f5查看main函数,双击可疑函数 发现含有命令执行的且发现fl…

SOCKET、TCP、HTTP之间的区别与联系

SOCKET、TCP、HTTP之间的区别与联系 一、 Socket 1、什么是socket2、为什么需要socket3、建立socket连接 二、HTTP(基于TCP) 1、HTTP的概念2、HTTP连接的特点 连接请求:一次连接连接请求:短连接(socket是长连接) 三、TCP/IP协议簇 四、HTTP、Socket…

SQL 数据库语句- 创建和管理数据库

SQL CREATE DATABASE 语句 SQL CREATE DATABASE 语句用于创建一个新的 SQL 数据库。 语法 CREATE DATABASE 数据库名称;示例 以下 SQL 语句创建了一个名为 “testDB” 的数据库: CREATE DATABASE testDB;通过这个简单的语句,你可以成功地创建一个名…

30个Python小游戏,小白练手,我都能玩一天【内附源码】

给大家带来30个 Python 小游戏,一定要收藏! 文末获取完整代码 有手就行 1、吃金币 import os import cfg import sys import pygame import random from modules import *游戏初始化 def initGame():# 初始化pygame, 设置展示窗口pygame.init()screen…

C/C++---------------LeetCode第118. 杨辉三角

杨辉三角 题目及要求动态规划在mian内使用 题目及要求 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1]] 提示: 1 < numRow…

ActiveMQ 反序列化漏洞(CVE-2015-5254)

ActiveMQ 反序列化漏洞 Apache ActiveMQ是一种开源的消息代理&#xff08;message broker&#xff09;&#xff0c;被广泛用于应用程序之间的消息传递。它提供可靠的消息传递模式&#xff0c;如发布/订阅、点对点和请求/响应&#xff0c;非常适合构建分布式系统和应用程序集成…

1_控制系统总体结构

1、总体结构 控制系统结构图&#xff1a; 黑色块为参数、黄色块为计算模块 1.1 其中参数含义 车辆属性参数&#xff1a; 参数含义 C α f C_{\alpha f} Cαf​自行车模型总轮胎侧偏刚度&#xff08;前轮&#xff09; C α r C_{\alpha r} Cαr​自行车模型总轮胎侧偏刚度&a…

客户案例:SMC2威胁感知升级,保障金融行业邮件安全

客户背景 某基金公司是一家在业界享有广泛声誉的综合型资产管理公司&#xff0c;总部位于广州&#xff0c;在北京、上海、香港等地区均设有公司&#xff0c;业务范围遍布全球&#xff0c;凭借其卓越的投资业绩和专业的基金管理服务&#xff0c;赢得了广大投资者的高度认可。 该…

Arduino驱动MLX90614红外测温传感器(温湿度传感器)

目录 1、传感器特性 2、测量方法 3、硬件原理图 4、控制器和传感器连线图

【代码随想录】算法训练计划38

dp 今天这三道都写过了 1、509. 斐波那契数 题目&#xff1a; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) …

数据结构第二次作业——递归、树、图【考点罗列//错题正解//题目解析】

目录 一、选择题 ——递归—— 1.【单选题】 ——递归的相关知识点 2.【单选题】——递归的应用 3.【单选题】——递归的实现结构 4.【单选题】——递归的执行与实现 5.【单选题】 ——递归算法 ——树—— 6.【单选题】 ——树的结构 *7.【单选题】——树的知识点 …

【Effective C++】条款2:尽量以const,enum,inline替换#define

一.const替换#define #define的两个缺点&#xff1a; 不便于调试&#xff0c;编译器看到的是宏替换后的值&#xff0c;报错时显示也是替换后的内容&#xff0c;不便于定位错误目标代码中出现多个替换后的内容。因为宏替换在预处理阶段完成&#xff0c;宏是不会进入记号表的。 …

MYSQL窗口函数详解和实战(内含示例)

MySQL 窗口函数提供了跨与当前行关联的分组的计算能力。 窗口函数与聚合函数不同&#xff0c;聚合函数对每个分组进行计算并为每个分组返回一行&#xff0c;而窗口函数不会将每个分组输出到一行&#xff0c;而是将每个分组的计算结果合并到与之关联的行中。 目录 一、CUME_DIS…

【Maven】依赖管理

1. 依赖管理 1.1 依赖配置 依赖&#xff1a;指当前项目运行所需要的jar包。一个项目中可以引入多个依赖。 依赖引入步骤&#xff1a;在pom.xml中编写标签&#xff0c;在标签中使用引入坐标&#xff0c;定义坐标的 groupId、artifactId、version&#xff0c;最后点击刷新&…

html css 布局layout

弹性布局 display:flex; justify-content:space-between; — 水平分布【item之间有相同的边距&#xff0c;和容器之间没边距】justify-content: space-around; — item和item之间以及和容器之间都有边距align-items: center; — 垂直居中分布align-items:stretch; — 如果item…