Efficient DETR: Improving End-to-End Object Detector with Dense Prior

原文链接

[2104.01318] Efficient DETR: Improving End-to-End Object Detector with Dense Prior (arxiv.org)icon-default.png?t=O83Ahttps://arxiv.org/abs/2104.01318

原文笔记

What

1、一种针对DETR的objectquery初始化的方法

2、针对Deformable DETR进行改进,改进之后的模型具有更小的参数量和更精简的架构

3、特定的query数量递减的方法可以以100个query实现300个query的效果,同时不增加参数量

其实一言以蔽之:先经过Dence走预测头进行初步预测,找到的框当参考点并提取向量当object query,将参考点和object query放一起叫object container走稀疏模块 再送入之间的预测头预测

为啥一个密集一个稀疏呢,因为注意力计算的计算量不一样呗,密集是所有proposal都算,稀疏是挑选出来的object query算。

Why

  • 传统的目标检测方法(fastrcnn,fasterrcnn,yolo)无论是单阶段还是双阶段,都需要引入一些人工先验知识或者手工组件(NMS等)抑制了端到端目标检测方法的发展
  • 最近提出的端到端transformer检测器,如DETR和Deformable DETR,具有堆叠6个解码器层的级联结构来迭代更新对象查询,如果不采用这么多的decoder layers进行堆叠则其性能会严重下降。但是这多层解码器机构又会大大的增加模型总体的参数量,增大内存占用并且增加训练和验证的时间

Challenge

1、DETR训练占用的资源多

2、DETR收敛慢

3、DETR对小物体的检测不好

How

We define the object container as a container of structured information, which includes different kinds of object features. Object queries and reference points both belong to the object container, since the object queries and the reference points could represent the abstract features and positional information of objects.

作者把原来detr中的objectquery重新定义为object container 包含两部分一个是feature一个是参考点,他这么定义的原因可能来自于deformable DeTR

从这个想法出发来解决1、2

以query数量递减以及融合deformable的想法来解决3

原文翻译

Abstract

最近提出的端到端transformer检测器,如DETR和Deformable DETR,具有堆叠6个解码器层的级联结构来迭代更新对象查询,如果不采用这么多的decoder layers进行堆叠则其性能会严重下降。在本文中,我们研究了对象容器的随机初始化,包括对象查询参考点,主要负责多次迭代的要求。(其实目的是替换多次迭代,减少训练次数)基于我们的发现,我们提出了高效DETR,这是一种简单有效的端到端目标检测流程。通过利用密集检测和稀疏集检测,Efficient DETR 利用密集先验来初始化对象容器,并弥补了 1-decoder 结构和 6-decoder 结构的差距。在 MS COCO 上进行的实验表明,我们的方法仅使用 3 个编码器层和 1 个解码器层,与最先进的对象检测方法相比实现了具有竞争力的性能。高效的DETR在密集场景中也具有健壮性。它在CrowdHuman 数据集上大大优于现代检测器。

1. Introduction

对象检测是计算机视觉中的一项经典任务,它研究定位边界框预测图像中对象类别。现代检测器[9,27,24,20]使用滑动窗口方法生成密集锚点,建立网络预测和groundtruth之间的联系。非最大抑制(NMS)等后处理方法用于去除预测的冗余。这些手工制作的组件无法实现端到端的对象检测。

最近,DETR [2] 提出了一个基于编码器-解码器转换器 [34] 架构和二分匹配的端到端框架,该框架在没有后处理的情况下直接预测一组边界框。然而,DETR 比现代主流检测器 [27, 24, 20] 需要 10 到 20 倍的训练时间才能收敛,并且显示检测小物体的性能相对较低。可变形 DETR [43] 从以下两个方面解决了这两个问题:(i)。用局部空间注意替换全局范围注意,加速了训练的收敛性。(ii)。用多尺度特征图替换单尺度特征图,显著提高了小目标检测的性能。

