Focal Self-attention for Local-Global Interactions in Vision Transformers

news/2024/4/17 6:20:51/文章来源:https://blog.csdn.net/like_jmo/article/details/128078420

目录

Abstract

1. Introduction 

2. MEthod 

2.1 Model architecture

2.2 Focal self-attention 

 2.2.1 Window-wise attention

2.2.2 Complexity analysis

2.3 Model configuration

3. Related work  

4. Experiments 

4.1 Image classification on ImageNet-1K

4.2 Object detection and instance segmentation


Abstract

        最近,Vision Transformer 及其变体在各种计算机视觉任务中表现出了巨大的潜力。通过自注意力捕捉短程和长程视觉依赖的能力是成功的关键。但由于二次方计算开销,它也带来了挑战,特别是对于高分辨率视觉任务(例如,对象检测)。最近的许多工作都试图通过应用粗粒度的全局注意力或细粒度的局部注意力来降低计算和内存成本并提高性能。然而,这两种方法都削弱了多层 Transformer 原始自注意力机制的建模能力,从而导致次优解决方案。在本文中,我们提出了 focal self-attention,这是一种结合了细粒度局部交互和粗粒度全局交互的新机制。在这种新机制中,每个标记以细粒度参与其最近的周围标记,以粗粒度参与远离它的标记,因此 可以有效地捕获短程和长程视觉依赖性。借助焦点自注意力,我们提出了一种新的 Vision Transformer 模型变体,称为 Focal Transformer,它在一系列公共图像分类和对象检测基准上实现了优于最先进 (SoTA) 视觉 Transformer 的性能。特别是,我们的 Focal Transformer 模型具有 51.1M 的中等尺寸和 89.8M 的较大尺寸,分别在 224 × 224 的 ImageNet 分类上达到 83.5% 和 83.8% 的 Top-1 准确率。当用作主干时,Focal Transformers在 6 种不同的物体检测方法中,对当前的 SoTA Swin Transformers [44] 进行了一致且实质性的改进。我们最大的 Focal Transformer 在 COCO mini-val/test-dev 上产生 58.7/58.9 box mAPs 和 50.9/51.3 mask mAPs,在 ADE20K 上产生 55.4 mIoU 用于语义分割,在三个最具挑战性的计算机视觉任务上创建新的 SoTA。 

