《COMMA: Co-articulated Multi-Modal Learning》中文校对版

news2024/11/13 23:13:01

系列论文研读目录


文章目录

  • 系列论文研读目录
  • 摘要
  • 导言
  • 相关工作
    • 视觉语言模型
    • 提示学习
    • 视觉语言模型中的提示学习
  • 方法
    • 准备工作
    • 提议方法
  • 实验
    • 基准设定
    • 基础到新的概括
    • 跨数据集传输
    • 消融实验
  • 结论


摘要

经过预训练的大规模视觉语言模型(如CLIP)已经在一系列下游任务中表现出了出色的泛化能力。但是,它们对输入文本提示的变化很敏感,并且需要选择提示模板以获得满意的性能。近来,已经提出了各种方法来动态地学习作为文本输入的提示,以避免在微调过程中对人工手工制作的提示工程的要求。我们注意到这些方法在两个方面是次优的。首先,这些方法中的视觉和语言分支的提示通常是分离的或单向相关的。因此,两个分支的提示不完全相关,并且可能不提供足够的指导来对齐两个分支的表示。其次,我们观察到,与CLIP相比,大多数先前的方法通常在可见类上实现更好的性能,但在不可见类上导致性能退化。这是因为在预训练阶段学到的基本通用知识在微调过程中被部分遗忘了。基于此,本文提出了一种联合连接的多模态学习算法(COMMA)。特别地,我们的方法考虑来自两个分支的提示以生成提示来增强两个分支的表示对准。此外,为了减少对基本知识的遗忘,我们在Transformer层后期的预训练CLIP中最小化了学习到的提示与手工嵌入的提示之间的特征差异。我们在三个典型的任务上评估了我们的方法,这三个任务是泛化到新的类、新的目标数据集和不可见的域转移。实验结果证明了该方法的优越性,在所有任务上都有较好的性能提升.代码可在https://github.com/hulianyuyy/COMMA上获得

导言

  1. 具有对齐的大规模文本图像对的网络数据的增加极大地促进了基础视觉语言模型(VLM)的开发,如CLIP(拉德福等人。2021)。由于自然语言提供的监督,这些模型在一系列下游任务中表现出出色的泛化性能,并且可以推理开放词汇视觉概念(Gao et al. 2021; Fang et al. 2021; Cheng et al. 2021)。在推理过程中,一组手工制作的提示,如“[类别]的照片”被用作文本编码器的查询。输出文本嵌入与图像编码器生成的视觉嵌入相匹配,以预测输出类。
  2. 尽管CLIP在新场景中具有令人印象深刻的通用性,但其庞大的模型规模和对训练数据的要求使得在下游任务中对完整模型进行微调是不可行的。对整个模型进行微调也很容易忘记在训练阶段获得的有益知识,并过度拟合下游数据。为了解决上述限制,一系列工作(拉德福等人,2021; Jin等人,2021)致力于设计更好的手工提示,以适应下游任务。然而,手工制作的提示需要仔细的选择与密集的劳动,这也可能是最佳的描绘新的场景的特点。最近,许多方法(Shu et al. 2022; Zhou et al. 2022 a,B)提出将提示视为文本嵌入,并在微调过程中更新它们以更好地与VLM协调。该方法只更新可学习的提示信息,并固定VLMs的原始参数,大大降低了计算量。
  3. 我们认为,这些方法仍然有两个主要缺点。首先,这些方法中的视觉和语言分支的提示通常是分离的或单向相关的(视觉分支仅受文本分支的单向影响)。由于VLM的目标是更好地匹配视觉和语言分支的嵌入,因此脱节的视觉和语言提示可能会阻碍对两个分支中的输出嵌入的相关性进行建模。第二,已经观察到,相比CLIP,大多数以前的方法通常在看得到的类上能发挥好的表现,但表现出较差的泛化能力上在看不见的类。这是因为在预训练过程中获得的基本通用知识在微调过程中部分被遗忘。
  4. 为了解决上述问题,本文提出了协同多模态学习(COMMA)。特别地,为了增强两个分支中提示的相关性,我们基于两个分支中的前一个提示生成下一层的提示。在这种情况下,两个分支的提示嵌入都很好地相关,并且可以为下一层提供足够的指导来对齐两个分支的表示。此外,为了减少对大规模训练数据中获得的基本知识的遗忘,我们试图最大限度地减少学习的提示和预训练的CLIP中手工制作的提示之间的差异。在微调阶段,可以更好地保存和适应新的类的一般知识。我们对三个关键的代表性设置进行了广泛的实验,包括基础到新的泛化,跨数据集评估和域泛化,证明了COMMA的实力。特别是,在基础到新的概括上,我们的方法在10/11数据集上优于其他方法,如图1所示。此外,我们的COMMA还在跨数据集传输和域泛化设置中对所有数据集表现出出色的泛化能力,实现了一致的性能提升。由于其流线型的设计,与以前的方法相比,COMMA具有更高的训练和推理效率。
    在这里插入图片描述