DETR的管道可以抽象如图1(a)所示。我们将对象容器定义为结构化信息的容器其中包括不同类型的对象特征。对象查询和参考点都属于对象容器因为对象查询和参考点可以表示对象的抽象特征和位置信息。一组随机初始化的对象容器被馈送到特征细化器,以与从图像中提取的特征进行交互。具体来说,具有交叉注意模块的 6 个解码器层扮演级联特征细化器的角色,该细化器迭代地更新对象容器。细化的对象容器有助于DETR的最终预测。此外,从图像中提取特征是从特征提取器中提取的,该特征提取器具有 CNN 主干和 DETR 中的 6 个编码器层。换句话说,图像和随机初始化的对象容器通过特征提取器和级联特征细化器得到最终的结果。在这个管道中,DETR 和 Deformable DETR 都有一个 6 编码器和 6 解码器转换器架构。我们假设这种结构是 DETR 系列在目标检测中实现高精度的关键。

在本文中,我们研究了 DETR 的组件以了解它们的机制。我们进行了广泛的实验,发现具有额外辅助损失的解码器层对性能贡献最大。Transformer 解码器迭代地将对象容器与特征图交互。我们探索DETRs中对象容器的随机初始化对多次细化的长时间要求(即解码器层)负主要责任,这进而导致收敛速度慢。

然而,很难直接分析对象查询 [2],因为它们只是一组抽象特征。由于可变形 DETR,它为对象查询提出了参考点 [43]。参考点是二维张量,表示盒子中心的猜测。通过可视化训练模型的参考点,我们发现它们的作用被证明相当于在基于锚点的方法[27,22]中充当锚点[33,40,17,7]。此外,我们报告了参考点的不同初始化导致 1-decoder 结构的性能差异巨大。这里的问题是:对于端到端检测器中的对象容器,哪种初始化更好。

在本文中,我们提出了高效DETR,这是一种简单但有效的端到端检测器1(b)。高效的 DETR 有两个部分:密集和稀疏。两部分共享相同的检测头。在密集部分,执行基于滑动窗口的一组特定密集预测来生成建议。Top-K (本文中的 K=100) 对 4-d 提议进行评分,其 256-d 编码器特征被视为参考点和对象查询。对象容器的初始化是如此合理,以至于我们的方法能够仅使用 1 个解码器层实现更好的性能和快速收敛。具体来说,基于可变形 DETR 的 3-encoder 和 1-decoder 结构可以使用 ResNet50 [11] 主干和更快的 (36 epoch) 训练实现具有竞争力的性能(COCO [21] 中的 44.2AP)。

2. Related Work

2.1. One-stage and Two-stage Detectors

主流检测器主要基于锚框或锚点。锚点在每个滑动窗口位置的中心生成,它为对象提供候选者。在YOLO[24]、SSD[22]、RetinaNet[20]和FCOS[33]等一级检测器中,该网络直接预测整个特征图的锚点的类别和偏移量。一对多标签分配规则通常用于计算每个锚点的目标。NMS等后处理用于去除对象的重复预测。相比之下,两级检测器,如Faster RCNN[27]和Mask RCNN[10],不能直接输出最终的预测。相反,他们首先执行类不可知的密集预测,通过区域建议网络(RPN)生成前景建议[27,1,35]。ROIPool[27]或ROIAlign[10]层用于从主干特征中提取区域建议的特征。NMS 也用于最终结果。ROIPool 和 ROIAlign 层解决了特征错位问题并改进了建议。因此,两级检测器通常比一级检测器表现出更好的性能。

2.2. End-to-end Detectors

端到端检测器,如[36]、DETR[2]、可变形DETR[43]和稀疏RCNN[31],不需要额外的后处理阶段,并在端到端框架中执行目标检测。DETR 建立在编码器解码器转换器架构中。主干特征通过 6 个编码器层来提取特征图每个位置的上下文信息。对象查询,定义为可学习的位置编码[34,2],被发送到6个解码器层,以迭代地与编码器特征交互。对象查询的大小很小,例如 DETR 中的 100 个。最终结果由检测头从对象查询中预测。在每个解码器层添加一个集合预测损失,即二部匹配损失,进行细化。在没有任何手工制作的组件的情况下,DETR 直接预测一组带有分数的框作为最终的预测。然而,DETR 需要很长的训练过程(~500 个 epoch),并且不利于检测小物体。

