论文解读:(CAVPT)Dual Modality Prompt Tuning for Vision-Language Pre-Trained Model

news2024/11/26 18:29:23

v1文章名字:Dual Modality Prompt Tuning for Vision-Language Pre-Trained Model

v2文章名字:Class-Aware Visual Prompt Tuning for Vision-Language Pre-Trained Model

文章汇总

对该文的改进:论文解读:(VPT)Visual Prompt Tuning_vpt 代码实现-CSDN博客

存在的问题

比如对于第一张图,图像编码器提取对象的所有视觉特征,即Zero-Shot CLIP和CoOp(看b图)的注意图同时突出了人和摩托车。然而,下游任务要求输出类标签为“motorbike”

解决办法

将任务相关信息和视觉实例信息同时编码到视觉提示中,类感知的视觉提示是通过文本提示特征和视觉图像补丁嵌入之间的交叉关注来动态生成的。

流程解读

文本提示

Text Encoder g(·)的输入为t_i=\{u_1,u_2,..., u_M,c_i\},i =\{1,...,K\}其中c_i为类别token。为了将我们的CAVPT生成器的计算复杂性降低为常数,我们借助Zero-Shot CLIP Inference模块从Text Encoder 生成的Text Prompts Features(图的右侧)选择top-K_N(me:与类别相似度最高的
top-K_N个文本)文本提示特征。

视觉提示

这与VPT一样,采用的是VPT-deep

训练过程如下

s,P,E分别为CLS,视觉提示,图像编码

CAVPT Generator

结构如下:

me:核心就是将包含视觉提示的视觉输入[s,P,E]与Top-Kn Text Prompts Features 进行Cross Attention,最终与文本视觉相关联的 Class-Aware Visual Prompts,之后Class-Aware Visual Prompts与[s,P,E]一起通过transformer进行训练。

损失函数的设计

总损失如下:\alpha为超参数

下面的是来自CAVPT Generator的损失

摘要

随着大型预训练视觉语言模型(如CLIP)的出现,可转移表征可以通过及时调整适应广泛的下游任务。从存储在预训练模型中的一般知识中,提示调优探测下游任务的有益信息。最近提出了一种名为上下文优化(CoOp)的方法,该方法从语言方面引入了一组可学习向量作为文本提示。然而,单独调整文本提示符只能调整合成的“分类器”,而不能影响图像编码器的计算视觉特征,从而导致次优解。在本文中,我们提出了一种新的双模态提示调谐(DPT)范式,通过同时学习文本和视觉提示。为了使最终的图像特征更集中于目标视觉概念,我们在DPT中进一步提出了类感知视觉提示调优(CAVPT)方案。在该方案中,通过文本提示特征和图像补丁令牌嵌入之间的交叉关注,动态生成类感知的视觉提示,对下游任务相关信息和视觉实例信息进行编码。在11个数据集上的大量实验结果证明了该方法的有效性和泛化能力。我们的代码可在GitHub - fanrena/DPT: The official implementation of paper Dual Modality Prompt Tuning for Vision-Language Pre-Trained Model. If you find our code or paper useful, please give us a citation.中获得。

介绍

近年来,大规模视觉语言模型(VLM)的研究,如CLIP[1]和ALIGN[2],在表示学习方面取得了显著进展[3]-[5]。得益于大量的图像-文本数据,预训练的大规模视觉语言模型能够学习由自然语言生成的开放集视觉概念,从而进一步实现向下游任务的零样本转移。具体来说,视觉语言模型由图像编码器和文本编码器两部分组成。当出现新的分类任务时,可以通过将类的自然语言描述输入文本来作为文本编码器。然后,计算“分类器”与图像编码器生成的图像特征之间的相似度。

然而,将这些预训练的大规模视觉语言模型有效地应用于下游任务本身就存在挑战。最近的研究表明,“提示”是一种简单有效的方法[1],而设计一个合适的提示是一项非常重要的任务。它总是需要广泛的领域专业知识,并且需要大量的时间进行手动单词调优。通常,即使进行了大量调优,我们也不能保证获得的提示符对于下游任务来说是最优的。

