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

ops/2024/12/18 3:14:09/

介绍

在这里插入图片描述

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用于边界框回归任务等。通过最小化这些损失,模型逐渐学习到如何更准确地预测对象的位置和类别。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


http://www.ppmy.cn/ops/142791.html

相关文章

基于深度学习的猫狗识别系统【深度学习课设】

🏆 作者简介:席万里 ⚡ 个人网站:https://dahua.bloggo.chat/ ✍️ 一名后端开发小趴菜,同时略懂Vue与React前端技术,也了解一点微信小程序开发。 🍻 对计算机充满兴趣,愿意并且希望学习更多的技…

uniApp顶部导航栏右侧添加按钮

记录一下从阿里图库里面下载图标到项目中遇到的问题。原先图标引入后在浏览器可以正常显示,但是真机显示不了图标。后解决 首先 先下载到本地,然后解压后再要两个文件 在uniapp项目文件中引入,我这里是/static/iconfont/ 然后重点&#xff0…

【Solidity】变量详解:类型、作用域与最佳实践

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Solidity变量详解:类型、作用域与最佳实践引言1. 变量的类型与声明1…

游戏引擎学习第52天

仓库 : https://gitee.com/mrxiao_com/2d_game 这节的内容相当多 回顾 在游戏中,实体被分为不同的类别:接近玩家的“高频实体”、距离较远并正在模拟的“低频实体”和不进行更新的“休眠实体”。这些实体会根据它们与玩家的距离进行处理,接…

【Apache paimon】-- 集成 hive3.1.3 异常

目录 1、场景再现 Step1:在 hive cli beeline 执行创建 hive paimon 表 Step2:使用 insert into 写入数据 Step3:抛出异常 2、原因分析 Step1:在 yarn resource manager 作业界面查询 hive sql mr job 的 yarn log Step2:搜索job 使用的 zstd jar 版本 Step3:定…

【kafka】kafka安装(ubuntu+jdk+zookeeper)

前置安装 1.jdk安装与环境变量配置 安装 OpenJDK 21或者其他版本 sudo apt update sudo apt install openjdk-21-jdk使用 readlink 命令查找 java 的路径 readlink -f $(which java)复制 永久设置JAVA_HOME # 粘贴路径/usr/lib/jvm/java-21-openjdk-amd64 echo "e…

Ubuntu系统下部署大语言模型:Ollama和OpenWebUI实现各大模型的人工智能自由

之前在window下安装过 Ollama和OpenWebUI搭建本地的人工智能web项目(可以看我之前写的文章),无奈电脑硬件配置太低,用qwen32b就很卡,卡出PPT了,于是又找了一台机器安装linux系统,在linux系统下测试一下速度能否可以快一些。 系统硬件介绍 Ubuntu 22.04.4 LTS CPU: i5…

OpenCV图片添加水印

在数字图像处理领域,为图片添加水印是一项常见的任务,它既可以用于版权保护,也可以用于品牌宣传。 图片添加水印的基本原理是将一个较小的图像(水印)嵌入到另一个较大的图像(原图)中。这个过程…