【深度学习项目】目标检测之YOLO系列-V5(三)

发布于:2024-12-18 ⋅ 阅读:(11) ⋅ 点赞:(0)

介绍

在这里插入图片描述

YOLOv5 是由 Ultralytics 公司开发的一个目标检测模型,它不是由原始 YOLO 系列的作者 Joseph Redmon 提出的。尽管如此,YOLOv5 在社区中非常受欢迎,并且由于其易于使用、快速迭代和良好的性能而被广泛采用。

主要特点

  1. 模型大小与速度的平衡
    YOLOv5 提供了多个预训练模型(YOLOv5n, YOLOv5s, YOLOv5m, YOLOv5l, YOLOv5x),用户可以根据自己的硬件条件选择不同大小的模型。较小的模型如 YOLOv5n 和 YOLOv5s 更适合于移动设备或资源受限的环境,而较大的模型则提供了更高的精度。
    在这里插入图片描述

  2. 数据增强

  • Mosaic 数据增强:YOLOv5 引入了 Mosaic 数据增强技术,这种方法将四张不同的图片拼接成一张大图进行训练,增加了样本多样性,有助于提高模型对复杂场景的理解。
  • 自适应锚框计算:YOLOv5 自动根据数据集的特点调整锚框尺寸,使得模型能够更好地适应不同的数据集。
  1. 改进的网络结构
  • Focus 结构:这是 YOLOv5 中独特的输入层设计,通过切片操作将输入图像的空间分辨率减半,同时通道数增加四倍,从而有效地保留了空间信息。
  • CSPNet 结构:借鉴了 CSPNet(Cross Stage Partial Network)的设计思想,在主干网络和颈部都应用了 CSP 结构,以减少计算量并提高学习效率。
  • SPP 模块:空间金字塔池化(Spatial Pyramid Pooling)用于捕捉多尺度特征。
  • PANet:路径聚合网络用于加强特征融合,促进了低层次的空间信息与高层次的语义信息之间的交流。
  1. 损失函数
    YOLOv5 使用 CIOU_Loss 作为边界框预测的损失函数,这比传统的 IoU 或 GIoU 损失更能准确地反映边界框的质量。
  2. 优化的训练策略
  • EMA (Exponential Moving Average):指数滑动平均用于稳定训练过程,帮助模型更快收敛。
  • 混合精度训练:支持 FP16 训练,可以加速训练并且减少显存占用。
  1. 便捷的使用体验
  • PyTorch 实现:基于 PyTorch 框架,具有良好的社区支持和易用性。
  • 简单易用的 API:提供简单的命令行工具和 Python API,方便用户进行推理、训练和评估。
  • 丰富的文档和支持:官方提供了详细的文档、教程和示例代码,降低了入门门槛。

性能提升

YOLOv5 在多个基准数据集上展示了出色的性能,尤其是在 COCO 数据集上的平均精度(mAP)。此外,它还保持了极高的速度优势,能够在普通 GPU 上实现实时检测。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

YOLOv5 代表了实时目标检测领域的最新进展之一,它结合了许多先进的技术和优化方法,在保证快速推理速度的前提下大幅提升了检测精度。这些改进使得 YOLOv5 成为了一个强大且灵活的目标检测工具,适用于广泛的计算机视觉应用场景。

详解

在这里插入图片描述
在这里插入图片描述

网络结构

在这里插入图片描述
在这里插入图片描述

普通CSP结构

在这里插入图片描述
在这里插入图片描述

C3结构

C3结构是YOLOv5网络中引入的一种创新模块,它基于CSPNet(Cross Stage Partial Network)的思想设计而成,旨在提高计算效率的同时保持甚至提升模型的性能。C3模块在YOLOv5的不同版本和层次中被广泛使用,特别是在主干网络(backbone)和颈部(neck)部分。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 基本概念
    C3 模块的核心思想是将输入特征图分为两部分:一部分直接传递到下一层,另一部分经过一系列卷积操作后再与前一部分合并。这种设计减少了计算量并促进了信息流的多样性和丰富性。

  2. 结构组成

  • 输入分割:假设输入特征图的通道数为 C,C3 模块首先会将这些通道分成两半,即 C/2。
  • 路径一(直连路径):一半的特征图不经任何处理直接进入后续的连接步骤。
  • 路径二(卷积路径):另一半特征图则通过一个或多个卷积层进行处理。通常包括以下操作:
  • 卷积层:一般采用 1×1 卷积来调整通道数,随后是 3×3 或者其他尺寸的卷积核来进行空间特征提取。
  • 激活函数:如 SiLU(也称为 Swish),用于增加非线性。
  • 批标准化(Batch Normalization, BN):稳定训练过程。
  • 合并:两条路径的结果通过拼接(concatenation)的方式重新组合在一起,恢复原来的通道数 C。
  • 最终卷积:为了整合来自两条路径的信息,通常会在最后添加一个额外的卷积层,确保输出特征图的质量和一致性。
  1. 特点
  • 减少计算量:通过只对一半的通道应用复杂的卷积运算,有效地降低了计算复杂度。
  • 增强特征多样性:不同路径上的特征可以相互补充,增加了特征表示的多样性。
  • 促进信息流动:直连路径有助于保留原始特征,而卷积路径则负责捕捉更深层次的空间关系,两者结合能够更好地传递多尺度信息。
  1. 应用场景
    C3 结构在 YOLOv5 的主干网络中被多次重复利用,例如在 CSPDarknet53 中构建残差块时,以及在颈部(neck)部分用于特征金字塔网络(FPN)和路径聚合网络(PANet)之间的连接。这样的设计不仅提高了模型的表达能力,还使得整个架构更加紧凑高效。