最近关于视觉表征的提示学习的研究主要受到自然语言处理(NLP)中的一些提示调优方法的启发[6]-[8],例如具有代表性的CoOp[9]。这些方法提出了在提示中使用连续表示建模可学习上下文,然后在保持预训练参数固定的情况下,使用这些可学习提示以端到端方式训练模型。虽然这些方法取得了很大的成功,并显示出良好的性能,但它们只是为文本编码器学习提示。

从传统视觉识别的角度来看,典型的视觉模型大致可以分为特征提取模块和分类器模块。同样,将文本提示输入文本编码器的过程可以看作是分类器的综合,并且用图像编码器提取图像特征。 我们认为大规模预训练的视觉语言模型已经捕获了下游任务的大部分一般知识(视觉概念)。提示机制的作用是从预训练的模型中查询到适合下游任务的信息。如图1所示,对于具有多个视觉对象(概念)的输入图像,例如第一种情况包含一个人和一辆摩托车,图像编码器提取对象的所有视觉特征,即Zero-Shot CLIP和CoOp的注意图同时突出了人和摩托车。然而,下游任务要求输出类标签为“motorbike”——ground-truth注释。CoOp试图在保持给定的高亮“人”和“摩托车”视觉特征不变的情况下,通过单独调整“分类器”使模型输出“摩托车”。在视觉社区中有一个共识,那就是功能很重要[10]!因此,我们认为仅对文本编码器进行即时调整,而直接使用固定图像编码器进行下游任务是次优的。在本文中,我们在图像输入空间中引入了视觉提示,并提出了一种双模态提示调整(DPT)范式,通过同时学习文本和图像编码器的文本提示和视觉提示,从而通过调整“分类器”和“视觉特征”使预训练模型适应下游任务。

图1所示。图像编码器的注意图的可视化。(a)原始图像。(b)零射击CLIP/CoOp。(c)我们的DPT。图片选自牛津宠物和加州理工大学101。GT注释对象用红色框标记。

具体来说,对于基于vit的图像编码器中的视觉提示调谐,我们在保持预训练图像编码器固定的同时,在transformer的输入中引入少量可训练参数。插入可视提示可以直接调整图像补丁令牌嵌入。图像特征,通过自关注权值和吸收提示衍生的值向量。为了使预训练模型更好地转移到下游任务,我们进一步在DPT框架中引入了类感知视觉提示调谐(CAVPT)机制,以帮助最终获得的图像特征更集中于目标视觉概念。因此,我们的目标是将任务相关信息和视觉实例信息同时编码到视觉提示中,类感知的视觉提示是通过文本提示特征和视觉图像补丁嵌入之间的交叉关注来动态生成的,有望包含目标视觉对象更丰富的语义特征。因此,通过吸收图像补丁嵌入和我们的类件可视化提示信息来计算最终获得的图像特征,可以更专注于下游任务对应的类。最后,建议的总体DPT范例是通过文本提示、视觉提示和类感知的视觉提示同时学习的。如图1所示,使用我们的DPT调优预训练模型显示了一个更集中的任务感知视觉注意区域。

•提出的方法展示了一种新的双模态提示调整范式,通过同时从文本和图像编码器的末端学习视觉和文本提示来调整大型预训练的视觉语言模型。

•为了鼓励可视化提示显式地包含与下游任务相关的信息,我们进一步在DPT中引入了类感知的可视化提示。它是通过在文本提示功能和视觉标记嵌入之间执行交叉注意来动态生成的。

•在11个数据集上的大量实验结果证明了所提出方法的有效性,并显示了其与其他提示调优方法的巨大优势,以及其泛化能力。

本文的其余部分组织如下。第二部分介绍了相关工作。第三节详细阐述了我们提出的方法。在第四节中,我们报告了在11个数据集上进行的综合实验结果,证明了我们的方法的有效性。最后,第五节对我们的工作进行了总结。

3.方法

