YOLOv5基础知识入门(2)— YOLOv5核心基础知识讲解

news2024/11/24 14:43:44

前言:Hello大家好,我是小哥谈。YOLOV4出现之后不久,YOLOv5横空出世。YOLOv5在YOLOv4算法的基础上做了进一步的改进,使检测性能得到更进一步的提升。YOLOv5算法作为目前工业界使用的最普遍的检测算法,存在着很多可以学习的地方。本文将对YOLOv5检测算法的核心基础知识进行详细的解说,希望大家可以透彻的理解。🌈

前期回顾:

YOLOv5基础知识入门(1)— YOLO算法的发展历程

        目录

🚀1.YOLOv5简介

🚀2.YOLOv5网络结构

🚀3.输入端

3.1 Mosaic数据增强

3.2 自适应锚框计算 

3.3 自适应图像缩放

🚀4.主干网络(Backbone)

4.1 Focus结构

4.2 CSP结构

 🚀5.Neck网络

 🚀6.输出端

 🚀7.训练策略

🚀1.YOLOv5简介

YOLOv5是一种单阶段目标检测算法,该算法在YOLOv4的基础上添加了一些新的改进思路,使其速度精度都得到了极大的性能提升。主要的改进思路如下所示:

输入端:在模型训练阶段,提出了一些改进思路,主要包括Mosaic数据增强、自适应锚框计算、自适应图片缩放
主干网络(Backbone):融合其它检测算法中的一些新思路,主要包括:Focus结构与CSP结构
Neck网络:目标检测网络在BackBone与最后的输出端之间往往会插入一些层,Yolov5中添加了FPN+PAN结构
输出端:输出层的锚框机制与YOLOv4相同,主要改进的是训练时的损失函数CIOU_Loss,以及预测框筛选的DIOU_nms

总结:

输入端:Mosaic数据增强、自适应锚框计算、自适应图片缩放

主干网络(Backbone):Focus结构、CSP结构

Neck网络:FPN+PAN结构

输出端:CIOU_Loss、DIOU_nms

YOLOv5目标检测算法是Ultralytics公司于2020年发布的,根据模型的大小,YOLOv5有5个版本,分别为YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,这5个版本的权重、模型的宽度和深度是依次增加的。这些不同的变体使得YOLOv5能很好的在精度和速度中权衡,方便用户选择。YOLOv5五个版本的算法性能图和相应的指标如下所示:

​ 说明:

YOLOv5官方代码:🌷

GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite


🚀2.YOLOv5网络结构

YOLOv5的网络模型分为4个部分,包括输入端主干网络(Backbone)Neck网络输出端,本文将使用常用的YOLOv5s检测模型来进行介绍,下面即是YOLOv5s的网络结构图。👇👇👇

基本组件: 

  • CBL模块由Conv+BN+Leaky_relu激活函数组成,如上图中的模块1所示。
  • Res unit借鉴ResNet网络中的残差结构,用来构建深层网络,CBM是残差模块中的子模块,如上图中的模块2所示。
  • CSP1_X借鉴CSPNet网络结构,该模块由CBL模块、Res unint模块以及卷积层、Concat组成而成,如上图中的模块3所示。
  • CSP2_X借鉴CSPNet网络结构,该模块由卷积层和X个Res unint模块Concat组成而成,如上图中的模块4所示。
  • Focus如上图中的模块5所示,Focus结构首先将多个slice结果Concat起来,然后将其送入CBL模块中。
  • SPP采用1×1、5×5、9×9和13×13的最大池化方式,进行多尺度特征融合,如上图中的模块6所示。

其他基础操作:

  • Concat:张量拼接,会扩充两个张量的维度,例如26*26*256和26*26*512两个张量拼接,结果是26*26*768。
  • add:张量相加,张量直接相加,不会扩充维度,例如104*104*128和104*104*128相加,结果还是104*104*128。

说明:

YOLOv5n网络最小,速度最快,AP精度也最低。若检测的以大目标为主,追求速度,是个不错的选择。其他的四种网络,在YOLOv5基础上,不断加深加宽网络,AP精度也不断提升,但速度的消耗也在不断增加。🌱🌱🌱

福利:

Yolov3&Yolov4&Yolov5资源相关(包括模型权重、网络结构图等)💥💥💥

链接:https://pan.baidu.com/s/1NdVEtGxntCaAa_wWU0yG-g?pwd=zm4q 
提取码:zm4q 


🚀3.输入端

YOLOv5的输入端主要包括Mosaic数据增强、自适应锚框计算和自适应图像缩放三个部分。输入端表示需要输入图片,该阶段通常包含一个图像预处理阶段,即将输入图像缩放到网络的输入大小,并进行归一化等操作。在网络训练阶段,YOLOv5使用Mosaic数据增强操作提升模型的训练速度和网络的精度;并提出了一种自适应锚框计算与自适应图片缩放方法。🌻🌻🌻

