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

news2025/2/25 14:20:44

目录

一 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将边界表示成一种分布,解决边界不明确的问题。

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

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

相关文章

内容创作策略:打造影响力强大的技术博客

CSDN的朋友你们好,我是未来,今天给大家带来专栏【程序员博主教程(完全指南)】的第6篇文章——“博客内容创作策略”。本文为技术博主提供了一个精简的内容创作策略指南,涵盖了设定目标、分析竞争、关键词研究、内容规划…

PMP与软考的区别看不懂?看懂这五点,小白都知道怎么选!

如果你心怀抱负,不甘心做项目“小透明” 如果你遇到年龄危机,进阶管理无门道? 如果你是技术,管理项目有如盲人摸象?可以考PMP! 如果你准备想攒积分,轻松落户 如果你想评职称,获得专业技术职务 如…

【环境搭建】(五)Ubuntu22.04安装cuda_11.8.0+cudnn_8.6.0

一个愿意伫立在巨人肩膀上的农民...... 设备配置: 一、安装GCC 安装cuda之前,首先应该安装GCC,安装cuda需要用到GCC,否则报错。可以先使用下方指令在终端查看是否已经安装GCC。 gcc --version 如果终端打印如下则说明已经安装…

【浏览器】Google Chrome浏览器打开自动访问网址 gw1.dhwz333.top

目录 [TOC](目录) 问题描述1、查看谷歌浏览器信息2、查看快捷方式属性2、查找注册表3、重装浏览器 解决方案一、使用360系统急救箱进行杀毒步骤1、下载360系统急救箱方式1、直接下载方式2、从360杀毒中打开,需要联网2.1、打开“功能大全”2.2、打开系统急救箱 步骤2…

Fitzgerald:Renin antibody抗体

货号:10-2421 名称:Renin antibody 规格:250ug 产品描述: 别名:Monoclonal Renin antibody, Anti-Renin antibody, FLJ10761 antibody, HNFJ2 antibody, REN antibody, RENI antibody, Renin antibody, renin precu…

第十四篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读Python自动化处理图像

传奇开心果博文系列 系列博文目录Python自动化办公库技术点案例示例系列 博文目录前言一、Python自动化图像处理的优点介绍二、Python常用图像处理库和功能介绍三、强大且易于上手示例代码四、丰富的算法资源示例代码五、批量处理图片示例代码六、支持多种图像格式示例代码七、…

【C#】版本号

💻 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp16 {internal class Program{static void Main(string[] args){Version version01 new Version("4.0.0…

SSM整合----第一个SSM项目

文章目录 前言一、使用步骤1.引入库2.建表3 项目结构4 web.xml的配置5 配置数据源6 SpringMVC配置7 配置MyBatis Mapper8 书写控制类 总结 前言 提示:这里可以添加本文要记录的大概内容: SSM整合是指Spring、SpringMVC和MyBatis这三个框架的整合使用。…

数据结构OJ题——栈和队列

1. 用栈实现队列(OJ链接) 题目描述:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty) void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回…

Mysql安装和初始化密码

一、下载地址: MySQL :: Download MySQL Community Server (Archived Versions) 1、解压到本地目录下,然后配置环境变量(也可以不配置,不影响使用,不过为了区分多版本的MySQL最好配置一下系统变量) 复制…

分享:temu跨境电商项目是真的能赚钱吗?有哪些技巧?

近年来,跨境电商成为了一个备受瞩目的领域,temu跨境电商项目也吸引了众多创业者和投资者的目光。那么,temu跨境电商项目真的能够赚钱吗?又有哪些技巧可以帮助我们在这个领域取得成功呢? 首先,可以肯定的是,temu跨境电…

谷歌查问题

1,打开 it工具箱-里面啥都有 2,找到谷歌 3,访问gpt

使用LNMP部署动态网站环境

目录 实验环境 一、配置LNMP架构环境 二、验证部署的LNMP 动态网站环境是否可用 三、配置过程中遇到的问题及解决思路 实验环境 centos7 192.168.81.131/24 一、配置LNMP架构环境 概念及配置手册参考第20章 使用LNMP架构部署动态网站环境。 | 《Linux就该这么学》 安装g…

开源项目ChatGPT-Next-Web的容器化部署(四)-- k8s容器部署使用configmap配置

一、接着上文 本文的内容是在k8s容器中,如何使用configmap对.env文件进行挂载,实现环境的差异化配置。 二、源码结构 项目ChatGPT-Next-Web使用了.env文件来配置不同环境下的值: 所以,我们同理新增两个配置文件,见下…

PixArt-β:Fast and controllable image generation with latent consistency models

PixArt α to Σ: All about Efficient Diffusion Models - 知乎前言自年初Sora和Stable Diffusion 3推出以来,笔者就开始关注基于Diffusion Transformer的工作。在我的往期文章《 Diffusion Transformer Family:关于Sora和Stable Diffusion 3你需要知道…

跟TED演讲学英文:A new way to build AI, openly by Percy Liang

A new way to build AI, openly Link: https://www.ted.com/talks/percy_liang_a_new_way_to_build_ai_openly? Speaker: Percy Liang Date: October 2023 文章目录 A new way to build AI, openlyIntroductionVocabularyTranscriptSummary后记 Introduction Today’s AI …

HiSilicon352 android9.0 系统显示方向旋转与截屏问题分析

一,系统显示方向 1. 概述 Android的旋转显示,主要运用于广告机。Android的旋转,包括图形UI的旋转、鼠标和遥控器的旋转及媒体旋转。 下图为竖屏UI的绘制坐标系和显示坐标系。 2. 功能说明 方案依据Android原生的旋转原理设计&#xff0c…

“安全边际大师”卡拉曼2023年珍贵访谈:如果视市场为狂躁的交易对手,那你就能利用反复无常来获利

“对于那些被广泛跟踪的股票,如果你不比其他人更聪明,且你的观点与别人无异,你是赚不到钱的。” “足够大的折价也许可以抵消你对它缺乏最深刻的认识。” “拓宽投资视野不仅诱人,也可能价值连城。” “如果向市场寻求答案&…

JAVA面试八股文之数据库

MySQL面试题 MySQL 存储引擎架构了解吗?CHAR 和 VARCHAR 的区别是什么?索引是越多越好嘛?MySQL数据库中空值(null)和空字符串()的区别?SQL 中 on 条件与 where 条件的区别&#xff1…

Java创建对象内存分析-JVM

Java 创建对象的内存分析-JVM 复习的时候看到这篇,看完自己背着画了一下。 https://blog.csdn.net/qq_60264381/article/details/119276824