为了解决这些问题,Deformable DETR 和 Sparse RCNN 都提出了一种有效的解决方案。在Deformable DETR 中,多尺度特征用于帮助检测小物体。它为每个对象查询生成一个参考点,并提出了一个可变形注意模块[4,42,43],使每个参考点只关注一个小的固定采样点集。这种修改将transformer中的全局连接转换为局部连接,并将收敛速度从 DETR 的 500 个 epoch 显着提高到 50 个 epoch。可变形 DETR 也处于 6 编码器和 6 解码器架构中。稀疏 RCNN 提出了一个纯粹的稀疏框架,用于具有可学习建议的对象检测。成对地为每个可学习区域proposal生成一个 256-d 的proposal feature。与DETR中的对象查询类似,proposal features被馈送到6个动态实例交互头[31],以与特征金字塔网络(FPN)[19]中的区域特征交互。RoI 层限制了提议特征使其仅与几个局部特征交互,并使 Sparse RCNN 具有快速收敛的速度(36 个 epoch)。此外,[32]、[5]和[8]还以其他方式研究了DETR的收敛性问题

3. Exploring DETR

3.1. Revisit DETR

Encoder and decoder.DETR系列结构都是基于encoder-decoder的transformer架构,编码器和解码器分别级联 6 个相同的层。一个编码器层由多头自注意力和前馈网络 (FFN) 组成,而解码器层有一个额外的多头交叉注意力层。编码器层与卷积具有相似的作用,并从具有多头自注意力的 CNN 主干中提取上下文特征。在解码器中,一组 256-d 对象查询与整个图像的编码器特征交互,并通过多头交叉注意力聚合信息。辅助二分匹配损失应用于每个解码器层。表 1 说明了 DETR 对解码器层的数量更敏感,这意味着解码器比 DETR 的编码器更重要。特别是,采用具有 3 个编码器和 3 个解码器的 DETR 作为我们的基线。如果在解码器中删除两层,AP 可以减少约 9.3。相比之下,在编码器中删除两层只会导致 1.7 AP 下降。

为什么解码器比编码器更重要。它们都处于级联架构中,只是解码器对每个相同的层都有额外的辅助损失。在表 1 中,我们发现辅助解码损失是 DETR 对解码器层数量更敏感的主要原因。编码器和解码器的行为在没有辅助损失的情况下趋于相同。我们指出,辅助解码损失在更新查询特征时引入了强监督,这使得解码器更加高效。解码器的级联结构通过逐层辅助损失细化特征。迭代次数越多,辅助解码监督就越高效。

为了进一步探索解码器的级联结构,我们尝试了不同数量的解码器层。表 2 显示,随着级联减少的次数,性能显着下降。6 层解码器和 1 层解码器之间存在 10.3 AP 的巨大下降。值得注意的是,每次迭代后只更新对象查询。对象查询与性能密切相关,因为最终预测由检测头从它们预测。但是,对象查询在训练开始时随机初始化。我们假设这种随机初始化并不能提供良好的初始状态,这可能是 DETR 需要 6 次迭代的级联结构来实现竞争性能的原因。

3.2. Impact of initialization of object containers

基于上一节中的分析,值得研究对象查询的初始化。对象查询属于对象容器的特征信息。对象查询被定义为可学习的位置嵌入,它是一个 256 维的抽象张量,难以分析。然而,我们观察到 DETR 中的每个对象查询都学会用几种操作模式专门处理某些区域和框大小。我们假设研究对象查询的空间投影可能有助于以直观的方式理解。

由于可变形 DETR [43],它带来了一个新的组件,称为与对象查询(object query)相关的参考点(referrance point)。参考点是二维张量,表示盒子中心的预测,属于object container的位置信息。此外,参考点是通过线性投影从 256-d 对象查询中预测得到的。它们可以作为对象查询在二维空间中的投影,并提供对象查询中位置信息的直观表示。参考点和对象查询在解码器迭代期间更新,并有助于最终结果。