在本节中,我们首先回顾CLIP模型。然后,我们详细阐述了所提出的双模态提示调优(DPT)范式的每个组件,包括文本提示、视觉提示和类感知视觉提示。我们提议的DPT的框架如图2所示。最后,我们给出了DPT的损失函数和预热策略来加速训练过程。

A.对比语言图像预训练(CLIP)模型

CLIP模型旨在对齐图像特征空间和文本特征空间,使模型具有向下游任务的零射击转移的能力。CLIP由两个编码器组成:一个是为图像设计的,另一个是为文本设计的。文本编码器采用变压器[51]对文本信息进行编码,图像编码器可以是CNN模型,如ResNet[5],也可以是视觉变压器,如ViT[52]。在我们的方法中,为了兼容[23]中的视觉提示,我们选择了ViT作为图像编码器。

CLIP拥有4亿对图像文本样本,在对比学习框架下进行训练,其中将关联的图像和文本作为正样本,而将非关联样本作为负样本。之后,预训练的CLIP模型的所有参数被冻结,用于下游任务,不进行任何微调。在下游任务中,通过嵌入目标数据集的类名,将手工制作的提示输入文本端,以合成零射击线性分类器。

以分类任务为例,“[CLASS]”令牌可以先通过模板进行扩展,如“一张[CLASS]的照片”。然后,将该句子视为提示符,并由文本编码器进行编码,以导出权重向量w_i,i =\{1,...,K\},其中K为类别的总数。同时,图像编码器获得图像特征x。预测概率可由

其中sim(·,·)表示余弦相似度的计算,τ为CLIP

B.文本提示和视觉提示

文本提示

众所周知,为CLIP模型手工制作提示可能需要相当长的时间,并且需要专业的单词调优,因为措辞上的细微变化可能会导致显著的性能下降。CoOp[9]受NLP模型的提示调优的启发,引入了一组可调词嵌入向量来学习对文本端的机器有利的提示,我们称之为文本提示。设\{u_1,u_2,...,u_M\}表示M个可学习的上下文向量,文本类令牌的词嵌入用c_i, i =\{1,...,K\};然后是第i类别的提示可以表示为t_i=\{u_1,u_2,..., u_M,c_i\},i =\{1,...,K\}。通过将t_i转发到文本编码器g(·)中,我们可以得到第i个视觉概念的分类权向量。相应的预测概率可由

式中,x表示提取的图像特征,g(·)表示文本编码器。

视觉提示

对于视觉语言模型,有两个用于视觉和语言模态的编码器。仅调优文本提示不足以缩小预训练任务和下游任务之间的差距,从而导致次优结果。受视觉提示微调(visual prompt tuning, VPT)[23]的启发,我们在CLIP模型的图像编码器中引入了视觉提示。首先将图像patch
\{I_j\in R^{3\times h \times w}|j\in N,1\le j\le N_p\}嵌入到d维潜在空间中,如下所示:

E_l=\{e^j_l\in R^d|j\in N,1\le j\le N_p\},P_l=\{p^i_l\in R^d|i\in N,1\le i\le P\}分别表示第i个transformer层的图像贴片嵌入集合和视觉提示集合。假设s_l\in R^d是图像编码器中的可学习类令牌,与文本提示中使用的文本类令牌不同,后者是与类别相关的词嵌入。在[23]中有两种版本的视觉提示,VPT-Shallow和VPT-Deep。我们从经验上发现,VPT-Deep可以获得更好的性能(见表1),因此我们在第四节中将VPT-Deep纳入我们的实现中。

每个transformer层都引入了视觉提示,即:

一般来说,表现与提示深度呈正相关。因此,我们在模型中使用了VPT-Deep。然后用线性投影层LP对s_L进行投影,得到最终的图像特征。为简单起见,图像特征提取的整个过程可以表示为

式中f(·)为图像编码器。

需要注意的是,图像编码器的计算过程,即ViT模型,可以看作是一个全局场景推理的过程,它将图像patch嵌入中的视觉概念逐层池化。借助视觉提示,通过各变压器层的自关注操作,可以在sl中进一步突出下游任务对应的目标视觉概念。通过在每个变压器层中插入视觉提示,可以通过两种方式影响s_l的自注意操作,因为键和值都是通过视觉提示预先添加的:1)可以影响注意权重,使sl更多地集中在包含目标概念的图像补丁嵌入上;2)视觉提示也是自注意操作的价值向量,因此sl可能会吸收视觉提示学习到的额外信息。

