VISION TRANSFORMER ADAPTER FORDENSE PREDICTIONS

news2024/9/24 9:20:40

总结

提出了一种新范式: 开发了 Vision Transformer Adapter (ViT-Adapter),通过引入无预训练的适配器将视觉特定的归纳偏差(例如局部空间信息)引入普通 ViT,适应密集预测任务。

保留 ViT 灵活性: 与设计专门用于视觉任务的视觉特定模型不同,ViT-Adapter 保留了普通 ViT 的通用性,使其可以利用图像、多模态数据进行预训练,适应不同任务。

模块设计: ViT-Adapter 包括三个关键模块:空间先验模块、空间特征注入器和多尺度特征提取器,分别用于捕捉局部语义、将空间特征注入 ViT、以及重建多尺度特征,弥补 ViT 在密集预测任务中的缺点。

性能提升: 在目标检测、实例分割和语义分割任务上,ViT-Adapter 显著提升了普通 ViT 的性能,并在 COCO 等基准上与最先进的视觉特定转换器(如 Swin Transformer)相当甚至超越。

多模态预训练的优势: ViT-Adapter 从多模态预训练中获益,例如通过预训练 ViT 使用图像、文本、视频等数据,表现出强大的密集预测能力。

可替换的注意力机制: 文章还展示了 ViT-Adapter 的通用性,其中的注意力机制是可替换的,采用了稀疏注意力作为默认配置,并可根据需要进一步优化。


ABSTRACT

这项工作研究了一种简单而强大的视觉转换器 (ViT) 密集预测任务适配器。与最近将视觉特定归纳偏差纳入其架构的高级变体不同,由于先前的假设较弱,普通 ViT 在密集预测上表现不佳。为了解决这个问题,我们提出了 ViT-Adapter,它允许普通 ViT 实现与视觉特定转换器相当的性能。具体来说,我们的框架中的主干是一个简单的 ViT,可以从大规模多模态数据中学习强大的表示。在转移到下游任务时,使用无预训练的适配器将与图像相关的归纳偏差引入模型中,使其适用于这些任务。我们在目标检测、实例分割和语义分割等多个密集预测任务上验证了ViT-Adapter。值得注意的是,在不使用额外检测数据的情况下,我们的 ViTAdapter-L 在 COCO testdev 上产生了最先进的 60.9 框 AP 和 53.0 掩码 AP。我们希望 ViT-Adapter 可以作为视觉特定转换器的替代方案,并促进未来的研究。代码和模型将在 https://github.com/czup/ViT-Adapter 发布。

在这里插入图片描述

图 1:以前的范式与我们的范式。(a) 以前的范式设计了基于视觉的模型,并通过监督或自我监督学习在大规模图像数据集上进行预训练,然后在下游任务上微调它们。(b) 我们提出了一个无预训练的适配器,以缩小普通ViT (Dosovitskiy et al., 2020)和视觉特定变压器(如Swin (Liu et al., 2021b))之间的性能差距,用于密集预测任务。与之前的范式相比,我们的方法保留了 ViT 的灵活性,因此可以从高级多模态预训练中受益。

1 INTRODUCTION

监督训练是一种依赖于带有明确标签的训练数据进行模型训练的方法。模型通过学习输入数据与标签之间的映射关系,来预测新的未见过的数据的标签。

自我监督训练是一种无需明确标签的数据训练方法。模型通过利用数据的内在结构或属性生成伪标签,进而进行训练。这类方法通常通过从未标注数据中构造出标签进行学习。

最近,transformers在广泛的计算机视觉领域取得了显著的成功。得益于注意机制的动态建模能力和远程依赖,各种视觉转换器(Dosovitskiy等人,2020;Chen等人,2021年;Han等人,2021年;Li等人,2021c;Wu等人,2022b)在许多计算机视觉任务中很快上升,如目标检测和语义分割,超过了CNN模型,达到了最先进的性能。这些模型主要分为两类,即普通 ViT (Dosovitskiy et al., 2020; Touvron et al., 2021) 及其分层变体 (Dong et al., 2021; Liu et al., 2021b;王等人,2021; 2022a)。一般来说,后者可以产生更好的结果,并且被认为通过使用局部空间操作将特定于视觉的归纳偏差引入它们的架构中。