3.1 Mosaic数据增强

Mosaic数据增强是在模型训练阶段使用的,将四张图片按照随机缩放、随机裁剪和随机排布的方式进行拼接,可以增加数据集中小目标的数量,从而提升模型对小目标物体的检测能力。YOLOv5会根据参数启动自适应锚框计算功能,自适应的计算不同类别训练集中的最佳锚框值。Mosaic数据增强方法,使用随机增减亮度、对比度、饱和度、色调以及随机缩放、裁减、翻转、擦除等基本方法进行数据增强。Mosaic数据增强选取四张经过上述基本方法操作后的图片进行随机编排和拼接,一方面变相增大BatchSize,降低显存占用率,另一方面扩充了原始数据集,防止过拟合的发生,提高了模型的整体鲁棒性。🚵

说明:

使用Mosaic数据增强方法的优点:🏆

丰富数据集:随机使用4张图片,随机缩放,再随机分布进行拼接,丰富了检测数据集,尤其是随机缩放增加了小目标,让网络的鲁棒性更好。

减少GPU:可能会有人说,随机缩放,普通的数据增强也可以做,但作者考虑到很多人可能只有一个GPU,因此Mosaic增强训练时,可以直接计算4张图片的数据,使得Mini-batch大小并不需要很大,一个GPU就可以达到比较好的效果。

3.2 自适应锚框计算 

在YOLO算法中,针对不同的数据集,都会有初始设定长宽的锚框。在网络训练中,网络在初始锚框的基础上输出预测框,进而和真实框groundtruth进行比对,计算两者差距,再反向更新,迭代网络参数,因此初始锚框是比较重要的一部分。在YOLOv3、YOLOv4中,训练不同的数据集时,计算初始锚框的值是通过单独的程序运行的。但YOLOv5中将此功能嵌入到代码中,每次训练将会自适应的计算不同训练集中的最佳锚框值。如果觉得计算的锚框效果不好,可以将自动计算锚框功能关闭。🚃

 
3.3 自适应图像缩放

在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。YOLO算法中常用416*416608*608等尺寸,比如对下面800*600的图像进行缩放。🐳

步骤1:根据原始图片大小以及输入到网络的图片大小来计算缩放比例

原始缩放尺寸是416*416,都除以原始图像的尺寸后,可以得到0.52,和0.69两个缩放系数,选择小的缩放系数🍀

步骤2:根据原始图片大小与缩放比例计算缩放后的图片大小

原始图片的长宽都乘以最小的缩放系数0.52,宽变成了416,而高变成了312。🍀

步骤3:计算黑边填充数值

 将416-312=104,得到原本需要填充的高度。再采用numpy中np.mod取余数的方式,得到8个像素,再除以2,即得到图片高度两端需要填充的数值。🌺

注意:

1.Yolov5中填充的是灰色,即(114,114,114)。

2.训练时没有采用缩减黑边的方式,还是采用传统填充的方式,即缩放到416*416大小。只是在测试,使用模型推理时,才采用缩减黑边的方式,提高目标检测,推理的速度。

3.为什么np.mod函数的后面用32?因为Yolov5的网络经过5次下采样,而2的5次方,等于32。所以至少要去掉32的倍数,再进行取余。


🚀4.主干网络(Backbone)

模型的Backbone主要由FocusC3(改进后的BottleneckCSP)等模块组成。

4.1 Focus结构

Focus 模块,输入通道扩充了4倍,作用是可以使信息不丢失的情况下提高计算力。Focus结构,在Yolov3&Yolov4中并没有这个结构,其中比较关键是切片操作📒

比如右图的切片示意图,4*4*3的图像切片后变成2*2*12的特征图。以Yolov5s的结构为例,原始608*608*3的图像输入Focus结构,采用切片操作,先变成304*304*12的特征图,再经过一次32个卷积核的卷积操作,最终变成304*304*32的特征图。💊

4.2 CSP结构

Yolov5中设计了两种CSP结构,以Yolov5s网络为例,CSP1_X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck网络中。 💯


 🚀5.Neck网络

该模块采用特征金字塔结构(FPN)+路径聚合网络结构(PAN)的结构,可以加强网络对不同缩放尺度对象特征融合的能力。Neck网络通常位于基准网络和头网络的中间位置,利用它可以进一步提升特征的多样性及鲁棒性。🌹

Yolov5现在的Neck和Yolov4中一样,都采用FPN+PAN的结构,但在Yolov5刚出来时,只使用了FPN结构,后面才增加了PAN结构,此外网络中其他部分也进行了调整。

结构如下图所示:

FPN层自顶向下传达强语义特征,而PAN则自底向上传达定位特征。


🚀6.输出端