考虑到参考点直观地表示对象查询中的位置信息,我们从它们开始探索。在传递到解码器层之前,参考点是通过随机初始化对象查询上的线性投影生成的,如图3(a)所示。我们将此过程称为参考点的初始化。图 2 显示了收敛模型的学习参考点。初始阶段的参考点均匀分布在图像上,覆盖整个图像区域。我们指出,这种初始化类似于基于锚点的检测器中锚点[12,33,40,17,7]的生成。随着迭代阶段的增加,参考点逐渐聚集到前景的中心,最后在第一阶段覆盖几乎所有的前景。直观地说,参考点作为定位前景的锚点,使注意模块聚焦于前景周围的一小组关键采样点。

在调查参考点的更新后,我们开始对其初始化的探索,这就是参考点的生成方式。对于其余部分,我们统称参考点的初始化和对象查询的初始化为对象容器的初始化。

Different initialization of reference point在基于锚点的检测器中,锚点的生成对模型的性能有很大的影响。大多数情况下,锚点在每个滑动窗口位置生成,这被证明是对象提案的适当初始化。作为锚点的参考点的初始化可能对Deformable DETR的性能产生影响。我们在级联(6-decoder)和非级联(1-decoder)结构中尝试了几种不同的参考点初始化并比较了它们的性能。如表 3 所示,在非级联结构中,不同的初始化行为完全不同。相反,它们会导致级联结构中的类似性能。与推测一致,网格初始化,即在滑动窗口中心生成参考点,会导致近似等于可学习初始化的性能。然而,另外两种初始化、中心边界,在没有迭代的情况下会导致准确性大幅下降。为了更好地分析,我们在几个阶段可视化了不同初始化的参考点(图4)。随着迭代阶段的增加,它们的参考点往往在相同的分布中,并在最后阶段以相似的模式定位前景。总之,参考点的不同初始化导致模型在非级联结构上的性能的巨大差异,而级联结构通过多次迭代弥补了它们的差距。从另一个角度来看,更好的参考点初始化可以提高非级联结构的性能。

Can we bring the gap of 1-decoder structure and 6-decoder structure with better initialization?基于上一节中的发现,更好地初始化参考点可能会提高性能,尤其是对于 1-decoder 结构。考虑到参考点作为锚点,我们假设主流检测器中的锚点先验可以帮助我们解决这个问题。在现代两级检测器中,区域提议由 RPN 在滑动窗口范式中生成,为前景提供一组与类无关的候选者。

RPN是一种利用密集先验生成前景粗边界框的有效结构。如图3(b)所示,我们在编码器的密集特征上添加RPN层。RPN头共享编码器的特征,并预测anchors的对象得分和偏移量。选择得分最高的边界框作为区域建议。然后,我们用非级联结构中区域建议的中心初始化参考点。表 3 显示了结果,大大优于其他方法,导致非级联结构的巨大改进。图 5 展示了该方法的可视化,其中初始阶段的参考点与最后一阶段其他方法的分布相似。区域建议以更合理的分布初始化参考点,提高了无级联结构的可变形DETR的精度。

如表 4 所示,为参考点提供具有密集先验的更好初始状态会导致 1-decoder 结构的显着改进。然而,参考点只是对象查询的空间投影而对象查询包含对象容器的额外抽象信息。因此,如何同时用密集先验初始化 256-d 查询特征?

直观地说,对于提案初始化中的每个参考点,我们从特征图中选择其对应的特征,即来自编码器的 256-d 张量作为其对象查询的初始化。我们的方法如图3(c)所示。在表 4 中,我们的方法将 1-decoder 结构进一步提高了 3 AP。此外,仅使用密集先验初始化对象查询并使用没有参考点的原始解码器也可以为基线带来显着的改进。

这些结果表明,对象容器的初始状态,包括可变形 DETR 中的参考点和对象查询,与非级联结构的性能高度相关。RPN 中的提议信息提供了更好的初始化,有可能通过密集先验来提高性能。基于我们的研究,我们提出了高效的 DETR,它能够弥补 1-decoder 结构和 6-decoder 结构之间的性能差距。

4. Efficient DETR

