CVPT: Cross-Attention help Visual Prompt Tuning adapt visual task

论文汇总

当前的问题

图1:在VTAB-1k基准测试上,使用预训练的ViT-B/16模型,VPT和我们的CVPT之间的性能和Flops比较。我们将提示的数量分别设置为1、10、20、50,100,150,200。

如图1所示,当给出大量提示时,VPT显示了性能的显著下降和成本的增加。考虑到这一点,我们认为当给出大量提示时,VPT是不可用的

对之前VPT的分析

庞大的计算量

在计算自注意力时,需要计算每个令牌与所有其他令牌之间的注意力。它的计算复杂度是 n 2 n^2 n2,其中 n n n 是嵌入令牌的数量。若 m m m 表示插入的提示令牌数,则VPT中自注意的计算复杂度可表示为 ( n + m ) 2 {(n + m)}^2 (n+m)2。这大大增加了计算开销,特别是在使用大量提示令牌时。

自注意力关注不均衡

图2:提示令牌和嵌入令牌获得的自关注权重。我们将 c l s t o k e n cls_{token} clstoken 的自我关注形象化,并将自身排除在外,以观察 c l s t o k e n cls_{token} clstoken 对其他 token 的关注。颜色越深,重量越大。在给出196个提示时,提示获得的注意权重超过80%,这极大地影响了嵌入令牌获得的自我注意。

随着提示数量的增加,提示权重值之和超过0.8,是嵌入令牌权重值的4倍以上,严重干扰了嵌入令牌之间的自关注。这解释了为什么VPT性能会随着提示数量的增加而大幅下降

我的思考:VPT这种现象是正常的,因为我们只训练提示,提示越多,模型的注意力逐步往prompt靠,而逐步不关注模型中被冻结的预训练参数。

解决办法

对应公式如下所示:

核心就是 S e l f A t t e n t i o n ( X , P r o m p t ) SelfAttention(X,Prompt) SelfAttention(X,Prompt) 转化为 C r o s s A t t e n t i o n ( X , P r o m p t ) CrossAttention(X,Prompt) CrossAttention(X,Prompt)

摘要

近年来,模型规模的迅速扩大导致大规模预训练模型显示出显着的能力。因此,出现了增加模型规模的趋势。然而,这种趋势带来了重大的挑战,包括大量的训练和转移到下游任务的计算成本。为了解决这些问题,引入了参数有效微调(PEFT)方法。这些方法通过微调一组选定的参数来优化特定任务的大规模预训练模型。在这些PEFT方法中,基于适配器的方法和基于提示的方法是主要的技术。具体来说,在视觉微调领域,适配器比提示符更受重视,因为后者的性能和效率相对较弱。

在这种情况下,我们改进了广泛使用的视觉提示调谐(VPT)方法,提出了交叉视觉提示调谐(CVPT)方法。CVPT计算提示标记和嵌入标记之间的交叉注意,使我们能够计算它们之间的语义关系,并精确地对模型进行微调,以更好地适应视觉任务。此外,我们引入了权重共享机制来初始化交叉注意的参数,避免了交叉注意产生的大量可学习参数,增强了交叉注意的表征能力。我们在25个数据集上进行了全面的测试,结果表明CVPT显著提高了VPT在视觉任务中的性能和效率。例如,在VTAB-1K基准测试中,CVPT的平均准确率比VPT高出4%以上,在性能和效率方面可与先进的基于适配器的方法相媲美。我们的实验证实,基于提示的方法在视觉微调方面可以取得优异的效果。代码可在https://github.com/Xlgsyzp/CVPT/tree/main上获得。

1.介绍

