【目标检测】yolov5模型详解

news2024/11/30 0:43:07

文章目录

  • 一、Yolov5网络结构
    • 1.1 Input
    • 1.2 Backbone
      • 1.2.1 Conv模块
      • 1.2.2 C3模块
      • 1.2.3 SPPF模块
    • 1.3 Neck
    • 1.4 Head
      • 1.4.1 head
      • 1.4.2 目标框回归
      • 1.4.3 目标的建立
      • 1.4.4 NMS(Non-Maximum Suppression)
  • 二、损失函数
    • 2.1 分类损失
    • 2.2 置信度损失
    • 2.3 定位损失 Location loss
  • 参考文献

yolov5于2020年由glenn-jocher首次提出,直至今日yolov5仍然在不断进行升级迭代。

Yolov5有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四个版本。文件中,这几个模型的结构基本一样,不同的是depth_multiple模型深度和width_multiple模型宽度这两个参数。
在这里插入图片描述

一、Yolov5网络结构

yolov5主要分为以下几部分:

  • Input:输入
  • Backbone:New CSP-Darknet53
  • Neck:SPFF和New CSP-PAN
  • Head(prediction):Yolov3 head

yolov5 6.0版本的主要架构如下图所示:

在这里插入图片描述

Yolov5网络结构图

1.1 Input

YOLOv5在输入端Input采用了Mosaic数据增强,参考了CutMix数据增强的方法,Mosaic数据增强由原来的两张图像提高到四张图像进行拼接,并对图像进行随机缩放,随机裁剪和随机排列使用数据增强可以改善数据集中,小、中、大目标数据不均衡的问题。

Mosaic数据增强的主要步骤为:

  1. Mosaic
  2. Copy paste
  3. Random affine(Scale, Translation and Shear)
  4. Mixup
  5. Albumentations
  6. Augment HSV(Hue, Saturation, Value)
  7. Random horizontal flip.
    在这里插入图片描述

采用Mosaic数据增强的方式有几个优点:

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

1.2 Backbone

在Backbone中,有Conv,C3,SPFF是我们需要阐明的。

1.2.1 Conv模块

Conv卷积层由卷积,Batch Normalization和SiLu激活层组成。

batch normalization具有防止过拟合,加速收敛的作用。

SiLu激活函数是Sigmoid 加权线性组合,SiLU 函数也称为 swish 函数。
公式:silu(x)=x∗σ(x), where σ(x) is the logistic sigmoid. Silu函数处处可导,且连续光滑。Silu并非一个单调的函数,最大的缺点是计算量大。
在这里插入图片描述

SiLu激活函数

1.2.2 C3模块

(1)C3整体模块

C3其结构作用基本相同均为CSP架构,只是在修正单元的选择上有所不同,其包含了3个标准卷积层,数量由配置文件yaml的n和depth_multiple参数乘积决定。

该模块是对残差特征进行学习的主要模块,其结构分为两支:

  • 一支使用了上述指定多个Bottleneck堆叠
  • 另一支仅经过一个基本卷积模块,最后将两支进行concat操作。

这个模块相对于之前版本BottleneckCSP模块不同的是,经历过残差输出后的卷积模块被去掉了,concat后的标准卷积模块中的激活函数也为SiLU。

在这里插入图片描述

C3模块结构图

(2)C3中的Bottleneck

C3模块中的Bottleneck借鉴了ResNet的残差结构,具体如下:

  • 其中一路先进行1 ×1卷积将特征图的通道数减小一半,从而减少计算量,再通过3 ×3卷积提取特征,并且将通道数加倍,其输入与输出的通道数是不发生改变的。
  • 另外一路通过shortcut进行残差连接,与第一路的输出特征图相加,从而实现特征融合。

在YOLOv5中,Backbone中的Bottleneck都默认使shortcut为True,而在Head中的Bottleneck都不使用shortcut。

在这里插入图片描述

Bottleneck结构图(shortcut为True/False)

1.2.3 SPPF模块

SPPF由SPP改进而来,SPP先通过一个标准卷积模块将输入通道减半,然后分别做kernel-size为5,9,13的max pooling(对于不同的核大小,padding是自适应的)。对三次最大池化的结果与未进行池化操作的数据进行concat,最终合并后channel数是原来的2倍。