然而,朴素的视觉提示被设计为无约束的可学习向量,它们只能通过对下游任务数据集的提示进行调优来隐式地学习一些下游任务相关的信息。在这项工作中,我们提出了类感知视觉提示调优(CAVPT),通过利用来自文本端的任务相关信息和来自视觉端的实例相关信息来生成视觉提示

C.类感知视觉提示调优

类感知的视觉提示旨在显式地编码与任务相关的信息。我们的CAVPT生成器接受两方面的输入,即来自视觉方面的实例信息和来自文本方面的任务相关信息。文本编码器使用所有文本类令牌计算出的文本提示特性很好地表示了与任务相关的信息。

然而,当我们将带有所有文本类令牌的文本提示特征输入到CAVPT生成器中时,CAVPT生成器的计算复杂度随着每个下游任务上的类数量线性增加。为了将我们的CAVPT生成器的计算复杂性降低为常数,我们借助Zero-Shot CLIP Inference模块(图2的右侧)选择top-K_N文本提示特征。请注意,最终性能对K_N不敏感,当设置不同的K_N时,最终性能仅波动0.1% ~ 0.2%。然后,将
top-K_N文本类令牌[class]的文本提示输入文本编码器,生成K_N特征向量,即
g_j\in R^D,1\le j\le K_N,其中编码任务相关信息。

图2所示。我们提出的DPT方法的总体体系结构。它由三个可学习的组件组成:文本提示、视觉提示和由类感知视觉提示调优(CAVPT)生成器模块生成的类感知视觉提示,其详细架构如图3所示。

通过在来自文本端的文本提示特性和来自可视端的变压器块的输入之间执行交叉关注,动态地生成一个类感知的可视提示,如图3所示。

图3所示。所建议的类感知可视化提示调优(CAVPT)生成器模块的详细体系结构。

对全连通层进行映射后,可得到K_N查询向量q_j\in R^d,1\le j\le K_N。关键向量和值向量
k\in R^{n\times d}均来自于相应的视觉变换层的输入,包括图像patch嵌入、图像类令牌嵌入、视觉提示(n为其总数)。我们提出的第l层的类感知视觉提示符\tilde P^j_l \in R^d计算为

式中LN(·)表示层归一化。W_q\in R^{d\times d_k},W_k\in R^{d\times d_k},W_v\in R^{d\times d_k}为交叉关注参数。

为了保证类感知视觉提示的效果,我们在LN层的KN输出上额外引入K-way分类器,并对K-way logits进行交叉熵损失,如下所示:

其中p_iLN(o^j_l)分类的第i个logit, K为类数,y为对真目标类的one-hot编码。注意,只有从q_j派生的o^j_l(对应于ground-truth目标类)将被分类。

由于嵌入更深层次的图像类令牌通常包含更多与任务相关的语义信息,因此在我们的实现中,类感知视觉提示仅应用于图像编码器的最后几层。

D.DPT的训练

采用交叉熵损失最小化ground-truth注释与式(2)计算的预测概率之间的距离。

式中,y为真值标注,p(y=i|x^n)为式(2)的预测概率,x”为最终得到的图像特征,

总损失函数将两个交叉熵损失与一个平衡超参数α结合如下:

E.温和策略

为了加速训练过程,我们在训练的前几个阶段采用了一般知识引导的热身策略。考虑到CLIP模型存储了一般知识,我们训练我们的模型学习零样本CLIP。我们在前几个epoch使用的损失函数可以描述如下:

其中L_{coop}是用于CoOp训练的损失函数,L_{vpt}是用于VPT训练的损失函数,L_{ce}是用于VLP训练的损失函数。β是一个平衡超参数。对于L_{coop},我们使用交叉熵损失来最小化ground-truth注释与由式(2)计算的预测概率之间的距离。

对于L_{vpt},预测概率由式(1)代替式(2)计算。