1. Introduction 

        如今,Transformer [60] 已成为自然语言处理 (NLP) [22, 6] 中流行的模型架构。鉴于其在 NLP 中的成功,人们越来越努力将其应用于计算机视觉 (CV) [48, 51]。自从它的承诺首次在 Vision Transformer (ViT) [23] 中展示以来,我们见证了用于图像分类 [57、63、67、44、80、59]、对象检测 [9、91、84] 的全 Transformer 模型的蓬勃发展, 20] 和语义分割 [61, 65]。除了这些静态图像任务,它还被应用于各种时间理解任务,例如动作识别 [41、83、11]、对象跟踪 [15、62]、场景流估计 [39]。

         在 Transformers 中,self-attention 是关键组成部分,使其与广泛使用的卷积神经网络 (CNN) [38] 不同。在每个 Transformer 层,它支持不同图像区域之间的全局内容相关交互,以对短程和长程依赖进行建模。通过完全自注意力 1 的可视化,我们确实观察到它学会了同时关注局部环境(如 CNN)和全局上下文(参见图 1 的左侧)。然而,当涉及到用于对象检测或分割等密集预测的高分辨率图像时,由于特征图中网格数量的二次计算成本,全局和细粒度的自注意力变得非常重要。最近的工作交替地利用粗粒度的全局自我注意 [63、67] 或细粒度的局部自我注意 [44、80、59] 来减少计算负担。然而,这两种方法都削弱了原始全局自注意力的能力,即同时模拟短程和长程视觉依赖性的能力,如图 1 左侧所示。

        在本文中,我们提出了一种新的自我注意机制来捕获 Transformer 层中的局部和全局交互以获取高分辨率输入。考虑到附近区域之间的视觉依赖性通常比远处区域更强,我们只在局部区域进行细粒度的自注意力,而在全局区域进行粗粒度的注意。如图 1 右侧所示,特征图中的 query token 以最精细的粒度关注其最近的环境。然而,当它到达更远的区域时,它会关注汇总的 token 以捕获粗粒度的视觉依赖性。区域离 query 越远,粒度越粗因此,它可以有效地覆盖整个高分辨率特征图,同时在自我注意计算中引入的tokrn数量比完全自我关注中少得多。注意力机制。因此,它能够有效的捕获短程和长程视觉依赖性。我们称这种新机制为焦点自注意力,因为每个token都以焦点方式关注其他token。基于所提出的 focal self-attention,开发了一系列 Focal Transformer 模型,方法是 1) 利用多尺度架构为高分辨率图像保持合理的计算成本 [63、67、44、80],以及 2 ) 将特征图拆分为多个窗口,其中token共享相同的环境,而不是对每个token执行聚焦自注意力 [59、80、44]。

        我们通过对图像分类、对象检测和分割的综合实证研究验证了所提出的焦点自我注意的有效性。结果表明,我们具有相似模型大小和复杂性的 Focal Transformers 在各种设置中始终优于 SoTA Vision Transformer 模型。值得注意的是,我们具有 51.1M 参数的小型 Focal Transformer 模型可以在 ImageNet-1K 上实现 83.5% 的 top-1 精度,而具有 89.8M 参数的基础模型获得 83.8% 的 top-1 精度。当转移到物体检测时,我们的 Focal Transformers 对于六种不同的物体检测方法始终优于 SoTA Swin Transformers [44]。我们最大的 Focal Transformer 模型在 COCO test-dev 上分别实现了 58.9 box mAP 和 51.3 mask mAP 用于对象检测和实例分割,在 ADE20K 上实现了 55.4 mIoU 用于语义分割。这些结果表明,focal self-attention 在建模局部-全局交互方面非常有效。  

2. MEthod 

2.1 Model architecture

        为了适应高分辨率视觉任务,我们的模型架构与 [63、80、44] 共享类似的多尺度设计,这使我们能够在早期阶段获得高分辨率特征图。如图 2 所示,图像 I \in R^{H\times W \times 3} 首先被分成大小为 4×4 的块,得到 \frac{H}{4}\times \frac{W}{4}\times (4\times 4\times 3)。然后,我们使用一个 PatchEmbedding 层,其中由一个卷积层组成,核大小和步幅都等于 4,将这些补丁投影到维度为 d 的隐藏特征中.给定这个空间特征图,然后我们将它传递给四个阶段的焦点 Transformer 块。在每个阶段 I \in \left \{ 1, 2, 3, 4 \right \} ,Focal Transformer 块由 N_{i}  个 focal Transformer 层组成。在每个阶段之后,我们使用另一个 PatchEmbedding  层将特征图的空间大小减少 2 倍,同时特征维度增加 2。对于图像分类任务,我们取上一阶段输出的平均值并将其发送到一个分类层。对于物体检测,根据我们使用的特定检测方法,来自最后 3 个或所有 4 个阶段的特征图被馈送到检测器头。可以通过改变输入特征维度 d 和每个阶段的焦点 Transformer 层数来定制模型容量 \left \{ N_{1}, N_{2}, N_{3},N_{4} \right \} 。  

        标准的自注意力可以捕获细粒度的短距离和长距离交互,但是当它在高分辨率特征图上执行注意力时,它会受到高计算成本的影响,如 [80] 中提到的。以图2中的stage 1为例。对于大小为 \frac{W}{4}\times\frac{W}{4}\times d 的特征图,自注意力的复杂度为 O\left ( \left ( \frac{H}{4}\times\frac{W}{4} \right ) ^{2}d\right ),考虑到 min(H, W) 为 800 或什至更大,导致时间和内存成本爆炸式增长物体检测。接下来,我们将描述我们如何通过提出的焦点自注意力来解决这个问题。

