《MmAP : Multi-Modal Alignment Prompt for Cross-Domain Multi-Task Learning》中文校对版

news2024/9/20 8:02:59

系列论文研读目录


文章目录

  • 系列论文研读目录
  • 摘要
  • 1 引言
  • 2 相关工作
  • 3 方法
    • 3.1对比图像预训练
    • 3.2 多模式对齐提示
    • 3.3 多任务提示学习框架
  • 4 实验
    • 4.1基准设置
    • 4.2实验结果
    • 4.3消融研究
  • 5、结论


摘要

多任务学习(Multi-Task Learning,MTL)是为了同时训练多个相互关联的任务,从而提高单个任务的性能而设计的。典型地,多任务网络结构由共享主干和特定任务解码器组成。然而,解码器的复杂度随着任务的数量而增加.为了解决这一问题,我们集成了无解码器的视觉语言模型CLIP,该模型具有鲁棒的zero-shot泛化能力。最近,参数有效的迁移学习方法伴随CLIP已被广泛地探索,以适应下游任务,其中提示调整显示了强大的潜力。然而,这些方法仅对单个模态(文本或视觉)进行微调,破坏了CLIP的模态结构。本文首先提出了一种多模态对齐提示(MmAP)算法,用于CLIP中的文本和视觉模态的对齐。在MmAP的基础上,我们开发了一个创新的多任务提示学习框架。一方面,为了最大化相似度较高的任务之间的互补性,我们采用了一种梯度驱动的任务分组方法,将任务划分为若干个互不相交的组,并为每个组分配一个组共享的MmAP。另一方面,为了保持每个任务的独特特征,我们为每个任务分配任务特定的MmAP。在两个大型多任务学习数据集上的综合实验表明,与完全微调相比,我们的方法在仅利用了约0.09%的可训练参数的情况下,获得了显著的性能改善。

1 引言

  1. 多任务学习(MTL)已经成为深度学习中的一种有效方法,它允许在统一的网络架构中联合训练多个相关任务,从而与单任务学习(STL)相比增强了模型性能。MTL的核心在于学习任务共享表征和任务特定表征。通过利用跨任务的共享表示和知识,MTL增强了泛化并减轻了过拟合。利用特定的表示允许MTL保留每个任务的独特特征。此外,训练多个任务的统一模型通常比训练几个单任务模型更有参数效率。因此,MTL在各个领域都引起了相当大的兴趣,包括计算机视觉(Shen et al. 2021; Ye and Xu 2023; Xin et al. 2023),自然语言处理(He et al. 2022)等。
  2. 在这项工作中,我们主要关注视觉多任务学习。先前的研究主要集中在多任务模型训练框架的设计上,包括基于编码器的方法(Gao et al. 2019)和基于解码器的方法(Xu,Yang,and Zhang 2023)。然而,随着视觉预训练模型(例如,ViT(Dosovitskiy et al. 2021),SwinTransformer(Liu et al. 2021)),直接微调这些模型用于下游多任务,导致性能大幅提升,并已成为多任务学习的主流方法(Liu et al. 2022)。在这种微调范式中,仍然有必要为每个任务建立一个不同的解码器,可训练参数线性增加。
  3. 为了解决上述问题,我们结合了预训练的视觉语言模型CLIP(拉德福等人,2021),并认为它是为视觉多任务学习量身定制的。一方面,CLIP被训练为使用网络规模的数据(例如,4亿个文本图像对),赋予它强大的zero-shot传输到视觉下游任务的能力。另一方面,CLIP的体系结构提供了明显的优势。它包括一个文本编码器和一个图像编码器,无需为每个任务建立额外的解码器结构。因此,我们选择调整CLIP来解决视觉多任务。
  4. 在传统的预训练微调范例之后,整个CLIP参数(150 M)将需要更新,这提出了关于计算和存储费用的挑战。最近,许多研究(Zaken,Goldberg和Ravfogel 2022; Jia et al. 2022 b; Gao et al. 2021; Zhou et al. 2022)引入了参数有效的迁移学习技术,以实现可训练参数和下游任务性能之间的最佳平衡。尽管如此,这些现有的方法主要集中在预先训练的视觉模型或语言模型,其适用于更复杂的视觉语言模型仍然不确定。此外,这些方法往往强调单任务适应,而多任务适应仍然是一个挑战。
  5. 首先,我们首先对现有成功的参数高效迁移学习方法在应用于CLIP进行视觉多任务学习时的性能进行了彻底的检查,如图1所示。通过我们广泛的研究,我们发现提示微调方法VPT-MT(Jia et al. 2022 b),CoOp-MT(Zhou et al. 2022)和MaPLe-MT(Khattak et al. 2023)比BitFit(Zaken,Goldberg和Ravfogel 2022)和Adapter(Gao et al. 2021)更合适。这可能归因于BitFit和Adapter更新模型参数并破坏CLIP的原始结构完整性。相反,提示调优方法只修改输入嵌入(文本或图像),如图2所示。此外,我们观察到MaPLe-MT优于VPT-MT和CoOp-MT,强调了同时调整两种模式的优势。
    在这里插入图片描述
    在这里插入图片描述(a)文本提示调整(Zhou et al. 2022),(B)视觉提示调整(Jia et al. 2022 B),(c)多模态提示学习(Khattak et al. 2023)和(d)我们的多模态对齐提示调整。火苗图标表示可训练参数,雪花图标表示冻结参数,[class]表示克罗内克积,[class]表示类别名称。
  6. 随后,基于我们的观察结果,我们提出了一种新的针对CLIP的多模式对齐提示(MMAP),并为多任务图像识别场景定制了一个框架。我们的MMAP通过源提示生成文本提示和视觉提示,以实现两种模态的微调对齐效果。此外,我们还设计了一个基于MmAP的多任务提示调优框架。以前的MTL工作(Fifty等人2021年;斯坦德利等人,2020)证实了共同训练相似的任务会产生互补的效果,而同时训练不同的任务会产生负面的效果。因此,我们首先利用梯度相似度对任务进行分组,然后分配一个组共享的MmAP进行联合训练。此外,为了保持每个任务的独立性,我们分别为每个任务建立特定于任务的MmAP。我们在Office-Home和MiniDomainNet两个大型跨域多任务数据集上对我们的方法进行了测试。图1显示了Office-Home上的结果,说明我们提出的方法在可训练参数和性能之间实现了良好的权衡。