相关工作

视觉语言模型

近年来,大规模图文对的出现极大地促进了视觉语言模型的发展。以前的方法通常采用基于区域(安德森等人,2018)或基于网格(Jiang等人,2020; Nguyen,Goswami和Chen 2020)的方法来建模视觉和语言之间的相关性。然而,这两种模式之间的内在联系并没有完全捕捉到这样的设计。近年来,CLIP(拉德福et al. 2021)、ALIGN(Jia et al. 2021)、FLIP(Yao et al. 2021)和BLIP(Li et al. 2022)等一系列模型被引入,以对比的方式捕捉图像和文本之间的相关性。他们通过最大化积极对的相似性并推开那些消极对来学习联合图像语言表示。在自然语言监督的帮助下,它们在广泛的下游任务中表现出令人印象深刻的性能。然而,其庞大的模型规模和训练数据的要求限制了其在资源受限的下游任务中的应用。如何更好地发挥其潜力,在这些新的概念,高效率仍然是一个具有挑战性的问题。许多工作已经证明,通过使用定制的方法来调整VLM用于少数拍摄图像识别(Zhang et al. 2021; Sung,Cho和Bansal 2022),对象检测(Gu et al. 2021; Feng et al. 2022; Maaz et al. 2022)和分割(Ding et al. 2022; Lüuddecke和Ecker 2022),下游任务的性能更好。

提示学习

大型语言模型通常需要句子形式的指令,称为文本提示,以更好地理解任务。这些提示可以在微调过程中手工制作(Jin et al. 2021)或自动学习(Houlsby et al. 2019; Liu et al. 2023),而后者被称为提示学习。这一趋势首先出现在自然语言处理(NLP)领域,其中一些方法(Lester,Al-Rfou和Constant 2021; Li和Liang 2021; Liu等人2021)提出在输入或中间特征之前添加一系列可学习的提示,以使学习的表示适应新任务。视觉领域(Jia et al. 2022; Wang et al. 2022)和视觉语言领域(Gao et al. 2021; Khattak et al. 2023; Yao,Zhang,and Xu 2023)也出现了类似的趋势。虽然大多数以前的方法分别考虑多模态分支中的提示,但我们试图增强它们的相关性,以指导两个分支中的表示对齐。

视觉语言模型中的提示学习

