E2VPT: An Effective and Efficient Approach for Visual Prompt Tuning

论文汇总

存在的问题

1.以前的提示微调方法那样只关注修改输入,而应该明确地研究在微调过程中改进自注意机制的潜力,并探索参数效率的极限。

2.探索参数效率的极值来减少可调参数的数量?

解决办法

提示嵌入进行transformer中

提示剪枝

Token-wise Pruning

Token-wise Pruning对prompt生成一个mask, ρ = { ρ 1 , ρ 2 , … , ρ M } , ρ k ∈ { 0 , 1 } \rho=\{\rho_1,\rho_2,\ldots,\rho_M\},\rho_k\in \{0,1\} ρ={ρ1,ρ2,,ρM},ρk{0,1} ( M M M为可视提示符的长度)。 ρ k ∈ { 0 , 1 } \rho_k\in \{0,1\} ρk{0,1} 代表第 i i i 个token的重要程度,0代表这个token被丢弃, P ~ k = ρ k ⋅ P k \tilde{P}_k=\rho_k\cdot {P}_k P~k=ρkPk

Segment-wise修剪

Segment-wise修剪对Token-wise Pruning之后的Token做进一步的剪枝,具体来说就讲Token-wise Pruning之后的Token分为 R R R 个part,将每个part视为一个整体。每一个part也有一个类似于Token-wise Pruning的 ρ \rho ρ 变量,表示每一个part的Token是否需要被抛弃。

摘要

随着基于transformer的模型的规模不断增长,为新任务微调这些大规模预训练的视觉模型已经变得越来越参数密集。参数高效学习是为了减少微调过程中可调参数的数量。尽管这些方法显示出很好的结果,但与完全微调相比,仍然存在显着的性能差距。为了解决这一挑战,我们提出了一种有效和高效的视觉提示调谐(E2VPT)方法,用于大规模基于变压器的模型自适应。具体来说,我们在自注意层和输入层分别引入了一组可学习的键值提示和视觉提示,以提高模型微调的有效性。此外,我们设计了一个提示剪枝程序,在保持模型性能的同时系统地修剪低重要性提示,大大提高了模型的效率。实证结果表明,我们的方法在两个基准上优于几个最先进的基线,参数使用率相当低(例如,VTAB-1k上的模型参数使用率为0.32%)。我们的代码可在https://github.com/ChengHan111/E2VPT上获得。

1. 介绍

人工智能(AI)的发展不仅应优先考虑性能进步,还应强调可持续部署[64,78,80,87]。尽管人们对视觉相关任务的性能改进有着迷人的追求,但目前模型的规模一直在迅速增加,这导致了能量密集型和计算成本高昂的训练[31,73,92]。基于transformer的架构目前主导着视觉相关模型,如ViT-Huge [12] (632M)和Swin-Large [54] (197M),它们的参数明显多于卷积神经网络(CNN)像ResNet [26] (25M)。从头开始训练如此大的模型存在着数据有限[5,20,75]和低精度下缓慢收敛[37,47]等挑战。克服这些挑战的一个常见范例是预训练-然后微调,它减少了对大量训练数据的需求,并加快了各种视觉任务的处理速度。然而,传统的全调优涉及到为每一个任务存储和部署backbone参数的完整副本[34],计算成本很高,不适合快速模型部署。

图1所示。在预训练之后微调的范式下,$ \text{E}^2 \text{VPT} $(我们的)与其他工作(即部分调谐[91],额外模块[6]和提示调谐[34]方法)。与最先进的微调方法相比,我们的方法获得了可靠的性能提升,并且在采用预训练的ViT-Base/16[12]作为主干的广泛分类任务上具有完全微调的竞争力,参数使用量相当低(见表1)。颜色分别表示VTAB-1k[96]上的结果:Specialized, Natural和Structure。

为了解决这个问题,已经开发了各种方法,可分为三大类(见图1):部分调优、额外模块和提示调优方法。部分调优方法[10,35,58]只对骨干的一部分进行微调,如分类器头部或最后几层,而冻结其他部分。额外的模块方法将可学习的偏置项[6]或额外的适配器[70,98]插入网络以进行适应。提示调谐方法在变压器的输入层添加提示令牌[34,36,94],而不改变或微调主干本身。所有这些方法都是在预训练后微调的模式下运行的,与完全微调相比,这减少了可学习参数的数量[10,35,58,70,98]。

