目标检测 | YOLO v4、YOLO v5、YOLO v6理论讲解

news2024/9/22 4:39:41

☀️教程:霹雳吧啦Wz
☀️https://space.bilibili.com/18161609/channel/seriesdetail?sid=244160

一、YOLO v4

在这里插入图片描述

YOLO v4在2020年的4月发布,YOLO v4结合了大量的前人研究技术加以组合,实现了速度和精度的平衡,该论文包含大量的tricks。最终模型的mAP和FPS相比YOLO v3分别提升了10%和12%。

1.1 YOLO v4思想

YOLO v4的主要改进分为了网络结构的改进和优化策略的改进。

针对网络结构:

(1)Backbone:CSPDarknet-53(部分结构如下图所示)

在这里插入图片描述

YOLO v4的Backbone是在Darknet-53基础上引入了CSP结构,CSP结构通过修改传统卷积神经网络中的数据传递路径来优化网络的计算效率和减少网络参数,从而加快处理速度并提高模型性能。CSP结构图如下:

在这里插入图片描述

在CSP结构中,输入的特征图会被分成两部分。一部分直接传递到下一阶段,另一部分则通过一系列卷积层进行处理。处理后的特征图与直接传递的部分在深度上进行融合(concatenate)。这种结构能有效减少冗余信息,提高特征利用效率。但在CSPDarknet-53中,其CSP结构中输入特征图是分别用两个1×1的卷积层来实现分割为两部分的。

(2)Neck:SPP,PAN

YOLO v4 在YOLO v3的基础上增加了SPP和PAN结构。

SPP和之前在YOLO v3 SPP中介绍的结构相同,这里就不再进行介绍。

PAN(Path Aggregation Network)是一种用于增强特征层次之间信息传递的神经网络结构,PAN通过创建自顶向下和自底向上的信息流,形成一个封闭的循环,从而改善了特征的信息流动和整合。PAN的结构如下:

在这里插入图片描述

图a中对应的结构是FPN(特征金字塔)结构,那么PAN就是在FPN自顶向下融合特征的基础上,增加了一个自底向上融合特征的部分(见图b),形成一个更有效的信息循环。这样做可以使得顶层的高语义信息能够更好地指导底层的详细特征提取,同时使得底层的详细信息能够更好地辅助顶层的语义判断。但在YOLO v4中,特征融合的方式不是采用相加融合的方式,而是采用的在深度上进行拼接的方式。

(3)YOLO v3 Head

YOLO v4网络的预测头部使用的还是YOLO v3 的Head,是一个基于Anchor的Head。

针对优化策略:

(1)消除网格敏感度

在这里插入图片描述

如图所示,对于基于anchor的边界框回归参数的预测,在YOLO v3中是基于网格的中心点坐标来预测的,但是当真实目标的中心点恰好位于网格的边缘时,例如假设真实目标中心点在网格左上角,则模型需要预测出的回归参数 t x , t y t_x,t_y txty,在经过Sigmoid激活函数处理后,其值应接近0。这就需要将 t x , t y t_x,t_y txty预测为一个负无穷的数,这是非常困难的。

为了解决以上问题,YOLO v4引入了一个缩放因子scale,变成下图所示的式子:

在这里插入图片描述

经过scale的缩放之后,激活函数就更容易的到达0和1的点了,并且偏移的范围由原来的( 0 , 1 )调整到了( − 0.5 , 1.5 ) 。

(2)Mosaic图像增强

Mosaic图像增强就是将多张图片组合在一起,使网络进行训练的方法。Mosaic 数据增强算法参考 CutMix数据增强算法。CutMix数据增强算法使用两张图片进行拼接,而 Mosaic 数据增强算法一般使用四张进行拼接,但两者的算法原理是非常相似的,在YOLO v4中就使用了这样的方法进行训练。

(3)划分正负样本的IoU阈值

在这里插入图片描述

为了增加正样本的数量,在YOLO v4中,我们将改进划分正负样本的策略。首先,将AT和GT的左上角对齐来计算IoU,设定一个IoU阈值。接下来将GT映射在Grid网格上,那么在YOLO v4的划分策略中,图中阴影部分的三个Cell对应的AT2都将被划分为正样本,因为在消除网格敏感度的时候,利用改进的公式预测的边界框回归参数不再将预测边界框的中心坐标限制在当前Cell内了。