2.2 Focal self-attention 

        在本文中,我们提出了 focal self-attention 以使 Transformer 层可扩展到高分辨率输入。我们提出只在局部注意细粒度token,在全局进行汇总,而不是计算所有细粒度token。因此,它可以覆盖与标准自注意力一样多的区域,但成本要低得多。在图 3 中,当我们逐渐添加更多参与标记时,我们显示了标准自注意力和 focal self-attention的感受野区域。对于 query 位置,当我们对其较远的环境使用逐渐粗粒度时,focal self-attention 可以具有明显更大的感受野,但代价是要注意与基线相同数量的 token 。 

         我们的 focal mechanism 能够以更少的时间和内存成本实现长程自注意力,因为它关注的周围(汇总的)token 数量要少得多。然而,在实践中,为每个 query 位置提取周围的 tokens 会耗费大量时间和内存,因为我们需要为所有可以访问它的 queries 复制每个token。这个实际问题已被许多先前的作品 [59, 80, 44] 注意到,常见的解决方案是将输入特征映射划分为窗口。受他们的启发,我们采取在窗口级别执行 focal self-attention。

        给定 x\in R^{M\times N\times d} 的空间大小为 M × N 的特征图,我们首先将其划分为大小为 s_{p} \times s_{p} 的窗口网格。然后,我们找到每个窗口的周围环境而不是单个 token 。在下文中,我们详细阐述了 window-wise focus self-attention。

 2.2.1 Window-wise attention

        图 4 显示了所提出的基于窗口的 focal self-attention 的图示。为了清楚起见,我们首先定义了三个术语:

  • Focal levels L - 我们为焦点自注意力提取标记的粒度级别数。例如,在图 1 中,我们总共显示了 3 个焦点级别。
  • Focal window size s^{l}_{w} – 我们在级别 l ∈ { 1, ..., L } 获得汇总标记的子窗口的大小,对于图 1 中的三个级别分别为 1、2 和 4。
  • Focal region size s^{l}_{r} – l 层关注区域水平和垂直方向的子窗口数量,图1中从1层到3层分别为3、4和4。

通过以上三个术语 { L, s^{l}_{w} , s^{l}_{r} } ,我们可以指定我们的 focal self-attention 模块,主要分为两个步骤:

Sub-window pooling. 假设输入特征图 x\in R^{M\times N\times d},其中 M × N 是空间维度,d 是特征维度。我们对所有 L 级别执行子窗口池化。对于focal level l,我们首先将输入特征图 x 分成大小为 s^{l}_{w}\times s^{l}_{w} 的子窗口网格。然后我们使用一个简单的线性层 f_{p}^{l} 通过以下方式在空间上池化子窗口:

x^{l}=f_{p}^{l}(\hat{x})\in R^{\frac{M}{s_{w}^{l}}\times \frac{N}{s_{w}^{l}}\times d},\ \ \hat{x}=Reshape(x)\in R^{(\frac{M}{s_{w}^{l}}\times \frac{N}{s_{w}^{l}}\times d)\times(s_{w}^{l}\times s_{w}^{l})}

        不同level l 的 pooled 特征图 \left \{ x^{l} \right \}^{L}_{1} 提供了丰富的细粒度和粗粒度信息。由于我们将 s^{l}_{w} 设置为与输入特征图具有相同粒度的第一个焦点级别,因此无需执行任何子窗口池化。考虑到 focal window 的大小通常非常小(在我们的设置中最大为 7),这些子窗口池引入的额外参数的数量可以忽略不计。

Attention computation. 一旦我们获得了在所有 L levels 的 pooled 特征图 \left \{ x^{l} \right \}^{L}_{1} ,我们使用三个线性投影层 f_{q},f_{k}.f_{v} 计算第一层的 query 和所有层的 key 和 value :