受上一节中发现的启发,我们提出了一个简单但有效的对象检测框架,称为高效 DETR。它有 3 个编码器层,只有 1 个解码器层,没有解码器中的级联结构。该体系结构如图5所示。高效的DETR由两部分组成:密集和稀疏。密集部分对编码器的密集特征进行预测。一个应用top-k选择方法从密集预测中选择一组建议。解码器中的 4-d 提议及其 256-d 特征被视为参考点和对象查询的初始化。在稀疏部分(sparse part),使用密集先验初始化的对象容器、参考点和对象查询被馈送到 1 层解码器以与编码器特征交互以进行进一步细化。最终结果是从细化的对象容器预测的。两部分共享相同的检测头。所有编码器和解码器层都使用 [43] 中提出的可变形注意模块。对于其余部分,我们将介绍我们网络的细节。

Backbone.在 Deformable DETR 的设计之后,我们构建了一个主干,其中包含从 ResNet 中提取的多尺度特征图。我们的主干有四个尺度的特征图,有 256 个通道。前三个特征图通过 1×1 步幅 1 卷积从 ResNet 的 C3、C4、C5 特征图中提取。同时最后一个特征图是通过 C5 上的 3×3 步幅 2 卷积生成的。

Dense part.如上所述,密集部分由Backbone、编码器和检测头组成。当用卷积替换编码器时,它就变成了一级检测器。在两阶段可变形 DETR 之后,为多尺度特征图中的每个位置生成锚点。基本锚刻度设置为0.05。检测头为每个锚预测C (DETR[2]中的C=91)类别分数和4个偏移量。与 [2, 43, 31] 相同,分类分支是一个线性投影层,回归分支是一个隐藏大小为 256 的 3 层感知层。

Sparse part.密集部分的输出不改变编码器特征的大小。我们通过他们的是物体的置信度分数(它被定义为作为前景的置信度)选择其中一组,对于每个锚点,我们取其 256 维编码器特征预测的最大类别分数作为其客观性分数。选择得分最高的 K 个提案作为参考点。在这里,我们使用参考点作为 4-d 框,而不是 2-d 中心来获得更多的空间信息。至于对象查询,它们取自编码器特征图。在密集部分,每个锚点的预测来自编码器特征图中的 256-d 特征。我们将此 256-d 特征作为提议特征。提案特征和参考点成对出现,并由同一个锚点连接。在我们的方法中,提案特征被视为其参考点的对象查询。从某种意义上说,首先,当特征通过编码器层时,位置编码已经编码到提议特征中。其次,密集部分的任务与稀疏部分相同,除了其输出的大小。直观地说,密集部分的特征可以作为稀疏部分的初始状态。此外,鉴于密集部分和稀疏部分的任务非常相似,这两个部分共享相同的检测头。然而,以每个 256-d 特征作为训练样本,由于每次迭代的训练样本较多,密集部分比稀疏部分收敛得更快。从这个角度来看,密集特征(提议特征)可以作为稀疏特征(对象查询)的良好初始化。

在初始化之后,对象查询被送到解码器层进行加强,在传统的检测算法中[12, 9, 27, 24, 20],一级检测器面临特征错位,而两级检测器通过 ROIAlign [10, 23] 或 ROIPool [27] 解决了这个问题。在我们的稀疏部分,错位由解码器固定,其中交叉注意模块使对象查询能够聚合与其相关的特征。最终预测来自这些增强的对象查询。

与之前的 DETR 不同,我们的提议数量是在训练过程中动态调整的。鉴于网络无法在训练开始时预测准确的类别分数,从一开始就设置了大量提案(300)。这主要确保几乎所有的前景都覆盖在稀疏的提案集中。然而,少量的建议会错过一些困难的例子。这导致训练不稳定。作为网络的训练,我们线性地减少了数字。最终数字减少到 100。这种策略使得网络高效,它使用100个提案达到了与300个天训练的准确度相当