(4)优化Anchor

YOLO v4中,针对(512×512)的图片重新优化了Anchors:

在这里插入图片描述

(5)采用CIOU损失

1.2 YOLO v4网络结构

YOLO v4模型 = CSPDarkNet53 + SPP + PANet+ YOLO v3-Head

在这里插入图片描述

1.3 YOLO v4总结

YOLO v4的贡献点:

  • 开发了一个高效、强大的目标检测模型。它使每个人都可以使用1080ti或2080ti GPU来训练一个非常快速和准确的目标检测器。
  • 验证了最先进的 Bag-of-Freebies和 Bag-of-Specials对象检测在检测器训练时的影响。
  • 对现有的方法进行了改进,使其更加高效,更适合于单个GPU的训练,包括CBN,PAN,SAM等。

YOLO v4主要由四个部分组成:

输入端: 训练时对输入端的改进,主要包括Mosaic数据增强、cmBN、SAT自对抗训练

  • Backbone: 各种方法技巧结合起来,包括:CSPDarknet53、Mish激活函数、Dropblock

  • Neck: SPP模块、FPN+PAN、SAM结构

  • Head: 输出层的锚框机制和YOLOv3相同,主要改进的是训练时的回归框位置损失函数CIOU Loss,以及预测框。

YOLO v4的五个基本组件:

  • CBM:Yolov4网络结构中的最小组件,由Conv+Bn+Mish激活函数三者组成。
  • CBL:由Conv+Bn+Leaky_relu激活函数三者组成。
  • Res unit:借鉴Resnet网络中的残差结构,让网络可以构建的更深。
  • CSPX:借鉴CSPNet网络结构,由三个卷积层和X个Res unint模块Concate组成。
  • SPP:采用1×1,5×5,9×9,13×13的最大池化的方式,进行多尺度融合。

二、YOLO v5

在这里插入图片描述

YOLO v5紧跟YOLO v4在2020年的6月发布,其作者并未发表论文,性能与YOLO v4不分上下。

YOLOv5针对不同大小(n, s, m, l, x)的网络整体架构都是一样的,只不过会在每个子模块中采用不同的深度和宽度,分别应对yaml文件中的depth_multiplewidth_multiple参数。还需要注意,官方除了n, s, m, l, x版本外还有n6, s6, m6, l6, x6,区别在于后者是针对更大分辨率的图片比如1280x1280,当然结构上也有些差异,后者会下采样64倍,采用4个预测特征层,而前者只会下采样到32倍且采用3个预测特征层。

2.1 YOLO v5思想

同样,将YOLO v5的主要改进分为网络结构的改进和优化策略的改进。

针对网络结构:

(1)Focus结构

在这里插入图片描述

Focus模块是在图片进入Backbone之前,对图片进行切片的操作,具体操作如上图所示,在一张图片中每隔一个像素拿一个值,类似于YOLO v2的Pass Through Layer中的相关操作一样,将一张图片切片成了四张互补的图片,长的差不多但是信息没有丢失。这样一来,将W、H信息就集中到了通道空间,输入通道扩充了四倍,即拼接起来的图片相对于原先的RGB三通道模式变成了12个通道,最后将得到的新图片再经过卷积操作,最终得到了没有信息丢失情况下的二倍下采样特征图。在v6.1的版本中,Focus模块替换成了6×6的普通卷积,两者功能相同,但后者的效率更高。

在这里插入图片描述

(2)Neck:SPPF,CSP,FPN+PAN结构

在YOLO v5的Neck部分,首先将原有的SPP结构替换为了SPPF结构,SPPF结构将输入串行通过多个5×5大小的最大池化层,这里需要注意的是串行两个5x5大小的MaxPool层是和一个9x9大小的MaxPool层计算结果是一样的,串行三个5x5大小的MaxPool层是和一个13x13大小的MaxPool层计算结果是一样的,但后者的效率更高。

在这里插入图片描述

其次,针对CSP结构,YOLO v5与YOLO v4不同的地方在于,YOLO v4中只有Backbone中使用了CSP结构。而YOLO v5中设计了两种CSP结构。原理相同,详细结构见2.2节YOLO v5l网络结构图。

最后,针对FPN+PAN结构,与YOLO v4中的结构相同,详细结构见2.2节YOLO v5l网络结构图。

(3)YOLO v3 Head