yolo的SPP借鉴了空间金字塔的思想,通过SPP模块实现了局部特征和全部特征。经过局部特征与全矩特征相融合后,丰富了特征图的表达能力,有利于待检测图像中目标大小差异较大的情况,对yolo这种复杂的多目标检测的精度有很大的提升。  
SPP结构图

SPP结构图

SPPF(Spatial Pyramid Pooling - Fast )使用3个5×5的最大池化,代替原来的5×5、9×9、13×13最大池化,多个小尺寸池化核级联代替SPP模块中单个大尺寸池化核,从而在保留原有功能,即融合不同感受野的特征图,丰富特征图的表达能力的情况下,进一步提高了运行速度。
SPPF结构图

SPPF结构图

1.3 Neck

在Neck部分,yolov5主要采用了PANet结构。

PANet在FPN(feature pyramid network)上提取网络内特征层次结构,FPN中顶部信息流需要通过骨干网络(Backbone)逐层地往下传递,由于层数相对较多,因此计算量比较大(a)。

PANet在FPN的基础上又引入了一个自底向上(Bottom-up)的路径。经过自顶向下(Top-down)的特征融合后,再进行自底向上(Bottom-up)的特征融合,这样底层的位置信息也能够传递到深层,从而增强多个尺度上的定位能力。

在这里插入图片描述

(a) FPN backbone. (b) Bottom-up path augmentation. (c) Adaptive feature pooling. (d) Box branch. (e) Fully-connected fusion.
  • FPN(Feature Pyramid Networks) 特征金字塔模型:https://blog.csdn.net/u012856866/article/details/130271655

1.4 Head

1.4.1 head

Head部分主要用于检测目标,分别输出20*20,40*40和80*80的特征图大小,对应的是32*32,16*16和8*8像素的目标。

YOLOv5的Head对Neck中得到的不同尺度的特征图分别通过1×1卷积将通道数扩展,扩展后的特征通道数为:(类别数量+5)×每个检测层上的anchor数量。
其中5分别对应的是:预测框的中心点横坐标、纵坐标、宽度、高度和置信度。这里的置信度表示预测框的可信度,取值范围为( 0 , 1 ) ,值越大说明该预测框中越有可能存在目标。

Head中的3个检测层分别对应Neck中得到的3种不同尺寸的特征图。特征图上的每个网格都预设了3个不同宽高比的anchor,可以在特征图的通道维度上保存所有基于anchor先验框的位置信息和分类信息,用来预测和回归目标。

1.4.2 目标框回归

YOLOv5的目标框回归计算公式如下所示:

其中:

  • (bx, by, bw, bh)表示预测框的中心点x, y坐标、宽度和高度
  • (cx, cy)表示预测框中心点所在网格的左上角坐标
  • (tx,ty)表示预测框的中心点相对于网格左上角坐标的偏移量
  • (tw,th)表示预测框的宽高相对于anchor宽高的缩放比例
  • (pw,ph)表示先验框anchor的宽高

为了将预测框的中心点约束到当前网格中,使用Sigmoid函数处理偏移量,使预测的偏移值保持在(0,1)范围内。这样一来,根据目标框回归计算公式,预测框中心点坐标的偏移量保持在(−0.5,1.5)范围内,如上图蓝色区域所示。预测框的宽度和高度对于anchor的放缩范围为(0,4)。

1.4.3 目标的建立

如上面所述,YOLOv5的每个检测层上的每个网格都预设了多个anchor先验框,但并不是每个网格中都存在目标,也并不是每个anchor都适合用来回归当前目标,因此需要对这些anchor先验框进行筛选,将其划分为正样本和负样本。本文的正负样本指的是预测框而不是Ground Truth(人工标注的真实框)。

与YOLOv3/4不同的是,YOLOv5采用的是基于宽高比例的匹配策略,它的大致流程如下:

  1. 对于每一个Ground Truth(人工标注的真实框),分别计算它与9种不同anchor的宽与宽的比值(w1/w2, w2/w1)和高与高的比值(h1/h2, h2/h1)。
  1. 找到Ground Truth与anchor的宽比(w1/w2, w2/w1)和高比(h1/h2, h2/h1)中的最大值,作为该Ground Truth和anchor的比值。
  2. 若Ground Truth和anchor的比值r^max小于设定的比值阈值(超参数中默认为anchor_t = 4.0),那么这个anchor就负责预测这个Ground Truth,这个anchor所回归得到的预测框就被称为正样本,剩余所有的预测框都是负样本。