通过将训练前几次的损失函数L_{ce}转化为式(12),我们利用一般知识指导热身过程。在训练过程中,本文提出的DPT在对文本提示、视觉提示和生成类感知视觉提示的参数进行优化的同时,保持图像和文本编码器的整个参数不变。

F.关于CAVPT的讨论

图3给出了所提出的类感知可视化提示的详细计算过程。如图3所示,CAVPT生成器接受两种类型的输入。来自文本端的文本提示功能包括任务相关信息,而来自图像端的图像补丁嵌入表示可视化实例信息。首先,CAVPT生成器在文本提示特征和图像补丁嵌入之间进行交叉关注,其中从文本提示特征映射查询向量,而从图像补丁嵌入派生键和值。通过交叉注意操作,那些包含更多语义信息的图像补丁嵌入将更加突出,这些图像补丁嵌入属于下游任务类的对象。因此,交叉注意的输出将包含更多的ground-truth对象的特征。然后,我们的类感知的可视化提示被进一步生成,附带一个类似于典型转换器层的“添加和规范”操作。由于我们的类感知视觉提示包含了更丰富的ground-truth目标对象的语义特征,因此通过吸收图像补丁嵌入和我们的类感知视觉提示的信息计算得到的最终图像特征可以更集中于下游任务对应的类。

4.实验

A.数据集和实现细节

为了评估我们方法的有效性,我们在11个分类数据集上进行了实验,分别是EuroSAT[53]、Caltech101[54]、OxfordFlowers[55]、Food101[56]、fgvc - aircraft[57]、DTD[58]、OxfordPets[59]、StanfordCars[60]、ImageNet1K[61]、Sun397[62]和UCF101[63],如[1]、[9]所示。这些数据集涵盖了广泛的计算机视觉任务,包括通用对象的图像分类,细粒度分类,卫星,纹理,场景理解和动作识别图像。

遵循CLIP中常用的少枪评估方案[1],我们也采用1、2、4、8和16枪进行模型训练,并在完整的测试数据集上进行测试。为了公平比较,报告的结果是三次运行的平均值。

所有实验均采用viti - base /32作为骨干网。所有实验均基于CoOp[9]和CLIP[1]的官方发布代码进行。对于VPT,每层网络的提示符长度设置为10,初始化方式与CoOp中的文本提示符相同[9]。在模型训练过程中,我们采用SGD优化方法,学习率采用余弦规则衰减。VPT的最大历元与CoOp相同[9]。在前10个epoch采用热身技术,在VPT上固定学习率为10−5。首先在{0.01,0.001,0.0001,0.00001}中搜索VPT的学习率,所有实验的视觉提示保持不变。对于文本提示,我们遵循CoOp[9],上下文长度为16。

对于我们提出的VLP和DPT方法,除了DPT中的Caltech101和OxfordPets,在16/8/4/2次拍摄时,最大epoch数设置为100,1次拍摄时最大epoch数设置为60 (ImageNet的最大epoch数设置为20),DPT中的Caltech101和OxfordPets在16次拍摄时设置为60。预热技术与CoOp和VPT中相同(两端ImageNet的预热epoch设置为1)。KN设置为10。将CAVPT插入到图像编码器的最后一层。

平衡α设为0.3,β设为0.1。对于VLP和DPT的早期训练,使用一般知识作为前30个epoch (ImageNet为10个epoch)的指导。

B.与现有方法的比较

现有具有代表性的提示调优方法包括著名的CoOp方法[9],以及用于零弹分类的CLIP模型[1]本身(即zero-shot CLIP)。因此,我们采用这两种模型作为我们的主要比较方法。

由于与CoOp中单独的文本提示相比,我们的DPT额外引入了视觉提示和类感知的视觉提示,为了揭示每种成分对性能改进的贡献,我们在DPT之外额外实现了VPT和VLP,具体如下:•VPT标准用于将单纯的视觉提示单独引入CLIP模型的视觉端[1]并手工制作文本端采用文字提示,例如“一张[班级]的照片”。