YOLO v5网络的预测头部使用的仍然是YOLO v3 的Head,是一个基于Anchor的Head。

针对优化策略:

(1)数据增强:Mosaic、Copy paste、Random affine、MixUp、Albumentations、Augment HSV、Random horizontal flip

Mosaic:通过将四张训练图像拼接在一个单一图像上的方法。每张图像贡献一个象限。这种方法扩展了模型对多尺度和多对象的识别能力。

Copy-Paste:从一张图像中复制对象并粘贴到另一张图像中。这种方法有助于增加图像中对象的实例,特别是对于那些不常见的类别(只有数据集中有实例分割的标注信息时才能用该方法)。

Random affine:随机仿射变换包括缩放、旋转、平移和倾斜等操作,可以在不改变对象类别的前提下,改变对象的几何和空间关系。

MixUp:通过在像素级别将两张图像线性混合,并同时也混合它们的标签,来创建新的训练样本。这种方法通过创建介于原有类别之间的虚拟训练样本,增强了模型的泛化能力。

Albumentations:是一个快速图像增强库,支持多种图像增强技术,如裁剪、旋转、翻转、亮度调整等。

Augment HSV:通过随机调整图像的色调(Hue)、饱和度(Saturation)和明度(Value)来增强图像数据。这有助于模型学习在不同光照和颜色条件下识别对象。

Random horizontal flip:随机水平翻转图像,是一种简单而有效的数据增强方法,可以提高模型对方向变化的适应性。

这些数据增强方法可以组合使用,提高深度学习模型的性能和泛化能力。

(2)多尺度进行训练

多尺度训练,假设设置输入图片的大小为640 × 640 ,训练时采用尺寸是在0.5 × 640 ∼ 1.5 × 640之间随机取值,注意取值时取得都是32的整数倍(因为网络会最大下采样32倍)。

(3)自适应Anchor计算

在YOLO v5中,初始锚框的选取功能嵌入到了整个训练代码的过程中,在每次训练开始之前,都会根据不同的数据集来自适应计算anchors。

(4)采用EMA更新权重

相当于训练的时候给参数赋予了一个动量,这样更新起来就会更加平滑。

(5)使用amp混合精度训练

能够减少显存的占用并加快训练速度,但是需要GPU的支持。

2.2 YOLO v5网络结构

下图是B站up主霹雳吧啦Wz在他的CSDN中所绘制的yolov5l网络结构:

在这里插入图片描述

2.3 YOLO v5损失函数

在这里插入图片描述

平衡不同尺度的损失

这里是指针对三个预测特征层(P3, P4, P5)上的obj损失采用不同的权重。在源码中,针对预测小目标的预测特征层(P3)采用的权重是4.0,针对预测中等目标的预测特征层(P4)采用的权重是1.0,针对预测大目标的预测特征层(P5)采用的权重是0.4,作者说这是针对COCO数据集设置的超参数。

2.4 YOLO v5总结

YOLO v5和之前YOLO系列相比的改进:

  • 通过领域的正样本anchor匹配策略增加了正样本的数量
  • 通过灵活的配置参数,可以得到不同复杂度的模型
  • 通过一些内置的超参数优化策略,提升整体性能
  • 应用各种数据增强的组合,提升模型的泛化能力

三、YOLO v6

在这里插入图片描述

YOLO v6是美团视觉智能部研发的一款目标检测框架,致力于工业应用。该框架同时专注于检测的精度和推理效率:YOLOv6-nano 在 COCO 上精度可达 35.0% AP,在 T4 上推理速度可达 1242 FPS;YOLOv6-s 在 COCO 上精度可达 43.1% AP,在 T4 上推理速度可达 520 FPS。在部署方面,YOLOv6 支持 GPU(TensorRT)、CPU(OPENVINO)、ARM(MNN、TNN、NCNN)等不同平台的部署,极大地简化工程部署时的适配工作。

3.1 YOLO v6思想

YOLO v6主要是基于硬件感知的思想来做的改进,其中的关键技术改进有三部分:Backbone骨干网络与Neck、高效的解耦头Head、训练策略。

(1)Backbone骨干网络与Neck

YOLO v5使用的Backbone和Neck都基于CSPNet来搭建的,采用了多分支的方式和残差结构。对于GPU等硬件来说,这种结构会一定程度上增加延时,同时减小内存带宽利用率。