2 相关工作

多任务学习。 多任务学习(Multi-Task Learning,MTL)旨在通过共享知识和计算来同时学习多个任务。在计算机视觉领域有两种典型的多任务处理方法。首先是稠密场景理解多任务,对每个输入样本进行语义分割、表面法向估计、显著性检测等。当前关于多任务密集场景理解的研究主要集中在解码器结构设计上(Zhang等人,2021; Xu,Yang,and Zhang,2023; Liang等人,2023)。另一种是跨域分类多任务,输入数据由多个具有域偏移的数据集组成。由于涉及多个领域,当前的研究强调学习领域之间共享和私人的信息(Shen等人,2021; Long等人,2017)。
视觉-语言模型。基本的视觉语言模型(例如,CLIP(拉德福等人,2021)和ALIGN(Jia等人,2021))在各种视觉任务中表现出了卓越的能力。与仅通过图像监督学习的模型相比,这些V-L模型编码了丰富的多模态表示。尽管这些预训练的V-L模型学习了丰富的表示,但是有效地使它们适应下游视觉任务仍然是一个具有挑战性的问题。大量工作已证明,通过采用定制方法调整V-L模型以进行检测(Li等人,2022; Zhong等人,2022)、分割(Rao等人,2022; Xu等人,2022)和识别(Wortsman等人,2022),可改善下游视觉任务的性能。此外,HiPro(Liu等人,2023)构建了一种分层结构,以使预先训练的V-L模型适应各种下游任务。
参数有效的迁移学习。参数有效迁移学习(Parameter Efficient Transfer Learning,PETL)的目标是通过训练少量参数,使预先训练好的模型适应新的下游任务。现有的PETL方法可以分为三组:参数调整、适配器调整和提示调整。通过调整权重(Hu等人,2022)或偏差(Zaken、Goldberg和Ravfogel,2022),参数调整直接修改预训练模型的参数。适配器调优将可训练瓶颈架构插入到冻结的预训练模型中,旨在促进下游任务的学习,例如AdaptFormer(Chen等人,2022)、VL-Adapter(Sung、Cho和Bansal,2022)和CLIP-Adapter(Gao等人,2021)。通过设计一个特定的模板,快速调整将所有下游任务统一为预先训练的任务,以充分利用基础模型的能力(Jia等人,2022 a; Khattak等人,2023; Wang等人,2023)。

