34_YOLOv5网络详解

1.1 简介

YOLOV5是YOLO(You Only Look Once)系列目标检测模型的一个重要版本,由 Ultralytics 公司的Glenn Jocher开发并维护。YOLO系列以其快速、准确的目标检测能力而闻名,尤其适合实时应用。YOLOV5在保持高效的同时,进一步提升了检测精度,是深度学习领域中非常受欢迎的目标检测模型之一。以下是关于YOLOV5的详细介绍:

基本概念

YOLOV5基于先前的YOLO模型改进而来,采用了更为先进的网络架构设计和训练策略。它是一个端到端的模型,意味着从输入图像到输出物体边界框和类别概率,整个过程一次性完成,无需多阶段处理。

网络架构

  1. Backbone:YOLOV5的基础网络架构经历了多次迭代,从V5到V5.0.6,其中V5.0开始使用了CSPNet(Cross Stage Partial Networks)作为主干网络,这是一种提高效率同时减少计算冗余的设计。CSPNet通过跨阶段部分特征重用来减少计算量。随后的版本中,引入了更为高效的注意力机制和改进的瓶颈结构,如SPP(Spatial Pyramid Pooling)、FPN(Feature Pyramid Networks)等,进一步提升模型性能。

  2. Neck:YOLOV5的颈部设计包括了 PANet(Path Aggregation Network)和一些自定义的特征融合技术,用于整合不同尺度的特征图,以增强对多尺度目标的检测能力。

  3. Head:检测头部分负责生成最终的预测,包括边界框坐标、类别概率以及对象置信度。YOLOV5采用了一个或多个预测层,每个层对应不同的特征尺度,从而能够有效检测不同大小的对象。

训练与优化

  • Anchor Boxes:YOLOV5继续使用预设的锚框来初始化潜在对象的位置,但通过优化算法动态调整这些锚框以适应数据集特性,提高检测准确性。

  • Loss Function:采用多任务损失函数,结合了分类损失和定位损失,确保模型在学习分类信息的同时也能精确地定位目标。

  • Training Tricks:包括Mosaic数据增强、自适应图片缩放、Cosine Annealing学习率调整策略、DropBlock正则化等,这些技巧显著提高了模型的泛化能力和收敛速度。

性能特点

  • 速度与精度:YOLOV5以其在速度和精度之间的良好平衡著称。特别是在CPU上运行时,相比其他一些复杂的检测模型,YOLOV5能够提供更快的推理速度,同时保持较高的检测精度。

  • 轻量化:尽管不断迭代升级,YOLOV5系列也推出了多种大小的模型版本,如YOLOV5s、YOLOV5m、YOLOV5l、YOLOV5x等,分别针对不同的应用场景需求,从小型设备上的快速推理到服务器级别的高精度检测。

  • 易用性:YOLOV5提供了简洁的代码实现和详细的文档,支持PyTorch框架,使得研究人员和开发者能够轻松上手、训练和部署模型。

应用场景

由于其高效和准确的特性,YOLOV5被广泛应用于各种场景,包括但不限于视频监控、自动驾驶、无人机巡检、医疗影像分析、体育赛事直播分析、机器人导航等需要实时目标检测的任务。

结论

总之,YOLOV5是目标检测领域的一个里程碑,它不仅继承了YOLO系列的优点,还通过一系列创新设计和优化策略,在模型效率、精度以及易用性方面实现了新的突破,成为实际应用中极为受欢迎的选择。随着持续的更新和社区的贡献,YOLOV5的性能和功能仍在不断进化。

1.2 V5性能

1.3 网络结构

 详情请看:https://blog.csdn.net/qq_37541097/article/details/123594351

网络结构主要由三部分组成:

改进点

需要注意的是,V5的V6.0之后将之前的focus模块替换成了6x6的普通卷积层。两者功能相同但后者效率更高。

focus模块很像swin-transformer中的patch emerging。

将V4的SPP换成了SPPF:

这么做的目的是,将两个5x5maxpool串行在一起等价于9x9maxpool,将三个5x5maxpool串行在一起等价于13x13maxpool,且SPPF效率更高,因为计算量更小,推理速度快了两倍。

1.4 数据增强

Mosaic增强:

https://blog.csdn.net/qq_51605551/article/details/140425535?spm=1001.2014.3001.5501

Copy paste:

"Copy-Paste" 数据增强策略是一种直观且有效的方法,广泛应用于计算机视觉任务中,旨在通过模拟更多样化的训练样本以提高模型的泛化能力。该方法的基本思想是直接从图像中复制部分区域并粘贴到同一张图像或其他图像的不同位置上,以此来增加训练数据的多样性。以下是该策略的一些关键点和应用方式:

  1. 基本操作:在实施Copy-Paste时,首先会随机选择图像中的一个或多个感兴趣区域(如目标对象、背景特征等),然后将这些区域复制并粘贴到同一图像的其他位置,或者粘贴到另一张图像中。粘贴过程中可能会进行适当的缩放、旋转、翻转等变换,以进一步增加多样性。

  2. 应用领域:这种策略特别适用于对象检测、语义分割、实例分割等任务,因为它不仅增加了图像的内容多样性,还能够帮助模型学习到对象间的上下文关系,以及对象在不同场景下的外观变化

优势

  1. 提升模型鲁棒性:通过在不同的背景和上下文中展示相同的对象,可以增强模型对各种环境变化的适应能力。
  2. 简化数据收集:相比于手动创建新样本,Copy-Paste是一种成本较低的数据增强方式,能有效利用现有数据资源。
  3. 促进小对象学习:对于检测或分割中的小对象,Copy-Paste可以通过增加其在图像中的出现频率和尺度变化,改善模型对这类对象的识别能力。
  4. 实现细节:在实际操作中,开发者需要精心设计复制和粘贴的逻辑,包括选择哪些区域、如何融合粘贴后的像素以避免明显的剪切痕迹、以及如何控制增强的程度以保持数据的真实性等。

  5. 与其它增强方法结合:Copy-Paste通常与其他数据增强技术(如颜色变换、几何变换等)结合使用,形成更强大的数据增强策略,共同提升模型性能。

random affine:

Random Affine 变换是计算机视觉中常用的一种数据增强策略,它通过在图像上施加一系列随机的仿射变换来增加训练数据的多样性。仿射变换是一种保持直线依然为直线的几何变换,它可以包括旋转、缩放、平移、剪切等操作。下面详细介绍Random Affine变换的几个核心方面:

  1. 旋转(Rotation):随机改变图像的角度,使对象以不同的方向出现。这有助于模型学习到对象的旋转不变性。

  2. 缩放(Scaling):按随机的比例放大或缩小图像,可以是均匀缩放或独立控制宽度和高度的非均匀缩放。此操作帮助模型处理不同大小的对象。

  3. 平移(Translation):在图像的水平或垂直方向上随机移动图像内容,模拟对象在场景中的不同位置,增强模型的位置不变性。

  4. 剪切(Shearing):对图像进行倾斜变换,即沿一个或两个轴方向上的线性变形,增加图像的几何扭曲,提高模型对形变的鲁棒性。

  5. 保持一致性和真实性:在进行这些变换时,通常会设定一定的参数范围,确保变换后的图像既具有多样性又保持视觉上的合理性和真实性,避免产生过于失真的图像。

  6. 应用领域:Random Affine变换广泛应用于图像分类、物体检测、图像分割等任务中,能够显著提升模型的泛化能力,尤其是在处理存在视角变化、大小变化和位置变化的实际问题时效果尤为明显。

  7. 实现细节:在实际应用中,开发者通常会使用图像处理库(如OpenCV、Pillow等)提供的功能来实现Random Affine变换。通过定义一个随机生成的仿射变换矩阵,并应用到图像上,就可以轻松地生成增强后的图像样本。

Mix up:

https://blog.csdn.net/qq_51605551/article/details/140496749?spm=1001.2014.3001.5501

将两张图片按透明程度(插值)混合成一张新的图片。

Albumentations:

Albumentations 是一个开源的Python库,专门用于图像数据增强。它提供了丰富的图像处理和数据增强方法,广泛应用于深度学习中的计算机视觉任务,如图像分类、目标检测、图像分割等。Albumentations的主要特点和优势包括:

  1. 多样化数据增强:Albumentations 支持广泛的图像变换,包括但不限于旋转(Rotation)、缩放(Scale)、平移(Translate)、翻转(Flip)、裁剪(Crop)、色彩空间变换(如亮度调整、对比度变化、色调变换等)、以及更复杂的变换如随机仿射变换(RandomAffine)、光度变换(PhotometricDistortions)等。这些变换可以单独使用,也可以组合成序列执行复杂的数据增强策略。

  2. 易于使用的API:该库提供了简洁直观的API,用户可以通过简单的配置创建复杂的数据增强管道。用户可以轻松地链式组合多个变换,并通过参数设置变换的概率、幅度等,使得数据增强策略高度可定制化。

  3. 高性能:Albumentations 使用高效的算法实现,确保了在大规模数据集上的快速处理速度。特别是其内置的并行处理机制,可以显著加速数据预处理过程。

  4. 兼容性好:Albumentations 设计之初就考虑到了与机器学习框架的无缝集成,特别是与PyTorch和TensorFlow等主流深度学习框架的配合使用。它可以直接与这些框架的数据加载器集成,简化了数据预处理流程。

  5. 可视化工具:库内还包含了可视化功能,允许用户直观地查看应用了哪些数据增强操作后的图像效果,这对于调试和理解数据增强策略非常有帮助。

  6. 灵活性:除了图像数据,Albumentations 还支持对图像掩码、bounding boxes(边界框)等结构化数据进行相应的同步变换,这对于实例分割、目标检测等任务尤为重要。

总之,Albumentations 是一个强大而灵活的数据增强工具,它极大地简化了数据预处理的复杂度,提升了模型训练的效率和最终模型的泛化能力。通过使用Albumentations,研究者和开发者可以轻松构建出丰富多样的训练数据集,从而推动计算机视觉模型性能的提升。

Augment HSV:

HSV数据增强策略是基于HSV色彩空间对图像进行颜色变换的一种数据增强方法。HSV( Hue, Saturation, Value )色彩空间区别于常用的RGB色彩空间,它更符合人类对颜色的感知方式,其中:

  • Hue(色相):表示颜色的种类,如红色、绿色、蓝色等。
  • Saturation(饱和度):描述颜色的纯度,饱和度越高颜色越鲜艳,反之则越接近灰色。
  • Value(明度/亮度):表示颜色的明暗程度,值越大图像越亮。

在数据增强中,通过随机改变图像的HSV值,可以模拟不同光照条件、色彩偏差等场景,进而增加模型对颜色变化的鲁棒性。具体来说,HSV数据增强通常包括以下几个方面:

  1. 随机色相偏移(Hue Shift):在一定范围内随机改变图像的整体色相,使得同一物体呈现不同颜色,帮助模型学习颜色不变性。

  2. 饱和度调整(Saturation Adjustment):增加或减少图像的饱和度,模拟色彩鲜艳度的变化。这可以训练模型在面对过饱和或低饱和度图像时仍能准确识别。

  3. 明度变化(Value/Brightness Adjustment):改变图像的整体明暗程度,模拟不同光照条件。通过增减明度,模型能够学习到在明亮或昏暗环境下的物体特征。

实施HSV数据增强时,开发者通常会设定一个合理的随机变化范围,避免过度夸张的颜色变换导致图像失真。这种增强方法尤其适用于那些对颜色敏感的任务,如图像分类、物体识别、皮肤疾病诊断等。

在实践上,可以使用如OpenCV这样的库来实现HSV空间的变换,通过调整图像的HSV分量,生成新的训练样本,增加模型训练时的多样性,从而提升模型的泛化能力。

Random horizontal filp:

Random Horizontal Flip(随机水平翻转)是一种常用的数据增强策略,尤其在计算机视觉领域中被广泛应用。它的基本操作是对输入的图像进行随机的水平方向镜像翻转,即左右对调。这项技术的目的在于通过引入图像的方向变化,增强模型的泛化能力,使其能够更好地识别和理解图像中的内容,而不仅仅依赖于特定方向的特征。

关键特点:

  1. 简单有效:随机水平翻转是一种简单易行的数据增强方法,实施成本低,但能显著提升模型对图像中物体方向变化的鲁棒性。

  2. 保持语义不变性:对于大多数自然图像而言,水平翻转不会改变图像内容的语义信息,如猫翻转后仍然是猫,车翻转后还是车,因此这是一种保持类别标签不变的增强方式。

  3. 增强多样性:通过随机应用此变换,可以为训练集引入更多的样本变体,特别是在物体检测、图像分类和图像分割等任务中,有助于模型学习到更加全面的特征表示。

  4. 平衡数据分布:在某些数据集中,物体可能倾向于某一特定方向,随机水平翻转可以帮助平衡不同方向的样本数量,减少模型对特定方向的偏好。