•VLP表示同时学习视觉(V)和文本(L)提示符的双模态提示调优范式,其中文本提示符的设计方式与CoOp[9]相同,视觉提示符与VPT[23]中的VPT- deep完全相同。

•DPT表示我们将CAVPT进一步集成到基于VLP的图像编码器中。

总体评估结果如图4所示,报告了所有few-shot设置下11个数据集的分类准确率。与基线方法相比,我们的DPT在11个数据集上的平均性能优于基线方法。图4和表1清楚地显示了以下内容:1)DPT大大优于CoOp和零射击CLIP。性能的提高基本上与射击次数成正比。具体来说,在11个数据集的16发射击设置下,DPT比零射击CLIP平均高出17.6%,比CoOp平均高出3.53%。结果验证了所提出的DPT范式的优越性。

2) VPT与CoOp的结果比较,VPT的平均效果优于CoOp。在16次射击设置下,VPT在所有11个数据集上平均可以获得1%的性能提升。结果表明,从图像端调优视觉提示而不是文本提示可以获得更有效的结果。值得注意的是,VPT和CoOp在不同的数据集上得到的结果不一致,这表明调优视觉提示和文本提示可能具有互补的效果。3)将VLP与VPT和CoOp的结果进行比较,VLP的效果优于VPT和CoOp,这表明对下游任务的双模态提示进行视觉和文本两端的调优明显优于对任何单模态提示进行调优。4)在类感知视觉提示的帮助下,我们的DPT的结果与VLP相比有明显的提高。具体而言,在16次射击设置下,DPT在11个数据集上平均比VLP获得1%的性能提升,这表明我们的CAVPT具有重要意义。

图4所示。1、2、4、8、16个镜头在11个数据集上的主要结果,vitb /32。注意,我们还将我们的方法与CPT[33]在平均准确率上进行了比较。

C.域泛化

在本节中,我们的目标是揭示与基线方法相比,我们的方法对分布位移的鲁棒性。

数据集

按照CoOp[9]中的设置,我们使用ImageNet作为源数据集。目标数据集为ImageNetV2[64]、ImageNet-Sketch[65]、ImageNet-A[66]、ImageNet-R[67]。

设置

我们选择CoOp和VPT作为我们的基准方法。三种方法均在源数据集上进行训练,每类训练1个样本,在目标数据集上进行零射击推理。

结果

如表三所示,我们的方法在ImageNet、ImageNetV2、ImageNetSketch和ImageNet- r上达到了最好的性能,而我们的方法在ImageNet- a上的效果较差,因为ImageNet- a包含自然的对抗性样例。这表明我们的方法比基线方法具有更强的鲁棒性,但与CoOp相比,在面对对抗性示例时往往更脆弱。相比之下,VPT模型在目标数据集上得到的结果较差,这表明VPT模型的鲁棒性不如CoOp和我们的方法。

D.进一步分析

AVPT插入深度分析

CAVPT是一个即插即用模块,可用于ViT骨干的任意层。为了研究最适合CAVPT的层,我们在所有11个数据集上进行了自底向上和自顶向下两种不同深度值的综合实验,即自顶向下为{1→12,4→12,8→12,12},自下而上为{1,1→4,1→8,1→12},在VLP模型之上。另外,通过共享CAVPT参数,以自顶向下的方式进行了跨层共享CAVPT的实验设置。如图6所示,自顶向下方式的结果要比自底向上方式的结果好得多,并且Transformer的最后一层是最适合CAVPT的层,这表明CAVPT在更深的层中起着更重要的作用。此外,通过比较共享CAVPT和普通CAVPT,共享CAVPT可以在参数较少的情况下获得稍好的结果。

CAVPT长度分析

为了探讨合适的CAVPT长度,我们对不同长度的CAVPT进行了综合实验,即:{0,1,5,10,20,50,100}。长度为0表示该方法退化为VLP,但在ViT骨干的最后一层没有可视提示。对于一些数据集,以EuroSAT[53]为例,它只包含10个类,不足以获得10个以上的cavpt。因此,当所需的cavpt数量大于类的个数,我们将类的个数作为CAVPT的长度,得到相应的结果。如表5所示,将长度设置为10可以获得最佳精度。