尽管如此,普通的 ViT(即 vanilla Transformer)仍然有一些不可忽略的优势。一个典型的例子是多模态预训练(Zhu et al., 2021; 2022; Wang et al., 2022b)。transformers源于自然语言处理 (NLP) 领域,没有输入数据的假设。配备不同的tokenizers,例如patch embedding(Dosovitskiy等人,2020)、3Dpatch embedding(Liu等人,2021c)和token embedding(Vaswani等人,2017),普通Transformer,如普通ViT,可以使用大量的多模态数据进行预训练,包括图像、视频和文本,这鼓励模型学习语义丰富的表示。然而,与视觉特定的Transformer相比,普通ViT在密集预测中具有决定性的缺陷。缺乏与图像相关的先验知识会导致收敛速度较慢,性能较低,因此普通VITS很难与视觉特定的Transformer竞争(Huang等人,2021b;Xie等人,2021;Wang等人,2022a)在密集预测任务上。受 NLP 领域的adapters (Houlsby et al., 2019; Stickland & Murray, 2019) 的启发,这项工作旨在开发一种adapters,以缩小普通 ViT 和特定于视觉的主干之间的性能差距密集预测任务。

在这里插入图片描述

图 2:使用 Mask R-CNN 在 COCO val2017 上的对象检测性能。我们看到,所提出的 ViT-Adapter 对普通 ViT 带来了显着的改进。* 使用来自 (Zhu et al., 2021) 的多模式预训练 ViT 装饰。在 ImageNet-22K 上预训练的主干用 † 标记,其他ImageNet-1K。

为此,我们提出了 Vision Transformer Adapter (ViT-Adapter),它是一种无需预训练的额外网络,可以在不修改原始架构的情况下有效地将普通 ViT 适应下游密集预测任务。具体地说,为了将视觉特定的归纳偏差引入到普通的VIT中,我们为VIT-Adapter设计了三个定制的模块,包括(1)用于从输入图像中捕获局部语义(空间先验)的空间先验模块;(2)空间特征注入器,用于将空间先验合并到VIT中;(3)多尺度特征抽取器来重建密集预测任务所需的多尺度特征。

如图 1 所示,与之前在大规模图像数据集(例如 ImageNet (Deng et al., 2009))上预训练然后在其他任务上进行微调的范式相比,我们的范式更加灵活。在我们的框架中,骨干网是一个通用提出的模型(例如,普通ViT),它不仅可以使用图像进行预训练,还可以使用多模态数据进行预训练。对于密集预测任务的迁移学习,我们使用随机初始化的适配器将与图像相关的先验知识(归纳偏差)引入预训练的主干,使模型适合这些任务。通过这种方式,使用 ViT 作为主干,我们的框架实现了与 Swin (Liu et al., 2021b) 等特定视觉转换器相当或更好的性能。

我们的主要贡献如下:

我们探索了一种新的范式,将视觉特定的归纳偏差引入到普通的ViT中。它帮助ViT实现了与最近的transformer变体(Liu等人,2021b;Wang等人,2022a)相当的性能,具有常规的ImageNet预训练,并进一步受益于多模态预训练。

我们设计了一个空间先验模块和两个特征交互操作,在不重新设计ViT架构的情况下注入图像先验。它们可以补充缺失的局部信息,并为密集预测任务重新组织细粒度的多尺度特征。

我们在多个具有挑战性的基准上评估ViT-Adapter,包括COCO (Lin et al., 2014)和ADE20K (Zhou et al., 2017)。如图 2 所示,与公平预训练策略下的现有技术相比,我们的模型始终如一地实现了更好的性能。例如,当仅使用 ImageNet-1K 预训练时,ViT-Adapter-B 在 COCO val 上报告了 49.6 个框 AP,比 Swin-B 高出 1.0 个点。得益于多模态预训练(Peng et al., 2022),我们的 ViT-Adapter-L 产生 60.9 框 AP,这是 COCO test-dev 上的最佳记录,无需对 Objects365 等额外检测数据进行训练(Shao et al., 2019)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3:ViT-Adapter 概述和两种相关方法。Li等人(2021b)和ViTDet (Li et al., 2022b)构建简单的特征金字塔,使普通ViT适应目标检测,只考虑任务先验。不同的是,我们的适配器利用了任务先验和输入图像。

2 RELATED WORK