实现方式:

在实现随机水平翻转时,一般会设置一个概率参数,决定图像是否进行翻转。例如,在深度学习框架中,可以设置一个0到1之间的概率值,每次处理图像时根据这个概率随机决定是否执行翻转操作。翻转操作本身则可以通过编程语言的标准库或专门的数据处理库(如OpenCV、PIL等)轻易实现。

应用场景:

  • 图像分类:增加图像方向多样性,帮助模型学会从不同视角识别对象。
  • 目标检测与识别:提升模型对目标在图像中不同位置和方向的检测能力。
  • 图像分割:同样适用于增强分割任务中的训练样本多样性,尤其是对于对称或方向无关的物体。
  • 图像生成和风格迁移:在某些情况下,也可以作为预处理步骤,增加模型训练时的输入变化性。

总之,Random Horizontal Flip作为一种基础而强大的数据增强手段,通过简单地变换图像方向,就能有效提升模型的泛化性能,是许多计算机视觉项目中的标配策略。

1.5 训练策略

Multi-scale training(0.5~1.5x)

多尺度训练的基本原理:

  1. 动态调整输入尺寸:在每个训练迭代或一定迭代次数后,随机选择或按照预定计划改变输入图像的分辨率。例如,可以在一个范围内,如[320, 640]像素之间随机选择尺寸,或者按照一个预设的尺度序列进行训练。

  2. 提升模型鲁棒性:通过这种方式,模型被迫学习在不同尺度下目标的特征,从而增强其对尺寸变化的鲁棒性,提高检测精度,尤其是在小目标检测方面表现更佳。

  3. 模拟真实场景:实际应用中,目标的尺寸变化多样,多尺度训练模拟了这种多样性,使得模型在面对不同大小目标时都能有良好的表现。

  4. 避免过拟合:通过增加训练数据的多样性,多尺度训练还可以帮助减少模型对特定尺寸目标的过度依赖,降低过拟合的风险。

实现细节:

  • 实现方式:在YOLOv5的训练脚本或配置文件中,可以通过设置参数来启用多尺度训练,比如定义一个尺度范围或一个尺度列表,并配置训练时如何从中选择尺寸。

  • 渐进式尺度调整:有时会采用渐进式的尺度调整策略,即在训练初期使用较小的尺度,随着训练进行逐步增加图像尺寸,这样可以在早期训练阶段让模型专注于学习基本特征,后期再关注更细致的尺度变化。

  • 固定比例调整:为了保持图像的长宽比,通常在调整尺寸时会保持图像的宽高比不变,只改变整体大小。

AutoAnchor(for training custom data)

AutoAnchor是一种自动锚点优化策略,用于动态调整模型中预设的锚框(anchor boxes)尺寸,以提高目标检测的准确性,尤其是针对不同尺寸目标的检测效果。AutoAnchor的设计初衷是减少人工设定锚框尺寸的主观性和繁琐性,通过自动化过程找到最优的锚框配置,从而提升模型性能。

基本原理:

  1. 初始化锚点:首先,YOLOv5会基于一些默认或经验设定的锚点尺寸开始训练,这些锚点尺寸覆盖了目标可能出现的不同宽高比和大小。

  2. 评估与反馈:在训练过程中,模型会计算预测框与真实框(ground truth bounding boxes)之间的IOU(Intersection over Union,交并比),IOU是衡量两个矩形框重叠程度的一个指标。AutoAnchor策略会收集所有预测框与真实框匹配情况的统计信息,特别是那些高质量匹配(高IOU)的情况。

  3. 优化锚点尺寸:基于上述统计信息,算法会重新计算和调整锚点尺寸,倾向于生成那些在训练数据集中能更好地匹配真实框的尺寸。这一步通常涉及到优化算法,比如使用进化算法或贪心算法来搜索最优的锚点配置。

  4. 迭代优化:调整锚点尺寸后,模型会使用新的锚点配置重新训练,整个过程可能需要多次迭代,直到锚点尺寸收敛到一个较优的状态。