YOLO v6基于硬件感知神经网络设计的思想,重新设计了Backbone与Neck,称之为EfficientRep Backbone和Rep-PAN Neck。

下图为EfficientRep Backbone的结构图:

在这里插入图片描述

  • 将Backbone中步长为2的普通Conv层替换为了步长为2的RepConv层。
  • 将原始的CSP-Block重新设计为RepBlock,其中RepBlock的第一个RepConv会做channel维度的变换和对齐。
  • 将原始的SPPF优化设计为更加高效的SimSPPF。

在这里插入图片描述

如图a所示,表示训练的时候,RepVGG block接一个ReLu。图b表示推理的时候RepVGG block就被替换为了RepConv。图c表示CSPStackRep块的结构, 主要在大模型(m、l)中使用。

YOLO v6参考YOLOv4和v5用的PAN,结合Backbone里的RepBlock或者CSPStackRep,提出了一个Rep-PAN。

Rep-PAN 基于 PAN拓扑方式,用 RepBlock 替换了 YOLOv5 中使用的 CSP-Block,对整体 Neck 中的算子进行了调整。让其在硬件上达到高效推理的同时,保持较好的多尺度特征融合能力。

在这里插入图片描述

(2)高效的解耦头Head

原始的YOLO v5的检测头是通过分类和回归分支融合共享的方式来实现的,而YOLOX的检测头则是将分类和回归分支进行解耦,同时新增了两个额外的3×3的卷积层,虽然提升了检测精度,但一定程度上增加了网络延时。

YOLOv6采用混合通道策略来建立了一个更有效的解耦头。具体来说,将中间的3×3卷积层的数量减少到只有一个。头部的宽度由骨干和颈部的宽度乘数共同缩放。这些修改进一步降低了计算成本,以实现更低的推理延迟。

在这里插入图片描述

(3)训练策略

Anchor-free无锚范式

由于 Anchor-based检测器需要在训练之前进行聚类分析以确定最佳 Anchor 集合,这会一定程度提高检测器的复杂度 。在一些边缘端的应用中,需要在硬件之间搬运大量检测结果的步骤,也会带来额外的延时。

YOLO v6采用的Anchor-free方案不需要预设参数,同时后处理耗时短。其主要有两种方案:

  • point-base (FCOS) ——YOLOv6使用的
  • keypoint-based ( CornerNet)

SimOTA标签分配策略

OTA 将目标检测中的标签分配视为最佳传输问题。它从全局角度为每个真实对象定义了正/负训练样本。

SimOTA 是 OTA 的简化版本,它减少了额外的超参数并保持了性能。计算步骤为:

  1. 计算成对预测框与真值框代价,由分类及回归loss构成

  2. 计算真值框与前k个预测框IoU,其和为Dynamic k;因此对于不同真值框,其Dynamic k存在差异

  3. 最后选择代价最小的前Dynamic k个预测框作为正样本

SIoU边界框回归损失

为了进一步提升回归精度,YOLO v6采用了SIoU边界框回归损失函数来监督网络的学习。目标检测网络的训练一般需要至少定义两个损失函数:分类损失和边界框回归损失,而损失函数的定义往往对检测精度以及训练速度产生较大的影响。

近年来,常用的边界框回归损失包括IoU、GIoU、CIoU、DIoU Loss等等,这些损失函数通过考虑预测框与目标框之间的重叠程度、中心点距离、长宽比等因素来衡量两者之间的差距,从而指导网络最小化损失以提升回归精度,但这些方法都没有考虑到预测框与目标框之间方向的匹配性。SIoU损失函数通过引入了所需回归之间的向量角度,重新定义了距离损失,有效降低了回归的自由度,加快网络收敛,进一步提升了回归精度。

SIoU Loss在小模型上提升明显, GIoU Loss在大模型上提升明显,因此选择SIoU (for n/t/s) /GIoU (for m/l) 损失作为回归损失。通过在YOLO v6s上采用SIoU Loss进行实验,对比CIoU Loss,平均检测精度提升0.3%AP。

3.2 YOLO v6网络结构

在这里插入图片描述

3.3 YOLO v6总结

YOLO v6在精度和速度上都超过了其他可用的目标检测器。为了方便工业部署,作者还为YOLOv6提供了定制的量化方法,使其成为开箱即用的快速检测器。