受NLP中提示学习的启发,许多方法提出通过端到端微调学习提示标记来适应VLM。VLM的原始参数是固定的,在此过程中仅更新了一些额外的可学习提示参数。CoOp(Zhou等人,2022 b)首先在第一层用可学习的软提示替换手工制作的提示,以适应VLM。CoCoOp(Zhou et al. 2022 a)提出生成图像条件提示,以利用输入特征的力量。ProGrad(Zhu等人,2022)仅更新梯度与原始提示生成的“一般知识”一致的提示。KgCoOp(Yao,Zhang和Xu 2023)试图将文本编码器的输出嵌入与预训练的CLIP的输出嵌入对齐,以保留有益的信息。MaPLe(Khattak等人,2023)学习视觉和语言分支中的软提示,以更好地调整其表示。我们注意到,这些方法中的提示通常是分开的,这阻碍了采用多模态信息来更好地对齐两个分支的表示。此外,与CLIP相比,这些方法通常会导致不可见类的性能下降,具有更差的泛化能力。我们的工作是第一次探索从两个分支收集有益的信息,以更好地指导提示生成过程,以很好地对齐多模态表示。

方法

我们的方法侧重于如何提高一系列下游任务的大规模VLM的泛化性能。为了减少下游任务的过拟合,避免产生巨大的训练计算成本,原始VLM中的图像编码器和文本编码器的参数保持固定,而在微调过程中仅更新提示符的参数。为了更好地展示我们的COMMA的效果,我们首先以CLIP(拉德福et al. 2021)为例简要回顾了VLM,然后回顾了典型的视觉提示学习方法,如CoOp和MaPLe,以衍生我们的方法。

准备工作