Transformers.近年来,Transformers在自然语言处理、计算机视觉和语音识别等多种模式中主导了各种任务。vanilla Transformer (Vaswani et al., 2017) 最初被提出用于机器翻译,仍然是当今 NLP 任务的最先进架构。ViT (Dosovitskiy et al., 2020)是第一个在不进行太多修改的情况下将普通Transformers推广到图像分类任务的工作。PVT (Wang et al., 2021) 和 Swin (Liu et al., 2021b) 通过合并来自 CNN 的金字塔结构引入了更多特定于视觉的归纳偏差。之后,Conformer (Peng et al., 2021)提出了第一个将CNN与Transformers相结合的双网络。最近,BEiT (Bao et al., 2022) 和 MAE (He et al., 2021) 将 ViT 的范围扩展到具有蒙版图像建模 (MIM) 的自监督学习,展示了普通 ViT 架构的强大潜力。许多作品(Li et al., 2021b; Zhu et al., 2021; 2022; Wang et al., 2022b)表明,设计视觉特定模型是一个重要的方向,但通用架构(例如普通 ViT)对于掩码数据建模和多模态预训练更加灵活和重要。因此,我们开发了一个无预训练的适配器,在不修改ViT的体系结构的情况下引入图像先验,保持其灵活性,享受先进的多模态预训练。

Decoders for ViT.密集预测的架构通常遵循编码器-解码器模式,其中编码器生成丰富的特征,解码器聚合并将它们转换为最终预测。最近,受ViT全局接受域的启发,许多工作将其作为编码器和设计特定于任务的解码器。SETR (Zheng et al., 2021)是第一个采用ViT作为骨干的工作,并开发了几个CNN解码器进行语义分割的工作。Segmenter (Strudel et al., 2021) 还将 ViT 扩展到语义分割,但不同之处在于它配备了基于转换器的解码器。DPT (Ranftl et al., 2021) 通过 CNN 解码器进一步将 ViT 应用于单目深度估计任务,并产生了显着的改进。总之,这些工作通过设计模态和特定于任务的解码器来提高 ViT 的密集预测性能,但仍然是 ViT 单尺度和低分辨率表示的弱点。

Adapters。迄今为止,adapters已广泛用于 NLP 领域。PALs (Stickland & Murray, 2019) 和 Adapters (Houlsby et al., 2019) 在transformer编码器中引入新模块进行特定任务微调,使预训练模型快速适应下游 NLP 任务。在计算机视觉领域,已经提出了一些用于增量学习的适配器(Rosenfeld & Tsotsos,2018)和域适应(Rebuffi 等人,2017; 2018)。随着 CLIP (Radford et al., 2021) 的出现,许多基于 CLIP 的适配器 (Gao et al., 2021; Sung et al., 2021; Zhang et al., 2021) 被提出来将预训练的知识转移到零样本或少样本下游任务。最近,李等人。 (2021b) 和 ViTDet (Li et al., 2022b) 采用一些上采样和下采样模块来适应普通 ViT 进行目标检测,如图 3(a) 所示。然而,在常规训练设置(即应用 ImageNet 监督预训练并对 36 个 epoch 进行微调)下,它们的检测性能仍然不如最近的模型(Chu et al., 2021b; Dong et al., 2021; Wang et al., 2022a; Wu et al., 2022b),很好地结合了图像先验。因此,为ViT设计一个强大的密集预测任务适配器仍然具有挑战性。

在这里插入图片描述

图 4:ViT-Adapter 的整体架构。(a) ViT,其编码器层被划分为 N(通常为 N = 4)相等的块以进行特征交互。(b) 我们的 ViT-Adapter,它包含三个关键设计,包括 © 用于从输入图像中提取局部空间上下文的空间先验模块,(d) 空间特征注入器,用于将空间先验引入 ViT,以及 (e) 多尺度特征提取器,用于从 ViT 的单尺度特征中重新组织多尺度特征

3 VISION TRANSFORMER ADAPTER

3.1 OVERALL ARCHITECTURE

如图 4 所示,我们的模型可以分为两部分。第一部分是普通ViT (Dosovitskiy et al., 2020),它由一个补丁嵌入和L个变压器编码器层组成(见图4(a))。第二部分是提出的ViT-Adapter,如图4(b)所示,它包含(1)空间先验模块,用于从输入图像捕获空间特征,(2)空间特征注入器将空间先验注入到ViT中,(3)多尺度特征提取器,从ViT的单尺度特征中提取层次特征。

对于ViT,首先将输入图像输入到补丁嵌入中,将图像分为16 × 16个不重叠的patch。之后,这些补丁被展平并投影到 D 维标记,特征分辨率降低到原始图像的 1/16。然后,这些与位置嵌入添加的标记通过 L 个编码器层。