Q=f_{q}(x^{1}),\ K=\left \{ K^{l} \right \}_{1}^{L}=f_{k}(\left \{ x^{1},\cdot \cdot \cdot x^{L} \right \}),\ \ V=\left \{ V^{l} \right \}_{1}^{L}=f_{v}(\left \{ x^{1},\cdot \cdot \cdot x^{L} \right \})

        为了执行 focal self-attention,我们需要首先为特征图中的每个 query token 提取周围的 tokens 。正如我们之前提到的,窗口分区 s_{p}\times s_{p} 内的 tokens 共享同一组环境。对于第 i 个窗口 Q_{i}\in R^{s_{p}\times s_{p}\times d} 内的 queries,我们从 query 所在窗口周围的 K^{l}V^{l} 中提取 s^{l}_{r}\times s^{l}_{r} 的 keys 和 values,然后收集 keys 和 values 从所有 L 的值得到 K_{I}=\left \{ K_{i}^{1},\cdot \cdot \cdot K_{i}^{L} \right \}\in R^{s\times d}V_{I}=\left \{ V_{i}^{1},\cdot \cdot \cdot V_{i}^{L} \right \}\in R^{s\times d} ,其中 s 是来自所有 levels 的focal ragion 的总和,即 s=\sum^{L}_{l=1}(s^{l}_{r})^{2} 。请注意,图 1 之后的 focal self-attention 的严格版本需要排除不同级别的重叠区域。在我们的模型中,我们有意保留它们以捕获重叠区域的金字塔信息。最后,我们按照 [44] 包括相对位置偏差并通过以下方式计算 Q_{i} 的 focal self-attention :

Attention(Q_{i},K_{i},V_{i})=Softmax(\frac{Q_{i}K_{i}^{T}}{\sqrt{d}}+B)V_{i}

        其中 B=\left \{ B^{l} \right \}^{L}_{1} 是可学习的相对位置偏差。它由 L 个 L focal levels 的子集组成。类似于[44],对于第一层,我们将其参数化为 B^{1} \in R^{(2s_{p} -1)\times(2s_{p} -1)} ,考虑到水平和垂直位置范围都在 \left [ -s_{p}+1,s_{p}-1 \right ] 。对于其他 focal levels,考虑到它们对 queries 具有不同的粒度,我们平等对待窗口内的所有 queries,并使用 B^{l} \in R^{s_{r}^l\times s_{r}^l} 来表示 query 窗口与每个池化的 s_{r}^{l}\times s_{r}^{l} 之间的相对位置偏差 tokens。由于每个窗口的 focal self-attention 独立于其他窗口,我们可以并行计算atten。一旦我们为整个输入特征图完成它,我们将它发送到 MLP 块以像往常一样进行计算。

2.2.2 Complexity analysis

        我们分析了上述两个主要步骤的计算复杂度。对于输入特征图 x \in R^{M\times N\times d} ,我们在focal level 1 有 \frac{M}{s^{l}_{w}}\times \frac{N}{s^{l}_{w}} 个子窗口。对于每个子窗口,池化操作的复杂度为 O((s_{w}^{l})^2d)。聚合所有子窗口给我们带来了 O((MN)d)。然后对于所有focal levels,我们总共有 O(L(MN)d) 的复杂性,它与每个 focal  levels 的子窗口大小无关。关于注意力计算,对于 s_{p}\times s_{p} 窗口的计算成本为 O((s_{p})^2\sum_{l}(s^l_{r})^2d) ,而整个输入特征图的计算成本为 O(\sum_{l}(s^l_r)^2(MN)d) 。综上所述,我们的 focal self-attention 的总体计算成本变为 ​​​​​​​O((L+\sum_l(s^l_r)^2)(MN)d)。在极端情况下,可以设置 s^l_r=2max(M,N)/s^L_w 以确保该level 中所有queries(包括角落部分和中间部分)的全局接受域。

2.3 Model configuration

         Focal Transformer 考虑了三种不同的网络配置。在这里,我们简单地遵循之前作品 [63、67、44] 建议的设计策略,尽管我们认为应该有更好的配置专门针对我们的 focal Transformers。具体来说,我们使用与 Swin Transformer [44] 中的 Tiny、Small 和 Base 模型类似的设计,如表 1 所示。我们的模型将 224 × 224 图像作为输入,窗口分区大小也设置为 7 以使我们的模型堪比 swin 。对于 focal self-attention 层,我们引入了两个 levels,一个用于细粒度局部注意力,一个用于粗粒度全局注意力。除了最后一个 stage,focal ragion 大小始终设置为 13,窗口分区大小为 7,这意味着我们为每个窗口分区扩展 3 个 token 。对于最后一个 stage ,由于整个特征图为 7×7,因此第 0 级的 focal ragion 大小设置为 7,足以覆盖整个特征图。对于粗粒度全局注意力,我们将其 focal window大小设置为窗口分区大小 7,但逐渐减小 focal ragion 大小以获得四个 stage 的 {7, 5, 3, 1}。对于patch embedding层,四个阶段的空间缩减率均为{4,2,2,2},而Focal-Base相比Focal-Tiny和Focal-Small具有更高的隐藏维度。 

