当前位置: 首页 > news >正文

【YOLOv8】Yolov5和Yolov8网络结构的分析与对比

目录

一 YOLOv5

二 YOLOv8


yolo通常采用backbone-neck-head的网络结构。

  • Backbone 主要负责从输入图像中提取高层次的语义特征,常包含多个卷积层和池化层,构建了一个深层次的特征提取器。
  • Neck通常用来进一步整合与调整backbone提取的特征,有利于将不同层次的特征融合进而提升网络对目标的感知能力。
  • Head通常包括边界框回归层(用于预测目标的位置)和分类层(用于预测目标的类别)。进行最终的回归预测。

一 YOLOv5

YOLOv5有s、m、l、x四个版本,模型的结构基本一样,不同的是depth_multiple模型深度和width_multiple模型宽度这两个参数。

1 YOLOv5的网络结构

主要结构图如下所示:

Input

YOLOv5在输入端Input采用了Mosaic进行数据增强

采用Mosaic数据增强的优点:

  • 随机使用4张图像,随机缩放后随机拼接,增加很多小目标,丰富数据集
  • 随机拼接的方式让一张图像可以计算四张图像的数据,减少每个batch的数量,即使只有一个GPU,也能得到较好的结果(减少GPU数量)。
  • 通过对识别物体的裁剪,使模型根据局部特征识别物体,有助于被遮挡物体的检测,从而提升了模型的检测能力。

Backbone 

Conv卷积层由卷积,Batch Normalization和SiLu激活层组成。其中,BN(batch normalization)具有防止过拟合,加速收敛的作用。BN层的输入为一个batch的特征图,它将每个通道上的特征进行均值和方差的计算,并对每个通道上的特征进行标准化处理。标准化后的特征再通过一个可学习的仿射变换(拉伸和偏移)进行还原,从而得到BN层的输出。激活函数用于给神经网络引入非线性变换能力。综上所述,Conv模块是常用的基础模块,它通过卷积操作提取局部空间信息,并通过BN层规范化特征值分布,最后通过激活函数引入非线性变换能力,从而实现对输入特征的转换和提取。

k:卷积核大小;S:步长;P:padding填充;C:Channels通道数。

C3模块的作用是增加网络的深度和感受野,从不同维度去提取特征并融合,提高特征提取的能力。

SPPSpatial Pyramid Pooling),空间金字塔池化模块其主要思想是将不同大小的感受野应用于同一张图像,从而能够捕捉到不同尺度的特征信息。在SPP模块中,首先对输入特征图进行不同大小的池化操作,以得到一组不同大小的特征图。然后将这些特征图连接Concat在一起,并通过全连接层进行降维,最终得到固定大小的特征向量。综上所述,SPP的作用是将不同尺度的特征进行融合,通过对特征图进行金字塔划分和池化操作,将多尺度特征整合到一个固定长度的特征向量中。

SPP模块的具体可参考下图,仅便于理解,不要纠结于数字哈!

与SPP相比,SPPF模块的池化操作由并联变为串联,且池化区域大小不变。后面两次池化是在上一次的基础上进行的。

Neck

特征金字塔是一种用于处理多尺度目标检测的技术。在Neck部分,yolov5主要采用了PANet结构。

FPN通过自顶向下(Top-down)的结构,将深层的语义信息传递到浅层,但是浅层的位置信息却无法影响到深层特征。PANet在FPN(feature pyramid network)上提取网络内特征层次结构,在FPN的基础上又引入了一个自底向上(Bottom-up)的路径。经过自顶向下(Top-down)的特征融合后,再进行自底向上(Bottom-up)的特征融合,这样底层的位置信息也能够传递到深层,从而增强多个尺度上的定位能力。

其中自底向上(Bottom-up)的过程是沿着N 2 → N 3 → N 4 → N 5 的路径,逐个stage通过卷积进行2倍下采样,然后与FPN中相应大小的feature map进行相加融合(在YOLOv5中采用的是拼接融合)。