3 方法

在本节中,我们首先回顾视觉语言模型,重点关注CLIP。随后,我们介绍了我们提出的多模态对齐提示(MmAP)。最后,我们提出了一个统一的快速学习框架,它结合了组共享MmAP和任务特定的MmAP。

3.1对比图像预训练

**图像编码器**。
在这里插入图片描述
图像编码器。在本研究中,我们选择ViT(Dosovitskiy等人,2021)作为图像编码器,以与视觉提示兼容(Jia等人,2022 b)。给定一幅输入图像I ∈ RH×W×3,由K个Transformer层组成的图像编码器将图像分割成M个固定大小的块,并将它们投影到块嵌入E0 ∈ RM×dv中。伴随有可学习类标记ck的补丁嵌入Ek被馈送到图像编码器的第(k + 1)层Vk+1,并且通过以下Transformer层顺序地处理:为了获得最终图像表示x,来自最后Transformer层的类标记cK经由ImageProj被投影到V-L潜在嵌入空间中:x = ImageProj(cK)。(2)
在这里插入图片描述
文本编码器。文本编码器采用一个K层的Transformer对输入的单词进行标记化,并将其投影到单词嵌入W 0 ∈ RN×dl中。Wk被直接馈送到文本编码器的第k +1层Lk+1:[Wk+1] = Lk+1(Wk)k = 0,1,…,K − 1。(3)最终文本表示z是通过将与结束的Transformer层LK的最后一个标记相关联的文本嵌入经由TextProj投影到V-L潜在嵌入空间中来获得的:z = TextProj(WK)。
在这里插入图片描述
zero-shot预测。对于zero-shot预测,在CLIP的语言分支中引入了精心设计的提示,该提示用于通过配备与下游任务相关联的每个类名(例如,“a photo of a [CLASS]”)。然后,选择具有最高余弦相似性得分的类作为给定图像的预测标签pky,即其中sim(,)表示余弦相似度的计算。τ是CLIP学习的温度系数,C是类的总数。

3.2 多模式对齐提示

以前的研究主要集中在设计一个单一的模态提示。例如,VPT研究了视觉提示,而CoOp则引入了可学习的文本提示。我们认为,仅仅调整一种模态会破坏CLIP的文本图像匹配,导致下游任务的次优适应。目前最流行的方法是利用文本提示通过参数较多的MLP生成视觉提示,但在视觉形态和模型效率方面存在局限性。
在这里插入图片描述
在这里插入图片描述
为了解决这些问题,我们提出了多模态对齐提示(MultimodalAlignmentPrompt,MmAP)来同时生成文本提示Pl ∈ Rb×dl和图像提示Pv ∈ Rb×dv。这里,我们将B表示为提示的长度,而dl和dv分别表示文本和图像标记的尺寸。我们首先初始化一个源提示Ps ∈ Rm×n和两个单独的缩放矩阵Ml ∈ R B m× dl n和Mv ∈ R B m×dv n。然后,我们应用Kronecker Product为文本和图像编码器生成提示,如下所示:
我们提出的MmAP具有两个显著的优点。首先,克罗内克积的使用确保了源提示Ps的信息的最大保存。这便于文本和图像提示之间的对齐。第二,可学习参数的数目从K(dl + dv)显著减少到mn + K(dl+dv)mn,其中K表示Transformer层的数目。这种参数的减少不仅使模型更有效,而且还降低了过拟合的风险。

3.3 多任务提示学习框架