YOLO v6解决的问题:

  • RepVGG提出的结构重参数化方法表现良好,但在此之前没有检测模型使用。作者认为RepVGG的block缩放不合理,小模型和大模型

  • 没必要保持相似网络结构;小模型使用单路径架构,大模型就不适合在单路径上堆参数量。

  • 使用重参数化的方法后,检测器的量化也需要重新考虑,否则因为训练和推理时的结构不同,性能可能会退化。

  • 前期工作很少关注部署。前期工作中,推理是在V100等高配机器完成的,但实际使用时往往用T4等低功耗推理gpu,作者更关注后者的性能。

  • 针对网络结构的变化,重新考虑标签分配和损失函数。

  • 对于部署,可以调整训练策略,在不增加推理成本的情况下提升性能,如使用知识蒸馏。

参考链接

[1] https://www.bilibili.com/video/BV1NF41147So/?spm_id_from=333.999.0.0

[2] https://blog.csdn.net/weixin_43334693/article/details/129232468

[3] https://blog.csdn.net/weixin_43334693/article/details/129312409

[4] https://blog.csdn.net/weixin_43334693/article/details/130444498

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

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

相关文章

二叉树 N0=N2+1

N0 叶子节点,度为 0 的节点; N1 度为 1 的节点; N2 度为 2 的节点 度为 0 的节点为:H、I、J、K、G 度为 1 的节点:E、F 度为 2 的节点:A、B、D、C N0 N2 1,即:度为 0 的叶子节点 …

C++STL详解(一)——string类的接口详解(下)

目录 一.string的大小和容量成员函数 1.1size()和length() 1.2capacity() 1.3resize() 1.4reserve() 1.5clear()和empty() ​编辑 二.string元素的访问 2.1operator[]和at() 2.2范围for 三.string中迭代器相关函数 3.1begin()和end() 3.2rbegin()和rend() 四.string…

Anaconda +Pytorch安装教程

Anaconda Pytorch安装教程 Anaconda安装 小土堆的安装教程:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】_哔哩哔哩_bilibili Free Download | Anaconda 这里自己选一个文件夹安装即可 第一个红框表示添加图标到开始菜…

细说MCU用自带的波形发生器实现DAC输出的方法