增加模型的尺度是提高模型性能的常用方法[35][9][28][29]。近年来,随着计算设备的快速发展,模型尺寸显著增加[45][6][17][47]。例如,OpenAI开发的GPT系列参数在短短五年内从1.17亿个激增到1.8万亿[36][37][2]。参数数量的迅速增加将导致巨大的计算开销问题。因此,使用全调优方法使这些模型适应下游任务将产生巨大的成本。为了解决这个问题,人们提出了PEFT方法[20][27][1][38][5]。PEFT通过微调包含更少参数的模型子集,以更有效的方式将那些大规模预训练的模型适应下游任务。PEFT中两种主流的方法是Adapter[19]和Prompt[27]。在训练过程中,适配器插入到每个transformer块并调优这些适配器,而Prompt将提示令牌插入到嵌入的令牌中以更新提示令牌。

图1:在VTAB-1k基准测试上,使用预训练的ViT-B/16模型,VPT和我们的CVPT之间的性能和Flops比较。我们将提示的数量分别设置为1、10、20、50,100,150,200。

VPT是Jia等[22]首先提出的用于视觉微调任务的基于提示的方法。然而,基于适配器的方法由于其优越的性能而成为研究热点。尽管一些研究已经提高了VPT的性能[21][13][7],但要与基于适配器的方法的有效性相匹配仍然具有挑战性。人们似乎一致认为,在视觉领域,基于提示的方法不如基于适配器的方法。但事实果真如此吗?我们对VPT进行了广泛的实验和分析,以揭示其性能较适配器弱的原因。根据我们的实验,我们认为VPT和适配器之间性能差异的主要原因是VPT的部署直接应用于NLP任务中[27],而没有对视觉任务进行任何适应。在NLP任务中,提示通常包含丰富的语义信息,用于指导模型的微调过程。然而,在视觉任务中,提示信息缺乏表示信息。因此,VPT有必要使用大量的提示来微调模型。然而,VPT的设计导致计算效率低下和冗余,以及嵌入式令牌之间的自关注中断3.1。如图1所示,当给出大量提示时,VPT显示了性能的显著下降和成本的增加。考虑到这一点,我们认为当给出大量提示时,VPT是不可用的

为了解决这个问题,我们重新设计了VPT并引入了跨视觉提示调优(CVPT)。对于CVPT中的提示令牌,我们计算嵌入令牌的交叉注意,并将结果作为残差添加到嵌入令牌中。这种方法避免了与提示数量二次相关的自关注的计算复杂性,并允许提示专注于嵌入的令牌,以更有效地适应下游任务。此外,通过在整个计算过程中保持令牌维度的一致性,交叉注意的结果可以直接用嵌入的令牌作为残差求和,并且不会为后续的MLP带来额外的计算开销。此外,在加载检查点期间,我们与交叉注意层共享自注意层的权重,使交叉注意层与自注意层保持冻结状态,从而消除了交叉注意对额外学习参数的需求,并利用自注意中的编码信息来帮助模型微调。

我们在25个数据集上验证了我们的方法的有效性,结果表明,与VPT相比,CVPT在性能和效率方面取得了显着提高。CVPT在19个VTAB-1K数据集上的准确率平均提高了4%,在5个FGVC数据集上提高了1%,在ADE20K数据集上提高了3%。此外,如果给出较少的提示令牌,CVPT可以达到与其他高级PEFT方法相当的性能,这些方法的性能明显优于其他基于提示的方法,并且需要更少的可学习参数。如果允许大量提示,我们的CVPT在FGVC和ADE20K数据集上的性能优于SOTA方法。此外,尽管插入了大量提示,但与VPT相比,它不会带来太多额外的计算开销。

最后,我们探讨了部署位置和权重分配机制的有效性的影响。上述实验结果充分说明了模型的改进,表明基于提示符的方法也可以与基于SOTA适配器的方法相媲美。

•我们对VPT在视觉任务中的应用进行了详细的分析,并提出其缺点可以总结为三点,即缺乏适应性,计算效率低下和冗余,破坏自我注意。

•我们提出CVPT,它引入了交叉关注和权重共享机制,避免了VPT带来的效率和性能问题,它允许我们使用更多的提示来有效地提高性能。