在这里插入图片描述
我们基于预训练的VLM CLIP构建模型,CLIP由文本和视觉编码器组成。CLIP对图像I ∈ RH×W×3和并发的文本描述进行编码,以匹配它们的输出嵌入。我们遵循先前的方法使用基于视觉Transformer(ViT)(Dosovitskiy等人,2020)的CLIP模型。
编码图像:首先将图像I ∈ RH×W×3分割成M个等间隔的面片,然后将其整形并投影到面片嵌入E0 ∈ RM×dv中.这些补丁嵌入然后与可学习类令牌(CLS)ci一起被发送到K层Transformer V沿着。每个Transformer层的计算过程可以表示为:
为了获得输入图像I的最终表示,最后一个Transformer层的CLS令牌cK-1被提取并经由投影函数pv投影到公共V-L潜在嵌入空间,如下所示:
编码文本:输入的文本描述被标记化,然后被投影成词嵌入W 0 = [w1 0,w2 0,· · ·,wN 0 ] ∈ RN×dl,其中N表示词嵌入的长度。在每一层,嵌入Wi-1被发送到文本编码器的第i个Transformer层Li,如下:
最终的文本表示z是通过经由投影函数pl将最后一个Transformer层的最后一个标记wN K-1投影到公共V-L潜在嵌入空间来获得的:
zero-shot推理:在推理过程中,文本编码器的输入是手工编写的提示(例如,通过将占位符[类]替换为标签y∈[1,.。。,C]。然后,通过具有温度参数τ的余弦相似性函数sim()计算文本编码器和图像编码器的输出之间的相似性来测量第j类的分数:P(yj|x)=exp(sim(x,zj)/τ)ci=1exp(sim(x,zi)。(5)采用与最高分数对应的类名作为对输入图像I的预测结果。
在这里插入图片描述
文本编码器中的文本提示通常是手工制作的,这需要劳动密集型的手动搜索,并且对于下游任务来说可能不是最佳的。因此,近年来的方法提出将提示视为文本嵌入,并在微调过程中对其进行优化。
CoOp.CoOp将文本编码器中手工制作的提示替换为可学习的软提示,并在微调过程中直接更新它们。具体地,CoOp引入M个可学习的提示向量{p0,p1,…,pM−1},并将它们与第i个类的标记嵌入ci级联作为文本输入嵌入:tCoOp i = {p0,p1,…,pM−1,ci}。然后,将这些嵌入发送到文本编码器中以获得最终的文本表示。
Maple.地图MaPLe认为,在VLM的单个分支中使用提示可能不是最佳的,因为它不允许调整两个分支的表示以更好地匹配它们的输出嵌入。此外,仅在第一层中插入提示可能不足以对各种层级的有益信息进行编码。因此,MaPLe建议将提示插入到视觉和文本分支中,直到J层,以实现深度提示。在每一层中,图像编码器的提示由文本编码器的提示单向生成。

提议方法

与CLIP相比,以前的方法在下游任务上实现了相当大的性能提升,但它们仍然有两个主要限制。首先,视觉和文本分支中的提示通常是分离的或单向生成的。由于VLM的目标是匹配不同模态的输出嵌入以描述它们的关系,因此两个分支的提示应该密切相关,以提供适当的指导来对齐两个分支的表示。其次,尽管最近的方法在可见类上实现了令人印象深刻的性能提升,但与CLIP相比,它们通常会导致不可见类的性能退化(Yao,Zhang和Xu 2023; Zhou et al. 2022 a),表现出对新概念的更差泛化。这对现实生活中的场景是有害的,因为可能会出现大量的新类。原因是在微调过程中,部分通用知识被遗忘了。为了处理上述限制,我们联合收割机来自两个分支的有益信息,以生成与其输出嵌入匹配的提示。我们还建议在微调过程中保留预训练CLIP的通用表示,以减轻过拟合。我们提出的方法的概述在图2中给出。
在这里插入图片描述COMA的概述。这里,Lce表示交叉熵损失,Lkd表示两个分支之间的知识蒸馏损失。COMMA基于两个分支的先前提示生成视觉分支的提示,以聚合多模态有益信息来指导它们的表示对齐。此外,它让学习的提示近似于预先训练的CLIP模型中的手工制作的提示,以保留通用知识。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
相关提示生成。为了更好地引导和对齐两个分支的表示,我们提出基于两个分支的先前提示来计算提示,以聚合有益的多模态信息。特别地,遵循先前的方法(Khattak et al. 2023),我们在视觉和文本分支中插入可学习的提示直到特定深度J。以视觉分支为例,输入嵌入表示为{Pv 0,c 0,E0},其中P表示M长度的可学习提示。给出了ith(i ∈ [0,…,K-1])Transformer层Vi可以表示为:[,ci,Ei] = Vi([Pv i-1,ci-1,Ei-1])。(6)
我们不是将两个分支中的提示分开或单向控制,而是通过基于两个分支的先前提示计算图像分支中的提示来利用多模态信息。具体地,对于第i个Transformer层Vi,其提示是通过将视觉分支中第i-1层的提示Pv i-1作为查询,并将文本分支中第i-1层的提示Pl i-1作为键和值来动态生成的。这个过程表示为:Pv i = softmax(Pv i−1 · Pl i−1 <$P)Pl i−1。(7)
我们沿着令牌维度执行聚合。在这个意义上,视觉编码器中的提示聚合来自文本分支的补充信息,以指导其表示的对齐路径。实际上,我们仅在文本分支中的高级语义的指导下生成视觉分支中的提示,并且将文本分支中的提示随机初始化以进行反向传播,以避免损害其高级语义表示。

避免忘记一般知识。先前的工作(Khattak等人,2023; Yao、Zhang和Xu,2023)已经证明,预训练的CLIP模型中包含的通用知识在微调过程中很容易被遗忘。我们发现,在预先训练的CLIP学习提示和手工制作的提示之间的相似性是呈正相关的,他们的表现上的新类。图3描绘了关于CoOp中的可学习提示与预训练CLIP中的手工提示之间的距离的关系,其性能差距为跨不同层的Δ Acc。据观察,随着层的深入,性能下降的程度Δ Acc与即时嵌入距离更加一致。具体地,在前几层(例如,层3&6)中,在最后几层(例如,第9层和第12层),则PADAcc和提示距离之间的趋势变得更加正相关。这表明预训练CLIP中的可学习提示和手工提示之间的距离可以被视为指示下游任务的模型泛化性能的明显标志。基于前面的观察,我们建议最大限度地减少最后几个S层中预训练CLIP的可学习提示和手工提示之间的特征差异,以提高新类的泛化性能。具体来说,对于相互sth层,我们通过余弦相似性sim()最大化COMMA的文本分支中的可学习提示与预训练CLIP的文本分支中的手工提示之间的特征相似性:Lkd = Sim(Pl s,PCLIP s)(8)总体而言,我们最小化交叉熵损失以及特征差异损失,其中倒数S层上的权重λ训练我们的COMMA为:L总= Lce + λ <$S i=0(1 − Li kd)。
在这里插入图片描述关于性能下降程度的关系,即CoOp中的可学习提示与11个数据集上不同层的预训练CLIP中的手工提示之间的距离。

实验

基准设定

基础到新的泛化:数据集被分成基础和新的类,以零射击的方式评估模型。该模型在少量设置中在基类上进行训练,并在基类和新类上进行评估。
跨数据集评价:为了证明我们的模型在跨数据集传输中的能力,我们以少量的方式在ImageNet数据集上训练我们的模型,并直接在其他数据集上对其进行评估,而无需进一步微调。
领域概括:为了评估我们的模型对分布外数据的鲁棒性,我们直接在其他四个包含不同类型域偏移的ImageNet数据集上测试我们的ImageNet训练模型。
数据集:对于基础到新的泛化和跨数据集评估,我们遵循以前的方法(Khattak et al. 2023; Yao,Zhang和Xu 2023)在11个图像分类数据集上评估我们的方法的性能,包括两个通用对象数据集ImageNet(Deng等人,2009年)和Caltech 101(Fei-Fei、费尔格斯和Perona 2004);五个细粒度数据集,OxfordPets(Parkhi等人,2012年),StanfordCars(Krause等人,2013年),Flowers 102(Nilsback和Zisserman,2008),Food 101(Bossard,Guillaumin和货车Gool,2014年)和FGVCAircraft(Maji等人,2013年);场景识别数据集SUN 397(Xiao et al. 2010);动作识别数据集UCF 101(Soomro,Zamir和Shah 2012);纹理数据集DTD(Cimpoi等人2014)和卫星图像数据集EuroSAT(Helber等人2019)。对于域泛化,我们使用ImageNet作为源数据集,其四个变体作为目标数据集,包括ImageNet V2(Recht et al. 2019),ImageNet-Sketch(Wang et al. 2019),ImageNet-A(Hendrycks et al. 2021 b)和ImageNet R(Hendrycks et al. 2021 a)。
实现细节对于所有实验,我们默认使用预训练的ViT-B/16 CLIP模型,dl = 512,dl = 768。默认情况下,我们在所有实验中使用16次射击训练策略,为每个类随机采样16次射击。根据之前的方法(Khattak等人,2023),我们将提示深度J设置为9,语言和视觉提示长度设置为2。我们使用SGD优化器训练模型5个epoch,batchsize为4,学习率为0.0035。我们使用模板“a photo of a [category]”的预训练CLIP词嵌入来初始化第一层P0的语言提示,并随机初始化具有正态分布的后续层的提示。对于基础到新的推广,我们报告基础和新的类精度和他们的谐波平均值(HM)平均超过3次运行。对于跨数据集评估和域泛化,我们在ImageNet数据集上训练我们的模型作为源模型,学习率为0.0026,并将提示深度J设置为3。

基础到新的概括

我们将每个数据集分成两个不相交的组:基类(Base)和新类(New)。该模型在基类上进行训练,并直接在看不见的新类上进行评估,以验证其泛化能力。我们将我们的COMMA与表1中的最新方法进行比较。总的来说,与最先进的方法相比,COMMA在9/11数据集上的新类和10/11数据集上更高的谐波平均精度上实现了改进的性能,在新概念上表现出更好的泛化能力。具体来说,以前的方法,如CoOp,CoCoOp和KgCoOp通常实现了与CLIP相比基类的大幅度改进。然而,他们往往在小说类的表现较差。这是因为它们很容易过拟合训练数据,并且缺乏对未知数据的泛化。作为一个强大的竞争对手,Maple引入了多模态提示学习来缓解这个问题,并且与以前的方法相比,在新类上有了很大的改进。与CLIP相比,我们的COMMA不仅在所有基类上表现出更上级的性能,而且在大多数(9/11)新类上表现出更强的准确性,具有令人印象深刻的泛化能力,在所有数据集上具有更高的平均谐波平均准确度。值得注意的是,与以前的方法相比,我们的COMMA在基类上的3/11数据集上获得了更高的性能,但在新类上的9/11数据集上获得了更好的准确性。
在这里插入图片描述

跨数据集传输

我们在选项卡中测试了COMMA的跨数据集泛化。2.该模型在ImageNet数据集上进行训练,并在其余10个数据集上直接进行评价。据观察,COMMA在源ImageNet数据集上的性能与其他方法相当,但在目标数据集上的性能要强得多。特别是,COMMA在9/10的数据集上优于CoOp和Maple,并且在所有数据集上都优于CoCoOp。总的来说,COMMA在所有10个数据集上实现了最高的平均性能,在下游任务上具有更好的泛化能力。
在这里插入图片描述
领域泛化我们在源ImageNet数据集上训练我们的模型,并直接在四个分布外的数据集上对其进行评估,以测试其泛化能力。结果显示在选项卡中。3.我们的COMMA在源ImageNet数据集上与其他方法相比具有竞争力的性能,并且在所有其他数据集上始终优于其他方法。这表明增强多模态提示的相关性和注入通用知识可以增强CLIP等VLM的泛化性和鲁棒性。
在这里插入图片描述

消融实验

建议组件的有效性。我们验证了所提出的两个组件的效果,相关的即时概括和一般知识转移,在选项卡中。4.实验结果表明,在11个数据集上,添加关联提示和知识转移可以分别带来+2.16%和0.98%的平均性能提升。两者的结合进一步导致+3.18%的准确性提升,绝对准确性为79.04%。
在这里插入图片描述

多少层用于采用知识转移。我们使用倒易的S层将CLIP中手工制作的提示符的一般知识转移到COMMA中可学习的提示符。图4描绘了通过改变S,基本类、新类和调和平均值的精度变化。结果表明,精度随S的减小而不断提高,当S=2时达到最大值。这表明后几层的提示信息包含了更多的通用语义信息,能够更好地帮助后续任务的泛化性能。因此,我们设定S=2。
在这里插入图片描述

提示效率。我们在表中比较了COMMA算法和最近几种算法在参数和每秒帧数方面的效率。5.我们注意到,CoCoOp的FPS最低,这是因为它采用了受实例约束的设计。随着批量的增加,其FPS下降,严重阻碍了其在真实的生产中的应用。与以前的方法(CoOp、CoCoOp和KgCoOp)相比,MaPLe的准确度得到了提高,所需参数从2048增加到3.55M。与其他方法相比,我们的COMMA方法在所有11个数据集上的FPS相当的情况下,具有略微增加的参数和最高的平均性能,证明了在具有竞争力的计算成本的情况下具有更好的准确性。
在这里插入图片描述

λ的选取。我们在表中检验了知识转移损失Lkg的权重λ的选择。6.随着λ的增大,精度逐渐提高,当λ=1.0时,精度达到最大值。我们默认设置λ=1.0。
在这里插入图片描述

提示深度J和提示长度P的选择。我们在tab中烧蚀了提示深度J和提示长度P的选择。7.观察到J = 9和P = 2可以提供最佳结果。
在这里插入图片描述

结论

由于优化参数的规模很大,下游数据的大小有限,因此使大型VLM适应下游任务具有挑战性。提示学习是一种有效的有前途的方法,以适应新的概念的VLMs。为了提高VLM的泛化性能,我们建议在微调过程中增强多模态提示的相关性并保留通用知识。实验结果表明,我们的模型在一系列下游任务中是参数有效和鲁棒的。

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

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

相关文章

PyQt5 导入ui文件报错 AttributeError: type object ‘Qt‘ has no attribute

问题描述&#xff1a; 利用 PyQt5 编写可视化界面是较为普遍的做法&#xff0c;但是使用全新UI版本的 Pycharm 修改之前正常的UI文件时&#xff0c;在没有动其他代码的情况下发现出现以下报错 AttributeError: type object Qt has no attribute Qt::ContextMenuPolicy::Defaul…

BFS 解决多源最短路问题

文章目录 多源BFS542. 01 矩阵题目解析算法原理代码实现 1020. 飞地的数量题目解析算法原理 1765. 地图中的最高点题目解析算法原理代码实现 1162. 地图分析题目解析算法原理代码实现 多源BFS 单源最短路&#xff1a; 一个起点、一个终点 多源最短路&#xff1a; 可以多个起点…

Apache ZooKeeper 及 Curator 使用总结

1. 下载 官网地址&#xff1a;Apache ZooKeeper 点击下载按钮 选择对应的版本进行下载 2. 使用 1、解压 tar -zxf apache-zookeeper-3.9.2-bin.tar.gz2、复制配置文件&#xff0c;有一个示例配置文件 conf/zoo_sample.cfg&#xff0c;此文件不能生效&#xff0c;需要名称为…

LeetCode_sql_day31(1384.按年度列出销售总额)

目录 描述 1384.按年度列出销售总额 数据准备 分析 法一 法二 代码 总结 描述 1384.按年度列出销售总额 Product 表&#xff1a; ------------------------ | Column Name | Type | ------------------------ | product_id | int | | product_name | var…

将sqlite3移植到arm开发板上:

一、下载源代码 sqlite3网址&#xff1a;https://www.sqlite.org/download.html 下载&#xff1a;sqlite-autoconf-3460100.tar.gz 二、解压 在Linux家目录下创建一个sqlite3文件夹&#xff0c;将压缩包复制到该文件夹下&#xff0c;再在该目录下打开一个终端&#xff0c;执行…

【机器学习】--- 决策树与随机森林

文章目录 决策树与随机森林的改进&#xff1a;全面解析与深度优化目录1. 决策树的基本原理2. 决策树的缺陷及改进方法2.1 剪枝技术2.2 树的深度控制2.3 特征选择的优化 3. 随机森林的基本原理4. 随机森林的缺陷及改进方法4.1 特征重要性改进4.2 树的集成方法优化4.3 随机森林的…

7-50 畅通工程之局部最小花费问题 (kruskal)

输入样例: 4 1 2 1 1 1 3 4 0 1 4 1 1 2 3 3 0 2 4 2 1 3 4 5 0输出样例: 3 代码&#xff1a; #include<iostream> #include<queue> using namespace std; const int N110; struct node{int x,y,w;bool operator <(const node &n1)const{if(wn1.w) retur…

4 html5 web components原生组件详细教程

web components 前面我们已经介绍过&#xff0c;这一期我们就来讲一讲具体用法和这其中的关键只是点&#xff1a; 1 基本使用 如果我们想实现一个封装的原生组件&#xff0c;那就离不开使用js去封装&#xff0c;这里主要就是基于HTMLElement这个类&#xff0c;去创建创建一个…

【HarmonyOS】深入理解@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

【HarmonyOS】深入理解Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化 前言 之前就Observed和ObjectLink写过一篇讲解博客【HarmonyOS】 多层嵌套对象通过ObjectLink和Observed实现渲染更新处理&#xff01; 其中就Observe监听类的使用&#xff0c;Object…

prometheus监控linux虚拟机

前提条件已安装好prometheus和grafana&#xff0c;如果未安装请移步到docker部署prometheus 安装部署Prometheus,docker安装grafana安装部署Grafana。 1.二进制部署node-exporter采集器 2.1 采集器node-exporter下载 链接&#xff1a;https://pan.baidu.com/s/1hDmckSSl5X36…

【算法】BFS系列之 拓扑排序

【ps】本篇有 3 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;课程表 .1- 题目解析 .2- 代码编写 2&#xff09;课程表 II .1- 题目解析 .2- 代码编写 3&#xff09;火星词典 .1- 题目解析 .2- 代码编写 一、算法简介 【补】图的基本概念 &#…

本地提权【笔记总结】

文章目录 服务命令at命令提权介绍适用版本复现 sc命令提权介绍适用版本复现 ps应用程序提权复现 进程注入进程迁移注入介绍条件复现 MSF自动化注入介绍getsystem原理 复现 MSF令牌窃取介绍复现 烂土豆提权介绍适用版本复现 UAC绕过介绍复现使用ask模块绕过使用bypassuac_sluihi…

谷歌的AI反击战:创始人谢尔盖·布林的回归与大模型组合的未来

近年来&#xff0c;随着AI技术的迅猛发展&#xff0c;尤其是ChatGPT等大语言模型的出现&#xff0c;全球科技格局正发生剧烈变化。作为曾经引领AI潮流的谷歌&#xff0c;在这场竞争中逐渐失去了领头羊的地位。然而&#xff0c;谷歌的创始人之一谢尔盖布林&#xff08;Sergey Br…

计算组合数

1.递推 #include<bits/stdc.h> #include<unordered_map> #include<unordered_set> using namespace std; #define int long long //可能会超时 #define PII pair<int,int> const int INF 0x3f3f3f3f, mod 1e9 7; const int N 2005; int a, b,n; …

手机自动化测试环境之夜神模拟器inspector部署验证

1、自动化测试环境部署_总览图检查表流程图 Python需要安装Appium-Python-Clicent去定位元素&#xff1b;Appium是一个中间的服务器&#xff0c;它需要依赖node.js&#xff0c;python的脚本通过appium和手机进行交互&#xff1b;手机app的环境都是java环境&#xff0c;先安装jd…

9、等保测评介绍

数据来源&#xff1a;9.等保测评介绍_哔哩哔哩_bilibili 信息系统等级测评 信息系统等级测评是测评机构依据国家信息安全等级保护制度的规定&#xff0c;按照相关管理规范和技术标准&#xff0c;对未涉及国家秘密的信息系统的安全等级保护状况进行检测评估的活动。 等级测评…

gitlab 的CI/CD (一)

前言 GitLab CI/CD 是一个内置在GitLab中的工具&#xff0c;用于通过持续方法进行软件开发&#xff1a; Continuous Integration (CI) 持续集成Continuous Delivery (CD) 持续交付Continuous Deployment (CD) 持续部署 持续集成的工作原理是将小的代码块推送到Git仓库…

JavaEE: 深入探索TCP网络编程的奇妙世界(三)

文章目录 TCP核心机制TCP核心机制三: 连接管理建立连接(三次握手)断开连接(四次挥手)三次握手/四次挥手 流程简图 TCP核心机制 书接上文~ TCP核心机制三: 连接管理 建立连接(三次握手),断开连接(四次挥手). 这里的次数指的是网络通信的次数,挥手/握手是形象的比喻(handshake…

PM2.5粉尘传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 4.粉尘浓度转化关系 5.空气污染指数 三、程序设计 main.c文件 PM25.h文件 PM25.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 GP2Y1014AU是日本夏普公司开发的一款光学灰尘浓度检测传…

探索 Web Speech API:实现浏览器语音识别与合成

引言 Web Speech API 是一项由 W3C 开发的 Web 标准&#xff0c;为开发者提供了在 Web 应用程序中实现语音识别和语音合成的能力。通过 Web Speech API&#xff0c;我们可以让网页与用户进行语音交互&#xff0c;实现更加智能化和便捷的用户体验。本文将深入探讨 Web Speech A…