3. Related work  

        Vision Transformers. Vision Transformer (ViT) 首次在 [23] 中引入。它应用最初为 NLP [60] 开发的标准 Transformer 编码器,通过类似地分割图像转换成一系列视觉 token来编码图像。当使用足够的数据 [23] 和仔细的数据增强和正则化 [57] 进行训练时,它在多个图像分类基准上证明了优于 ResNet [34] 等卷积神经网络 (CNN) 的性能。这些进步进一步激发了 transformer 在图像分类以外的各种视觉任务中的应用,例如自监督学习 [16、10、40]、目标检测 [9、91、84、20] 和语义分割 [61、65、86] ].除了下游任务,另一条工作重点是从不同角度改进原始 ViT,例如数据高效训练[57]、改进的补丁嵌入/编码[18、75、32],将卷积投影集成到转换器中[ 67, 74],用于高分辨率视觉任务的多尺度架构和高效自注意力机制 [63, 67, 44, 80, 17]。我们建议读者参考 [37, 31, 37] 进行综合调查。本文重点是通过提出的 focal self-attention 机制提高视觉转换器的一般性能。在下文中,我们特别讨论了与注意力机制最相关的工作。  

        Efficient global and local self-attention. Transformer 模型通常需要处理大量的 token,例如 NLP 中的长文档和 CV 中的高分辨率图像。最近,提出了各种有效的自注意机制来克服普通自我注意中的二次计算和内存成本。一方面,NLP 和 CV 中的许多工作通过参与下采样/汇总的标记来求助于粗粒度的全局自注意力,同时保留长程交互 [50、47、63、67、32]。尽管这种方法可以提高效率,但它丢失了 query token 周围的详细上下文。另一方面,局部细粒度注意力,即在恒定窗口大小内关注相邻标记,是语言 [3, 78, 1] 和视觉 [59, 44, 80] 的另一种解决方案。在本文中,我们认为两种类型的注意力都很重要,全注意力 ViT 模型确实已经学习了这两种类型,如图 1 左所示。 这也得到了最近先进的 CNN 模型 [36、66、64、71、2、8、52] 的支持,这表明全局注意力或交互可以有效地提高性能。我们提出的 focal self-attention 是第一个在单个 transformer 层中协调全局和局部 self-attention 的方法。它可以捕获局部和全局交互作为普通的全注意力,但以更有效和有效的方式,特别是对于高分辨率输入。 

4. Experiments 