•我们在25个数据集上进行了不同下游任务的实验。结果表明,我们的方法在性能和效率方面明显优于原始的VPT和其他基于提示的工作。它也可以与基于SOTA适配器的方法相媲美,证明了基于提示的视觉微调方法的可用性。

2.相关工作

PEFT 在CNN时代,制作更大更深的模型是提高性能的有效途径[26][16][43]。随着transformer的兴起,这一趋势变得更加流行。ChatGPT的引入进一步巩固了社区开发更大、更强大模型的目标。然而,受其规模的限制,尽管这些大型模型具有强大的性能和通用性,但很难通过使用传统范式(全调优)来适应下游任务。因此,NLP研究者首先提出了PEFT方法。他们的研究表明,在大规模预训练模型中微调少量参数可以达到与完全调整几乎相同的性能。受NLP成功的鼓舞,研究者开始将PEFT应用于不同视觉任务的大规模视觉模型[8][44]。经过几年的发展,主流的PEFT方法大致可以分为基于适配器的方法和基于提示符的方法。

适配器 Jie等[19]提出在网络中插入适配器以有效地微调模型。这些适配器通常是一个小型网络,通常包含一个上采样层和一个下采样层。在通过上采样和下采样层后,输入与比例因子 γ \gamma γ 相乘,然后将结果作为残差添加到输入中。适配器的一般形式可表示为:

式中, X i n X_{in} Xin 为Adapter的输入, γ \gamma γ 为Adapter的比例因子, W u p W_{up} Wup W d o w n W_{down} Wdown 分别对应上采样层和下采样层。一些作品对基于适配器的可视化任务进行了一些调整,开发了AdaptFormer [4], LoRA[20]和RepAdapter[30]等几个变体。这些基于适配器的方法在视觉微调领域占据主导地位。

提示 提示符最初用于NLP领域,它被添加到输入文本中用于理解任务。Lester等人[27]提出将提示符视为连续向量,并通过更新其梯度对模型进行微调。Jia等[22]首次将这一概念引入到视觉微调中,并将其命名为VPT。如图3所示,嵌入令牌在进入每个transformer块前与提示令牌拼接,使其参与到transformer块内的每一层网络中。在进入下一个transformer块之前,丢弃前一层的提示令牌,重新将新的提示令牌与嵌入的令牌拼接(VPT-Deep)。其公式如下所示:

其中,红色和蓝色分别表示可学习参数和冻结参数。 P P P 为可学习的 d d d 维向量, X X X 为CLS令牌, E E E 为修补后的图像。尽管存在基于VPT的改进变体,如E2VPT[13]、EXPRESS[7]和DAM-VP[21],但基于提示符的方法和基于适配器的方法之间仍然存在性能差距。

3.方法

3.1 之前VPT分析

首先,我们对VPT进行了深入的分析,探究为什么它在性能和效率方面不如适配器,我们的分析有三点:

缺乏对视觉任务的适应。在NLP中,每个标记代表一个具有丰富语义信息的实际单词。因此,连接提示标记和嵌入标记的处理是自然的,适合于NLP任务。然而,在视觉任务中,与自然语言处理相比,标记表示图像补丁并包含稀疏的语义信息。因此,简单地将提示令牌与嵌入的令牌拼接可能无法提供足够的指导信息。此外,视觉任务通常需要对图像的空间关系和结构特征有更深的理解,这很难用提示符号实现。

计算效率低下和冗余。在计算自注意力时,需要计算每个令牌与所有其他令牌之间的注意力。它的计算复杂度是 n 2 n^2 n2,其中 n n n 是嵌入令牌的数量。若 m m m 表示插入的提示令牌数,则VPT中自注意的计算复杂度可表示为 ( n + m ) 2 {(n + m)}^2 (n+m)2。这大大增加了计算开销,特别是在使用大量提示令牌时。此外,我们发现提示令牌涉及到MLP计算过程,这不仅增加了计算开销,而且不会影响结果。我们的实验表明,在自我注意之后去除提示符号不会影响结果。