E.注意图的可视化

图7所示。不同注意图可视化方法的比较。(a)原始图像。(b)零射击CLIP/CoOp。(c) VPT-Deep。(d)车牌区域。DPT (e)。GT注释对象用红色框标记。最后两行是模型未能关注GT注释对象的失败情况。

结论

在本文中,我们提出了一种新的双模态提示调整范式,通过同时学习视觉和文本提示,将大型预训练的视觉语言模型调整到下游任务。为了使最终获得的图像特征更集中于目标视觉概念,我们进一步将下游任务相关信息和图像实例信息编码到视觉提示中,并提出了类感知的视觉提示,通过文本提示特征和图像标记嵌入之间的交叉关注动态生成。在11个数据集上的大量实验结果证明了该方法的有效性,并显示了其与其他快速调优方法的巨大优势。

参考资料

论文下载

https://arxiv.org/pdf/2208.08340.pdf

https://arxiv.org/pdf/2208.08340v2.pdf

https://arxiv.org/abs/2208.08340v4

代码地址

GitHub - fanrena/DPT: The official implementation of paper Dual Modality Prompt Tuning for Vision-Language Pre-Trained Model. If you find our code or paper useful, please give us a citation.

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

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

相关文章

更新!!!Unity移动端游戏性能优化简谱

UWA官方出品,结合多年优化经验撰写了《Unity移动端游戏性能优化简谱》,文章从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能检测工…

Golang特殊init函数

介绍 init()函数是一个特殊的函数&#xff0c;存在一下特性 不能被其它函数调用&#xff0c;而是子main()函数之前自动调用不能作为参数传入不能有传入参数和返回值 作用&#xff1a; 对变量进行初始化检查/修复程序状态注册运行一次计算 以下是<<the way to go>>…

环保设备产线智能工厂数字孪生可视化平台,推进制造业数字化转型

环保设备产线智能工厂数字孪生可视化平台&#xff0c;推进制造业数字化转型。数字化转型已成为制造业发展的重要趋势&#xff0c;而环保设备产线智能工厂数字孪生可视化平台则是推进制造业数字化转型的关键之一。环保设备产线智能工厂数字孪生可视化平台是一种基于数字孪生技术…

JS实现对用户名、密码进行正则表达式判断,按钮绑定多个事件,网页跳转

目标&#xff1a;使用JS实现对用户名和密码进行正则表达式判断&#xff0c;用户名和密码正确时&#xff0c;进行网页跳转。 用户名、密码的正则表达式检验 HTML代码&#xff1a; <button type"submit" id"login-btn" /*onclick"login();alidate…

Lombok插件 注解(有参无参getset方法)

Java神奇工具——Lombok[最全]_java lombok-CSDN博客 在普通的java项目 1直接导入lombok 的jar包 2配置文件路径 配置正确的lombok路径&#xff0c;需要添加lombok插件实现 找到全局设置 查看是否安装lombok插件 &#xff08;idea一般自带有lombok插件&#xff09; 在Maven中 …

贪吃蛇详解

Win32 API介绍&#xff1a; 在写贪吃蛇这款游戏时需要用到一些有关Win32 API的知识&#xff0c; 接下来我会将设计到的知识点列举并讲解&#xff1a; 首先我们先了解一下Win32 API是什么&#xff0c;Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&am…

基于灰狼优化器GWO与小龙虾优化算法COA的无人机航迹规划

一、灰狼优化器算法 灰狼优化算法&#xff08;Grey Wolf Optimizer&#xff0c;GWO&#xff09;由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法。该算法受到了灰狼捕食猎物活动的启发而开发的一种优化搜索方法&#xff0c;它具有较强的收敛性能…

使用 Dify 和 MoonShot API 做一个懒人 AI 阅读工具(二):轻量 RAG 应用

这篇文章&#xff0c;我们继续聊聊&#xff0c;如何折腾 AI 应用&#xff0c;把不 AI 的东西&#xff0c;“AI 起来”。 在不折腾复杂的检索系统的前提下&#xff0c;做一些轻量的 RAG 实践。 写在前面 我从“机器之心会员通讯”上线以来就在订阅&#xff0c;相比较即时的行…