然而,尽管取得了令人鼓舞的结果,但现有的参数高效方法存在两个主要局限性。首先,他们没有仔细检查transformer自关注机制的核心架构,导致完全微调的性能差距很大。其次,它们通常需要对相对大量的参数进行微调以达到合理的性能,而无法探索参数效率的极值。

以上概述的观点引出了两个基本问题:

1:我们如何才能为大规模基于transformer的视觉模型建立快速调整的有效性?

2:我们如何探索参数效率的极值来减少可调参数的数量?

这两个问题是我们工作的基础。直觉是,我们不应该像以前的提示调整方法那样只关注修改输入,而应该明确地研究在微调过程中改进自注意机制的潜力,并探索参数效率的极限

为了回答问题1,我们讨论并分析了transformer的自关注机制,该机制对于在全局上下文中捕获远程令牌依赖关系至关重要[21,38,49]。除了输入视觉提示外,我们还引入了可学习的键值提示,并将它们集成到自注意层的键值矩阵中。在微调期间,键值提示与输入可视提示一起学习。这种方法有效地利用了设计良好的transformer提示体系结构,从而显著提高了性能。此外,它为电流互感器架构提供了一个通用的即插即用提示模块,其微调解决方案在概念上不同于前面提到的视觉领域的所有技术。

在问题2的激励下,我们提出了一种修剪策略,在保持模型性能的同时进一步减少参数的数量。我们的方法从彩票假设(LTH)中获得灵感[16,102],它假设对于给定的任务,存在一个子网络,该子网络可以匹配原始过参数化网络的测试精度,而不需要不必要的权重[22,23,41,43,44]。在此范例的基础上,我们重新审视了提示调优方法的核心设计,并进一步减少了可学习参数的数量。具体来说,我们的目标是保留对性能有重大贡献的提示令牌,同时在微调期间修剪冗余或不必要的提示令牌。通过修剪这些不必要的提示,我们可以在保持性能的同时显著提高提示调优效率。

为了回答问题1-2,我们提出$ \text{E}^2 \text{VPT} $,即Effective and Efficient Visual Prompt Tuning。e2vpt是一种新颖的提示调优框架,它既具有架构意识,又具有修剪锚定(见图1)。在§2中,我们进行了文献综述并讨论了相关工作。我们提出的方法在§3中提出,在那里我们详细描述了我们如何设计视觉和键值提示,以更少的参数实现卓越的性能。在§4中,我们在各种基准、主干和不同的预训练目标上提出了令人信服的实验结果。具体来说,我们的方法在VTAB-1k上的准确率比完全调优平均提高了5.85%,比VPT平均提高了1.99%[34]。此外,我们的方法使用的可学习参数比现有方法少得多,平均只占VTAB-1k主干参数的0.32%,而VPT平均需要0.68%(见图1)。我们进一步证明并解释了我们的方法比双曲可视化的VPT的优越性。最后,我们在附录中展示了我们的方法在语言领域的强大算法泛化。我们相信这项工作能为相关领域提供有价值的见解。

2. 相关工作

2.1. 视觉Transformers

受transformer在自然语言处理(NLP)中取得的巨大成功的启发[5,11,52,69,79,83],研究人员将transformer架构扩展到各种监督视觉任务,包括图像分类[12,53,54,56],图像分割[46,51,74,82,84,86,100],目标检测[4,7,50,66,93,101]和姿态估计[29,30,48,90])。自监督预训练范式[3,10,24]也得到了探索,并得到了最先进的结果。与卷积神经网络(cnn)相比,transformer因其优越的性能和可扩展性而在视觉相关学科中占据主导地位[27,34]。然而,使transformer适应各种视觉任务所需的大量计算和参数开销也不容忽视[15,33,97]。例如,最近基于transformer的模型,如MViTv2Large [45] (218M)、vitg [95] (1.8B)、SwinV2-G [53] (3.0B)和V-MoE [72] (14.7B),会产生大量的计算成本。因此,我们提出$ \text{E}^2 \text{VPT} $,旨在降低基于transformer的架构的计算成本,同时在预训练-然后微调范式中保持高性能。

2.2. 参数高效微调

高效的模型训练已经引起了视觉界的广泛关注,尤其是随着视觉transformer的兴起[1,8,12,54,85]。然而,尽管这些模型非常有效并被广泛使用,但它们对于实际部署和调整来说往往过于庞大。因此,通常采用预训练-然后微调范式。虽然完全微调确保了强大的性能,但这是一种涉及更新所有网络参数的昂贵方法[27,75]。为了克服这一挑战,研究人员正在探索平衡参数效率和鲁棒性能的替代方案,可大致分为三组:部分调优、额外模块和提示调优方法。