对于 ViT-Adapter,我们首先将输入图像输入到空间先验模块中。将收集三个目标分辨率的D维空间特征(即1/8、1/16和1/32)。然后,这些特征图被展平并连接为特征交互的输入。具体来说,给定交互次数 N(通常为 N = 4),我们将 ViT 的转换器编码器平均拆分为 N 个块,每个块包含 L/N 个编码器层。对于第 i 个块,我们首先通过空间特征注入器将空间先验 Fispin 注入到块中,然后通过多尺度特征提取器从块的输出中提取层次特征。在N个特征交互后,我们得到了高质量的多尺度特征,然后将特征分为1/8、1/16和1/32三个目标分辨率。最后,我们利用2 × 2转置卷积对1/8尺度特征图进行上采样来构建1/4尺度的特征图。通过这种方式,我们获得了类似于 ResNet (He et al., 2016) 的特征金字塔,可用于各种密集预测任务。

3.2 SPATIAL PRIOR MODULE

最近的研究(Wang et al., 2022a; Wu et al., 2021; Fang et al., 2022; Park & Kim, 2022)表明卷积可以帮助转换器更好地捕捉局部空间信息。受此启发,我们引入了空间先验模块 (SPM)。它旨在对与补丁嵌入层平行的图像的局部空间上下文进行建模,从而不改变ViT的原始架构。

如图 4© 所示,采用了从 ResNet (He et al., 2016) 借用的标准卷积词干,它由三个卷积和最大池化层组成。然后,我们使用一堆 stride-2 3×3 卷积来加倍通道数并减少特征图的大小。最后,最后应用几个 1×1 卷积将特征图投影到 D 维。这样,我们得到了一个特征金字塔{F1, F2, F3},其中包含分辨率为1/8、1/16和1/32的d维特征向量。然后,我们将这些特征映射扁平化并拼接成特征标记,作为特征交互的输入。

3.3 FEATURE INTERACTION

由于先验假设较弱,与视觉特定的变压器相比,普通ViT在密集预测任务上的性能次优(Chu等人,2021a;Dong等人,2021;Liu等人,2021b;Wang等人,2022a)。为了缓解这个问题,我们提出了两个特征交互模块来桥接我们的 SPM 和 ViT 的特征图。具体来说,这两个模块主要基于交叉注意力,即空间特征注入器和多尺度特征提取器。

Spatial Feature Injector.如图4(d)所示,该模块用于将空间先验注入到ViT中。具体来说,对于 ViT 的第 i 个块,我们将输入特征 Fi vit 作为查询,空间特征 Fi sp 作为键和值。我们使用交叉注意将空间特征F i sp注入到输入特征F i vit中,可以写成Eqn。1.

在这里插入图片描述

其中norm(·)为LayerNorm (Ba et al., 2016),注意层Attention(·)建议使用稀疏注意。此外,我们应用一个可学习的向量 γi 来平衡注意力层的输出和输入特征 F i vit,初始化为 0。这种初始化策略确保 Fivit 的特征分布不会由于空间先验的注入而大幅修改,从而更好地利用 ViT 的预训练权重。

Multi-Scale Feature Extractor。在将空间先验注入到ViT之后,我们通过将F i vit传递给第i块的编码器层来获得输出特征Fi+1 vit。然后,我们应用由交叉注意力层和前馈网络 (FFN) 组成的模块来提取多尺度特征,如图 4(e) 所示。这个过程可以表述为:

在这里插入图片描述

3.4 ARCHITECTURE CONFIGURATIONS

我们为 4 种不同大小的 ViT 构建了我们的 ViT-Adapter,包括 ViT-T、ViT-S、ViT-B 和 ViTL。对于这些模型,我们的适配器的参数数量分别为 2.5M、5.8M、14.0M 和 23.7M。我们采用可变形注意力(Zhu et al., 2020)作为我们方法的默认稀疏注意力,其中采样点的数量固定为 4,注意力头的数量设置为 6、6、12 和 16。交互次数 N 为 4,在最后一个特征交互中,我们堆叠三个多尺度特征提取器。此外,我们将适配器中的 FFN 比率设置为 0.25,以节省计算开销,即 4 个不同的适配器的 FFN 的隐藏大小分别为 48, 96, 192 和 256。附录 B 中的表 10 显示了每种配置的更多详细信息。