数据增强

HSV变换

在这里插入图片描述

旋转和缩放

在这里插入图片描述

平移

在这里插入图片描述

错切

固定图片一边,对另外平行一边施加一个推力,形成变形
在这里插入图片描述

透视变换

在这里插入图片描述

mosaic

在这里插入图片描述

Mixup

在这里插入图片描述

copy paste

在这里插入图片描述

训练策略

在这里插入图片描述

损失计算

在这里插入图片描述
在这里插入图片描述

针对三个预测特征层(P3,P4,P5)上的obj损失采用不同权重。
在这里插入图片描述

消除Grid敏感度

在这里插入图片描述

匹配正样本

匹配正样本(即确定哪些预测边界框与真实边界框相匹配)是训练过程中的一个关键步骤。这个过程决定了模型如何更新其权重以更好地学习检测目标。
正样本匹配机制是一个综合考量Anchor Boxes、网格单元、多尺度预测、中心点约束等多个因素的过程。这种设计不仅提高了模型对各种尺寸对象的适应性,而且增强了检测的精度和鲁棒性。通过精心构建的正负样本匹配逻辑,YOLOv5能够在复杂的场景下有效地识别和定位目标。

  1. Anchor Boxes 和 Grid Cells
  • Anchor Boxes:YOLOv5预定义了一系列不同尺寸和比例的锚点框(Anchor Boxes),这些锚点框用于初始化预测框的位置、宽度和高度。每个特征图上的每个网格单元都会对应一组Anchor Boxes。
    Grid Cells:输入图像被划分为多个网格单元(grid cells)。每个网格单元负责预测位于该区域内的对象。
  1. 真实边界框分配
    对于每个真实边界框(ground truth bounding box),需要找到最合适的Anchor Box来表示它。具体来说,计算所有Anchor Boxes与真实边界框之间的IoU(Intersection over Union),选择IoU最高的Anchor Box作为匹配的候选框。此外,YOLOv5还采用了动态分配策略,允许某个真实边界框可以与多个Anchor Boxes匹配,只要它们的IoU超过了设定的阈值。

  2. 多尺度预测
    YOLOv5采用多尺度预测,这意味着它会在不同的特征层上进行预测,每个特征层对应不同大小的对象。因此,在匹配过程中,不仅要考虑哪个Anchor Box最适合,还要考虑哪个特征层最适合预测该对象。通常情况下,较大的对象由较浅层(分辨率较高)的特征图预测,而较小的对象则由较深层(分辨率较低)的特征图处理。

  3. 中心点约束
    为了进一步确保匹配的准确性,YOLOv5引入了中心点约束规则。只有当真实边界框的中心落在某个网格单元内时,该网格单元才被认为是负责预测该对象的。这有助于避免同一对象被多个网格单元同时预测的问题,并减少了冗余预测。

  4. 正样本标签生成
    一旦确定了哪些Anchor Boxes与真实边界框相匹配,接下来就需要为这些Anchor Boxes生成对应的标签信息。标签包括:

  • 边界框坐标:相对于各自网格单元位置的x, y偏移量以及w, h的比例。
  • 置信度分数:反映预测框内含有对象的概率,通常设置为1(表示确实有对象)。
  • 类别概率:表示对象属于各个类别的概率分布。
  1. 负样本和背景分类
    除了正样本外,还需要明确哪些预测框是负样本(即不包含任何对象)。在YOLOv5中,未与任何真实边界框匹配的Anchor Boxes被视为负样本。此外,如果某个Anchor Box的预测结果非常接近于背景(例如IoU很低),也会被标记为负样本。

  2. 损失函数应用
    最后,在训练过程中,根据上述匹配结果计算损失函数。YOLOv5使用多种损失函数来优化模型参数,如二值交叉熵损失(binary cross-entropy loss)用于分类任务,CIoU Loss用于边界框回归任务等。通过最小化这些损失,模型逐渐学习到如何更准确地预测对象的位置和类别。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述