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

news2024/9/29 5:36:12

图像识别技术在物联网、智能监控等领域广泛应用。而深度学习中的目标检测技术,能够帮助我们对图像中的目标进行识别,进而实现自动化控制。目前,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.coloradmin.cn/o/1283889.html

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

相关文章

RK3588+MCU机器人控制器解决方案

1 产品简介 XMP04A 是一款信迈科技基于 RK3588 设计的高性能、低功耗的边缘计算设备, 内置 NPU 算力可达 6.0TOPSINT8,以及具备强大的视频编解码能力,最高可支持 32 路 1080P30fps 解码和 16 路 1080P30fps 编码 ,支持 4K12…

数据库管理-第120期 初探Halo数据库(202301201)

数据库管理-第120期 初探Halo数据库(202301201) 12月份正好也是第120期,新的一篇文章,尝试一条新的路线。其实吧,Halo(羲和)这个数据库我较早时间就听说过(早于今年DTCC&#xff0c…

SpringBoot+SSM项目实战 苍穹外卖(3)

继续上一节的内容,本节完成菜品管理功能,包括公共字段自动填充、新增菜品、菜品分页查询、删除菜品、修改菜品。 目录 公共字段自动填充新增菜品文件上传实现新增菜品实现 useGeneratedKeys 菜品分页查询删除菜品修改菜品根据id查询菜品实现修改菜品实现…

【Go】Go语言基础内容

变量声明: 变量声明:在Go中,变量必须先声明然后再使用。声明变量使用 var 关键字,后面跟着变量名和类型,如下所示: var age int这行代码声明了一个名为 age 的整数变量。 变量初始化:您可以在声…

JFrog----SBOM清单包含哪些:软件透明度的关键

文章目录 SBOM清单包含哪些:软件透明度的关键引言SBOM清单的重要性SBOM清单包含的核心内容SBOM的创建和管理结论 软件物料清单(SBOM)是一个在软件供应链安全中越来越重要的组成部分。它基本上是一份清单,详细列出了在特定软件产品…

ENVI植被指数阈值法

植被指数阈值法提取纯净像元 首先用ENVI打开无人机遥感影像 1. 假彩色显示 打开数据管理工具,无人机的4波段为红边波段 2. 波段计算 打开band math,输入 float(b1-b2)/(b1b2) 选择对应波段 3. 阈值筛选 阈值按经验值选的0.7,ndvi…

从零开始实现神经网络(二)_CNN卷积神经网络

参考文章: 介绍卷积神经网络1 介绍卷积神经网络2 在过去的几年里,关于卷积神经网络(CNN)的讨论很多,特别是因为它们彻底改变了计算机视觉领域。在这篇文章中,我们将建立在神经网络的基本背景知识的基础上,探…

[GPT-1]论文实现:Improving Language Understanding by Generative Pre-Training

Efficient Graph-Based Image Segmentation 一、完整代码二、论文解读2.1 GPT架构2.2 GPT的训练方式Unsupervised pre_trainingSupervised fine_training 三、过程实现3.1 导包3.2 数据处理3.3 模型构建3.4 模型配置 四、整体总结 论文:Improving Language Understa…

android studio 打开flutter项目 出现 dart sdk is not configured

android studio 版本 flutter版本 解决方式 1 点击Open Dart setting 2 打勾Enable Dart support for the project 3 Dart SDK path 选择flutter/bin/cache/dart-sdk 4 打勾Enable Dart support for the following modules

【NI-RIO入门】Real Time(实时系统解释)

1.什么是实时系统? 实时系统可以非常精确可靠的执行需要特定时许要求的系统,对于许多工程项目来说,通用操作系统,例如WINDOWS等标准PC上运行测量和控制程序是无法精确控制计时的,这些系统很容易受用户的其他程序、图像…

【数据结构】——栈|队列(基本功能)

目录 栈 基本概念 栈的常见基本操作 栈的存储 ✌栈的基本操作实现 栈的构建 栈的初始化 入栈 打印栈 出栈 获取栈顶元素 获取栈的有效元素个数 判断栈是否为空 销毁栈 队列 基本概念 队列的常见基本操作 ✌队列的基本操作实现 队列的构建 初始化 入队列 出…

BUUCTF [GXYCTF2019]BabySQli 1 详解!(MD5与SQL之间的碰撞)

题目环境burp抓包 随便输入值 repeater放包 在注释那里发现某种编码 MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5 看着像是base编码格式 通过测试发现是套加密(二次加密) 首先使用base32对此编码…

【LeetCode热题100】【双指针】三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 …

C语言 操作符详解

C语言学习 目录 文章目录 前言 一、算术操作符 二、移位操作符 2.1 左移操作符 2.2 右移操作符 三、位操作符 3.1 按位与操作符 & 3.2 按位或操作符 | 3.3 按位异或操作符 ^ 四、赋值操作符 五、单目操作符 5.1 逻辑反操作符! 5.2 正值、负值-操作符 5.3 取地址…

老铺黄金IPO:古法黄金的下半场,从高端走向大众?

当前,国内“掘金热”持续走高。据中国黄金协会统计,2023年前三季度全国黄金消费835.07吨,同比增长7.32%。其中黄金首饰552.04吨,同比增长5.72%。 在市场需求带动下,老铺黄金这家专注古法黄金经营的企业今年上半年业绩…

ubuntu 创建conda 环境失败 HTTP 000 CONNECTION FAILED

如有帮助点赞收藏关注! 如需转载,请注明出处! 现在内存分配好了,创建一个专门的conda环境处理文件,报错了,创建不成功! 什么情况,之前明明可以的。 百度吧。 参照一些博客修改了文档…

java synchronized详解

背景 在多线程环境下同时访问共享资源会出现一些数据问题,此关键字就是用来保证线程安全的解决这一问题。 内存可见的问题 在了解synchronized之前先了解一下java内存模型,如下图: 线程1去主内存获取x的值读入本地内存此时x的值为1&…

Linux(14):进程管理

一个程序被加载到内存当中运作,那么在内存内的那个数据就被称为进程(process)。 进程是操作系统上非常重要的概念,所有系统上面跑的数据都会以进程的型态存在。 进程 在 Linux底下所有的指令与能够进行的动作都与权限有关,而系统如何判定权…

大数据技术学习笔记(四)—— HDFS

目录 1 HDFS 概述1.1 HDFS 背景与定义1.2 HDFS 优缺点1.3 HDFS 组成架构1.4 HDFS 文件块大小 2 HDFS的shell操作2.1 上传2.2 下载2.3 HDFS直接操作 3 HDFS的客户端操作3.1 Windows 环境准备3.2 获取 HDFS 的客户端连接对象3.3 HDFS文件上传3.4 HDFS文件下载3.5 HDFS删除文件和目…

Vue项目解决van-calendar 打开下拉框显示空白(白色),需滑动一下屏幕,才可正常显示

问题描述,如图 ipad(平板)或者 H5移动端引入Vant组件的日历组件(van-calendar),初始化显示空白,需滚动一下屏幕,才可正常显示 解决方法 需在van-calendar上绑定open"openCalendar"事件…