4 EXPERIMENTS

以前的工作(Wang et al., 2021)表明,金字塔先验有利于密集预测,但对图像分类几乎没有收益。因此,在这项研究中,我们专注于如何更好地适应现成的预训练 ViT 到密集预测任务。我们希望这种方法还将有助于解耦上游预训练和下游微调的模型设计。

4.1 OBJECT DETECTION AND INSTANCE SEGMENTATION

4.2 SEMANTIC SEGMENTATION

4.3 COMPARISONS WITH STATE-OF-THE-ARTS

4.4 ABLATION STUDY

ViT vs. ViT-Adapter Feature.

最近的工作(Park & Kim, 2022; Si et al., 2022)表明 ViT 展示了学习低频全局信号的特征,而 CNN 倾向于提取高频信息(例如局部边缘和纹理)。为了显示 ViT 和 ViT-Adapter 的特征之间的差异,我们首先使用傅立叶分析作为可视化工具包。如图 5(a) 所示,傅里叶变换特征图(平均超过 100 张图像)的傅里叶谱和相对对数幅度表明 ViT-Adapter 比 ViT (Li et al., 2021b) 基线捕获更多的高频信号。此外,我们还在图 5 (b)© 中可视化了 stride-8 特征图,这表明 ViT 的特征是模糊的和粗糙的。相比之下,我们的特征更加细粒度,具有更多的局部边缘和纹理。这一观察表明,我们的方法将 CNN 的优点嫁接到 ViT 中以捕获高频信息。

Ablation for Components.

为了研究每个关键设计的贡献,我们将 ViT-S 基线 (Li et al., 2021b) 逐渐扩展到我们的 ViT-Adapter-S。所有模型都使用 Mask R-CNN 进行训练 1× 时间表。如表6左侧所示,通过直接调整和添加SPM的空间特征,我们的变体1比基线提高了1.4 APb和0.9 APm,表明局部空间信息对于密集预测是必不可少的。从变体 2 中,我们发现空间特征注入器进一步将性能提高了 1.0 APb 和 0.8 APm。这一观察表明,交叉注意是一种更灵活的注入空间特征的方法。此外,我们采用多尺度特征提取器重构层次特征,得到2.1 APb和1.1 APm增益,缓解了ViT单尺度特征的缺点。总之,我们提出的组件都是必要的,并共同创建了 4.5 APb 和 2.8 APm 改进

在这里插入图片描述

图 5:ViT 与 ViT-Adapter 功能。(a)傅里叶变换特征图的相对对数幅度。(b) 检测结果。© Stride-8 特征图。与 ViT 基线 (Li et al., 2021b) 相比,我们的 ViT-Adapter 捕获了更多的高频信号,并产生更细粒度的具有丰富边缘和纹理的特征,这对密集预测有很大帮助。

表 6:ViT-Adapter 的消融研究。(左)消融关键组件。我们提出的组件共同带来了 4.5 APb 和 2.8 APm 增益。(右)消融交互次数 N。当 N = 4 时,该模型给出了最佳性能。 SPM 对于空间先验模块来说很短。

表 7:在我们的适配器中使用不同注意力机制消融。每次迭代训练时间和 GPU 训练内存由 A100 GPU 测量,每个 GPU 批量大小为 2 和 FP16 训练。“*”表示使用激活检查点来保存训练内存。

交互次数。在表 6 的右边,我们研究了交互次数的影响。具体来说,我们构建了几个具有不同交互数量的 ViT-Adapter-S 变体。我们观察到,当 N 变大时,模型精度饱和,应用更多的交互不能单调地提高性能。因此,我们默认根据经验将 N 设置为 4。

注意力类型。我们的方法是一个通用框架,其中注意力机制是可替换的。为了验证这一点,我们采用 ViT-Adapter-S 作为基本模型,并研究了 4 个不同的注意力机制。如表 7 所示,具有线性复杂度的稀疏注意力比具有二次复杂度的全局注意力更适合我们的适配器。我们最终使用可变形注意力 (Zhu et al., 2020) 作为默认配置。值得注意的是,它可以在未来被其他更高级的注意力机制所取代,以进一步提高性能。