在这里插入图片描述
通过上述方法,YOLOv5不仅筛选了正负样本,同时对于部分Ground Truth在单个尺度上匹配了多个anchor来进行预测,总体上增加了一定的正样本数量。除此以外,YOLOv5还通过以下几种方法增加正样本的个数,从而加快收敛速度。

跨网格扩充: 如果某个Ground Truth的中心点落在某个检测层上的某个网格中,除了中心点所在的网格之外,其左、上、右、下4个邻域的网格中,靠近Ground Truth中心点的两个网格中的anchor也会参与预测和回归,即一个目标会由3个网格的anchor进行预测,如下图所示。

在这里插入图片描述
跨分支扩充:YOLOv5的检测头包含了3个不同尺度的检测层,每个检测层上预设了3种不同长宽比的anchor,假设一个Ground Truth可以和不同尺度的检测层上的anchor匹配,则这3个检测层上所有符合条件的anchor都可以用来预测该Ground Truth,即一个目标可以由多个检测层的多个anchor进行预测。

1.4.4 NMS(Non-Maximum Suppression)

当我们得到对目标的预测后,一个目标通常会产生很多冗余的预测框。Non-maximum suppression(NMS)其核心思想在于抑制非极大值的目标,去除冗余,从而搜索出局部极大值的目标,找到最优值。

在我们对目标产生预测框后,往往会产生大量冗余的边界框,因此我们需要去除位置准确率低的边界框,保留位置准确率高的边界框。NMS的主要步骤为:

  1. 对于每个种类的置信度按照从大到小的顺序排序,选出置信度最高的边框。

  2. 遍历其余所有剩下的边界框,计算这些边界框与置信度最高的边框的IOU值。如果某一边界框和置信度最高的边框IOU阈值大于我们所设定的IOU阈值,这意味着同一个物体被两个重复的边界框所预测,则去掉这这个边框。

  3. 从未处理的边框中再选择一个置信度最高的值,重复第二步的过程,直到选出的边框不再有与它超过IOU阈值的边框。

二、损失函数

YOLOv5的损失函数主要由三个部分组成:

  • Classes loss:分类损失。采用的是BCE loss,只计算正样本的分类损失。
  • Objectness loss:置信度损失。采用的依然是BCE loss,指的是网络预测的目标边界框与GT Box的CIoU。这里计算的是所有样本的损失。
  • Location loss:定位损失。采用的是CIoU loss,只计算正样本的定位损失。

其中, l a m b d a lambda lambda为平衡系数,分别为0.5,1和0.05。

2.1 分类损失

YOLOv5默认使用二元交叉熵函数来计算分类损失。二元交叉熵函数的定义为

其中y为输入样本对应的标签(正样本为1,负样本为0),p为模型预测该输入样本为正样本的概率。假设:

交叉熵函数的定义可简化为:

YOLOv5使用二元交叉熵损失函数计算类别概率和目标置信度得分的损失,各个标签不是互斥的。YOLOv5使用多个独立的逻辑(logistic)分类器替换softmax函数,以计算输入属于特定标签的可能性。在计算分类损失进行训练时,对每个标签使用二元交叉熵损失。这也避免使用softmax函数而降低了计算复杂度。

2.2 置信度损失

每个预测框的置信度表示这个预测框的可靠程度,值越大表示该预测框越可靠,也表示越接近真实框。对于置信度标签,YOLO之前的版本认为所有存在目标的网格(正样本)对应的标签值均为1,其余网格(负样本)对应的标签值为0。但是这样带来的问题是有些预测框可能只是在目标的周围,而并不能精准预测框的位置。

YOLOv5的做法是,根据网格对应的预测框与真实框的CIoU作为该预测框的置信度标签。与计算分类损失一样,YOLOv5默认使用二元交叉熵函数来计算置信度损失。

同时,对于目标损失,在不同的预测特征层也给予了不同权重。
在这里插入图片描述

在源码中,针对预测小目标的预测特征层采用的权重是4.0,针对预测中等目标的预测特征层采用的权重是1.0,针对预测大目标的预测特征层采用的权重是0.4,作者说这是针对COCO数据集设置的超参数。