4.1 Image classification on ImageNet-1K

        我们比较了 ImageNet-1K [21] 上的不同方法。为了公平比较,我们遵循 [57、63] 中的训练方法。所有模型都训练了 300 个周期,批量大小为 1024。初始学习率设置为 10 -3,从 10 -5 开始进行 20 个线性预热周期。为了优化,我们使用 AdamW [45] 作为带有余弦学习率调度器的优化器。权重衰减设置为 0.05,最大梯度范数被限制为 5.0。在排除随机擦除 [87]、重复增强 [4, 35] 和指数移动平均线 (EMA) [49]。对于我们的微型模型、小型模型和基本模型,随机深度下降率分别设置为 0.2、0.2 和 0.3。在训练期间,我们将图像随机裁剪为 224 × 224,而在验证集评估期间使用中心裁剪。

        在表 2 中,我们总结了基线模型和图像分类任务的当前最先进模型的结果。我们可以发现我们的 Focal Transformers 始终优于具有相似模型大小 (#Params.) 和计算复杂度 (GFLOPs) 的其他方法。具体来说,Focal-Tiny 比 Transformer 基线 DeiT-Small/16 提高了 2.0%。同时,使用相同的模型配置 (2-2-6-2) 和一些额外的参数和计算,我们的 Focal-Tiny 比 Swin-Tiny 提高了 1.0 个百分点 (81.2% → 82.2%)。当我们将窗口大小从 7 增加到 14 以匹配 ViL-Small [80] 中的设置时,性能可以进一步提高到 82.5%。对于小型和基本型号,我们的 Focal Transformers 的性能仍然比其他的略好。值得注意的是,我们的 51.1M 参数的 Focal-Small 可以达到 83.5%,这比所有使用更少参数的对应小型和基础模型都要好。当进一步增加模型尺寸时,我们的 Focal-Base 模型达到了 83.8%,超过了使用可比参数和 FLOPs 的所有其他模型。我们建议读者参阅我们的附录以进行更详细的比较。 

4.2 Object detection and instance segmentation

         我们使用 COCO 2017 [43] 对我们的对象检测模型进行基准测试。预训练模型用作视觉主干,然后插入两个代表性管道,RetinaNet [42] 和 Mask R-CNN [33]。所有模型都在 118k 训练图像上训练,结果在 5K 验证集上报告。我们按照标准使用两个训练时间表,1× schedule with 12 epochs 和 3× schedule with 36 epochs。对于 1× schedule,我们将图像的短边调整为 800,同时保持其长边不超过 1333。对于 3× schedule,我们使用多尺度训练策略,通过随机将其短边调整到 [480, 800] 的范围。考虑到这种更高的输入分辨率,我们自适应地将四个阶段的焦点大小增加到(15、13、9、7),以确保焦点注意力覆盖超过一半的图像区域(前两个阶段)到整个图像(最后一个两个阶段)。随着焦点尺寸的增加,相对位置偏差相应地使用双线性上采样到相应的尺寸 插值。在训练期间,我们使用 AdamW [45] 进行优化,初始学习率为 10 -4,权重衰减为 0.05。同样,我们分别使用 0.2、0.2 和 0.3 的随机深度下降率来规范我们的微型、小型和基础模型的训练。由于 Swin Transformer 不报告 RetinaNet 上的数字,我们使用他们的官方代码使用与我们的 Focal Transformers 相同的超参数自行训练它。 

        在表 3 中,我们展示了基于 CNN 的模型和当前基于 Transformer 的最先进方法的性能。报告了 bbox mAP (AP b ) 和 mask mAP (AP m )。我们的 Focal Transformers 始终优于基于 CNN 的模型,差距为 4.8-7.1 点。与同样使用多尺度 Transformer 架构的其他方法相比,我们仍然观察到在所有设置和指标上都有可观的收益。特别是,在可比较的设置下,我们的 Focal Transformers 相对于当前最佳方法 Swin Transformer [44] 带来了 0.7-1.7 点的 mAP。与其他多尺度 Transformer 模型不同,我们的方法可以同时为每个视觉标记启用短程细粒度和远程粗粒度交互,从而在每一层捕获更丰富的视觉上下文以实现更好的密集预测。为了进行更全面的比较,我们进一步用 3× schedule 训练它们,并在表 4 中显示了 RetinaNet 和 Mask R-CNN 的详细数字。为了便于理解, 我们还列出了每个模型的参数数量和相关的计算成本。正如我们所看到的,即使是 3× schedule,我们的模型仍然可以在可比较的设置下比最好的 Swin Transformer 模型获得 0.3-1.1 的增益。 

        为了进一步验证我们提出的 Focal Transformer 的有效性,我们按照 [44] 训练四种不同的物体检测器,包括 Cascade R-CNN [7]、ATSS [81]、RepPoints [72] 和 Sparse R-CNN [55]。我们使用 Focal-Tiny 作为主干并使用 3× 时间表训练所有四个模型。表 5 报告了 COCO 验证集上的框 mAP。正如我们所见,我们的 Focal-Tiny 在所有方法上都超过 SwinTiny 1.0-2.3 点。除了 RetinaNet 和 Mask RCNN 之外,这些对不同检测方法的显着且一致的改进表明我们的 Focal Transformer 可以用作各种对象检测方法的通用主干。

        除了上面的实例分割结果,我们还进一步评估了我们的语义分割模型,这是一项通常需要高分辨率输入和远程交互的任务。我们在 ADE20K [88] 上对我们的方法进行了基准测试。具体来说,我们使用 UperNet [68] 作为分割方法,我们的 Focal Transformers 作为主干。我们分别使用 Focal-Tiny、Focal-Small、Focal-Base 训练三种模型。对于所有模型,我们通过将输入大小设置为 512 × 512 来使用标准配方,并训练模型进行 160k 次迭代,批量大小为 16。在表 7 中,我们显示了与之前作品的比较。正如我们所见,我们的微型、小型和基础模型在单尺度和多尺度 mIoU 上始终优于具有相似尺寸的 Swin Transformers。

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

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

相关文章

xss-labs/level7

我们如同一下构造那样 <script>alert(xss)</script> 产生以下回显 接着查看源代码 发现第一个输出点被转义了 没有利用价值了 第二个输出点则是可以发现script关键字直接给干没了 氧化钙!!! 似此 如何处之&#xff1f; 我们猜测后台服务器还是对一些特殊字符进…

hiveSql 相互关注问题

hiveSql 相互关注问题说明需求分析优化实现最后说明 普遍社交软件上会有关注功能&#xff0c;如何知道自己的关注是否也是关注了自己呢&#xff1f; 需求 求关注结果数据中&#xff0c;相互关注的用户对。 数据如下&#xff1a; follow表&#xff1b;from_user&#xff1a;关…

人才资源开发杂志人才资源开发杂志社人才资源开发编辑部2022年第21期目录

开卷有益《人才资源开发》投稿&#xff1a;cnqikantg126.com 年轻干部要走好成长成才之路 赖宁; 1 特别关注 迎难而上 勇担重任 推进河南人事考试高质量发展 常万琦; 6-7 工作要闻 第五届中国河南招才引智创新发展大会开幕 归欣 ;张笑闻; 8 河南省12家企业和2个…

Playwright 简明入门教程:录制自动化测试用例,结合 Docker 使用

本篇文章聊聊如何使用 Playwright 进行测试用例的录制生成&#xff0c;以及如何在Docker 容器运行测试用例&#xff0c;或许是网上最简单的入门教程。 写在前面 Playwright 是微软出品的 Web 自动化测试工具和框架&#xff0c;和 Google Puppeteer 有着千丝万缕的关系。前一阵…

电脑密码忘了怎么解除?最简单操作的方法

可能很多人都遇到过这种情况&#xff1a;忘记了电脑密码。电脑密码忘了怎么解除&#xff1f;大多数人都不知道如何解决。下面就为大家分享一下电脑密码忘记怎么解决的方法&#xff0c;方法主要分为两种情况&#xff1a;一种情况是&#xff0c;电脑开机下忘记密码&#xff1b;另…

Cpp知识点系列-类型转换

前言 在做题的时候发现了需要用到类型转换&#xff0c;于是在这里进行了简单的记录。 历史原因&#xff0c;慢慢整理着发现类型转换也能写老大一篇文章了。又花了时间来梳理一下就成了本文了。 cpp 之前使用的环境是DEV-C 5.4&#xff0c;而对应的GCC版本太低了。支持c11需要…

智慧环卫管理系统解决方案(垃圾分类)

1.1 垃圾分类管理子系统 1.1.1 公众参与互动平台 可为客户量身打造微信公众号&#xff0c;搭建互动交流的平台&#xff0c;更好的调动居民参与垃圾分类的热情。 1.1.1.1 分类指导 将目前城市的垃圾处理情况、垃圾分类现状、分类的意义&#xff0c;以数据来说明垃圾分类的…

【设计】OOA、OOD、OOP

这三者都是 OO&#xff08;Object-Oriented&#xff09;领域的思想。 一般我们我们接到产品经理的需求后&#xff0c;开发阶段分这样几个步骤&#xff1a; 可行性预研阶段&#xff0c;此阶段评估需求是否合理&#xff0c;能否实现&#xff1b;OOA阶段&#xff0c;此阶段分析用…

语文课内外杂志语文课内外杂志社语文课内外杂志社2022年第14期目录

幼儿教育《语文课内外》投稿&#xff1a;cn7kantougao163.com 家园协同视域下幼儿心理危机的预防与干预对策 曹锭1-3 幼小衔接阶段幼儿时间观念的培养对策 陈晶晶4-6 有效支持 助力幼儿在书海中徜徉 胡玲珊7-9 东西部幼儿园结对帮扶,助力乡村教育扶贫——以广州市人民政府机关幼…

多线程(2)

文章目录前言 &#xff1a;1.Thread类 &#xff1a;1.1 Thread类常见的构造方法1.2 Thread的几个常见属性1.3 中断一个线程1.4 等待一个线程-join()1.5 获取当前线程引用1.6 休眠当前线程2.线程状态前言 &#xff1a; 简单回顾上文知识点 上文我们了解了 线程是为解决并发编程引…

Java数据审计工具:Envers and JaVers比较

在Java世界中&#xff0c;有两种数据审计工具&#xff1a;Envers和JaVers。 Envers已经存在了很长时间&#xff0c;它被认为是主流。 JaVers提供全新的方法和技术独立性。 如果您考虑哪种工具更适合您的项目&#xff0c;本文是一个很好的起点。 本文分为三个部分。首先&#x…

[附源码]计算机毕业设计springboot餐馆点餐管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【新知实验室-TRTC开发】实时音视频之欢度世界杯

目录 一、什么是TRTC 二、用5分钟跑通一个demo 1、开通腾讯云-TRTC 2、获取demo必须的两把钥匙 2.1输入应用名称 2.2下载对应的源码包&#xff08;手机、web、小程序等&#xff09; 2.3拿到钥匙 2.4完成 三、搭建一起看世界杯应用 1、解压源码&#xff08;耗时30S&#x…

[附源码]计算机毕业设计springboot房屋租赁系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

MySQL为自动编号的字段赋值

insert users values(NULL,ming,fasdfasdfasd,22,1); 或者 insert users values(DEFAULT,ming,fasdfasdfasd,22,1);

网络的根基

hi 大家好&#xff0c;上个周末带小伙伴&#xff0c;一起复习了一遍网络协议&#xff0c;对网络协议的核心知识进行梳理&#xff0c;希望大家早日掌握这些核心知识&#xff0c;打造自己坚实的基础&#xff0c;为自己目标慢慢积累&#xff0c;等到自己春天的到来。详细点击查看…

zabbix拓扑图和聚合图形

目录 一、环境准备 1、搭建zabbix基础环境 2、创建被监控主机 二、拓扑图 1、拓扑图作用 2、拓扑图绘制步骤 三、聚合图形 1、聚合图形的作用 2、创建聚合图形 一、环境准备 1、搭建zabbix基础环境 zabbix基础环境部署参照&#xff1a;zabbix基础环境部署_桂安俊kyli…

Day14--商品详情-渲染商品详情的数据并优化详情页的显示

提纲挈领&#xff1a; 那么如何在小程序中将这些html的字符串渲染成这莫好看的结构呢&#xff1f; 官方文档&#xff1a;【使用uni-ui组件库中的rich-text组件】 1.渲染商品详情信息 我的操作&#xff1a; 1》在页面结构中&#xff0c;使用 rich-text 组件&#xff0c;将带有…

计算机网络第五章知识点回顾(自顶向下)

1. 网络层控制面 1.1 网络层功能 1.2选路问题 选路问题的描述&#xff1a; 给定一组路由器和连接路由器的链路&#xff0c;寻找一条从源路由器到目的路由器的最佳路径。 1.3 什么是最佳路径&#xff1f; 1.4 图抽象 1.5 选路算法分类 1.6 链路状态&#xff08;LS&#xff0…

[附源码]计算机毕业设计springboot飞越青少儿兴趣培训机构管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…