部分调优方法被广泛用于参数高效的微调。这些方法包括冻结大部分主干,只微调一小部分参数,如线性[32]或MLP磁头[9],或主干的几个块/层[24,65,91,99]。虽然这些方法直接且易于实现[10,35,58],但与完全微调相比,它们通常存在很大的性能差距。额外的模块方法设计了额外的可学习的插件架构进行微调。例如,[98]中的工作在冻结原始网络的同时交替引入了一个侧结构。[6,70]中的作品将额外的残余单元插入主干。然而,这些方法的一个缺点是插入的模块通常是针对特定的体系结构定制的,可能无法推广到其他体系结构。

此外,与部分调优方法相比,这些模块通常消耗更多的参数。提示调整或提示[28,42,57,89]最初被提出用于语言领域的快速模型自适应。这些方法将一组可学习的向量添加到主干的输入中,并且仅在微调期间更新这些特定于任务的提示。最近,在视觉领域引入了视觉相关提示[18,34,88],它在输入序列中设计视觉提示,并在完全微调的情况下显示出具有竞争力的性能。然而,目前的方法没有考虑基于transformer的体系结构的内部设计,导致不太有效的提示解决方案。相比之下,我们的方法注意到架构并锚定在修剪上,这在概念上将其与上述方法区分开来。

3. 我们的E2VPT方法

在本节中,我们将介绍E2VPT,这是一种新颖的视觉提示调谐方法,用于有效和高效的大规模基于transformer的模型微调。我们首先在§3.1中定义这个问题和记号。在§3.2中介绍了通过设计视觉和键值提示符进行有效的提示调优,然后在§3.3中介绍了有效的提示修剪。总体框架如图2所示。

3.1. 问题定义

在本节中,我们定义了 E 2 VPT \text{E}^2 \text{VPT} E2VPT 问题并提供了相关符号。假设我们有一个主干视觉transformer器模型 T \textbf{T} T,它在大量数据和任务上进行了预训练。视觉transformer的输入是一系列图像补丁 I = { I 1 , I 2 , … , I m } I=\{I_1,I_2,\ldots,I_m\} I={I1,I2,,Im},其中 m m m为图像补丁总数。然后用位置编码将每个patch投影到 d d d维嵌入中,即 E = { E j ∣ 1 ≤ j ≤ m } E=\{E_j|1\le j\le m\} E={Ej∣1jm},其中 E j = Emb ( I j ) E_j=\text{Emb}(I_j) Ej=Emb(Ij)。视觉transformer T \textbf{T} T N N N 个相同的transformer层组成,表示为:

这里的每个transformer层都是多头自关注(MSA)和前馈网络(FFN)的堆栈:

给定一个新的视觉任务,目标是微调一个模型 T ^ \hat{\textbf{T}} T^,在只调整少量参数的情况下,在任务上提供良好的性能。在视觉提示调优的上下文中, T ^ = { T , P } \hat{\textbf{T}}=\{\textbf{T},\textbf{P}\} T^={T,P},其中包括一个冻结的主干 T \textbf{T} T,以及具有很少可调参数的可训练提示 P \textbf{P} P

3.2. 有效的提示

图2。E2VPT框架概述。在预训练-然后微调范式下,只有transformer输入和主干(§3.2)中的提示在微调过程中更新,而所有其他组件保持冻结。在(d)中,我们进一步在两个粒度级别(即,标记明智和分段明智)上引入修剪(§3.3),以消除倒带期间不利的输入提示。

大多数现有的提示调优方法侧重于通过将一组视觉提示添加到transformer层的输入序列来调优,而没有考虑变压器体系结构的内部设计。然而,为了提高提示调优的有效性并实现最佳的微调性能,我们提出了一种新的方法,在我们的视觉提示调优框架中,除了输入视觉提示( P I \textbf{P}_I PI )外,还包含一组键值提示( P K \textbf{P}_K PK P V \textbf{P}_V PV )。直观地,输入视觉提示被插入到每个编码器层的输入序列中,这些编码器层学习表示新任务。键值提示与自注意模块中的键和值参数矩阵连接在一起,该模块学习从数据中捕获新的注意模式。

视觉提示。视觉提示是一组与输入视觉标记具有相同维度的 d d d 维嵌入向量。它们被附加到每个transformer编码器层的输入序列中,并与所有输入令牌交互。视觉提示的作用与传统提示调优方法中的提示符号类似[34,42],它们学习特定于任务的嵌入,以指导模型在新任务上执行。