实现细节:

  • K-Means聚类:一种常见的实现方式是使用K-Means聚类算法来自动确定最优锚点尺寸。该算法根据训练集中的真实框尺寸进行聚类,从而得到一组能够较好覆盖这些尺寸的锚点。

  • 进化算法:YOLOv5的作者Joseph Redmon在原始YOLO论文中提到了使用进化算法来优化锚点尺寸,通过模拟自然选择和遗传变异的过程,寻找最优解。

  • 集成于训练流程:AutoAnchor不是独立的步骤,而是融入到模型训练的循环中,根据模型的训练反馈不断优化,是一个迭代优化的过程。

优点:

  • 提高检测精度:通过自动调整,锚点能更好地匹配数据集中目标的实际尺寸分布,减少误检和漏检,提高检测精度。

  • 简化超参数调整:减轻了手动调整锚点尺寸的负担,自动化过程使得模型更易于训练和部署。

  • 提升训练效率:虽然AutoAnchor涉及到额外的计算,但长远看,它减少了人工试错的时间,提升了整体训练效率。

Warmup and Cosine LR scheduler

“Warmup and Cosine LR Scheduler”是一种学习率调整策略,旨在通过智能地控制学习率随训练轮次变化的方式,来优化模型的学习过程,提高训练效率和最终模型的性能。这个策略分为两个阶段:Warmup阶段和Cosine Annealing阶段。

Warmup 阶段

目的:在训练初期,模型权重的初始化往往比较随机,直接使用较高的学习率可能会导致训练不稳定,甚至偏离最优解。Warmup阶段就是在训练开始时逐步增加学习率,让模型参数有一个从随机初始化到较为合理分布的平滑过渡。

操作:在这个阶段,学习率从一个非常小的值线性增加到预定的初始学习率。这个过程通常持续几个epochs或者指定的迭代次数,确保模型能够在较为稳定的条件下开始正式的学习过程。

Cosine Annealing 阶段

目的:Cosine Annealing(余弦退火)学习率调度策略模拟了余弦波形,通过周期性地减小学习率来帮助模型逐渐收敛到更优的局部最小值,同时避免过早陷入局部最优而错过全局最优解。

操作:在Warmup之后,学习率按照余弦函数的形状进行调整。具体来说,学习率随着训练迭代次数增加而逐渐减小,但并非线性减小,而是先快后慢,最终趋近于一个极小值(通常不为0)。这个过程可以帮助模型在训练后期进行更精细的调整,减少过拟合的风险,并有可能发现更好的解决方案。

综合效果

结合Warmup和Cosine Annealing,YOLOv5的训练策略实现了从温和启动到高效收敛的平滑过渡。Warmup确保了模型训练初期的稳定性,而Cosine Annealing则促进了模型在训练后期的优化,两者共同作用于整个训练周期,旨在提升模型的泛化能力和检测性能。

这种策略的灵活性在于可以通过调整Warmup的持续时间和Cosine Annealing的具体参数(如周期长度、最低学习率等),来适应不同的任务需求和数据集特性,从而达到最佳的训练效果。

EMA(exponential Moving Average)

Exponential Moving Average(EMA,指数移动平均)训练策略是一种模型权重更新的技术,用于提高模型的稳定性和泛化能力。EMA通过跟踪模型参数的历史趋势,逐步平滑权重更新过程中的波动,从而得到一个更加平滑且通常性能更优的模型版本。

基本原理:

在标准的SGD(随机梯度下降)或其变种如Adam、RMSprop等优化过程中,模型参数会直接根据梯度进行更新。然而,这些更新可能受到训练数据中的噪声影响,导致模型权重在训练过程中波动较大。

EMA方法则引入了一个影子权重(Shadow weights)的概念,也称为“滑动平均模型”(Moving Average Model)。在每次迭代时,影子权重会根据当前模型的真实权重和一个衰减因子(通常用γ表示,取值接近1但略小于1)进行更新:

实现细节:

  1. 初始化:训练开始时,影子权重通常被初始化为模型的初始权重。
  2. 更新:在每一次迭代后,使用上述公式更新影子权重,使得影子权重逐渐趋向于模型权重的长期平均值。
  3. 评估:训练完成后,通常使用EMA权重来进行验证和测试,而不是最后一步的真实权重。这是因为EMA权重反映了模型在整个训练过程中的稳定状态,往往能提供更好的泛化性能。

优势:

  • 提高稳定性:通过平滑权重更新,减少了训练过程中的波动,使模型更加稳定。
  • 提升性能:在很多情况下,EMA模型在测试集上的表现优于直接使用原始训练权重的模型,尤其是在噪声较大的数据集上。
  • 简化调参:相较于频繁调整学习率等超参数,EMA提供了一种相对简单且有效的优化策略