Head

YOLOv5的Head对Neck中得到的不同尺度的特征图分别通过1×1卷积将通道数扩展,扩展后的特征通道数为:(类别数量+5)×每个检测层上的anchor数量。

5对应的是预测框的中心点横坐标、纵坐标、宽度、高度和置信度Head中的3个检测层分别对应Neck中得到的3种不同尺寸的特征图。

二 YOLOv8

Yolov8提供了N/S/M/L/X不同尺度的模型,以满足不同部署平台和应用场景的需求。

YOLOV8的改进内容如下:

  • Backbone:同样借鉴了CSP模块思想,但是将Yolov5中的C3模块替换成了C2f模块,实现了进一步轻量化,同时沿用Yolov5中的SPPF模块,并对不同尺度的模型进行精心微调,不再是无脑式一套参数用于所有模型,大幅提升了模型性能。
  • Neck:继续使用PAN的思想,但是删除了上采样阶段的卷积结构,同时将C3模块替换为C2f模块。
  • Head:相比YOLOv5改动较大,Yolov8换成了目前主流的解耦头结构(Decoupled-Head),将分类和检测头分离。从Anchor-Based换成了Anchor-Free思想(anchor-free和anchor-based是两种不同的目标检测方法,区别在于是否使用预定义的anchor框来匹配真实的目标框)
  • Loss计算:使用VFL Loss作为分类损失(实际训练中使用BCE Loss);使用DFL Loss+CIOU Loss作为回归损失。
  • 标签分配:Yolov8抛弃了以往的IoU分配或者单边比例的方式,而是采用Task-Aligned Assigner分配方式

1 YOLOV8的网络结构

主要结构图如下所示:

YOLOv5和YOLOv8配置文件参数对比:

YOLOv5YOLOv8

Backbone

V8同样借鉴了CSPDarkNet结构网络结构,但是将Yolov5中的C3模块替换成了C2f模块,实现了进一步轻量化,同时沿用Yolov5中的SPPF模块。