正式地,这些视觉提示被定义为 P I = { P I 1 , P I 2 , … , P I N } P_I=\{P^1_I,P^2_I,\ldots,P^N_I\} PI={PI1,PI2,,PIN},其中 P I i P^i_I PIi 为可学习视觉在第i层编码器中提示, N N N为总层数。然后编码器层表示为:

其中 Z i Z^i Zi 表示由第 i i i层编码器计算的上下文嵌入。不同的颜色分别表示可训练参数和固定参数。对于输入图像patch E E E的嵌入,它们是用主干的冻结Emb投影进行初始化的。

键-值提示。视觉提示对于学习新任务的知识很有用。然而,它们在指导transformer编码器层之间的信息交互方面存在不足。原因是当对新数据进行微调时,图像分布可能与用于预训练骨干模型的图像示例中的图像分布有很大不同。因此,增强模型从微调数据中捕获新信息的能力以及在输入令牌之间进行更有效的关注以学习新模式是至关重要的。

为此,我们提出了一种新的方法,通过引入一组新的键值提示, P K P_K PK P V P_V PV,它们被合并到每个编码器层的注意力模块中(如图2(a)所示)。这些键-值提示是只有几列的小矩阵,但与原始注意力模块中的键和值矩阵共享相同的行数。为了执行新的注意力计算,键和值矩阵分别与相应的 P K P_K PK P V P_V PV 提示符相连接。这个过程定义如下:

其中FFN为前馈网络,MSA为编码器层内的多头注意。 h h h 表示第 h h h 个头。 K ′ K' K V ′ V' V 是新的键和值嵌入矩阵,定义为:

其中, K K K V V V 表示主干中的原始键矩阵和值矩阵。通过这种方式,键值提示可以帮助指导模型适应新数据。在我们的实现中,我们更进一步,在每个transformer层中启用 P K P_K PK P V P_V PV 提示的参数共享,而不是调整单独的可学习向量。我们的动机是双重的:首先,我们的实验结果表明,在共享提示的情况下,跨实例的微调性能持续提高;其次,使用共享提示向量将可学习transformer部分的参数使用减少了一半,使其更具参数效率。我们在§4.3中提供了关于探索提示位置(即,在 K K K V V V 之前或之后)的讨论。

值得注意的是,查询矩阵 Q Q Q 是自注意机制中的另一个关键元素。然而,不需要对 Q Q Q 进行额外的提示,原因有二:首先,对 Q Q Q 进行提示类似于对 K K K 进行前置以计算每对 Q Q Q K K K 之间的注意分数,因此,对 Q Q Q K K K 都进行提示是不必要的;其次, Q Q Q 的变化会影响注意力图的输出形状,需要对下一层不匹配的维度进行额外的线性投影。在参数高效设计下,这是无法承受的。更多的实验和讨论将在附录中提供。

3.3. 有效的促使

我们的有效提示方法旨在提高微调模型的性能。然而,一个自然的问题出现了:我们能否在不牺牲模型性能的情况下减少可调提示的数量?彩票假设(lottery ticket hypothesis, LTH)[16,102]指出,对于给定的任务,存在一个子网络,在不需要不必要的权重的情况下,可以达到与原始过参数化网络相同的测试性能。在这一假设的推动下,我们进行了一个实验,我们掩盖了不同的视觉提示,发现不同的提示对模型的性能有不同的影响,有些甚至有负面影响。这一观察结果与以往的研究一致[43,57]

基于我们的发现,我们提出了一种对视觉提示进行快速修剪的方法。这种方法的主要目标是保留最有影响的提示,同时消除冗余或不必要的提示。通过删除不太重要的提示,我们可以在保持性能的同时显著提高提示调优的效率。

为了实现这一目标,我们设计了一个级联修剪策略,该策略在两个粒度级别上运行,即令牌修剪和分段修剪,如图2(d)所示。标记智能修剪最初识别并删除最不重要的视觉提示。在此步骤之后,分段式修剪将每个剩余提示划分为多个片段并过滤掉负面片段。通过共同减少可学习视觉提示中的参数使用,我们的两级修剪方法创建了软过滤提示,可以在倒带阶段重新训练。