破坏嵌入令牌之间的自我关注。在softmax之后,所有令牌的权重之和归一化为1。然而,由于提示标记的增加,嵌入标记的权重之和被提示标记降低,这对应于嵌入标记之间的自注意表征能力减弱。由于提示令牌最终会被移除,这相当于将嵌入令牌之间的自关注结果乘以一个小于1的因子。为了探索这种影响有多大,我们将提示数分别设置为1,5,20,50,100,150,196,并将softmax函数后的张量可视化,结果如下图2所示。

图2:提示令牌和嵌入令牌获得的自关注权重。我们将 c l s t o k e n cls_{token} clstoken 的自我关注形象化,并将自身排除在外,以观察 c l s t o k e n cls_{token} clstoken 对其他token的关注。颜色越深,重量越大。在给出196个提示时,提示获得的注意权重超过80%,这极大地影响了嵌入令牌获得的自我注意。

随着提示数量的增加,提示权重值之和超过0.8,是嵌入令牌权重值的4倍以上,严重干扰了嵌入令牌之间的自关注。这解释了为什么VPT性能会随着提示数量的增加而大幅下降

3.2 交叉视觉提示调优

Cross-Attention。与计算输入序列中每个元素之间关系的自注意[40]不同,交叉注意计算两个不同序列上的注意,以处理它们之间的语义关系[3]。例如,在翻译任务中,交叉注意用于计算源语言句子和目标语言句子之间的注意权重。在我们的方法中,我们引入交叉注意来处理嵌入标记和提示标记之间的语义关系,指导模型的微调。具体来说,交叉注意的输入由 X 1 X_1 X1 X 2 X_2 X2两部分组成,其中 X 1 ∈ R n × d 1 , X 2 ∈ R n × d 2 X_1 \in \mathbb{R}^{n\times d_1},X_2 \in \mathbb{R}^{n\times d_2} X1Rn×d1,X2Rn×d2 X 1 X_1 X1 作为查询集, X 2 X_2 X2 作为键值集。设 Q = X 1 W Q , K = V = X 2 W K Q=X_1W^Q,K=V=X_2W^K Q=X1WQ,K=V=X2WK,且交叉注意可以表示为:

其中 W Q ∈ R d 1 × d k , W K ∈ R d 2 × d k W^Q \in {R}^{d_1\times d_k},W^K \in {R}^{d_2\times d_k} WQRd1×dk,WKRd2×dk 为学习到的投影矩阵, d k d_k dk 为value-key集合的维数。在我们的方法中, d 1 = d 2 = d k d_1=d_2=d_k d1=d2=dk。输出的形状是 n × d k n\times d_k n×dk,这和 X 1 X_1 X1 是一致的。

图3:VPT和CVPT的结构比较。其中,蓝色表示冻结参数,橙色表示可学习参数。

Cross Visual Prompt Tuning. 我们重新设计了提示符,以更好地适应视觉任务,并提出了CVPT。如图3所示,我们的方法遵循VPT,网络的主要参数保持冻结,只有最终分类层和提示符是可训练的。关键的区别在于,我们允许提示令牌与嵌入令牌进行交叉注意,并且交叉注意的结果作为残差与嵌入令牌一起添加。这个操作有助于提示符适应视觉任务,我们将在第4.2节中演示这个改进有多重要。具体地说,对于transformer块的任意输入 x i x_i xi ,前向传播可以表示为:

其中,蓝色表示冻结参数,红色表示可训练参数,SA表示自注意,CA表示交叉注意,LN表示层归一化。

在CVPT中,我们只引入与提示令牌数量相关的线性计算开销。它允许CVPT使用大量的提示令牌,通过引入可接受的开销来提高性能。此外,CVPT保留了原始的自注意过程,保留了嵌入令牌的完整表示能力。我们将在3.3节中演示VPT在性能和效率方面的改进。最后,我们将嵌入令牌设置为查询集,将提示令牌设置为键值集,这样可以保持通道数的统一性,从而可以直接将交叉关注的结果与输入作为残差项求和。