2.3 定位损失 Location loss

IOU, intersection of Union交并比,它的作用是衡量目标检测中预测框与真实框的重叠程度。假设预测框为A,真实框为B,则IoU的表达式为:

但是当预测框与真实框没有相交时,IoU不能反映两者之间的距离,并且此时IoU损失为0,将会影响梯度回传,从而导致无法训练。此外,IoU无法精确的反映预测框与真实框的重合度大小。

YOLOv5默认使用CIoU来计算边界框损失。

(1)DIoU

CIoU基于DIoU得到,其中DIoU将预测框和真实框之间的距离,重叠率以及尺度等因素都考虑了进去,使得目标框回归变得更加稳定。DIoU的损失函数为:

其中 b b b b g t b^{gt} bgt分别表示预测框和真实框的中心点,ρ表示两个中心点之间的欧式距离,c表示预测框和真实框的最小闭包区域的对角线距离,gt是ground truth缩写。如下图所示:

(2)CIoU

CIoU是在DIoU的惩罚项基础上添加了一个影响因子αv,这个因子将预测框的宽高比和真实框的宽高比考虑进去,即CIoU的损失计算公式为:

其中α是权重参数,它的表达式为:

参考文献

  • Yolov5算法解读:https://blog.csdn.net/qq_39696563/article/details/126377377

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

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

相关文章

在Linux系统实现服务器端和客户端的套接字通信