Token-wise修剪。我们引入一个可学习掩模变量 ρ = { ρ 1 , ρ 2 , … , ρ M } \rho=\{\rho_1,\rho_2,\ldots,\rho_M\} ρ={ρ1,ρ2,,ρM} ( M M M为可视提示符的长度),并将其与各transformer层的输入可视提示符相关联。式中 ρ k ∈ { 0 , 1 } \rho_k\in \{0,1\} ρk{0,1},其中0表示对相应的可学习输入提示进行剪枝。然后,屏蔽版本的视觉提示变成 P ~ k = ρ k ⋅ P k \tilde{P}_k=\rho_k\cdot {P}_k P~k=ρkPk 。为了确定修剪位置,我们计算每个提示符号的重要性分数[16,57],并消除得分最低的位置。重要性分数定义为模型对掩模变量 ρ k \rho_k ρk 的期望灵敏度[60]:

式中, L \mathcal{L} L 为损失函数, D x \mathcal{D}_x Dx 为训练数据分布[60]。分配给每个视觉提示的重要性分数反映了它对微调性能的贡献。低重要性分数表明提示对微调过程的贡献很小,甚至是负的。相反,高重要性分数表明提示是有意义和有用的,对微调过程有重大贡献。

Segment-wise修剪。我们进一步研究了分段修剪,以排除每个提示内的负面提示段。每个提示令牌的嵌入首先平均分成$ R $部分。每个部分作为一个独立的单元,可以共同优化。类似于标记式修剪,然后我们为提示标记内的每个片段分配一个掩码变量,并过滤掉那些重要性分数低的片段。

Rewinding。在执行两级级剪枝之后,权值倒卷阶段的重点是重新训练软过滤的提示令牌。这个过程包括在修剪阶段对每个层的重要性评分进行排序,当其重要性评分相对较低时,将相应的掩码变量设置为0。接下来,在微调过程中,使用学习率和权重衰减的原始组合,将软过滤输入提示与其他可学习参数一起重新训练。

4. 实验

参考资料

论文下载(ICCV 2023)

https://arxiv.org/abs/2307.13770

代码地址

https://github.com/ChengHan111/E2VPT

参考资料

https://zhuanlan.zhihu.com/p/671299605

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

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

相关文章

004_动手实现MLP(pytorch)

import torch from torch import nn from torch.nn import init import numpy as np import sys import d2lzh_pytorch as d2l # 1.数据预处理 mnist_train torchvision.datasets.FashionMNIST(root/Users/w/PycharmProjects/DeepLearning_with_LiMu/datasets/FashionMnist, t…

DevExpress WPF中文教程:如何解决行焦点、选择的常见问题?

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

0-1开发自己的obsidian plugin DAY 2