具体改进为:

  • 第一个卷积层的卷积核大小(Kernel size从6×6改为3x3。
  • 所有的C3模块改为C2f模块多了更多的跳层连接和额外Split操作
C3C2f
  • Block数由C3模块3-6-9-3改为C2f模块的3-6-6-3。

YOLOv5和YOLOv8的Backbone对比:

YOLOv5        YOLOv8

 ② Neck

Neck部分起到的作用是特征提取和特征融合,YOLOv8采用的是PAN-FPN的思想。

获取Neck产物的过程参考下图:

Layer4、Layer6、Layer9作为PANet(PANet是一个双向通路网络,引入了自下向上的路径,使得底层信息更容易传递到顶层)结构的输入,经过上采样,通道融合,最终将PANet的三个输出分支送入到Detect head中进行Loss的计算或结果解析。

③ Head

YOLOv8直接将耦合头改为类似Yolox的解耦头结构(Decoupled-Head),将回归分支和预测分支分离。

YOLOv5和YOLOv8的Head图对比:

YOLOv5和YOLOv8的配置文件Head对比:

YOLOv5YOLOv8

④ Loss

Loss计算过程包括两部分:正负样本分配策略和Loss计算分类和回归分支

常见的正负样本分配策略包括动态分配策略和静态分配策略两种。

  • 静态分配策略是指在训练开始之前,固定为一组预先定义的权重,这些权重不会在训练过程中改变。
  • 动态分配策略则可以根据训练的进展和样本的特点动态调整权重,使之可以更加关注那些容易被错分的样本。动态分配策略可以根据训练损失或者其他指标来进行调整,可以更好地适应不同的数据集和模型。

YOLOv5采用的是静态分配策略,考虑到动态分配策略的优异性,Yolov8算法中直接引用了TOOD中的Task-Aligned Assigner(对齐分配器)正负样本分配策略

分类得分和 IoU表示了这两个任务的预测效果,所以,TaskAligned使用分类得分和IoU的高阶组合来衡量Task-Alignment的程度。

s 和 u 分别为分类得分和 IoU 值,α 和 β 为权重超参。从上边的公式可以看出来,t 可以同时控制分类得分和IoU 的优化来实现 Task-Alignment,可以引导网络动态的关注于高质量的Anchor。

LOSS计算

分类损失:Yolov8团队应该是对VFL Loss和BCE Loss都尝试过,但最终发现使用VFL和使用普通的BCE效果相当,优势不明显,故采用了简单的BCE Loss。

回归损失CIou_Loss + Distribution Focal Loss

其中,CIou_Loss用于计算预测框与目标框之间的IoU。

通常,对于遮挡、模糊场景下目标框的边界存在一定的不确定性,常规的回归方式不能解决这种不确定问题。

DFL将边界表示成一种分布,解决边界不明确的问题。

相关文章:

【YOLOv8】Yolov5和Yolov8网络结构的分析与对比

目录 一 YOLOv5 二 YOLOv8 yolo通常采用backbone-neck-head的网络结构。 Backbone 主要负责从输入图像中提取高层次的语义特征,常包含多个卷积层和池化层,构建了一个深层次的特征提取器。Neck通常用来进一步整合与调整backbone提取的特征,有利于将不同…...

无人机低空数字摄影测量系统

一、 系统概述 系统完全基于IDL设计实现,包括界面布局到人机交互再到底层核心函数功能。整体设计框架基于数字摄影测量的专业处理流程,实现了数据输入、数据预处理、影像信息检测、空间定向、地形三维建模、专题信息提取、成果输出与更新等功能。同时为…...

Disk Drill Enterprise for Mac v5.5.1515数据恢复软件中文版

Disk Drill 是 Mac 操作系统固有的Mac数据恢复软件:使用 Recovery Vault 轻松保护文件免遭意外删除,并从 Mac 磁盘恢复丢失的数据。支持大多数存储设备,文件类型和文件系统。 软件下载:Disk Drill Enterprise for Mac v5.5.1515激…...

day55 最长递增子序列 最长连续递增子序列 最长重复子数组

题目1 300 最长递增子序列 题目链接 300 最长递增子序列 题意 找到整数数组nums的最长严格递增子序列的长度(子序列并不改变原始的顺序,但是可以删除元素) 动态规划 动规五部曲 1)dp数组及下标i的含义 dp[i] 表示以nums[i…...

使用Springboot配置生产者、消费者RabbitMQ?

生产者服务 1、引入依赖以及配置rabbitmq 此时我们通过使用springboot来快速搭建一个生产者服务 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> applica…...

代码随想录算法训练营第46天|139.单词拆分、多重背包问题

139.单词拆分 题目链接&#xff1a;单词拆分 题目描述&#xff1a;给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 **注意&#xff1a;**不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词…...

数组与伪数组的区别

大家都知道&#xff0c;在js中使用 document.querySelectorAll(选择器&#xff09;获取到的为该选择器能选择到的所有元素组成的伪数组&#xff0c;所谓伪数组&#xff0c;就是外表和数组一样&#xff0c;能够使用索引遍历&#xff0c;但本质是对象。 数组与伪数组之间的区别&…...

Java集合List

List特有方法 经典多态写法 // 经典的多态写法 List<String> list new ArrayList<>();常用API&#xff1a;增删改查 // 添加元素 list.add("Java"); // 添加元素到指定位置 list.add(0, "Python");// 获取元素 String s list.get(0);// 修改…...

elasticsearch基础命令

1 字段分词分析: GET /store_info_data/_analyze {"field": "storeName","text":"20pilapala0" }2 精确查找,去除评分 GET /store_info_data/_search {"query": {"constant_score": {"filter": {&quo…...

Capture One 23 Enterprise for Mac中文版 全面的图像处理工具

Capture One 23 Enterprise for Mac中文版一款专业的图像编辑和管理软件&#xff0c;具备强大的功能和工具&#xff0c;适用于摄影师、摄影工作室和专业用户。 软件下载&#xff1a;Capture One 23 Enterprise for Mac中文版下载 该软件为用户提供了全面的图像处理工具&#xf…...

Qt案例 通过调用Setupapi.h库实现对设备管理器中设备默认驱动的备份

参考腾讯电脑管家-软件市场中的驱动备份专家写的一个驱动备份软件案例&#xff0c;学习Setupapi.h库中的函数使用.通过Setupapi.h库读取设备管理器中安装的设备获取安装的驱动列表&#xff0c;通过bit7z库备份驱动目录下的所有文件. 目录导读 实现效果相关内容示例获取SP_DRVIN…...

如何理解JVM

JVM&#xff08;Java虚拟机&#xff09;是Java程序的运行环境&#xff0c;它是Java技术的核心组成部分之一。理解JVM涉及到以下几个方面的内容&#xff1a; 1. **虚拟机概念**&#xff1a;虚拟机是一种软件实体&#xff0c;它在物理计算机上模拟出一个计算机系统&#xff0c;使…...

第十四讲:C语言字符函数和字符串函数

目录 1. 字符分类函数 2、字符转换函数 3. strlen的使⽤和模拟实现 4. strcpy 的使⽤和模拟实现 5. strcat 的使⽤和模拟实现 6. strcmp 的使⽤和模拟实现 7. strncpy 函数的使⽤ 8. strncat 函数的使⽤ 9. strncmp函数的使⽤ 10. strstr 的使⽤和模拟实现 11. strt…...

华为海思2024春招数字芯片岗机试题(共9套)

huawei海思2024春招数字芯片岗机试题(共9套&#xff0c;有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;WX:didadidadidida313&#xff0c;加我备注&#xff1a;CSDN huawei数字题目&#xff0c;谢绝白嫖哈&#xff09…...

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测 目录 分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述…...

与机器对话:ChatGPT 和 AI 语言模型的奇妙故事

原文&#xff1a;Talking to Machines: The Fascinating Story of ChatGPT and AI Language Models 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 从 ELIZA 到 ChatGPT&#xff1a;会话式人工智能的简史 会话式人工智能是人工智能&#xff08;AI&#xff09;的一个分…...

概率论基础——拉格朗日乘数法

概率论基础——拉格朗日乘数法 概率论是机器学习和优化领域的重要基础之一&#xff0c;而拉格朗日乘数法与KKT条件是解决优化问题中约束条件的重要工具。本文将简单介绍拉格朗日乘数法的基本概念、应用以及如何用Python实现算法。 1. 基本概念 拉格朗日乘数法是一种用来求解…...

[xboard]real6410-6.2 移植kernel网络驱动

文章目录 硬件电路软件配置问题1问题2问题3问题4功能测试硬件电路 核心板,使用DM9000A [图片] 软件配置 问题1 / # / # ifconfig ifconfig: /proc/net/dev: No such file or directory ifconfig: socket: Fun...

Quarkus初探

Quarkus初探 背景安装Quarkus安装Quarkus CLI 创建Quarkus项目运行Quarkus初探代码修改一下代码 数据持久化创建PanacheEntiry写入数据读取数据 Dev Service使用外部数据库区分dev和prod 构建native应用&#xff08;依赖Graalvm&#xff09; 背景 最早是在Infoq上了解到Quarku…...

90天玩转Python-02-基础知识篇:初识Python与PyCharm

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇&#xff1a;C站最全Python标准库总结 90天玩转Python--02--基础知识篇&#xff1a;初识Python与PyCharm 90天玩转Python—03—基础知识篇&#xff1a;Python和PyCharm&#xff08;语言特点、学习方法、工具安装&…...

List操作的一些常见问题

1. Arrays.asList转换基本类型数组 在实际的业务开发中&#xff0c;我们通常会进行数组转List的操作&#xff0c;通常我们会使用Arrays.asList来进行转换&#xff0c;但是在转换基本类型的数组的时候&#xff0c;却出现转换的结果和我们想象的不一致。 import java.util.Arra…...

如何使用Java和RabbitMQ实现延迟队列?

前言 今天我们使用Java和RabbitMQ实现消息队列的延迟功能。 前期准备&#xff0c;需要安装好docker、docker-compose的运行环境。 需要安装RabbitMQ的可以看下面这篇文章。 如何使用PHP和RabbitMQ实现消息队列&#xff1f;-CSDN博客 今天讲的是依赖RabbitMQ的延迟插件实现…...

AI论文速读 | TF-LLM:基于大语言模型可解释性的交通预测

论文标题&#xff1a; Explainable Traffic Flow Prediction with Large Language Models 作者&#xff1a;Xusen Guo, Qiming Zhang, Mingxing Peng, Meixin Zhu(朱美新)*, Hao (Frank)Yang(杨昊) 机构&#xff1a;香港科技大学&#xff08;广州&#xff09;&#xff0c;约翰…...

智慧矿山视频智能监控与安全监管方案

一、行业背景 随着全球能源需求的日益增长&#xff0c;矿业行业作为国民经济的重要支柱&#xff0c;其发展日益受到广泛关注。然而&#xff0c;传统矿山管理模式的局限性逐渐显现&#xff0c;如生产安全、人员监管、风险预警等方面的问题日益突出。因此&#xff0c;智慧矿山智…...

2024春算法训练4——函数与递归题解

一、前言 感觉这次的题目都很好&#xff0c;但是E题....&#xff08;我太菜了想不到&#xff09;&#xff0c;别人的题解都上百行了&#xff0c;晕&#xff1b; 二、题解 A-[NOIP2010]数字统计_2024春算法训练4——函数与递归 (nowcoder.com) 这种题目有两种做法&#xff1a;…...

【C++】C++知识点复习

牛客cpp&#xff1a;牛客网在线编程 2024年4月10日:BC1—>BC8 BC4&#xff1a;浮点数精度保留 问题&#xff1a;不加入fixed输入0.359813&#xff0c;最后得到0.36&#xff0c;并不是强制保留0.360。这种写法会保留小数点后三位精度&#xff0c;但是最后输出会省略掉最后…...

SpringBoot+Vue,轻松实现网页版人脸登录与精准识别

目录 1、技术介绍 2、技术原理 2.1、人脸检测 ①参考模板法 ②人脸规则法 2.2、人脸跟踪 2.3、人脸比对 ①特征向量法 ②面纹模板法 识别过程 案例 一、springboot后端项目 1&#xff0c;拉取项目后&#xff0c;导入相关依赖jar包 2&#xff0c;执行sql文件夹下面…...

深入浅出 -- 系统架构之垂直架构

当业务复杂度增加、访问量逐渐增大出现高并发时&#xff0c;单体架构无法满足需求&#xff0c;可以根据业务功能对系统进行拆分&#xff0c;以提高访问效率。 垂直架构介绍 1.垂直架构一般是因为单体架构太过于庞大而进行的拆分&#xff0c;拆分后各个系统应满足独立运行互相不…...

深入浅出 -- 系统架构之微服务架构选型参考图

技术选型架构图 是一个用于展示项目中所采用的各种技术和组件之间关系的图表。 它通常包括以下几个部分&#xff1a; 1. 项目名称和描述&#xff1a;简要介绍项目的背景和目标。 2. 技术栈&#xff1a;列出项目中使用的主要技术和工具&#xff0c;如编程语言、框架、数据库…...

Java 使用 ant.jar 执行 SQL 脚本文件

Java 使用 ant.jar 执行 SQL 脚本文件&#xff0c;很简单。 在 pom.xml 中导入 ant 依赖 <dependency><groupId>org.apache.ant</groupId><artifactId>ant</artifactId><version>1.10.11</version> </dependency>sql 脚本文件…...