目录 一.创建一个socket文件夹用来存放编写的服务器端和客户端程序 二.编写服务器端代码 三.编写客户端代码 四.编译c语言程序 五.断开连接 六.可能涉及到的一些没接触过的知识点 一.创建一个socket文件夹用来存放编写的服务器端和客户端程序 (我系统里的文件…

Revit楼板问题:楼板连接处以及楼板开洞,一键开洞

在我们做楼梯时,楼梯与楼板处的连接处理不是那么符合实际,会出现一些问题,如下图,这样的连接会导致楼梯配筋时钢筋外露。 我们来学习如何调节楼板与楼板连接处的高度,选中楼梯,点击“编辑楼梯”在所需要更改…

STM32堆栈方面知识点

最近弄json,发现经常的堆溢出,然后找问题。因为对STM32堆栈问题没有深刻认识,就花时间好好研究下了堆栈并且做了验证 1.栈地址区间确定 首先找到启动文件,我的启动文件在startup_stm32f40xx.s,一般的启动文件也都在s…

Linux之命令搜索

目录 Linux之命令搜索 Whereis命令 定义 基本信息 举例 which命令 定义 与whereis命令的区别 基本信息 举例 locate 命令 定义 优点 缺点 基本信息 案例 Linux之命令搜索 Whereis命令 定义 whereis --- 搜索系统命令的命令(像绕口令一样&#xff09…

Revit中如何为曲面墙体开洞口,一键开洞?

一、Revit中如何为曲面墙体开洞口 直线墙体开洞可以直接通过编辑轮廓来绘制洞口形状即可,或者可以通过选中墙体选择“墙-洞口”命令来开洞口。 但是曲面墙体开洞并没有那么简单,曲面墙体不能够编辑轮廓,并且选中曲面墙体“墙-洞口”命令只能够…

C++const函数的运用:深度解析const函数的魅力

C 深度解析const函数的魅力 1. C const函数的基本概念(Basic Concepts of const Functions in C)1.1 const函数的定义与特性(Definition and Characteristics of const Functions)1.2 const函数的使用场景(Usage Scena…

docker磁盘空间爆满 通过overlay2 目录名查找对应容器

docker磁盘空间爆满 通过overlay2 目录名查找对应容器 1、docker文件系统占用分析2、使用shell脚本通过overlay2 目录名查找对应容器 1、docker文件系统占用分析 du -sh /var/lib/docker/*看到占用磁盘空间最大的目录是docker存储根目录下的overlay2目录 再查看docker存储根目…

Android智能指针SP WP

1.概述 Android的C部分代码中有大量的sp/wp存在,意思是strong pointer和weak pointer,看字面意思就是指针相关的东西。C是通过new和delete进行内存的分配和释放的,但是有时候开发者会忘记使用delete导致内存泄露,所以Android中就…

设计师们都在用的AI作图神器,你还不抓紧入手一款

人工智能在机器和计算机控制的机器人中模拟人类智能过程。这允许计算机系统执行繁重的任务,帮助人类专注于更重要的事情。因此,多年来,工作场所对 AI 集成的需求不断增加。 同样,人工智能正迅速成为设计行业的一部分。在平面设计…

MyBatis与Spring的整合

学习目标: 掌握Spring与MyBatis的集成 掌握使用SqlSessionTemplate实现整合 掌握使用MapperFactoryBean实现整合 掌握Spring的事务切面实现声明式事务处理 掌握使用注解实现声明式事务处理 学习内容: 1.整合思路梳理 思路梳理 以上流程可以全部移…

RHCE 作业二

1. 第一步:配置服务端server 1>安装chrony [rootserver ~]# yum install chrony -y 2>编辑配置文件,修改为阿里的时间服务地址 [rootserver ~]# vim /etc/chrony.conf 3> 重启服务 [rootserver ~]# systemctl restart chronyd 4>测试 5>…

证件照制作教程:如何使用在线工具制作高质量的证件照

证件照制作:让你的形象更加完美 介绍 证件照是人们在日常生活、工作和学习中必不可少的一项证明身份的重要文件。而证件照的质量好坏不仅会直接影响到证件审核的效率,还会影响到自己形象的好坏。为了让自己的形象更加完美,我们需要制作高质…

公网使用SSH远程连接安卓手机Termux - Android手机服务器

文章目录 1.安装ssh2.安装cpolar内网穿透3.远程ssh连接配置4.公网远程连接5.固定远程连接地址 转载自cpolar极点云的文章:公网SSH远程连接Termux – 电脑使用安卓Termux 「无需公网IP」 使用安卓机跑东西的时候,屏幕太小,有时候操作不习惯。不…

Python期末复习题库(下)——“Python”

小雅兰期末加油冲冲冲!!! 1. (单选题)下列关于文件打开模式的说法,错误的是( C )。 A. r代表以只读方式打开文件 B. w代表以只写方式打开文件 C. a代表以二进制形式打开文件 D. 模式中使用时,文件可读可写 2. (单选题)下列选项中,以追加…

【操作系统】04.设备管理

IO软件层次 IO设备 机械部件 分类 设备控制器 寄存器编址 IO控制方式 程序直接控制方式 中断驱动方式 DMA方式 通道控制方式 中断处理程序 设备驱动程序 设备独立性软件 IO调度 设备保护 设备分配与回收 静态分配和动态分配 数据结构 设备分配步骤 改进 缓冲区管理 缓冲区的…

5款冷门小工具,让你的电脑变得与众不同

每个人的电脑中都会安装很多软件,可能还保留着很多不为人知的冷门软件。不过虽然冷门,但绝不意味着低能,相反很多冷门软件的功能十分出色。闲话少说,接下来我就给大家推荐5款冷门小工具,看一看有没有你喜欢的。 1.图标…

供应商评估时要考虑的 5 个关键因素

在任何供应商评估中,无论是新供应商还是现有供应商,衡量其生产能力、业绩、风险、质量和环境影响都很重要。然而,如果没有一个有组织的评估方法和一个较大的框架来使评估信息为你所用,单靠衡量这些因素将无济于事。 为什么要进行…

跨部门沟通:这8条方法和建议,让跨部门协作不再难搞!

想要在公司里做出成绩,跨部门沟通是至关重要的。但是,很多人都会遭遇跨部门协作困难的问题。别担心,我们来给你解决方案! 1.保持开放和透明 让你的队友们知道你的想法和工作计划,让他们能够对你提出反馈意见。 2.要…

点成分享丨ELISA实验的类型及原理

ELISA实验,即酶联免疫吸附测定(Enzyme-Linked Immunosorbent Assay)实验,是免疫学中的经典实验之一,它是一种利用抗原抗体特异性结合进行免疫反应的定性和定量检测方法,目前已被广泛应用于生物学、医学、植…

ai语音机器人接听自动外呼配置

一,添加能转接到机器人的拨号方案 {cti_robot_flow_exists({destination_number})} 这是判断路由条件设置的机器人话术是否存在 cti_robot ${destination_number} 启动机器人流程 set park_timeout3600 设置park最大的时间,机器人和用户最大的通话时间…