目录 一、参考示例 二、配置参数 1.配置DAC 2.配置TIM3 三、代码修改 四、查看结果 DAC模块自带的硬件波形发生器只有三角波(Triangle wave)和 (Noise wave)两种。此外,如果配置了Trigger2参数,在波形发生模式中就出现(并且仅出现)锯齿波的选项(Sa…

Codeforces Round 874 (Div. 3)(A~D题)

A. Musical Puzzle 思路: 用最少的长度为2的字符串按一定规则拼出s。规则是&#xff1a;前一个字符串的尾与后一个字符串的首相同。统计s中长度为2的不同字符串数量。 代码: #include<bits/stdc.h> #include <unordered_map> using namespace std; #define N 20…

vue3前端开发-小兔鲜项目-登录功能的业务接口调用

vue3前端开发-小兔鲜项目-登录功能的业务接口调用!这次&#xff0c;正式调用远程服务器的登录接口了。大家要必须使用测试账号密码&#xff0c;才能验证我们的代码。 测试账号密码是&#xff1a;账号&#xff08;xiaotuxian001&#xff09;&#xff1b;密码是&#xff08;1234…

【python】sklearn基础教程及示例

【python】sklearn基础教程及示例 Scikit-learn&#xff08;简称sklearn&#xff09;是一个非常流行的Python机器学习库&#xff0c;提供了许多常用的机器学习算法和工具。以下是一个基础教程的概述&#xff1a; 1. 安装scikit-learn 首先&#xff0c;确保你已经安装了Python和…

什么是hdfs如何使用驱动程序访问hdfs

目录 什么是hdfs 主要特点包括&#xff1a; 架构组成&#xff1a; 应用场景&#xff1a; 如何使用驱动程序访问hdfs 准备工作环境&#xff1a; 启动 Hadoop 服务 可能遇到的问题&#xff1a; ssh验证失败 验证Hadoop服务 对hdfs进行文件操作 什么是hdfs HDFS&#x…

【数据结构】栈(基于数组、链表实现 + GIF图解 + 原码)

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;数据结构 &#x1f4da;本系列文章为个人学…

Linux--Socket 编程 UDP(简单的回显服务器和客户端代码)

目录 0.上篇文章 1.V1 版本 - echo server 1.1认识接口 1.2实现 V1 版本 - echo server&#xff08;细节&#xff09; 1.3添加的日志系统&#xff08;代码&#xff09; 1.4 解析网络地址 1.5 禁止拷贝逻辑&#xff08;基类&#xff09; 1.6 服务端逻辑 &#xff08;代码&…

Leetcode—769. 最多能完成排序的块【中等】

2024每日刷题&#xff08;149&#xff09; Leetcode—769. 最多能完成排序的块 实现代码 class Solution { public:int maxChunksToSorted(vector<int>& arr) {int ans 0;int mx INT_MIN;for(int i 0; i < arr.size(); i) {mx max(arr[i], mx);if(mx i) {a…

【C++】C++应用案例-旋转图像

旋转图像的需求&#xff0c;在图片处理的过程中非常常见。我们知道对于计算机而言&#xff0c;图像其实就是一组像素点的集合&#xff0c;所以图像旋转的问题&#xff0c;本质上就是一个二维数组的旋转问题。 我们可以给定一个二维数组&#xff0c;用来表示一个图像&#xff0c…

【C++】——红黑树(手撕红黑树,彻底弄懂红黑树)

目录 前言 一 红黑树简介 二 为什么需要红黑树 三 红黑树的特性 四 红黑树的操作 4.1 变色操作 4.2 旋转操作 4.3 插入操作 4.4 红黑树插入代码实现 4.5 红黑树的删除 五 红黑树迭代器实现 总结 前言 我们之前都学过ALV树&#xff0c;AVL树的本质就是一颗平…

Oracle对比两表数据的不一致

MINUS 基本语法如下 [SQL 语句 1] MINUS [SQL 语句 2];举个例子&#xff1a; select 1 from dual minus select 2 from dual--运行结果 1-------------------------------- select 2 from dual minus select 1 from dual--运行结果 2所以&#xff0c;如果想找所有不一致的&a…

软件测试---Linux

Linux命令使用&#xff1a;为了将来工作中与服务器设备进行交互而准备的技能&#xff08;远程连接/命令的使用&#xff09;数据库的使用&#xff1a;MySQL&#xff0c;除了查询动作需要重点掌握以外&#xff0c;其他操作了解即可什么是虚拟机 通过虚拟化技术&#xff0c;在电脑…

富芮坤FR800X系列之按键检测模块设计

FR800X系列按键检测模块 读者对象&#xff1a; 本文档主要适用以下工程师&#xff1a; 嵌入式系统工程师 单片机软件工程师 IOT固件工程师 BLE固件工程师 文章目录 1.概要2.用户如何设计按键检测模块2.1 GPIO初始化2.2按键模块初始化2.3设计中断函数&#xff1a;2.4循环…

【Python面试题收录】Python编程基础练习题①(数据类型+函数+文件操作)

本文所有代码打包在Gitee仓库中https://gitee.com/wx114/Python-Interview-Questions 一、数据类型 第一题&#xff08;str&#xff09; 请编写一个Python程序&#xff0c;完成以下任务&#xff1a; 去除字符串开头和结尾的空格。使用逗号&#xff08;","&#…

【数据库】Quartz2.3 框架 数据库设计说明书

1、 Quartz表说明 2、 quartz 的触发时间的配置 1、 cron 方式&#xff1a;采用cronExpression表达式配置时间。 2、 simple 方式&#xff1a;和JavaTimer差不多&#xff0c;可以指定一个开始时间和结束时间外加一个循环时间。 3、 calendars 方式&#xff1a;可以和cron配合使…

Java-----栈

目录 1.栈&#xff08;Stack&#xff09; 1.1概念 1.2栈的使用 1.3栈的模拟实现 1.4栈的应用场景 1.5栈、虚拟机栈、栈帧有什么区别呢 1.栈&#xff08;Stack&#xff09; 1.1概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操…

Centos8 yum 更换源以及安装内核头文件

文章目录 一、简介二、yum 更换源三、安装内核头文件 一、简介 CentOS 是一个开源项目&#xff0c;发布了两个不同的 Linux 发行版——CentOS Stream 和 CentOS Linux 。 CentOS Stream 是即将发布的红帽企业 Linux 产品的上游开发平台。 CentOS 项目将于 2024 年 6 月 30 日…