Mixed precision

Mixed Precision训练策略是一种利用半精度(FP16)和单精度(FP32)混合的方式来加速训练过程并节省显存的技术。这种策略特别适用于拥有支持半精度运算的现代GPU上,如NVIDIA的Tensor Cores,它能够显著提升训练速度并降低内存占用,而对模型的准确率影响甚微或几乎没有负面影响。

基本原理:

  1. 半精度(FP16):FP16相对于FP32,使用16位存储浮点数,相比32位的FP32,它占用的内存少一半,计算速度在支持的硬件上可以更快。但是,直接使用FP16训练可能会遇到数值稳定性问题,特别是在梯度累积和权重更新时,因为FP16的表示范围和精度较低。

  2. 混合精度:为了解决FP16的稳定性问题,Mixed Precision训练策略采用了一种折衷方案。它通常保持模型的权重和梯度在FP32(保证精度),而在中间的计算过程中(如前向传播、反向传播的大部分计算)使用FP16,这样既享受了FP16带来的速度和内存节省,又避免了严重的数值下溢或上溢问题。

  3. 自动混合精度(AMP):在YOLOv5中,常利用深度学习框架(如PyTorch的torch.cuda.amp模块)提供的自动混合精度训练功能。该功能自动管理FP16和FP32的转换,开发者只需要少量的代码修改即可启用此策略。

实现细节:

  • 启用方式:在YOLOv5的训练脚本中,通过设置特定的参数(如--mixed-precision标志)来激活混合精度训练。
  • 损失缩放(Loss Scaling):为了应对FP16下梯度可能的下溢问题,常采用损失缩放技术。在反向传播前将损失函数的值乘以一个较大的标量(损失缩放因子),并在梯度更新后除以该因子,以此放大梯度,防止下溢,然后再转换回FP32进行更新。
  • 监控与调整:在实际应用中,监控训练过程中的数值稳定性很重要,必要时调整损失缩放因子或其他相关参数,以保持训练的稳定性和效率。

优势:

  • 加速训练:由于半精度计算的速度优势,混合精度训练通常能显著加快训练速度,尤其是在大型模型或大数据集上。
  • 减少内存占用:减少一半的内存需求,使得在有限的硬件资源下能够训练更大的模型或批次大小。

Evolve hyper-parameters

Evolve Hyper-Parameters训练策略是一种自动化超参数优化方法,它通过进化算法或遗传算法来寻找一组最优的超参数配置,以最大化模型的性能。这种策略的目标是自动探索和优化模型训练过程中的一系列关键参数,如学习率(LR)、批量大小(Batch Size)、Momentum、权重衰减(Weight Decay)等,从而提升模型训练效率和最终的检测性能。

基本概念:

  1. 进化算法:这是一种借鉴自然界生物进化过程的全局优化方法。它通过模拟生物种群的遗传、突变、竞争和选择过程,来寻找问题的最优解。在超参数优化场景中,每一个个体代表一套超参数配置,而算法的目标是找到“最适应”的超参数组合。

  2. 种群初始化:算法首先随机生成一个初始的超参数配置种群。

  3. 评价函数:每个个体(超参数配置)会被用来训练模型,并通过验证集上的性能(如mAP,即平均精度均值)作为其适应度得分。

  4. 选择(Selection):根据个体的适应度得分,选择表现较好的个体进入下一代。

  5. 交叉(Crossover):从选择出的个体中,随机选择两个或多个个体的部分超参数进行交换,生成新的后代个体。

  6. 变异(Mutation):对部分个体的超参数进行小幅度的随机修改,引入新的探索性变化。

  7. 重复迭代:上述过程会重复进行多代,直到满足停止条件,如达到预设的迭代次数或找到足够优秀的超参数配置。

YOLOv5中的应用:

虽然YOLOv5本身作为一个开源项目,并没有直接内置Evolve Hyper-Parameters作为其标准训练流程的一部分,但是用户可以根据自己的需求,利用第三方库(如Optuna、Hyperopt等)或自行编写脚本来实现这一优化策略。通过自动化超参数优化,研究者和开发者可以更加高效地探索模型的潜力,减少手动试错的时间和工作量,尤其是在面对大规模超参数空间时。