Weight-sharing机制。交叉注意的使用需要大量的可学习参数(通常为模型参数数的30%以上),这对计算开销造成了很大的挑战。因此,如果它们的参数是可调的,则CVPT的计算开销甚至可以与使用全调优的计算开销相媲美。因此,我们引入了权重共享机制。由于交叉注意的结构与自我注意的结构相同,我们认为自我注意的权重对交叉注意的微调也具有指导意义。因此,在加载检查点时,我们使用自注意参数初始化交叉注意的权重。它避免了在交叉注意中引入大量的可学习参数,保持了CVPT的效率。我们在4.3中探讨了权重共享的影响,并证明了冻结交叉注意比可学习交叉注意更有效

3.3 与VPT的比较

提高性能。为了研究CVPT带来了多大的改进以及提示数量对性能的影响,我们使用了不同数量的提示令牌,并分别使用VPT和CVPT在VTAB-1K上进行了实验。结果如下表1所示:

这些结果表明,除了提示数等于1之外,我们的CVPT在几乎所有情况下都获得了更好的性能。正如我们在3.1节中分析的那样,由于缺乏对视觉任务的适应,VPT代表了池绝对性能。此外,由于嵌入令牌之间的自关注被破坏,当给定大量的提示令牌时,VPT表现出明显的性能下降甚至崩溃。相反,我们的CVPT避免了这些问题。

此外,它的性能随着提示令牌数量的增加而提高。以上结果表明,提示标记和嵌入标记之间的交叉关注有助于提示适应视觉任务,并更准确地指导模型的微调。

效率的改善。为了探究CVPT在效率上的提升,我们在进行上述实验时,还记录了VPT和CVPT在训练和测试时所占用的GPU内存量,以及两者的总计算量,结果如下图4所示

图4:训练记忆、测试记忆和Flops随提示符号数量变化的趋势。其中LP表示线性探测,它只对最终分类器进行线性调整。我们在VTAB-1K中记录cifar100上的这些数据,batch_size设置为32。预训练模型为ViT-B/16。

可以看出,与VPT相比,我们的CVPT在效率上有了显著的提高,特别是在大量提示令牌的情况下。虽然与VPT相比,它在测试期间需要更多的GPU内存,但与VPT相比,这是微不足道的。此外,权重共享机制允许在工程应用中进行有针对性的优化,让交叉关注和自关注共享内存,进一步扩大了与VPT的效率差距。此外,CVPT的精心设计防止了随着提示数量的增加而导致内存和计算量的爆炸性增长。这意味着我们可以通过增加提示的数量来提高CVPT的性能,这比其他方法的计算效率更高。

总之,我们的CVPT通过引入交叉注意和权重共享机制,显著提高了VPT的性能和效率,特别是在提示数量较大的情况下。因此,它可以让我们在基于提示的方法中更有效地引入更多的提示,从而提高其性能。在下一节中,我们将演示这种改进有多大,并将其与SOTA方法进行比较。

4.实验

表2:在ImageNet-21K上预训练的ViT-B/16模型在VTAB-1k基准上的性能比较。

表3:在ImageNet-21K上预训练的ViT-B/16模型在五个FGVC数据集上的性能比较。

表4:viti - l模型下ADE20K数据集的结果。我们报告了“mIoU-SS”和“mIoU-Ms”,分别表示单尺度和多尺度

图5 (a) ViT中交叉注意的部署。可以插入五种可能的位置。我们最后的部署是深蓝色的。(b)交叉注意不同部署的业绩比较。

表5:可学习CA与权重共享的冻结CA的性能比较。

5.结论