Loss.在密集部分和稀疏部分我们的框架结构共享相同的标签分配规则和损失函数,为了避免像NMS一样的后处理操作一个一对一标签分配原则被采用,像[30,2,43]一样,我们用匈牙利算法来匹配预测与真值,匹配花销和损失函数的定义相同,L = λcls·Lcls +λL1·LL1 +λgiou·Lgiou .损失函数与[2,43,31]中的损失函数一样,Lcls 表示用于分类的焦点损失 [20]。LL1 和 Lgiou 表示 L1 损失和广义 IoU 损失 [28] 用于定位。λcls、λL1 和 λgiou 是它们的系数。我们在密集部分而不是一对多分配中应用一对一的标签分配规则,因为一对多分配依赖于更多的提议才能达到类似的性能。如第 5.3 节所述,密集部分中的 1-to-1 分配允许 Efficient DETR 以少量提案 (100) 实现高精度。

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

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

相关文章

【工具分享】FONIX勒索病毒解密工具

前言 FONIX勒索软件首次出现在2020年6月,并迅速成为勒索即服务(RaaS)平台的一部分。尽管它最初的影响力有限,FONIX从2020年11月开始显著增加了攻击频率。FONIX以其复杂的加密方法著称,使用了AES、Salsa20、ChaCha和RS…

【HarmonyOS】自定义圆点进度条

【HarmonyOS】实现一个自定义带圆点的进度条效果。 方案就是做一个圆角组件,然后利用rotate旋转,至于动画效果,我查了一下文档,只要设置enableSmoothEffect:false,就可以关闭动画,然后自己开个定时器&#…

鸿蒙开发(NEXT/API 12)【硬件(接入手写套件)】手写功能开发

接入手写套件后,可以在应用中创建手写功能界面。界面包括手写画布和笔刷工具栏两部分,手写画布部分支持手写笔和手指的书写效果绘制,笔刷工具栏部分提供多种笔刷和编辑工具,并支持对手写功能进行设置。接入手写套件后将自动开启一…

C++:采用模板封装顺序表,栈,队列

1.顺序表&#xff1a; list.hpp #ifndef LIST_HPP #define LIST_HPP #include <iostream>using namespace std;template <class L>class Seqlist { private:L *ptr;L size;L len0;public:void init(L n){//堆区申请空间&#xff08;大小为n&#xff09;this->…

基于STM32的智能空气质量监测系统

目录 引言项目背景环境准备 硬件准备软件安装与配置系统设计 系统架构关键技术代码示例 传感器数据采集空气质量监测与控制实现实时数据显示与报警系统应用场景结论 1. 引言 空气质量对人类健康有着重要的影响&#xff0c;尤其是在污染较严重的地区。智能空气质量监测系统通…

点餐小程序实战教程12菜品展示

目录 1 点餐界面2 显示菜品分类2.1 创建变量2.2 数据绑定 3 显示菜品总结 我们上一篇介绍了数据源的设计方法&#xff0c;讲解了菜品分类和菜品数据源的创建以及后台功能的开发。有了后台功能并且准备好数据之后&#xff0c;我们就需要开发小程序部分。 现实中你看到的想到的绝…

大数据电商数仓项目--实战(一)数据准备