稀疏注意力(Sparse Attention)是一种减少自注意力机制计算复杂度的技术。在传统的自注意力机制中,注意力的计算是全局的,即每个位置都要和输入序列中的所有位置进行交互,导致计算复杂度为 O(n2)O(n^2)O(n2)(其中 nnn 是序列长度)。这种全局计算在处理长序列或高分辨率图像时,计算和内存开销很大。
稀疏注意力的主要思想: 通过限制注意力机制的计算范围,使每个位置只与部分位置(而非全部位置)进行交互,从而减少计算量。通过这种方式,可以将计算复杂度从 O(n2)O(n^2)O(n2) 降低到 O(n)O(n)O(n) 或 O(nlog⁡n)O(n \log n)O(nlogn),使得注意力机制可以处理更长的序列或更大尺寸的图像。
稀疏注意力的常见方法:

  1. 局部注意力(Local Attention): 仅在每个位置的局部窗口内计算注意力。这在图像处理任务中尤其有效,因为像素通常与其周围的局部区域具有更强的相关性。
  2. 块稀疏注意力(Block Sparse Attention): 将输入分块(例如,将图像分成若干区域),在每个块内部或在特定块之间计算注意力,而不是全局计算。
  3. 滑动窗口注意力(Sliding Window Attention): 为每个位置指定一个固定大小的窗口,仅在窗口内计算注意力。这种方法在自然语言处理和图像处理任务中常见。
  4. 分层注意力(Hierarchical Attention): 通过层次结构,先计算局部注意力,再逐步汇聚全局信息,从而减少不必要的全局计算。
  5. 可变形注意力(Deformable Attention): 是稀疏注意力的一种变体,它为每个查询动态地选择最相关的键值对进行注意力计算,而不是固定某种稀疏模式。这使得模型能够灵活地捕捉跨距离的依赖关系,且计算效率较高。
    稀疏注意力的优点:
  • 计算效率更高: 降低了计算复杂度,特别适合处理大规模图像或长文本。
  • 内存使用更少: 减少了模型对内存的需求,能处理更大尺寸的数据。
  • 适应性好: 某些变体(如可变形注意力)可以根据任务动态调整,保持较高的表达能力。

5 CONCLUSION

这项工作探索了一种新的范式,即 ViT-Adapter,以弥合普通 ViT 和特定视觉转换器在密集预测任务上的性能差距。在不修改固有架构的情况下,我们灵活地将与图像相关的归纳偏差注入到 ViT 中,并重建密集预测所需的细粒度多尺度特征。在目标检测、实例分割和语义分割上的大量实验表明,我们的方法可以实现与设计良好的视觉特定变压器相当或更好的性能,并进一步从先进的多模态预训练中获得相当大的好处。

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

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

相关文章

Linux日志-lastlog日志

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux 系统中的日志是记录系统活动和事件的重要工具,它们可以帮助管理员监视系统状态、调查问题以及了解系统运行…

【动态规划专栏】专题一总结

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小…

电脑错误mfc140.dll丢失怎么办?mfc140.dll丢失如何修复?

在使用基于Microsoft Visual Studio 2015开发的应用程序时,可能会遇到个别组件影响整体功能的情况,其中“mfc140.dll丢失”错误就是常见的一个技术障碍。这个DLL文件属于Microsoft Foundation Class (MFC) Library,它对Windows应用程序的运行…