本文对目前主流的基于提示的VPT方法进行了深入的探讨,并分析了其性能较差的原因。因此,我们提出了一种简单有效的PEFT方法CVPT,该方法引入了交叉关注模块来计算提示令牌和嵌入令牌之间的交叉关注,从而指导模型的微调。更重要的是,交叉注意的权重来自于自我注意,避免引入大量的额外注意可训练的参数和实现更好的性能。我们在25个数据集上进行了大量的实验,结果表明CVPT达到了SOTA的性能。此外,我们对CVPT进行了广泛的消融实验,证明了引入交叉注意和权重分担的影响,以及它比VPT的效率和性能改进。

我们希望我们的工作将在未来启发基于提示的PEFT方法。我们工作的一个限制是CVPT没有探索提示令牌初始化的新策略。在VPT中,作者对不同的初始化方法进行了完整的比较。在我们的工作中,我们对VPT采取了同样的策略。但是,我们仍然认为优化后的特定初始化方法优于VPT使用的一般方法。此外,这个初始化还将帮助我们理解提示是如何帮助模型微调的。

参考资料

论文下载(arixv)

https://arxiv.org/abs/2408.14961

代码地址

https://github.com/Xlgsyzp/CVPT/tree/main

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

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

相关文章

【MySQL 04】数据类型

目录 1.数据类型分类 2.数值类型 2.1 tinyint 类型 2.2 bit类型 2.3 float类型 2.4decimal 3.字符串类型 3.1 char类型 3.2 varchar类型 4.日期和时间类型 6. enum和set类型 6.1.enum和set类型简介: 6.2.enum和set的一般使用方法 6.3.用数字的方式…

如何用AI实现自动更新文章?(全自动更新网站)

AI的诞生确实给我们的生活和工作都带来了很大的改变,从我自身来讲,也渐渐习惯了遇到事情先问问AI,不管是翻译、专业性问题、PPT制作、总结写作这些,确实帮我迅速理清了思路,也可以有很多内容的借鉴。 作为一个业余爱好…

kismet和war driving具体准备(仅供无线安全学习)

war driving准备 一台笔记本 一个最好是双频的网卡,单频搜集信号少 我自己买的是http://e.tb.cn/h.grI4EmkDLOqQXHG?tkKZ5g3RVeH6f 如果经济条件允许可以去买大功率天线(我买的车载的 大概40db这样子 范围广) http://e.tb.cn/h.grCM0CQ6L…

Davinci 大数据可视化分析

Davinci 大数据可视化分析 一、Davinci 架构设计1.1 Davinci定义1.2 Davinci 应用场景 二、Davinci 安装部署2.1 部署规划2.2 前置环境准备2.3 Davinci部署2.3.1 物料准备2.3.2 安装配置 2.4 环境变量配置2.5 初始化数据库2.5.1 创建数据库及用户 2.5.2 建表2.6 初始化配置 三、…

7天速成前端 ------学习日志 (继苍穹外卖之后)

前端速成计划总结: 全26h课程,包含html,css,js,vue3,预计7天内学完。 起始日期:9.16 预计截止:9.22 每日更新,学完为止。 学前计划 课…

使用IDA Pro动态调试Android APP

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 关于 android_server android_server 是 IDA Pro 在 Android 设备上运行的一个调试服务器。 通过在 Android 设备上运行android_server,IDA Pro …

IDEA 2024.3 EAP新特征早览!

0 前言 IntelliJ IDEA 2024.3 第一个 EAP 版本已发布,提前体验 下一个重大版本的一部分改进。 持续关注 EAP 更新,未来几周内将推出更多 IntelliJ IDEA 新功能。尝试这些新功能,分享您的反馈,共同完善 IDE。 1 AI 助手 1.1 内…

计算机毕业设计之:基于微信小程序的电费缴费系统(源码+文档+讲解)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

【自动化测试】Appium Server如何安装和Appium Server安装困难的原因和解决方法以及常见的一些安装失败的错误和解决方法

