【目标检测】yolov5模型详解

这篇具有很好参考价值的文章主要介绍了【目标检测】yolov5模型详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


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

Yolov5有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四个版本。文件中,这几个模型的结构基本一样,不同的是depth_multiple模型深度和width_multiple模型宽度这两个参数。
yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

一、Yolov5网络结构

yolov5主要分为以下几部分:

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

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

yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

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.
    yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

采用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并非一个单调的函数,最大的缺点是计算量大。
yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

SiLu激活函数

1.2.2 C3模块

(1)C3整体模块

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

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

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

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

yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

C3模块结构图

(2)C3中的Bottleneck

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

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

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

yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

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这种复杂的多目标检测的精度有很大的提升。  
yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

SPP结构图

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

SPPF结构图

1.3 Neck

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

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

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

yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

(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模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

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

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

1.4.2 目标框回归

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

yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能
yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

其中:

  • (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)。
yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能
  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模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能
通过上述方法,YOLOv5不仅筛选了正负样本,同时对于部分Ground Truth在单个尺度上匹配了多个anchor来进行预测,总体上增加了一定的正样本数量。除此以外,YOLOv5还通过以下几种方法增加正样本的个数,从而加快收敛速度。

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

yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能
跨分支扩充: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,只计算正样本的定位损失。
yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

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

2.1 分类损失

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

yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

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

yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

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

yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

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

2.2 置信度损失

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

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

同时,对于目标损失,在不同的预测特征层也给予了不同权重。
yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

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

2.3 定位损失 Location loss

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

yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

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

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

(1)DIoU

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

yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

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

yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

(2)CIoU

CIoU是在DIoU的惩罚项基础上添加了一个影响因子αv,这个因子将预测框的宽高比和真实框的宽高比考虑进去,即CIoU的损失计算公式为:文章来源地址https://www.toymoban.com/news/detail-730885.html

yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能
其中α是权重参数,它的表达式为:
yolov5模型,机器学习 & 深度学习,计算机视觉,YOLO,计算机视觉,人工智能

参考文献

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

到了这里,关于【目标检测】yolov5模型详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于深度学习的高精度线路板瑕疵目标检测系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度线路板瑕疵目标检测系统可用于日常生活中来检测与定位线路板瑕疵目标,利用深度学习算法可实现图片、视频、摄像头等方式的线路板瑕疵目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数

    2024年02月16日
    浏览(55)
  • 【目标检测】YOLOv5:模型构建解析

    最近在看一些目标检测的最新论文和代码,大多数都是在YOLOv5的基础上进行魔改。 改的最多的基本是原版本的网络结构,这篇博文就从源码角度来解析YOLOv5中,模型是如何构建出来的。 本文使用的是YOLOv5-5.0版本。 在YOLOv5中,模型结构基本是写在了 .yaml 中,5.0版本的YOLOv5共

    2024年02月06日
    浏览(90)
  • 目标检测 YOLOv5 预训练模型下载方法

    目标检测 YOLOv5 预训练模型下载方法 flyfish https://github.com/ultralytics/yolov5 https://github.com/ultralytics/yolov5/releases 可以选择自己需要的版本和不同任务类型的模型 后缀名是pt

    2024年02月08日
    浏览(58)
  • 【目标检测】YOLOv5算法实现(九):模型预测

      本系列文章记录本人硕士阶段YOLO系列目标检测算法自学及其代码实现的过程。其中算法具体实现借鉴于ultralytics YOLO源码Github,删减了源码中部分内容,满足个人科研需求。   本系列文章主要以YOLOv5为例完成算法的实现,后续修改、增加相关模块即可实现其他版本的

    2024年01月21日
    浏览(46)
  • 【目标检测】YOLOv5算法实现(八):模型验证

      本系列文章记录本人硕士阶段YOLO系列目标检测算法自学及其代码实现的过程。其中算法具体实现借鉴于ultralytics YOLO源码Github,删减了源码中部分内容,满足个人科研需求。   本系列文章主要以YOLOv5为例完成算法的实现,后续修改、增加相关模块即可实现其他版本的

    2024年01月22日
    浏览(48)
  • 【目标检测】YOLOv5算法实现(七):模型训练

      本系列文章记录本人硕士阶段YOLO系列目标检测算法自学及其代码实现的过程。其中算法具体实现借鉴于ultralytics YOLO源码Github,删减了源码中部分内容,满足个人科研需求。   本系列文章主要以YOLOv5为例完成算法的实现,后续修改、增加相关模块即可实现其他版本的

    2024年01月22日
    浏览(60)
  • 《人工智能专栏》必读150篇 | 专栏介绍 & 专栏目录 & Python与PyTorch | 机器与深度学习 | 目标检测 | YOLOv5及改进 | YOLOv8及改进 | 关键知识点 | 工具

    各位读者们好,本专栏最近刚推出,限于个人能力有限,不免会有诸多错误,敬请私信反馈给我,接受善意的提示,后期我会改正,谢谢,感谢。 第一步 :[ 购买点击跳转 ] 第二步 : 代码函数调用关系图(全网最详尽-重要) 因文档特殊,不能在博客正确显示,请移步以下链接

    2024年02月02日
    浏览(78)
  • 深度学习基础——YOLOv5目标检测

            YOLO系列算法属于基于回归的单阶段目标检测算法,它将定位与分类两个任务整合成一个任务,直接通过CNN网络提取全局信息并预测图片上的目标。给目标检测算法提供了新的解决方案,并且图片检测速度准确率与召回率达到实时检测的要求。其中YOLOv1、YOLO2、YO

    2024年02月22日
    浏览(46)
  • Opencv C++实现yolov5部署onnx模型完成目标检测

    头文件 命名空间 结构体 Net_config 里面存了三个阈值和模型地址,其中 置信度 ,顾名思义,看检测出来的物体的精准度。以测量值为中心,在一定范围内,真值出现在该范围内的几率。 endsWith()函数 判断sub是不是s的子串 anchors_640图像接收数组 根据图像大小,选择相应长度的

    2024年02月13日
    浏览(41)
  • c++读取yolov5模型进行目标检测(读取摄像头实时监测)

    文章介绍 本文是篇基于yolov5模型的一个工程,主要是利用c++将yolov5模型进行调用并测试,从而实现目标检测任务 任务过程中主要重点有两个,第一 版本问题,第二配置问题 一,所需软件及版本       训练部分 pytorch==1.13.0  opencv==3.4.1   其他的直接pip即可       c++部署 

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包