输出端采用CIOU函数作为边界框的损失函数(关于损失函数,小哥谈后面会单独进行介绍,包括IOU_Loss、GIOU_Loss、DIOU_Loss和CIOU_Loss),在目标检测后处理过程中,使用NMS(非极大值抑制)来对多目标框进行筛选,增强了多目标和遮挡目标的检测能力。🌴

说明:

综合的看下各个Loss函数的不同点:

IOU_Loss:主要考虑检测框和目标框重叠面积。

GIOU_Loss:在IOU的基础上,解决边界框不重合时的问题。

DIOU_Loss:在IOU和GIOU的基础上,考虑边界框中心点距离的信息。

CIOU_Loss:在DIOU的基础上,考虑边界框宽高比的尺度信息。Yolov5中采用了CIOU_Loss的回归方式,使得预测框回归的速度和精度更高一些。

NMS算法实现:

为了从多个候选边界框中选择一个最佳边界框,通常会使用非极大值抑制(NMS)算法,这种算法用于“抑制”置信度低的边界框并只保留置信度最高的边界框。🍃

算法的实现过程为:🍃

输入: 候选边界框集合B(每个候选框都有一个置信度)、IoU阈值N

输出: 最终的边界框集合D(初始为空集合)

1. 对集合B根据置信度进行降序排序;

2. 从集合B中选择第一个候选框(置信度最高),把它放入集合D中并从集合B中删除;

3. 遍历集合B中的每个候选框,计算它们与D集合中这个候选框的IoU值。如果IoU值大于阈值N, 则把它从集合B中删除;

4. 重复步骤2~3直到集合B为空。

说明:

关于NMS(非极大值抑制),请参考我的另一篇文章。🌼🌼🌼

目标检测中NMS(非极大值抑制)原理解析


 🚀7.训练策略

  • 多尺度训练 (Multi-scale training)。如果网络的输入是416 x 416,那么训练的时候就会从0.5 x416到1.5×416中任意取值,但所取的值都是32的整数倍。
  • 训练开始前使用 warmup 进行训练。模型预训练阶段,先使用较小的学习率训练一些epochs或者steps,再修改为预先设置的学习率进行训练。
  • 使用了 cosine 学习率下降策略 (Cosine LR scheduler)
  • 采用了 EMA 更新权重(Exponential Moving Average)。相当于训练时给参数赋予一个动量,这样更新起来就会更加平滑。
  • 使用了 amp 进行混合精度训练 (Mixed precision)。能够减少显存的占用并且加快训练速度,但是需要 GPU 支持。

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

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

相关文章

Qt扫盲-Model/View入门

Model/View 编程入门 一、概述二、介绍1. 标准部件2. Model/View 控件3. Model/View控件概述4. 在表格单和 model 之间使用适配器 Adapters 三、 简单的 model / view 应用程序示例1. 一个只读表2. 使用role扩展只读示例3. 表格单元中的时钟4. 为列和行设置标题5. 最小编辑示例…

Unity数字可视化学校_昼夜(三)