今天上午解决了三个问题 1. typescript长得丑/一片飘红/格式检查太严格 在vscode的settings里搜索下面这个然后false掉: "typescript.validate.enable": false 就不会一片飘红了(其他下载第三方插件如TSLint和typescript hero的方法都不好使&…

虚幻引擎的三种输入模式和将控件显示到屏幕上

首先要知道一个概念 , HUD 和 Input 都是由 PlayerController 来控制的 而虚幻的Input控制模式有三种 Set Input Mode Game Only (设置输入模式仅限游戏): 视角会跟着鼠标旋转 , 就是正常游戏的模式 , 这也是游戏默认输入模式 Set Input Mode UI Only (设置输入模式仅限UI): …

DHCP协议原理(网络协议)

DHCP简介 定义 DHCP(动态主机配置协议)是一种网络管理协议,能够自动为局域网中的每台计算机分配IP地址及其他网络配置参数,包括子网掩码、默认网关和DNS服务器等。这一机制极大简化了网络管理,尤其在大型局域网中&am…

sheng的学习笔记-AI-K-摇臂赌博机(K-armed bandit)

AI目录:sheng的学习笔记-AI目录-CSDN博客 强化学习 sheng的学习笔记-AI-强化学习(Reinforcement Learning, RL)-CSDN博客 基础知识 单步强化学习任务 先考虑比较简单的情形:最大化单步奖赏,即仅考虑一步操作。需注意…

使用API有效率地管理Dynadot域名,注册域名服务器(NS)信息

前言 Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮箱&…

GPU共享技术深度剖析与总结

在人工智能和深度学习领域,GPU(图形处理器)已成为不可或缺的计算工具。随着深度学习模型的规模和复杂性的增加,单个GPU已经难以满足所有训练需求,GPU共享技术应运而生,成为提高训练效率的重要手段。本文将深…

聊聊AUTOSAR:基于Vector MICROSAR的TC8测试开发方案

技术背景 车载以太网技术作为汽车智能化和网联化的重要组成部分,正逐步成为现代汽车网络架构的核心,已广泛应用于汽车诊断(如OBD)、ECU软件更新、智能座舱系统、高清摄像头环视泊车系统等多个领域。 在这个过程中,ET…

oklink爬虫逆向分析

目标网站 aHR0cHM6Ly93d3cub2tsaW5rLmNvbS96aC1oYW5zL2tsYXl0bi9ibG9jay1saXN0L3BhZ2UvMg 一、抓包分析 请求头有很多加密参数,不过经过观察,发现只有X-Apikey是检测的 二、逆向分析 发包类型不是XMLHttpRequest,不能下xhr断点 打开启动器…

【项目案例】物联网比较好的10+练手项目推荐,附项目文档/源码/视频

练手项目推荐 1 智能小车 项目功能介绍: 本项目由三部分组成:应用端(微信小程序)、设备端(Hi3861)、驱动端(UPS)。 1. 应用端,采用微信小程序作为应用端控制界面。在开…

spring里面内置的非常实用的工具

一 、请求数据记录 Spring Boot提供了一个内置的日志记录解决方案,通过 AbstractRequestLoggingFilter 可以记录请求的详细信息。 AbstractRequestLoggingFilter 有两个不同的实现类,我们常用的是 CommonsRequestLoggingFilter。 通过 CommonsRequestL…

CSS | 如何来避免 FOUC(无样式内容闪烁)现象的发生?

一、什么是 FOUC(无样式内容闪烁)? ‌FOUC(Flash of Unstyled Content)是指网页在加载过程中,由于CSS样式加载延迟或加载顺序不当,导致页面出现闪烁或呈现出未样式化的内容的现象。‌ 这种现象通常发生在HTML文档已经加载&…

WPF DataGrid 动态修改某一个单元格的样式

WPF DataGrid 动态修改某一个单元格的样式 <DataGrid Name"main_datagrid_display" Width"1267" Height"193" Grid.Column"1"ItemsSource"{Binding DataGridModels}"><DataGrid.Columns><!--ElementStyle 设…

旷视科技ShuffleNetV1代码分析[pytorch版]

一、前述 旷视科技针对于ShuffleNet系列网络在GitHub网站上已开源&#xff0c;其链接&#xff1a;https://github.com/megvii-model/ShuffleNet-Series 在这个系列中&#xff0c;包括了ShuffleNetV1/V2网络&#xff0c;如下图所示。 我们点开ShuffleNetV1文件夹&#xff0…

python爬虫:从12306网站获取火车站信息

代码逻辑 初始化 (init 方法)&#xff1a; 设置请求头信息。设置车站版本号。 同步车站信息 (synchronization 方法)&#xff1a; 发送GET请求获取车站信息。返回服务器响应的文本。 提取信息 (extract 方法)&#xff1a; 从服务器响应中提取车站信息字符串。去掉字符串末尾的…

UML——统一建模语言

序言&#xff1a; 是统一建模语言的简称&#xff0c;它是一种由一整套图表组成的标准化建模语言。UML用于帮助系统开发人员阐明&#xff0c;展示&#xff0c;构建和记录软件系统的产出。UML代表了一系列在大型而复杂系统建模中被证明是成功的做法&#xff0c;是开发面向对象软件…

【计算机基础】用bat命令将Unity导出PC包转成单个exe可执行文件

Unity打包成exe可执行文件 上边连接是很久以前用过的方法&#xff0c;发现操作有些不一样了&#xff0c;并且如果按上述操作比较麻烦&#xff0c;所以写了个bat命令。 图1、导出的pc程序 如图1是导出的pc程序&#xff0c;点击exe文件可运行该程序。 添加pack_project.bat文件 …

el-form中三级动态添加数据

el-form中三级动态添加数据 data数据view按钮触发事件 data数据 submitForm: {id: undefined, //修改IDapp_id: undefined, //IP类型name: , //规则名称sort: undefined, //排序detail: [{keycode: 0,title_one: undefined, //一级标题desc_detail: [{keycode: 0,title_two: u…

LPDDR4芯片学习(一)——基础知识与引脚定义

一、基础知识 01 dram基本存储单元 当需要将一位数据存储到DRAM中时&#xff0c;晶体管会充电或放电电容。充电的电容表示逻辑高&#xff08;1&#xff09;&#xff0c;放电的电容表示逻辑低&#xff08;0&#xff09;。由于电容会随着时间泄漏电荷&#xff0c;因此需要定期刷…