34_YOLOv5网络详解
1.1 简介
YOLOV5是YOLO(You Only Look Once)系列目标检测模型的一个重要版本,由 Ultralytics 公司的Glenn Jocher开发并维护。YOLO系列以其快速、准确的目标检测能力而闻名,尤其适合实时应用。YOLOV5在保持高效的同时,进一步提升了检测精度,是深度学习领域中非常受欢迎的目标检测模型之一。以下是关于YOLOV5的详细介绍:
基本概念
YOLOV5基于先前的YOLO模型改进而来,采用了更为先进的网络架构设计和训练策略。它是一个端到端的模型,意味着从输入图像到输出物体边界框和类别概率,整个过程一次性完成,无需多阶段处理。
网络架构
-
Backbone:YOLOV5的基础网络架构经历了多次迭代,从V5到V5.0.6,其中V5.0开始使用了CSPNet(Cross Stage Partial Networks)作为主干网络,这是一种提高效率同时减少计算冗余的设计。CSPNet通过跨阶段部分特征重用来减少计算量。随后的版本中,引入了更为高效的注意力机制和改进的瓶颈结构,如SPP(Spatial Pyramid Pooling)、FPN(Feature Pyramid Networks)等,进一步提升模型性能。
-
Neck:YOLOV5的颈部设计包括了 PANet(Path Aggregation Network)和一些自定义的特征融合技术,用于整合不同尺度的特征图,以增强对多尺度目标的检测能力。
-
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" 数据增强策略是一种直观且有效的方法,广泛应用于计算机视觉任务中,旨在通过模拟更多样化的训练样本以提高模型的泛化能力。该方法的基本思想是直接从图像中复制部分区域并粘贴到同一张图像或其他图像的不同位置上,以此来增加训练数据的多样性。以下是该策略的一些关键点和应用方式:
-
基本操作:在实施Copy-Paste时,首先会随机选择图像中的一个或多个感兴趣区域(如目标对象、背景特征等),然后将这些区域复制并粘贴到同一图像的其他位置,或者粘贴到另一张图像中。粘贴过程中可能会进行适当的缩放、旋转、翻转等变换,以进一步增加多样性。
-
应用领域:这种策略特别适用于对象检测、语义分割、实例分割等任务,因为它不仅增加了图像的内容多样性,还能够帮助模型学习到对象间的上下文关系,以及对象在不同场景下的外观变化
优势:
- 提升模型鲁棒性:通过在不同的背景和上下文中展示相同的对象,可以增强模型对各种环境变化的适应能力。
- 简化数据收集:相比于手动创建新样本,Copy-Paste是一种成本较低的数据增强方式,能有效利用现有数据资源。
- 促进小对象学习:对于检测或分割中的小对象,Copy-Paste可以通过增加其在图像中的出现频率和尺度变化,改善模型对这类对象的识别能力。
-
实现细节:在实际操作中,开发者需要精心设计复制和粘贴的逻辑,包括选择哪些区域、如何融合粘贴后的像素以避免明显的剪切痕迹、以及如何控制增强的程度以保持数据的真实性等。
-
与其它增强方法结合:Copy-Paste通常与其他数据增强技术(如颜色变换、几何变换等)结合使用,形成更强大的数据增强策略,共同提升模型性能。
random affine:
Random Affine 变换是计算机视觉中常用的一种数据增强策略,它通过在图像上施加一系列随机的仿射变换来增加训练数据的多样性。仿射变换是一种保持直线依然为直线的几何变换,它可以包括旋转、缩放、平移、剪切等操作。下面详细介绍Random Affine变换的几个核心方面:
-
旋转(Rotation):随机改变图像的角度,使对象以不同的方向出现。这有助于模型学习到对象的旋转不变性。
-
缩放(Scaling):按随机的比例放大或缩小图像,可以是均匀缩放或独立控制宽度和高度的非均匀缩放。此操作帮助模型处理不同大小的对象。
-
平移(Translation):在图像的水平或垂直方向上随机移动图像内容,模拟对象在场景中的不同位置,增强模型的位置不变性。
-
剪切(Shearing):对图像进行倾斜变换,即沿一个或两个轴方向上的线性变形,增加图像的几何扭曲,提高模型对形变的鲁棒性。
-
保持一致性和真实性:在进行这些变换时,通常会设定一定的参数范围,确保变换后的图像既具有多样性又保持视觉上的合理性和真实性,避免产生过于失真的图像。
-
应用领域:Random Affine变换广泛应用于图像分类、物体检测、图像分割等任务中,能够显著提升模型的泛化能力,尤其是在处理存在视角变化、大小变化和位置变化的实际问题时效果尤为明显。
-
实现细节:在实际应用中,开发者通常会使用图像处理库(如OpenCV、Pillow等)提供的功能来实现Random Affine变换。通过定义一个随机生成的仿射变换矩阵,并应用到图像上,就可以轻松地生成增强后的图像样本。
Mix up:
https://blog.csdn.net/qq_51605551/article/details/140496749?spm=1001.2014.3001.5501
将两张图片按透明程度(插值)混合成一张新的图片。
Albumentations:
Albumentations 是一个开源的Python库,专门用于图像数据增强。它提供了丰富的图像处理和数据增强方法,广泛应用于深度学习中的计算机视觉任务,如图像分类、目标检测、图像分割等。Albumentations的主要特点和优势包括:
-
多样化数据增强:Albumentations 支持广泛的图像变换,包括但不限于旋转(Rotation)、缩放(Scale)、平移(Translate)、翻转(Flip)、裁剪(Crop)、色彩空间变换(如亮度调整、对比度变化、色调变换等)、以及更复杂的变换如随机仿射变换(RandomAffine)、光度变换(PhotometricDistortions)等。这些变换可以单独使用,也可以组合成序列执行复杂的数据增强策略。
-
易于使用的API:该库提供了简洁直观的API,用户可以通过简单的配置创建复杂的数据增强管道。用户可以轻松地链式组合多个变换,并通过参数设置变换的概率、幅度等,使得数据增强策略高度可定制化。
-
高性能:Albumentations 使用高效的算法实现,确保了在大规模数据集上的快速处理速度。特别是其内置的并行处理机制,可以显著加速数据预处理过程。
-
兼容性好:Albumentations 设计之初就考虑到了与机器学习框架的无缝集成,特别是与PyTorch和TensorFlow等主流深度学习框架的配合使用。它可以直接与这些框架的数据加载器集成,简化了数据预处理流程。
-
可视化工具:库内还包含了可视化功能,允许用户直观地查看应用了哪些数据增强操作后的图像效果,这对于调试和理解数据增强策略非常有帮助。
-
灵活性:除了图像数据,Albumentations 还支持对图像掩码、bounding boxes(边界框)等结构化数据进行相应的同步变换,这对于实例分割、目标检测等任务尤为重要。
总之,Albumentations 是一个强大而灵活的数据增强工具,它极大地简化了数据预处理的复杂度,提升了模型训练的效率和最终模型的泛化能力。通过使用Albumentations,研究者和开发者可以轻松构建出丰富多样的训练数据集,从而推动计算机视觉模型性能的提升。
Augment HSV:
HSV数据增强策略是基于HSV色彩空间对图像进行颜色变换的一种数据增强方法。HSV( Hue, Saturation, Value )色彩空间区别于常用的RGB色彩空间,它更符合人类对颜色的感知方式,其中:
- Hue(色相):表示颜色的种类,如红色、绿色、蓝色等。
- Saturation(饱和度):描述颜色的纯度,饱和度越高颜色越鲜艳,反之则越接近灰色。
- Value(明度/亮度):表示颜色的明暗程度,值越大图像越亮。
在数据增强中,通过随机改变图像的HSV值,可以模拟不同光照条件、色彩偏差等场景,进而增加模型对颜色变化的鲁棒性。具体来说,HSV数据增强通常包括以下几个方面:
-
随机色相偏移(Hue Shift):在一定范围内随机改变图像的整体色相,使得同一物体呈现不同颜色,帮助模型学习颜色不变性。
-
饱和度调整(Saturation Adjustment):增加或减少图像的饱和度,模拟色彩鲜艳度的变化。这可以训练模型在面对过饱和或低饱和度图像时仍能准确识别。
-
明度变化(Value/Brightness Adjustment):改变图像的整体明暗程度,模拟不同光照条件。通过增减明度,模型能够学习到在明亮或昏暗环境下的物体特征。
实施HSV数据增强时,开发者通常会设定一个合理的随机变化范围,避免过度夸张的颜色变换导致图像失真。这种增强方法尤其适用于那些对颜色敏感的任务,如图像分类、物体识别、皮肤疾病诊断等。
在实践上,可以使用如OpenCV这样的库来实现HSV空间的变换,通过调整图像的HSV分量,生成新的训练样本,增加模型训练时的多样性,从而提升模型的泛化能力。
Random horizontal filp:
Random Horizontal Flip(随机水平翻转)是一种常用的数据增强策略,尤其在计算机视觉领域中被广泛应用。它的基本操作是对输入的图像进行随机的水平方向镜像翻转,即左右对调。这项技术的目的在于通过引入图像的方向变化,增强模型的泛化能力,使其能够更好地识别和理解图像中的内容,而不仅仅依赖于特定方向的特征。
关键特点:
-
简单有效:随机水平翻转是一种简单易行的数据增强方法,实施成本低,但能显著提升模型对图像中物体方向变化的鲁棒性。
-
保持语义不变性:对于大多数自然图像而言,水平翻转不会改变图像内容的语义信息,如猫翻转后仍然是猫,车翻转后还是车,因此这是一种保持类别标签不变的增强方式。
-
增强多样性:通过随机应用此变换,可以为训练集引入更多的样本变体,特别是在物体检测、图像分类和图像分割等任务中,有助于模型学习到更加全面的特征表示。
-
平衡数据分布:在某些数据集中,物体可能倾向于某一特定方向,随机水平翻转可以帮助平衡不同方向的样本数量,减少模型对特定方向的偏好。
实现方式:
在实现随机水平翻转时,一般会设置一个概率参数,决定图像是否进行翻转。例如,在深度学习框架中,可以设置一个0到1之间的概率值,每次处理图像时根据这个概率随机决定是否执行翻转操作。翻转操作本身则可以通过编程语言的标准库或专门的数据处理库(如OpenCV、PIL等)轻易实现。
应用场景:
- 图像分类:增加图像方向多样性,帮助模型学会从不同视角识别对象。
- 目标检测与识别:提升模型对目标在图像中不同位置和方向的检测能力。
- 图像分割:同样适用于增强分割任务中的训练样本多样性,尤其是对于对称或方向无关的物体。
- 图像生成和风格迁移:在某些情况下,也可以作为预处理步骤,增加模型训练时的输入变化性。
总之,Random Horizontal Flip作为一种基础而强大的数据增强手段,通过简单地变换图像方向,就能有效提升模型的泛化性能,是许多计算机视觉项目中的标配策略。
1.5 训练策略
Multi-scale training(0.5~1.5x)
多尺度训练的基本原理:
-
动态调整输入尺寸:在每个训练迭代或一定迭代次数后,随机选择或按照预定计划改变输入图像的分辨率。例如,可以在一个范围内,如[320, 640]像素之间随机选择尺寸,或者按照一个预设的尺度序列进行训练。
-
提升模型鲁棒性:通过这种方式,模型被迫学习在不同尺度下目标的特征,从而增强其对尺寸变化的鲁棒性,提高检测精度,尤其是在小目标检测方面表现更佳。
-
模拟真实场景:实际应用中,目标的尺寸变化多样,多尺度训练模拟了这种多样性,使得模型在面对不同大小目标时都能有良好的表现。
-
避免过拟合:通过增加训练数据的多样性,多尺度训练还可以帮助减少模型对特定尺寸目标的过度依赖,降低过拟合的风险。
实现细节:
-
实现方式:在YOLOv5的训练脚本或配置文件中,可以通过设置参数来启用多尺度训练,比如定义一个尺度范围或一个尺度列表,并配置训练时如何从中选择尺寸。
-
渐进式尺度调整:有时会采用渐进式的尺度调整策略,即在训练初期使用较小的尺度,随着训练进行逐步增加图像尺寸,这样可以在早期训练阶段让模型专注于学习基本特征,后期再关注更细致的尺度变化。
-
固定比例调整:为了保持图像的长宽比,通常在调整尺寸时会保持图像的宽高比不变,只改变整体大小。
AutoAnchor(for training custom data)
AutoAnchor是一种自动锚点优化策略,用于动态调整模型中预设的锚框(anchor boxes)尺寸,以提高目标检测的准确性,尤其是针对不同尺寸目标的检测效果。AutoAnchor的设计初衷是减少人工设定锚框尺寸的主观性和繁琐性,通过自动化过程找到最优的锚框配置,从而提升模型性能。
基本原理:
-
初始化锚点:首先,YOLOv5会基于一些默认或经验设定的锚点尺寸开始训练,这些锚点尺寸覆盖了目标可能出现的不同宽高比和大小。
-
评估与反馈:在训练过程中,模型会计算预测框与真实框(ground truth bounding boxes)之间的IOU(Intersection over Union,交并比),IOU是衡量两个矩形框重叠程度的一个指标。AutoAnchor策略会收集所有预测框与真实框匹配情况的统计信息,特别是那些高质量匹配(高IOU)的情况。
-
优化锚点尺寸:基于上述统计信息,算法会重新计算和调整锚点尺寸,倾向于生成那些在训练数据集中能更好地匹配真实框的尺寸。这一步通常涉及到优化算法,比如使用进化算法或贪心算法来搜索最优的锚点配置。
-
迭代优化:调整锚点尺寸后,模型会使用新的锚点配置重新训练,整个过程可能需要多次迭代,直到锚点尺寸收敛到一个较优的状态。
实现细节:
-
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)进行更新:
实现细节:
- 初始化:训练开始时,影子权重通常被初始化为模型的初始权重。
- 更新:在每一次迭代后,使用上述公式更新影子权重,使得影子权重逐渐趋向于模型权重的长期平均值。
- 评估:训练完成后,通常使用EMA权重来进行验证和测试,而不是最后一步的真实权重。这是因为EMA权重反映了模型在整个训练过程中的稳定状态,往往能提供更好的泛化性能。
优势:
- 提高稳定性:通过平滑权重更新,减少了训练过程中的波动,使模型更加稳定。
- 提升性能:在很多情况下,EMA模型在测试集上的表现优于直接使用原始训练权重的模型,尤其是在噪声较大的数据集上。
- 简化调参:相较于频繁调整学习率等超参数,EMA提供了一种相对简单且有效的优化策略
Mixed precision
Mixed Precision训练策略是一种利用半精度(FP16)和单精度(FP32)混合的方式来加速训练过程并节省显存的技术。这种策略特别适用于拥有支持半精度运算的现代GPU上,如NVIDIA的Tensor Cores,它能够显著提升训练速度并降低内存占用,而对模型的准确率影响甚微或几乎没有负面影响。
基本原理:
-
半精度(FP16):FP16相对于FP32,使用16位存储浮点数,相比32位的FP32,它占用的内存少一半,计算速度在支持的硬件上可以更快。但是,直接使用FP16训练可能会遇到数值稳定性问题,特别是在梯度累积和权重更新时,因为FP16的表示范围和精度较低。
-
混合精度:为了解决FP16的稳定性问题,Mixed Precision训练策略采用了一种折衷方案。它通常保持模型的权重和梯度在FP32(保证精度),而在中间的计算过程中(如前向传播、反向传播的大部分计算)使用FP16,这样既享受了FP16带来的速度和内存节省,又避免了严重的数值下溢或上溢问题。
-
自动混合精度(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)等,从而提升模型训练效率和最终的检测性能。
基本概念:
-
进化算法:这是一种借鉴自然界生物进化过程的全局优化方法。它通过模拟生物种群的遗传、突变、竞争和选择过程,来寻找问题的最优解。在超参数优化场景中,每一个个体代表一套超参数配置,而算法的目标是找到“最适应”的超参数组合。
-
种群初始化:算法首先随机生成一个初始的超参数配置种群。
-
评价函数:每个个体(超参数配置)会被用来训练模型,并通过验证集上的性能(如mAP,即平均精度均值)作为其适应度得分。
-
选择(Selection):根据个体的适应度得分,选择表现较好的个体进入下一代。
-
交叉(Crossover):从选择出的个体中,随机选择两个或多个个体的部分超参数进行交换,生成新的后代个体。
-
变异(Mutation):对部分个体的超参数进行小幅度的随机修改,引入新的探索性变化。
-
重复迭代:上述过程会重复进行多代,直到满足停止条件,如达到预设的迭代次数或找到足够优秀的超参数配置。
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
相关文章:
34_YOLOv5网络详解
1.1 简介 YOLOV5是YOLO(You Only Look Once)系列目标检测模型的一个重要版本,由 Ultralytics 公司的Glenn Jocher开发并维护。YOLO系列以其快速、准确的目标检测能力而闻名,尤其适合实时应用。YOLOV5在保持高效的同时,…...
深入解析Perl的正则表达式:功能、应用与技巧
在编程世界中,正则表达式是一种强大的文本处理工具,它能够用于搜索、替换、匹配字符串等操作。Perl语言以其强大的文本处理能力著称,而其正则表达式功能更是其核心特性之一。本文将深入探讨Perl中的正则表达式,包括其基本语法、应…...
【JAVA】Hutool CollUtil.sort 方法:多场景下的排序解决方案
在 Java 开发中,集合的排序是常见需求。Hutool 库的 CollUtil.sort 方法提供了一系列用于排序的实用功能,适用于不同的场景。以下是对几种常见场景及其实现方式的总结: <dependency><groupId>org.dromara.hutool</groupId>…...
Mysql-安装(Linux)
1、下载mysql 切换到/opt/app目录下,执行如下命令,下载mysql 5.7.38版本。 [rootywxtdb app]# wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz 解压安装包 [rootywxtdb app]# tar -zxvf mysql-5.7.38-l…...
如何查看日志
别用 cat cat 把整个日志文件刷屏 慎用 vim 日志不大随便整,因为vim会把整个日志文件读到内存,大日志文件(G级别)会造成内存占用过高,影响其他程序,在业务机器上查看日志这样尤其危险 less is more 还…...
python实现责任链模式
把多个处理方法串成一个list。下一个list的节点是上一个list的属性。 每个节点都有判断是否能处理当前数据的方法。能处理,则直接处理,不能处理则调用下一个节点(也就是当前节点的属性)来进行处理。 Python 实现责任链模式&#…...
Prometheus监控ZooKeeper
1. 简介 ZooKeeper是一个分布式协调服务,在分布式系统中扮演着重要角色。为了确保ZooKeeper集群的健康运行,有效的监控至关重要。本文将详细介绍如何使用Prometheus监控ZooKeeper,包括安装配置、关键指标、告警设置以及最佳实践。 2. 安装和配置 2.1 安装ZooKeeper Exporter…...
vuepress搭建个人文档
vuepress搭建个人文档 文章目录 vuepress搭建个人文档前言一、VuePress了解二、vuepress-reco主题个人博客搭建三、vuepress博客部署四、vuepress后续补充 总结 vuepress搭建个人文档 所属目录:项目研究创建时间:2024/7/23作者:星云<Xing…...
面试题 17.14.最小K个数
题目:如下图 答案:如下图 /*** Note: The returned array must be malloced, assume caller calls free().*/ void AdjustDown(int* a,int n,int root) {int parent root;int child parent * 2 1;//默认左孩子是大的,将其与右孩子比较&am…...
C++实现LRU缓存(新手入门详解)
LRU的概念 LRU(Least Recently Used,最近最少使用)是一种常用的缓存淘汰策略,主要目的是在缓存空间有限的情况下,优先淘汰那些最长时间没有被访问的数据项。LRU 策略的核心思想是: 缓存空间有限࿱…...
汇昌联信数字做拼多多运营实力好吗?
汇昌联信数字在拼多多运营方面的实力如何?汇昌联信数字作为一家专注于电子商务运营服务的公司,其在拼多多平台的运营能力是值得关注的。根据市场反馈和客户评价,汇昌联信数字在拼多多的运营实力表现良好,能够为客户提供专业的店铺管理、产品…...
【云原生】Prometheus 服务自动发现使用详解
目录 一、前言 二、Prometheus常规服务监控使用现状 2.1 Prometheus监控架构图 2.2 Prometheus服务自动发现的解决方案 三、Prometheus服务自动发现介绍 3.1 什么是Prometheus服务自动发现 3.2 Prometheus自动服务发现策略 3.3 Prometheus自动服务发现应用…...
(十九)原生js案例之h5地里位置信息与高德地图的初使用
h5 地里位置信息 1. 获取当前位置信息 window.onload function () {const oBtn document.querySelector("#btn");const oBox document.querySelector("#box");oBtn.onclick function () {window.navigator.geolocation.getCurrentPosition(function (…...
三、基础语法2(30小时精通C++和外挂实战)
三、基础语法2(30小时精通C和外挂实战) B-02内联函数B-04内联函数与宏B-05_constB-06引用B-07引用的本质B-08-汇编1-X86-X64汇编B-09-汇编2-内联汇编B-10-汇编3-MOV指令C-02-汇编5-其他常见指令C-05-汇编8-反汇编分析C-07-const引用、特点 B-02内联函数 …...
gitee设置ssh公钥密码频繁密码验证
gitee中可以创建私有项目,但是在clone或者push都需要输入密码, 比较繁琐。 公钥则可以解决该问题,将私钥放在本地,公钥放在gitee上,当对项目进行操作时带有的私钥会在gitee和公钥进行验证,避免了手动输入密…...
BGP选路之Next Hop
原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由的属性进行比较,以确定出去往该目标网络的最优BGP路由,然后将该最优BGP路由与去往同一目标网络的其他协议路由进行比较,从而决定是否将该最优BGP路由放进P路由表中…...
牛客14666(优先屏障) + 牛客14847(Masha与老鼠)
文章目录 写在前面14666-优先屏障思路编程 14847-Masha与老鼠思路编程 写在前面 昨天刷的这两道题写了很久,特别是Masha与老鼠这道题,写了都快3个小时,主要还是理解代码逻辑有点难,不过写完之后感觉收获挺大的,给我以…...
Git下载与安装
下载网址:https://git-scm.com/downloads 下载之后开始安装 选择安装路径,next 选择需要安装的组件,这里默认即可,next 选择菜单文件夹,这里默认即可,next 选择默认编辑器,默认推荐的即可&…...
创建vue2/vue3项目
目录 创建一个Vue2项目创建一个Vue3项目 创建一个Vue2项目 ## 安装Vue-Cli : npm install -g vue/cli // Vue CLI 4.x 需要 Node.js v8.9 或更高版本 (推荐 v10 以上)vue --version // 检测版本是否正确## 创建一个项目: vue create hello-world // hel…...
IOS七层模型对应的网络协议和物理设备
以下是网络模型、对应的协议以及对应的物理设备的表格总结: 网络模型层次主要功能对应协议对应物理设备物理层透明的传输比特流,确定机械及电气规范RS-232、V.35、RJ-45、FDDI等中继器、集线器、网线、调制解调器、网卡数据链路层将比特组装成帧和点到点…...
论文复现:Predictive Control of Networked Multiagent Systems via Cloud Computing
Predictive Control of Networked Multiagent Systems via Cloud Computing论文复现 文章目录 Predictive Control of Networked Multiagent Systems via Cloud Computing论文复现论文摘要系统参数初始化系统模型观测器预测过程控制器设计系统的整体框图仿真结果 论文摘要 翻译…...
JSON 文件存储
JSON 全称为: JavaScript Object Notation 也就是 javaScript 对象标记,通过对象和数组的组合来表示数据, 虽然构造简洁,但是结构化程度非常高, 是一种轻量级的数据交换格式 对象和数组 在 JavaScript 语言中&#…...
python——pynput
pynput 是一个 Python 库,用于控制和监听键盘与鼠标输入。它在 Windows、macOS 和 Linux 上都可以工作,为用户提供了一个跨平台的输入事件处理方式。pynput 包含两个主要模块:keyboard 和 mouse,分别用于处理键盘和鼠标事件。 主…...
[用AI日进斗金系列]用码上飞在企微接单开发一个项目管理系统!
今天是【日进斗金】系列的第二期文章。 先给不了解这个系列的朋友们介绍一下,在这个系列的文章中,我们将会在企微的工作台的“需求发布页面”中寻找有软件开发需求的用户 并通过自研的L4级自动化智能软件开发平台「码上飞CodeFlying」让AI生成应用以解…...
《JavaEE篇》--多线程(2)
《JavaEE篇》--多线程(1) 线程安全 线程不安全 我们先来观察一个线程不安全的案例: public class Demo {private static int count 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() -> {//让count自增5W次…...
防爆智能手机如何助力电气行业保驾护航?
在电气行业的智能化转型浪潮中,防爆智能手机以其强大的数据处理能力、实时通讯功能及高度集成的安全特性,正成为保障电力网络稳定运行、预防安全隐患的得力助手。 防爆智能手机在电气行业中发挥着重要的保驾护航作用,主要体现在以下几个方面&…...
24.7.24数组|那几个课后得做的题
1、对长整形数据进行反转 2、对字符串进行反转 一、题目地址: 1. 实现一个函数atoi,使其能够将字符串转换整数 (Leetcode 8/中等). - 力扣(LeetCode) 2. 颠倒给定的32位无符号整数的二进制位(Leetcode 190/简单&…...
03Spring底层架构核心概念解析
为了感谢罕哥对我工作的帮助,特此记录下学习过程,期待成为和罕哥一样优秀的人 时间:2024.7.13 内容:spring源码课程3学习记录 一、BeanDefinition BeanDefinition表示Bean的定义,BeanDefinition中存在很多属性用来…...
Vue学习---vue 防抖处理函数,是处理什么场景
Vue防抖处理函数是用来处理在快速连续操作中,只执行最后一次操作的情况。 例如,在输入框输入时,我们可能希望只在用户完成输入后进行处理,而不是在每次键入时都处理。(n秒后触发一次) 以下是一个简单的Vue防抖处理函数的例子&am…...
力扣爆刷第166天之TOP100五连刷96-100(单词拆分、回溯、旋转数组)
力扣爆刷第166天之TOP100五连刷96-100(单词拆分、回溯、旋转数组) 文章目录 力扣爆刷第166天之TOP100五连刷96-100(单词拆分、回溯、旋转数组)一、24. 两两交换链表中的节点二、139. 单词拆分三、560. 和为 K 的子数组四、209. 长…...
2024在线PHP加密网站源码
源码介绍 2024在线PHP加密网站源码 更新内容: 1.加强算法强度 2.优化模版UI 加密后的代码示例截图 源码下载 https://download.csdn.net/download/huayula/89568335...
网络驱动移植(RTL8189)
1、把驱动放到内核文件夹中(linux/drivers/net/wireless),对应的驱动可以在网上下载 2、修改该目录下的Kconfig和Makefile文件 3、配置内核(make menuconfig) 配置支持IEEE 802.11,选中8189模块࿰…...
go语言中map学习
在 Go 语言中,map 是一种引用类型,这意味着它有以下特点: 内存结构: map 实际上是一个指向底层数据结构的指针。这个底层数据结构包含键值对的集合。 赋值与传参: 当你给一个变量赋值一个 map 时,或者将 map 作为函数参数传递时,实际上传递的是指针,而不是完整的数据结构副本。…...
【C#】| 与 及其相关例子
按位或(|) 按位或运算符 | 对两个数的每一位进行比较,如果两个数中至少有一个为 1,则结果位为 1;否则,结果位为0。 1010 (10 in decimal) | 1100 (12 in decimal) ------1110 (14 in decimal) 力扣相关…...
【数据结构 | 哈希表】一文了解哈希表(散列表)
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
go创建对象数组
在 Go 语言中,可以使用字面量的方式创建结构体对象数组。以下是一个示例代码,展示了如何使用字面量创建一个结构体对象数组: package mainimport "fmt"// 定义一个结构体 type Person struct {Name stringAge intAddress Address…...
Golang | Leetcode Golang题解之第278题第一个错误的版本
题目: 题解: func firstBadVersion(n int) int {return sort.Search(n, func(version int) bool { return isBadVersion(version) }) }...
自动化网络爬虫:如何它成为提升数据收集效率的终极武器?
摘要 本文深入探讨了自动化网络爬虫技术如何彻底改变数据收集领域的游戏规则,揭示其作为提升工作效率的终极工具的奥秘。通过分析其工作原理、优势及实际应用案例,我们向读者展示了如何利用这一强大工具加速业务决策过程,同时保持数据收集的…...
软件测试---测试需求分析
课程目标 什么是软件测试需求 软件测试需求的必要性 如何对软件测试需求进行分析(重点) 课程补充 灰度测试(基于功能):先发布部分功能,然后看用户的反馈,再去发布另外一部分的功能更新。 A/B测…...
Android11 framework 禁止三方应用通过广播开机自启动-独立方案
之前的文章Android11 framework 禁止三方应用开机自启动记录了我调试Android11应用自启动限制的全过程,但是之前的方案感觉还能再研究,所以有了这一篇文章。 这一篇文章主要探讨Android11上,以广播来进行自启动的应用的限制,极个别…...
Node:解决Error: error:0308010C:digital envelope routines::unsupported的解决方法
问题描述 在使用vuepress搭建博客的时候,运行项目发现报错了,检查了node的版本是18,之前用的是16或14的版本,现在报:Error: error:0308010C:digital envelope routines::unsupported错误。 查找了一些资料࿰…...
spring boot(学习笔记第十四课)
spring boot(学习笔记第十四课) Spring Security的密码加密,基于数据库认证 学习内容: Spring Security的密码加密基于数据库认证 1. Spring Security的密码加密 如果用户的密码保存在数据库中是以明文保存,对于公司的安全将是灾难性的&…...
Android 11 Unable to start/bind service
今天在Android11上发现了一个的问题,如果目标Service的进程没有启动,那么无论是bindService还是startService都没有办法拉起指定的Service。 网上查了很多资料如下: 1.目标Service 设置 android:exported"true" 2.目标Service需要声明自定义权…...
走难而正确的路并持之以恒
走难而正确的路并持之以恒 接近八月,台风频繁。气象台说台风“格美”今夜将至,往粤北走,而留在粤东的将是持续的高温。高温的广州,这几晚的天空惊喜不断,成片的火烧云,站在猎德大桥观望,丹红的凤…...
规范:Redis规范
在公司项目中,redis属于高频使用,在使用中,我们遇到了各种各样的redis问题,于是针对自身情况梳理了一个redis使用规范。 一、键名设计 1、key名设计 1. 禁止包含特殊字符(比如空格、换行、单双引号以及其他转义字符) 2. 建议以…...
比较 WordPress 、 Baklib 和 BetterDocs
对于希望管理其产品和服务的在线文档或知识库以支持其客户和员工的组织来说,市场上有太多的平台和工具。一些组织使用 WordPress 作为 Web 内容管理,并打算使用可用的插件。如果您是这样的组织之一,正在考虑使用广泛使用的 WordPress 插件之一…...
Redis 哨兵搭建
Redis哨兵(sentinel)搭建 7.2.5 文章目录 一、单节点哨兵1. 环境介绍2. 环境前准备工作3. 安装 Redis 7.2.54. redis 配置修改并且启动4.1 修改配置文件4.2 编写启动脚本 5. 开启主从5.1 开启5.2 主库实例查看主从信息 6. 创建sentinel的配置文件并启动6.1 创建配置文件6.2 启…...
HackTheBox--Knife
Knife 测试过程 1 信息收集 端口扫描 80端口测试 echo "10.129.63.56 knife.htb" | sudo tee -a /etc/hosts网站是纯静态的,无任何交互功能,检查网页源代码也未发现任何可利用的文件。 检查页面请求时,请求与响应内容࿰…...
Linux_实现TCP网络通信
目录 1、实现服务器的逻辑 1.1 socket 1.2 bind 1.3 listen 1.4 accept 1.5 read 1.6 write 1.7 服务器代码 2、实现客户端的逻辑 2.1 connect 2.3 客户端代码 3、实现服务器与客户端的通信 结语 前言: 在Linux下,实现传输层协议为TCP…...
正则表达式与文本三剑客之grep
目录 前言 一、grep命令 二、基础正则表达式常见元字符 2.1、特殊字符 2.2、定位符 2.3、非打印字符 三、元字符操作实例 3.1、查找特定字符 3.2、利用中括号“[]”来查找集合字符 3.3、查找行首“^”与行尾字符“$” 3.4、查找任意一个字符“.”与重复字符“*” 3.…...