1、删除不需要的 UI using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class EnvControl : MonoBehaviour {//UIprivate Button btnTime;private Text txtTime; //材质public List<Material> matListnew Li…

php-cgi.exe - FastCGI 进程超过了配置的请求超时时限

解决方案一&#xff1a; 处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题 内容转载&#xff1a; 处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题_php技巧_脚本之家 【详细错误】&#xff1a; HTTP 错误 500.0 - Internal Server Error C:…

棒球网络宣传平台建设规划·野球1号位

棒球网络宣传平台建设规划 棒球网络宣传平台简介棒球网络宣传平台是什么&#xff1f; 棒球网络宣传平台的目标是什么&#xff1f; 棒球网络宣传平台的目标是提高公众对棒球的认知度、促进棒球运动的发展。平台致力于提供优质的棒球资讯、赛事直播、教练和球员的个人专访、棒球…

解决 idea maven依赖引入失效,无法正常导入依赖问题

解决 idea maven依赖引入失效&#xff0c;无法正常导入依赖问题_idea无法导入本地maven依赖_普通网友的博客-CSDN博客 解决 idea maven依赖引入失效&#xff0c;无法正常导入依赖问题 idea是真的好用&#xff0c;不过里面的maven依赖问题有时候还真挺让人头疼&#xff0c;不少小…

使用eXosip+ffmpeg、ffplay命令行实现sip客户端

文章目录 前言一、关键实现1、主要流程2、解决端口冲突&#xff08;1&#xff09;、出现原因&#xff08;2&#xff09;、解决方法 3、解析sdp&#xff08;1&#xff09;、定义实体&#xff08;2&#xff09;、解析视频&#xff08;3&#xff09;、解析音频 4、命令行推拉流&am…

Linux 中利用设备树学习Ⅳ

系列文章目录 第一章 Linux 中内核与驱动程序 第二章 Linux 设备驱动编写 &#xff08;misc&#xff09; 第三章 Linux 设备驱动编写及设备节点自动生成 &#xff08;cdev&#xff09; 第四章 Linux 平台总线platform与设备树 第五章 Linux 设备树中pinctrl与gpio&#xff08;…

AEM接插件|插头测试仪获得中国信通院-泰尔实验室认可

AEM矢量网分及其rj45插头、插座获得中国信通院-泰尔实验室认可。并采购了一套原厂全新设备&#xff0c;进行试验研究。 与keysight矢量网分横向和纵向的对比&#xff0c;确定AEM此套测试方案&#xff0c;完全满足接插件测试标准的验证。并月7月份&#xff0c;正式向AEM厂家采购…

django处理分页

当数据库量比较大的时候一定要分页查询的 在django中操作数据库进行分页 queryset models.PrettyNum.objects.all() #查询所有 queryset models.PrettyNum.objects.all()[0:10] #查询出1-10列 queryset models.PrettyNum.objects.filter(mobile__contains136)[0:10] …

uni-app:实现数字文本框,以及左右加减按钮

效果 代码 <template><view><view classline3><view classline3_position><view classleft>数量<text>*</text></view> <view class"right"><view class"quantity_btn"><view class"…

Splunk Enterprise for mac(可视化数据分析软件)详细安装教程

Splunk Enterprise for Mac是一款可视化数据分析软件&#xff0c;为你提供强大的搜索、 分析和可视化功能&#xff0c;可以帮助您获得有价值的业务情报&#xff0c;从你机器生成的数据。还在等什么&#xff1f;有需要的朋友&#xff0c;欢迎前来下载&#xff01; 实时监测和搜…

React Dva 操作models中的subscriptions讲述监听

接下来 我们来看一个models的属性 之前没有讲到的subscriptions 我们可以在自己有引入的任意一个models文件中这样写 subscriptions: {setup({ dispatch, history }) {console.log(dispatch);}, },这样 一进来 这个位置就会触发 这里 我们可以写多个 subscriptions: {setup…

【重温老古董——Strust2框架】基于Idea使用maven创建Strust2项目

1、新建项目 红色圈出的部分是【强制】,其他部分看个人喜好。 2、修改 pom 文件,管理依赖 <dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.5.22</version></dependency&g…

C#,数值计算——用于从连续的数据值流估计任意分位数的计算方法与源程序

1 分位数Quantile 分位数&#xff08;Quantile&#xff09;&#xff0c;亦称分位点&#xff0c;是指将一个随机变量的概率分布范围分为几个等份的数值点&#xff0c;常用的有中位数&#xff08;即二分位数&#xff09;、四分位数、百分位数等。 2 常见各类分位数 2.1 二分位…

SQL SERVER ip地址改别名

SQL server在使用链接服务器时必须使用别名&#xff0c;使用ip地址就会把192.188.0.2这种点也解析出来 解决方案&#xff1a; 1、物理机ip 192.168.0.66 虚拟机ip 192.168.0.115 2、在虚拟机上找到 C:\Windows\System32\drivers\etc 下的 &#xff08;我选中的文件&a…

组合模式(C++)

定义 将对象组合成树形结构以表示部分-整体’的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性(稳定)。 应用场景 在软件在某些情况下&#xff0c;客户代码过多地依赖于对象容器复杂的内部实现结构&#xff0c;对象容器内部实现结构(而非抽象接口)的变化…

推荐一个OI的维基百科网站

推荐一个关于OI的维基百科网站&#xff1a; https://oi-wiki.org/ 链接: OI Wiki 这里面有很多关于竞赛的知识&#xff0c;还有各种讲解哦&#xff01;&#xff01;&#xff01; 当然&#xff0c;里面要是有什么看不懂的也可以问我哦&#xff01;&#xff01;&#xff01;

激光光束质量图像形状分析仪

随着激光技术在军事、农业、材料加工等领域内的广泛应用&#xff0c;不同领域对激光的特性要求也不相同&#xff0c;如何评价激光的质量也显得尤为重要。随着激光技术越来越成熟&#xff0c;激光开始在通信、军事、航天等领域内得到广泛应用。在军事领域中&#xff0c;如激光武…

mysql 数据库引擎介绍

一、数据库引擎 数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务&#xff0c;从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储…

FreeRTOS(STM32CubeMX)

FreeRTOS FreeRTOS介绍FreeRTOS主要特点什么时候用FreeRTOSSTM32CubeMX中如何使用FreeRTOSSTM32用FreeRTOS点灯 FreeRTOS介绍 FreeRTOS&#xff08;Real-Time Operating System&#xff09;是一款开源的实时操作系统内核&#xff0c;专为嵌入式系统和微控制器设计。它由Richard…