基于vue框架的朝阳保险公司营销管理系统0wamc(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,保险信息,保险类型,订单信息,赔偿信息,联系我们,购买指南,到期提醒 开题报告内容 基于Vue框架的朝阳保险公司营销管理系统的开题报告 一、研究背景 随着保险行业的快速发展和市场竞争的日益激烈,传统的管理模式已难以…

恶意代码分析 | Lab1

前言 穿插virus分析的学习,毕竟逆向技术最后要用在攻防中。 Lab1就没必要动态分析了,静态学学写法。 Lab01-01.exe 前面是内存映射技术,对内存进行修改操作。 将Kernel32.dll和Lab01-01.dll的内存都Map出来,便于后续更改&…

有没有性价比高一些的开放式耳机推荐?盘点四款高性价比蓝牙耳机

在正式介绍几款高性价比产品,先来和各位聊聊什么是开放式耳机。开放式耳机是目前比较流行的耳机种类,其特点是通过采用海绵状的微孔发泡塑料制作透声耳垫,不堵塞耳道,使得声音可以泄露,同时佩戴者也能听到外界声音 。 …

民宿酒店预订系统V1.0.8

多门店民宿酒店预订管理系统,快速部署属于自己民宿酒店的预订小程序,包含预订、退房、WIFI连接、吐槽、周边信息等功能。提供全部无加密源代码,支持私有化部署。 V1.0.8修复房间预订状态无法筛选的问题 修复房间预订状态无法筛选的问题 修复…

为自闭症儿童提供全方位支持的自闭症全托管机构

在自闭症儿童的世界里,每一个细微的进步都凝聚着家庭与社会的无尽努力与期盼。星启帆自闭症儿童康复机构,作为一所致力于为自闭症儿童提供全方位支持的全托管机构,正以其专业的服务、温馨的环境和全面的康复计划,成为众多家庭信赖…

UE4_后期处理_后期处理材质及后期处理体积二

效果: 步骤: 1、创建后期处理材质,并设置参数。 2、回到主界面,找到需要发光的物体的细节面板。 渲染自定义深度通道,默认自定义深度模具值为10(需要修改此值,此值影响物体的亮度)。 3、添加…

pytest压力测试:不断发送数据,直到发现数据丢失

示例场景 假设有一个 send_data 函数接受数据并返回成功或失败的状态。 创建一个测试用例,通过逐步增加数据量来测试这个函数,直到返回失败为止。 步骤 定义压力测试函数 定义一个函数。不断发送数据,直到发现数据丢失。 创建 pytest 测试…

PHP一站式班级解决方案班级管家系统小程序源码

一站式班级解决方案 —— 班级管家系统 🎓【开篇:班级管理的烦恼,你中招了吗?】🎓 作为班主任或班级管理者,你是否经常为繁琐的班级事务而头疼?从日常通知的发布到作业的收集,从班…

ChatGPT写文章时,如何去除生硬的Ai味?

仅做分享,侵删 在使用AI进行写作时,常常会发现生成的文章带有明显的“机器味”,一眼就能看出是由AI生成的。这是许多希望借助AI进行自媒体创作的小伙伴们面临的一个主要问题。AI生成的文章往往过于书面化,缺乏人情味,导…

葡萄检测-目标检测数据集(包括VOC格式、YOLO格式)

葡萄检测-目标检测数据集(包括VOC格式、YOLO格式) 数据集: 链接:https://pan.baidu.com/s/1YMwAaSJc8H5SI0f8RVSidw?pwdiygs 提取码:iygs 数据集信息介绍: 共有1646 张图像和一一对应的标注文件 标注文…

matlab实现kaiser窗+时域采样序列(不管原信号拉伸成什么样子)是一样的,变到频谱后再采样就是一样的频域序列。

下图窗2的频谱在周期化的时候应该是2(w-k*pi/T)我直接对2w减得写错了 可见这两个kaiser窗频谱不一样,采样间隔为2T的窗,频谱压缩2倍,且以原采样频率的一半周期化。 但是这两个不同的kaiser窗在频域采样点的值使完全一…

MySQL复习4

触发器 触发器(trigger)是 MySQL 提供给程序员和数据分析员来保证数据完整性的一种方法,他是与表时间相关的特殊存储过程,他的执行不是由程序调用,也不是手动启动,而是由事件来触发,比如当时对…

2024-09-04作业

作业 代码 #include <iostream> using namespace std; class Animal { private: string narrator; public: Animal(){} Animal(string narrator):narrator(narrator) {} virtual void perform() { cout << "讲解员解说中&…

神策SDK不支持Windows客户端全埋点,怎么实现用户统计分析?

本文将介绍&#xff0c;ClkLog针对神策不支持全埋点的客户端实现用户访问基础统计分析 1。 客户遇到的问题 ClkLog的用户访问基础统计分析功能是基于神策SDK的全埋点来实现的。 我们遇到有些客户是使用C、C#等语言来开发的客户端&#xff0c;然而神策此类SDK&#xff08;如C, C…

activiti PROC_DEF_ID_超64位解决方案

默认得id是这样的 如果前面的code长了&#xff0c;就会出问题&#xff0c;而且手动修改activiti相关表里面的长度也不行&#xff0c;所有改采用雪花算法&#xff0c;把后面的uuid了&#xff0c;修改后 这也64的长度也够了&#xff0c;注意只对新发布的流程有效 <dependency…

代码随想录算法训练营第三十六天|1049. 最后一块石头的重量 II 494. 目标和 474.一和零

1049. 最后一块石头的重量 II 题目&#xff1a; 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那…

[Linux]:环境开发工具

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 软件包管理器——yum 1.1 yum的概念 在Linux系统中&#xff0c;如果想安…