优势:

  • 自动化:自动探索超参数空间,减少人力投入。
  • 高效:相较于网格搜索或随机搜索,进化算法能更高效地找到较好的超参数组合。
  • 广泛适用性:适用于任何具有可调参数的模型,不仅仅局限于YOLOv5。

注意事项:

  • 计算资源:进化算法可能需要大量计算资源,尤其是当超参数空间大、迭代次数多时。
  • 优化目标明确:需要清晰定义评价函数,以确保算法朝向正确的优化方向前进。
  • 结果解释:最终得到的超参数配置需要经过验证,理解其对模型性能提升的具体贡献。

1.6 其他

损失计算

平衡不同尺度损失

一般小型目标要更难预测一些,所以小型目标的权重大一些。

消除Grid敏感度‘

回顾V4的做法:https://blog.csdn.net/qq_51605551/article/details/140586628?spm=1001.2014.3001.5501

在V5中,作者还提出了两个变化,即最终框的宽高变化。下图中上面公式是V2-V4采用的公式,下面是V5中采用的公式,防止了指数爆炸的情况。

匹配正样本(build targets)

在V5当中,先计算rw和rh,也就是GT与anchor模板的宽高比值,然后第三四行公式计算的是GT与AT(anchor template)宽高的差异性大小,如果GT与AT宽高一致,那么rwmax或者rhmax是等于1的,如果不相等肯定是大于一的。最后一行的公式是取宽高差异最大的那个值。作者又设置了一个anchor_t=4,如果rmax小于anchor_t的话,我们就认为匹配成功为正样本。

至于为什么值设置为4,可以看上面消除敏感度的图,修改后的预测框的宽高是不会超过4的,所以宽高比不会超过四倍。

看下图,只要不超过AT的0.25倍和四倍,就算匹配成功。AT1中GT超过了,匹配失败,AT2中没超过匹配成功,AT3同理。

接下来的步骤和V4是一模一样的。 回顾V4中的IOU  threshold:YOLOv5网络详解_哔哩哔哩_bilibili

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

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

相关文章

LeetCode/NowCoder-二叉树OJ练习

励志冰檗:形容在清苦的生活环境中激励自己的意志。💓💓💓 目录 说在前面 题目一:单值二叉树 题目二:相同的树 题目三:对称二叉树 题目四:二叉树的前序遍历 题目五:另…

鸿蒙OpenHarmony Native API【drawing_path.h】 头文件

drawing_path.h Overview Related Modules: [Drawing] Description: 文件中定义了与自定义路径相关的功能函数 Since: 8 Version: 1.0 Summary Functions FunctionDescription[OH_Drawing_PathCreate] (void)[OH_Drawing_Path] * 函数用于创建一个路径对象OH_Drawin…

蜂窝物联云平台:一站式服务,智能生活从此开始!

蜂窝云平台 一、PC端展示与管理 GIS地图整合 在GIS地图上精确展示地块,轻松点选查看详细设备信息、实时监控和控制功能,以及基地的全方位介绍。 个性化定制界面 界面布局与功能展示均可按需求定制,打造独一无二的用户体验。 数据集中看板 将…

【Python机器学习】k-近邻算法简单实践——改进约会网站的配对效果

需求背景: XX一直使用约会网站寻找适合自己的约会对象,ta会把人分为3种类型: 不喜欢、魅力一般、非常有魅力 对人分类轴,发现了对象样本的以下3种特征: 1、每年获得的飞行里程数 2、玩视频游戏所耗时间百分比 3、…

linux操作系统之线程

1.线程概念 线程是一个轻量级进程,每一个线程都属于一个进程 进程是操作系统资源分配的最小单位,而线程是CPU任务调度的最小单位 线程是一个任务执行的过程,包括创建,调度,消亡 创建:线程空间位于进程空间,进程中的线程,栈区独立,并共享进程中的数据区,文本区,堆区 调度:宏观…

常见的JS混淆及处理办法

1,变量名混淆 文本增添属性的过程中有很多操作空间 原始代码: s[age,job] function xx(){};xx.prototype[s[0]]15 xx.prototype[s[1]]teacheranew xx() 将属性名经过base64加密,并对函数名xx,,数组名s,经过混淆处理…

【网络安全的神秘世界】 文件上传及验证绕过

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 这个漏洞对于初学者好挖,先找到文件上传的位置 文件上传是web网页中常见的功能之一,通常情况下恶意文…