在多任务学习中,相似任务的联合训练可以产生互惠互利的结果。典型地,任务相似度可以通过评估任务之间的梯度冲突来量化。有鉴于此,我们首先涉及到将类似的任务分组在一起。共享的MmAP被分配给每个组,这促进了组内任务的相互学习和增强。然而,为了保持每个任务的独特特性,我们还为每个任务分配单独的MmAP。该单独的MmAP确保充分满足每项任务的独特特征和要求。图3描述了整个多任务提示调优框架图。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
任务分组。现有的MTL工作(Fifty等人,2021)已经证明,梯度余弦相似性可以量化两个任务的相似性,即:两项任务从联合训练中获益的程度。因此,我们通过计算共享参数的梯度来评估两个任务的相似性,同时保持预训练的视觉语言模型冻结,如图3a所示。具体地,给定用于所有任务的全局共享MmAP Pglb,第i个任务和第j个任务之间的相似性可以被估计为以下点积:Pglb =(i + j)–(1)其中LT表示任务T的损失。我们假设当sim(Ti,Tj)> 0时,这表明两个任务表现出相互增益效应。此外,对于鲁棒估计,我们在全局共享MmAP的训练期间对相似性的多个“快照”进行平均。在高层次上,我们同时训练所有任务,在整个训练过程中评估成对任务相似性,并识别最大化总任务间相似性的任务组。
在这里插入图片描述
多任务提示学习。我们在我们提出的MmAP上开发了一个统一的多任务提示学习框架,如图3b所示。给定N个下游任务{Ti}N i=1,我们首先根据梯度相似性将它们划分为几个不相交的组。为了简洁起见,我们将G表示为由以下组成的任务组:|G|任务(1 ≤| G| ≤ N)。然后,我们为CLIP构造了一个组共享的MmAP,它包含K个Transformer层,包括源提示PG = {Pk G }K k=1,缩放矩阵MGl = {Mk Gl}K k=1和MGv = {Mk Gv}K k=1,分别用于语言和视觉分支。组共享的MmAP由组G内的所有任务累积更新,从而在类似任务之间实现互补益处。此外,对于组G中的每个任务,我们构建了用于学习独特任务特征的任务特定MmAP,包括用于语言和视觉分支的源提示PT = {Pk T}K k=1、缩放矩阵MTl = {Mk Tl}K k=1和MTv = {Mk Tv}K k=1。在训练组G中的一个任务T时,我们首先在两个编码器中生成第k层的文本和图像提示,然后通过组合类标记、生成的提示和来自前一层的文本/图像标记来重建输入标记。因此,文本和图像编码器中第k层的计算可以形式化地表示为
这里的[·,·]指的是连接操作。最后,通过优化以下损失来累积地更新组共享的MmAP:L(PG,MGl,MGv)= X T∈G LT(PG,MGl,MGv),(11),并且通过以下来训练任务特定的MmAP:L(PT,MTl,MTv)= LT(PT,MTl,MTv),(12)其中LT是任务T的交叉熵损失。

4 实验

4.1基准设置

数据集。根据之前的MTL工作(Shen等人,2021; Long等人,2017),我们考虑使用Office-Home(Venkateswara等人,2017)和MiniDomainNet(Zhou等人,2021)数据集来构建我们的基准。
(1)Office-Home包含来自四个任务的图像:艺术、剪贴画、产品和真实的世界。每个任务涵盖在办公室和家庭环境下收集的65个对象类别的图像。总共大约有15,500张图片。
(2)MiniDomainNet是DomainNet的一个子集,DomainNet是一个非常具有挑战性的多任务学习数据集。MiniDomainNet拥有140,000张图片,分布在126个类别中。它包含四个不同的任务:剪贴画,绘画,素描和真实的。
基于之前的研究(Shen et al. 2021; Zhou et al. 2022),我们从Office-Home中随机选择10%(每类6个镜头)和20%(每类12个镜头)的样本,以及从MiniDomainNet中随机选择1%(每类3个镜头)和2%(每类6个镜头)的样本进行训练。
基准线。我们将我们的方法与几个调优基线进行比较,包括:· Zero-shot使用手工制作的文本提示(“[class]的照片”)模板来进行Zero-shot预测。·单任务完全微调为每个任务更新单独的预训练模型,多任务完全微调为所有任务更新共享的预训练模型。·单模态快速调谐方法,包括CoOp和VPT。CoOp-MT和VPT-MT是多任务版本,使用来自所有任务的样本训练任务共享提示。此外,最近的工作MaPLe作为我们的基线之一。我们还构建了一个多任务版本,称为MapLe-MT。·其他参数有效的调整方法,包括CLIP-Adapter(Gao等人,2021),它学习视觉或语言分支上的新特征,以及BitFit(Zaken、Goldberg和Ravfogel,2022),它调整预训练模型的偏差参数。
实施详细数据。所有实验都是在NVIDIA V100 GPU上使用PyTorch工具包进行的,其中CLIP(ViT-B/16)被选为我们的默认模型。为了确保公平的比较,我们在所有参数高效调谐方法中保持一致的超参数设置。具体而言,我们使用16/4的批量大小,并针对Office-Home/MiniDomainNet训练5个时期。我们使用了SGD优化器,学习率为0.0035。