若依文件下载

后端自带工具controller package com.ruoyi.web.controller.common;import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.Logger…

Python二进制文件转换为文本文件

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在日常编程中&#xff0c;我们经常会遇到需要将二进制文件转换为文本文件的情况。这可能是因…

Java进阶-异常处理

概述 常见运行时异常 直接继承自RuntimeException或者子类&#xff0c;编译阶段不会报错&#xff0c;运行时可能出现的错误 运行时异常&#xff1a;一般是程序员业务没有考虑好或者是编程逻辑不严谨引起的程序错误 数组索引越界异常空指针异常类型转换异常数学操作异常数字转…

【C++报错】c++实例类的时候提示已声明所在行数,所属文件不可访问 的解决办法

这里写自定义目录标题 问题重现 问题解决 问题重现 c实例类的时候提示已声明所在行数&#xff0c;所属文件不可访问 问题解决 在此处&#xff0c;将 构造函数 放在public 问题消除

【AMBA Bus ACE 总线 1 -- ACE 总线介绍】

文章目录 Coherency 问题简介ACE 出现背景ACE 总线介绍Acknowledge signalingSnoop Channel Signals Coherency 问题简介 一致性&#xff08;Coherency&#xff09;问题通常出现在多处理器系统中&#xff0c;尤其是当多个处理器可能同时访问同一内存位置时。简单来说&#xff…

解决在 Python 数据分析中遇到的 Matplotlib 字体警告问题

当在 Python 数据分析中遇到类似以下警告时&#xff1a; D:\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:211: RuntimeWarning: Glyph 24037 missing from current font.font.set_text(s, 0.0, flagsflags) D:\anaconda3\lib\site-packages\matplotlib\ba…

【Java EE】总结12种锁策略以及synchronized的实现原理

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

网易云热评加密函数逆向(Jsrpc)

今天给大家来个jsrpc实战教程,让大家继续加深对jsrpc的理解和认识。 1、因为网易云音乐热评的加密并不在cookie上,而是参数加密,所以这里就不需要进行hook住cookie了。 2、之前就知道网易云音乐热评的加密存在之地是在下图的位置,是那个函数window.asrsea(JSON.stringify(…

我成为亚马逊云科技“技领云博主“啦

小李哥前一阵子被选为了大中华区亚马逊云科技”技领云领袖“博主项目首批成员。目前该项目也在公开招募&#xff0c;今天就给大家给大家探秘下该项目&#xff5e;1️⃣什么是”技领☁️领袖“博主项目&#xff1f; 该项目是由亚马逊云科技AWS官方发起的项目&#xff0c;主要是招…

开源代码分享(23)-基于混合整数二阶锥规划(MISOCP)的主动配电网最优潮流计算

参考文献&#xff1a; [1]乔珊. 主动配电网多源协同运行优化研究[D]. 山东大学, 2021. [2]高红均,刘俊勇,沈晓东,等. 主动配电网最优潮流研究及其应用实例 [J]. 中国电机工程学报, 2017, 37 (06): 1634-1645. DOI:10.13334/j.0258-8013.pcsee.152839. 1.引言 主动配电网技术的…

智慧养猪场视频AI智能监控与可视化管理方案

在科技日新月异的今天&#xff0c;智能化、自动化已成为众多行业追求的方向。养猪业作为传统农业的重要组成部分&#xff0c;同样迎来了技术革新的春风。特别是随着人们对食品安全等问题的日益关注&#xff0c;养猪场视频监控监管方案的智能化升级显得尤为重要。 养猪场视频智…

Java基础(运算符)

运算符 运算符和表达式 运算符&#xff1a;对字面量或者变量进行操作的符号 表达式&#xff1a;用运算符把字面量或者变量连接起来&#xff0c;符合java语法的式子就可以称为表达式&#xff1b;不同运算符连接的表达式体现的是不同类型的表达式。 算术运算符&#xff08;加…