【数据结构初阶】一篇文章带你超深度理解【单链表】

hi ! 目录 前言: 1、链表的概念和结构 2、单链表(Single List,简写SList)的实现 2.1 定义链表(结点)的结构 2.2 创建一个链表 2.3 打印链表 2.4 尾插 2.5 头插 2.6 尾删 2.7 头…

python中argparse模块及action=‘store_true‘详解

1. 指定action时 通俗讲,action的作用就是在命令行中指定参数名称时,参数的取值。 如: parser.add_argument(--save-file, actionstore_true, defaultFalse, help是否保存文件) 给参数设置action之后,命令执行时,…

【BUG】已解决:You are using pip version 10.0.1, however version 21.3.1 is available.

You are using pip version 10.0.1, however version 21.3.1 is available. 目录 You are using pip version 10.0.1, however version 21.3.1 is available. 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#…

数据结构初阶(C语言)-二叉树

一,树的概念与结构 树是⼀种非线性的数据结构,它是由 n(n>0) 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,而叶朝下的。 1.有⼀个特殊的结点&a…

【Linux学习 | 第1篇】Linux介绍+安装

文章目录 Linux1. Linux简介1.1 不同操作系统1.2 Linux系统版本 2. Linux安装2.1 安装方式2.2 网卡设置2.3 安装SSH连接工具2.4 Linux和Windows目录结构对比 Linux 1. Linux简介 1.1 不同操作系统 桌面操作系统 Windows (用户数量最多)MacOS ( 操作体验好,办公人…

昇思25天学习打卡营第22天|基于MindNLP+MusicGen生成自己的个性化音乐

文章目录 昇思MindSpore应用实践1、MusicGen模型简介残差矢量量化(RVQ)SoundStreamEncodec 2、生成音乐无提示生成文本提示生成音频提示生成 Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25天学习打卡营的学习心得。 1、MusicGen模型简…

python使用 tkinter 生成随机颜色

先看效果: 只要不停点击底部的按钮,每次都会生成新的颜色。炫酷啊。 import random import tkinter import tkinter.messagebox from tkinter import Button# todo """ 1. 设置一个按钮,来让用户选择是否显示颜色值 2. 把按钮换成 Label…

谷粒商城实战笔记-错误记录-启动失败

文章目录 一,lombok报错二,Output directory is not specified 一,lombok报错 java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled. Your processor is: com.sun.proxy.$Proxy8 Lombok …

初试Ollama本地大模型

准备工作 机器配置: CPUi5-10400内存16GB硬盘SSD 480GB显卡GTX 1660 系统:Ubuntu 18.04 Server NVIDIA驱动安装 - 下载 驱动下载地址:https://www.nvidia.cn/geforce/drivers/ - 获取下载链接 GTX 1660驱动下载链接:https://…

怎么理解FPGA的查找表与CPLD的乘积项

怎么理解 fpga的查找表 与cpld的乘积项 FPGA(现场可编程门阵列)和CPLD(复杂可编程逻辑器件)是两种常见的数字逻辑器件,它们在内部架构和工作原理上有着一些显著的区别。理解FPGA的查找表(LUT,L…

在 Android 上实现语音命令识别:详细指南

在 Android 上实现语音命令识别:详细指南 语音命令识别在现代 Android 应用中变得越来越普遍。它允许用户通过自然语言与设备进行交互,从而提升用户体验。本文将详细介绍如何在 Android 上实现语音命令识别,包括基本实现、带有占位槽位的命令处理,以及相关的配置和调试步骤…

力扣SQL50 指定日期的产品价格 双重子查询 coalesce

Problem: 1164. 指定日期的产品价格 coalesce 的使用 简洁版 &#x1f468;‍&#x1f3eb; 参考题解 select distinct p1.product_id,coalesce((select p2.new_pricefrom Products p2where p2.product_id p1.product_id and p2.change_date < 2019-08-16order by p2.…

黑马JavaWeb企业级开发(知识清单)03——HTML实现正文:排版(音视频、换行、段落)、布局标签(div、span)、盒子模型

文章目录 前言一、正文排版1. 视频标签: < video >2. 音频标签: < audio >3. 换行标签: < br >4. 段落标签 < p >5. vscode实现 二、布局1. 盒子模型2. 布局标签< div >和< span >3. VScode实现 三、源代码和运行结果总结 前言 本篇文章是…