引言 Appium Server安装过程时常出现问题,以下是安装Appium Server过程一些原因、常见错误和解决方法 文章目录 引言一、Appium Server如何安装1.1 Node.js 安装1.2 使用NPM安装Appium1.3 验证Appium安装1.4 运行Appium Server1.5 使用Appium Desktop(可…

Flutter 安装,配置,运行第一个app 1

起因, 目的: flutter, 其实几年前,我就写过。 当时纯属是个人兴趣,随意探索。 当时我也写了几篇笔记: 比如这一篇还有这个 flutter,其实不难,比较繁琐,小的知识点很多. flutter, 又是环境配…

独立站技能树/工具箱1.0 总纲篇丨出海笔记

正所谓要把一件事做到90分很难,但做到60分基本上照着SOP做到位都没问题,如果我们能把每件事都做到60分,那绝对比至少60%的人都强,除非你的对手不讲武德——那就是他很可能看了我这篇文章,不但每方面都超过及格线&#…

【Linux探索学习】第一弹——Linux的基本指令(上)——开启Linux学习第一篇

前言: 在进入Linux学习之前,我们首先要先做好以下两点:1、已经基本掌握C语言或C,2、已经配置好了Linux的环境,做完以上两点后我们就开始Linux的学习,今天我们首先要学习的就是Linux中最基础的操作&#xff…

网络安全-ssrf

目录 一、环境 二、漏洞讲解 三、靶场讲解 四、可利用协议 4.1 dict协议 4.2 file协议 4.3 gopher协议 五、看一道ctf题吧(长亭的比赛) 5.1环境 5.2开始测试 ​编辑 一、环境 pikachu,这里我直接docker拉取的,我只写原…

如何在SpringCloud中使用Consul进行服务发现与配置管理

Spring Cloud是一个用于构建分布式系统的开发工具包。它提供了一系列解决方案,用于在分布式系统中管理和协调服务发现、配置管理、负载均衡、容错机制等功能。Consul是一种用于服务发现、配置管理和分布式一致性的工具,与Spring Cloud可以很好地集成在一…

飞驰云联FTP替代方案:安全高效文件传输的新选择

FTP协议广泛应用各行业的文件传输场景中,由于FTP应用获取门槛低、使用普遍,因此大部分企业都习惯使用FTP进行文件传输。然而面临激增的数据量和网络安全威胁的不断演变,FTP在传输安全性与传输性能上有所欠缺,无法满足企业现在的高…

【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL77

编写乘法器求解算法表达式 描述 编写一个4bit乘法器模块,并例化该乘法器求解c12*a5*b,其中输入信号a,b为4bit无符号数,c为输出。注意请不要直接使用*符号实现乘法功能。 模块的信号接口图如下: 要求使用Verilog HDL语言实现以上…

活动目录安全

活动目录安全 1.概述2.常见攻击方式SYSVOL与GPP漏洞MS14-068漏洞Kerberoast攻击内网横移抓取管理员凭证内网钓鱼与欺骗用户密码猜解获取AD数据库文件 3.权限维持手段krbtgt账号与黄金票据服务账号与白银票据利用DSRM账号利用SID History属性利用组策略利用AdminSDHolder利用SSP…

BUUCTF [SCTF2019]电单车

使用audacity打开,发现是一段PT2242 信号 PT2242信号 有长有短,短的为0,长的为1化出来 这应该是截获电动车钥匙发射出的锁车信号 0 01110100101010100110 0010 0前四位为同步码0 。。。中间这20位为01110100101010100110为地址码0010为功…

JavaScript --json格式字符串和对象的转化

json字符串解析成对象 &#xff1a; var obj JSON.parse(str) 对象转化成字符串&#xff1a;var str1 JSON.stringify(obj1) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Com…

【数据结构初阶】链式二叉树接口实现超详解

文章目录 1. 节点定义2. 前中后序遍历2. 1 遍历规则2. 2 遍历实现2. 3 结点个数2. 3. 1 二叉树节点个数2. 3. 2 二叉树叶子节点个数2. 3. 3 二叉树第k层节点个数 2. 4 二叉树查找值为x的节点2. 5 二叉树层序遍历2. 6 判断二叉树是否是完全二叉树 3. 二叉树性质 1. 节点定义 用…