第一章 数仓分层 1.1 为什么要分层 1.2 数仓命名规范 1.2.1 表命名 ODS层命名为ods_表名DIM层命名为dim_表名DWD层命名为dwd_表名DWS层命名为dws_表名DWT层命名为dwt_表名ADS层命名为ads_表名临时表命名为tmp_表名 1.2.2 表字段类型 数量类型为bigint金额类型为decimal(16…

电脑usb接口封禁如何实现?5种禁用USB接口的方法分享!(第一种你GET了吗?)

“防患于未然&#xff0c;安全始于细节。”在信息技术飞速发展的今天&#xff0c;企业的信息安全问题日益凸显。 USB接口作为数据传输的重要通道&#xff0c;在带来便利的同时&#xff0c;也成为了数据泄露和安全风险的高发地。 因此&#xff0c;对电脑USB接口进行封闭管理&a…

微服务的优点及在云原生时代的合理落地方式

云计算de小白 那么&#xff0c;微服务到底能给业务带来什么好处&#xff1f;在云原生时代&#xff0c;如何更合理地实现微服务&#xff1f; 架构没有好坏之分&#xff0c;只有适合与不适合。然而&#xff0c;当我们对比微服务架构与单体架构时&#xff0c;可以发现微服务有以…

8--苍穹外卖-SpringBoot项目中套餐管理 详解(二)

目录 删除套餐 需求分析和设计 代码开发 根据id查询套餐 mapper层 Service层 ServiceImpl层 Mapper层 批量删除套餐 mapper层 Service层 ServiceImpl层 Mapper层 SetmealMapper.xml 修改套餐 需求分析和设计 代码开发 起售停售套餐 需求分析和设计 代码开发…

Docker全家桶:从0到加载本地项目

安装docker&#xff0c;我们选择的是CentenOS 7。 目录 Docker安装 命令 命令别名 数据卷挂载 Dockerfile 容器网络互联 Docker安装 1. 先删除本机旧的或者残留的docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest …

前端——js基础

一、JavaScript &#xff08;简称js&#xff09;——js可以给网页实现一个动态效果 1.JavaScript 组成 - 核心语法 ECMScipt 简称(es): 规范js的基本语法 1.es是js的语法规范 管理者 2.js是es的实现 操作者 - DOM > 文档对象 提供js操作 (例如…

再也不用担心内容重复!在线伪原创工具,让创作更自由!

大家好&#xff0c;今天我们将讨论一个对网络写作非常有益的辅助工具——在线内容转换工具。不论您是需要更新您的博客&#xff0c;还是希望在社交平台上保持活跃&#xff0c;我们都频繁面临着迅速生成新内容的挑战。利用一个有效的工具来改写现有内容&#xff0c;可以极大地提…

什么是网络安全自动化以及优势与挑战

目录 网络安全自动化的工作原理 网络安全自动化的好处 增强的安全功能 改善表现和姿势 降低安全成本 简化的安全合规性和审计 更好的端点管理 网络安全自动化的挑战 耗时且容易出错的安全流程 可见性降低&#xff0c;风险和成本增加 合规管理 有用的网络安全自动化…

算法题之每日温度

每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 1: 输入…

基于Java的建筑节能监测系统+能源管理+公共建筑能耗监测系统+建筑能耗监测系统+节能监测系统+能源管理系统

介绍 建筑节能监测系统是基于计算机网络、物联网、大数据和数据可视化等多种技术融合形成的一套节能监测系统 系统实现了对建筑电、水、热&#xff0c;气等能源、资源消耗情况的实时监测和预警、动态分析和评估&#xff0c;为用户建立了科学、系统的节能分析方法&#xff0c;…

14年408-计算机网络

第一题&#xff1a; 解析&#xff1a;OSI体系结构 OSI由下至上依次是&#xff1a;物理层-网络链路层-网络层-运输层-会话层-表示层-应用层。 因此直接为会话层提供服务的是运输层。答案选C 第二题&#xff1a; 解析&#xff1a;数据链路层-交换机的自学习和帧转发 主机a1向交换…

webshell-HTTP常见特征

一、总体特点 二、蚁剑 数据中可以看到一些明文字符串函数&#xff0c;响应中可以看到响应的明文数据。 ant特征以及对数据base64可以解码 chr类别的会出现大量的chr编码 大量的百分号字符 三、哥斯拉 第一个请求包很大 响应为0 密钥被拆分到数据前后 响应包cookie带&#xf…

C#和数据库高级:虚方法

文章目录 一、抽象方法和抽象类中的思考1.1、回顾抽象方法的特点1.2、针对抽象方法问题的引出 二、虚方法的使用步骤2.1、虚方法重写方法的调用2.2、系统自带的虚方法2.3、重写Equals方法2.4、虚方法和抽象方法的比较 三、虚方法和抽象方法的联系3.1、ToString()方法的应用 一、…

Python爬虫APP程序:构建智能化数据抓取工具

在信息爆炸的时代&#xff0c;数据的价值日益凸显。Python作为一种强大的编程语言&#xff0c;与其丰富的库一起&#xff0c;为爬虫程序的开发提供了得天独厚的优势。本文将探讨如何使用Python构建一个爬虫APP程序&#xff0c;以及其背后的思维逻辑。 什么是Python爬虫APP程序&…