4.2实验结果

Office-Home。结果见表1。首先,我们观察到,我们的方法在不同的数据分割(10%或20%)上与多任务完全微调相当,而仅需要0.09%(0.13M对149.62M)的可训练参数。这代表了多任务图像识别的CLIP参数高效调整的重大突破。其次,本文方法的性能始终优于其他参数有效整定方法。与提示方法(即,通过对MAPLe-MT、CoOp-MT和VPTMT的实验,我们的方法显示出了显著的改进,突出了在调整CLIP时整合视觉和文本模态的必要性,并结合了小组共享知识和任务特定知识。
关于可训练参数的数量,我们的方法仅次于CoOp-MT,在准确性和可训练参数之间实现了最佳权衡。第三,我们还发现提示方法优于CLIPAdapter和BitFit,这表明将下游数据与CLIP对齐是一种更有效的方法。
在这里插入图片描述

MiniDomainNet迷你域名网。结果示于表2中。我们可以从Office-Home中得出一致的结论。我们的方法表现最好,在1%分割上达到84.9%,在2%分割上达到86.1%。然而,我们观察到全微调的性能不是很令人满意,比大多数参数有效的调整方法,这是由过拟合造成的。具体而言,MiniDomainNet的任务难度与Office-Home相比显著增加,同时,训练数据的数量有限。此外,BitFit方法表现出最差的性能。该方法仅使用少量数据就能更新CLIP的少量参数,严重削弱了CLIP原有的零炮能力。CoOp-MT、VPT-MT和MaPLe-MT的效果在1%分割时只能接近零击,但当训练数据达到2%时,CoOp-MT和MaPLe-MT分别超过零击0.9%和1.1%。因此,为了探索不同训练数据量下的性能,我们设置了相关实验,如消融研究中所详述。
在这里插入图片描述

4.3消融研究

在本节中,我们构建了各种消融实验来进一步分析我们提出的MmAP和多任务即时学习框架。同时,我们还针对不同的下行数据量设计了相关的实验。
MmAP的有效性。为了验证我们提出的MmAP的有效性,我们建立了相关的消融实验。“如图5a所示,用于多模式提示的直接方法是联合调整文本和视觉提示。另一个简单的解决方案涉及共享文本和视觉提示。然而,由于CLIP的文本编码器(dl = 512)和图像编码器(dv = 768)的尺寸不相等,因此它们不能被直接共享。因此,我们设计了MLP提示基线作为另一种比较方案,它采用两个MLP层来生成文本和视觉提示,如5 b所示。结果如图5c所示。在办公室-家庭的四项任务中,MLP基线与联合训练基线相比表现出0.5%的改善,证明了在文本提示和视觉提示之间建立联系的有效性。另外,我们观察到MmAP与MLP基线相比实现了0.54%的改善,这表明MmAP方法在通过克罗内克产品最大化文本和视觉提示之间的信息共享方面更有效。与此同时,MmAP可训练参数相对于MLP基线显著降低(0.13M vs. 3.96M).
在这里插入图片描述Office-Home和miniDomainNet数据集上的MmAP消融研究。我们建立了两个基线:(a)联合训练所述文本和视觉提示,以及(B)利用两个MLP层来生成所述文本和视觉提示。
多任务提示学习框架的有效性。在我们的多任务快速学习框架中,任务特定的MmAP和小组共享的MmAP是主要的组成部分。为了验证各个模块的重要性,我们在Office-Home上进行了相关的消融实验,结果如表3所示。为了验证任务分组策略的有效性,我们将随机分组作为比较基准。实证结果阐明,在我们的框架内的每个模块起着关键作用,累积贡献的上级性能所取得的多任务提示学习框架。与随机分组相比,在10%和20%的设置下,我们的任务分组性能分别提高了0.68%和0.85%。在10%和20%的设置下,我们的任务分组比一个组中的所有任务的性能分别提高了0.39%和0.41%。从另一个角度来看,任务特异性MmAP超过了CoOp和VPT(结果见表1),进一步证明了我们的MmAP的有效性。
在这里插入图片描述多任务提示学习框架的消融研究。“随机”是指随机分组任务。
不同的下游数据大小。我们将检查训练数据大小对Office-Home(四项任务)的影响。我们选择了每个类别1/3/6/12个镜头,并将我们的MmAP与CoOp-MT、VPT-MT和MapLe-MT进行了比较。在不同的训练数据尺度下,每项任务和方法的结果如图4所示。实验结果表明,该方法在不同数据尺度上的四个任务上均优于其他所有基线,验证了该方法的强泛化性。但是,我们观察到,在艺术和真实世界任务的1次拍摄设置中,所有方法的性能都不如零拍摄。这可能是由于1次拍摄太具体,无法作为整个任务的一般表示。当提供3个或更多个镜头用于训练时,由我们的方法引入的平均性能差距是实质性的。

5、结论

在这项工作中,我们提出了多模态对齐提示(MmAP),用于使CLIP适应下游任务,从而实现了可训练参数和性能之间的最佳权衡。同时,MmAP解决了以前单一模式提示方法的问题(例如,CoOp和VPT)破坏CLIP的模态对齐。在MmAP的基础上,设计了一个多任务提示学习框架,该框架不仅可以将相似的任务集中训练,增强任务的互补性,而且保留了每个任务的独立特征。与在有限的下游数据下对两个大型多任务学习数据集进行完全微调相比,我们的方法实现了显着的性能改进,同时仅利用了10.09%的可训练参数。

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

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

相关文章

Vue3.0组合式API:使用defineEmits()实现子组件向父组件传递数据

1、使用 defineEmits() 函数 父组件通过使用 Prop 为子组件传递数据,但如果子组件要把数据传递回去,就需要使用自定义事件来实现。父组件可以通过 v-on 指令(简写形式“”)监听子组件实例的自定义事件,而子组件可以通…

大数据Flink(一百二十一):Flink CDC基本介绍

文章目录 Flink CDC基本介绍 一、什么是CDC 二、CDC的实现机制 三、​​​​​​​​​​​​​​传统 CDC ETL 分析 四、​​​​​​​​​​​​​​基于 Flink CDC 的 ETL 分析 五、​​​​​​​​​​​​​​什么是 Flink CDC 六、​​​​​​​​​​​​​​…

KeyError: u‘2‘

字典键的定义跟要求不一致 如:digit‘23’ (字符串) 定义字典时 dict1{‘1’:X, ‘2’:X} 而不是dict1{1:X, 2:X}

8.2Roberts算子边缘检测

基本概念 Roberts算子是一种简单的一阶导数边缘检测算子,它通过计算图像在水平和垂直方向上的梯度来检测边缘。在OpenCV中,Roberts算子可以通过手动应用卷积核来实现。Roberts算子是一组2x2的小型滤波器,用于检测图像中的垂直和水平边缘。 …

飞睿智能UWB BLE Tag蓝牙防丢器模块,APP测距定位一键绑定,安全守护每一刻

我们总在不经意间与生活中的小物件擦肩而过——钥匙遗忘在咖啡厅的角落,钱包遗失在拥挤的地铁,甚至孩子的书包在人群中悄然消失……每一次的失而复得都是幸运的眷顾,但更多的是遗憾与不便。今天,就让我带你走进一个智能守护的新世…

【Python报错已解决】AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

鸿蒙OpenHarmony【轻量系统芯片移植】轻量系统STM32F407芯片移植案例

轻量系统STM32F407芯片移植案例 介绍基于STM32F407IGT6芯片在拓维信息[Niobe407]开发板上移植OpenHarmony LiteOS-M轻量系统,提供交通、工业领域开发板解决方案。移植架构采用Board与SoC分离方案,使用arm gcc工具链Newlib C库,实现了lwip、l…

基于动态顺序表实现病历存储项目

基于动态顺序表实现通讯录项目https://blog.csdn.net/Eristic0618/article/details/135718230?spm1001.2014.3001.5506 原文在这里嗷,我进行了小小修改,快去关注这位佬。阿瑾0618https://blog.csdn.net/Eristic0618?typeblog (1&#xff…

百度Android IM SDK组件能力建设及应用

作者 | 星途 导读 移动互联网时代,随着社交媒体、移动支付、线上购物等行业的快速发展,对即时通讯功能的需求不断增加。对于各APP而言,接入IM SDK(即时通讯软件开发工具包)能够大大降低开发成本、提高开发效率&#…

rocky9.2的lvs的NAT模式下的基本使用的详细示例

文章目录 前言什么是LVS?(Linux Virtual Server)LVS的组成1. 负载均衡器(Load Balancer)2. 后端服务器池(Real Servers)3. IPVS(IP Virtual Server)4. 调度算法(Schedul…

Windows 常用的键盘快捷键总结

在日常工作或学习中,使用键盘快捷键不仅能够显著提高操作速度,还可以减少对鼠标的依赖,提升整体工作效率。Windows 操作系统为用户提供了众多功能强大的键盘快捷键,覆盖了不同方面,下面就给大家总结了常用的键盘快捷键…

15. 三数之和(左右指针)

算法分析: 数组排序:先将数组排序,时间复杂度 O(NlogN)。 固定一个数,双指针查找: 用一个循环固定第一个数 nums[i]。在剩余的部分,使用双指针 left 和 right 来寻找符合条件的三元组。 跳过重复元素(注意…

javascript-原型和原型链

原型 每个函数都有一个默认的原型对象 - prototype ,通过 prototype 我们可以扩展 js 的内置对象。一个函数和它创建的实例共享这个函数的原型属性和方法。实例对象的 constructor 会指向构造函数 原型链 每个实例对象都会有一个隐式原型属性 __proto__,通过 __proto__ 指…

单细胞BCR的分析Dandelion重注释的安装以及用法----11111

今天来学习下这个新的方法,主要是针对单细胞BCR 首先安装singularity Singularity 是一种容器化技术,类似于 Docker,专为高性能计算(HPC)和科学研究领域的需求设计。它允许用户在不同环境中运行和移植应用程序&#x…

【Canvas与诗词】《登科后》唐.孟郊

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>昔日龌龊不足夸</title><style type"text/css"&g…

线程 - 线程优缺点、线程自有和共享的数据、多线程使用公共空间、线程分离、线程库对线程的管理

文章目录 一、线程的优点1. 创建的代价2. 切换的代价缓存和进程/线程切换3. 占用的资源4. 效率二、线程的缺点1. 性能损失2. 健壮性降低3. 缺乏访问控制4. 编程难度高三、线程分离1. 线程分离2. pthread_detach ()① 函数细节② 函数使用四、线程自有和共享的数据1. 线程自有的…

[数据集][目标检测]无人机飞鸟检测数据集VOC+YOLO格式6647张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;6647 标注数量(xml文件个数)&#xff1a;6647 标注数量(txt文件个数)&#xff1a;6647 标注…

酒店布草洗涤-酒店分层管理编程实现--———未来之窗行业应用跨平台架构

一、添加楼层代码 未来之窗_人工智能_传送阵(添加楼层,客户信息,300,200) CyberWin_Dialog.layer(未来之窗传送,{type:"url",title:title,move:true,width:阵眼宽度"px",height:阵眼高度"px",id:未来之窗app_通用ID,mask:false,align:59,hidecl…

css 样式简单学习(一)

目录 1. css 介绍 1.1 css 样式 1.2 css代码风格 1.2.1 书写格式 1.2.2 样式大小写​编辑 1.2.3 空格规范 2. 基础选择器 2.1 选择器的作用​编辑 2.2 选择器的分类 2.3 基础选择器 2.3.1 标签选择器​编辑 2.3.2 类选择器​编辑 2.3.3 类选择器-多类名​编辑 2.…

Linux硬连接、软连接和复制的区别

‌硬连接、软连接和复制在Linux系统中的主要区别体现在以下三点&#xff1a; 文件链接的方式文件独立性文件系统的操作上。‌ 一、硬连接 1. 硬连接是通过ln命令创建的&#xff0c;它为文件创建别名&#xff0c;与源文件共享同一inode号码&#xff0c;因此硬连接和源文件实际…