创作不易,点赞收藏,谢谢!如有交流需要,请关注微信公众号“笔名二十七画生”!
终于不读综述了,读综述的感觉就是想吐。。。。。
摘要
目前,在适应预训练模型的操作方式中,通常涉及更新所有骨干参数,即进行全面微调。 本文介绍了视觉提示微调(Visual Prompt Tuning,VPT)作为大规模Transformer模型在视觉领域中全面微调的高效而有效的替代方法。受到最近在高效微调大语言模型方面的进展的启发,VPT仅在输入空间引入了一小部分(少于模型参数的1%(如果模型本身很大的话,这个参数量也不小了呢))可训练参数,同时保持模型骨干不变。通过在各种各样的下游识别任务上进行大量实验证明,与其他参数高效微调协议相比,VPT在性能上取得了显著的增益。最重要的是,在许多情况下,VPT甚至在模型容量和训练数据规模方面都优于全面微调,同时降低了每个任务的存储成本。
源码地址:KMnP/vpt: ❄️🔥 Visual Prompt Tuning [ECCV 2022] https://arxiv.org/abs/2203.12119 (github.com)
1.引言
(这段话的意思告诉你全面微调在实际中不太实用)针对各种识别应用,目前获得最准确的结果是通过对大规模筛选或原始数据进行预训练的庞大基础模型进行调整,这一发现与自然语言处理(NLP)领域的发展相一致[6]。乍一看,这是一个成功的故事:通过利用最新和最先进的基础模型,可以在多个识别问题上取得快速进展。然而,在实际应用中,将这些大型模型调整到下游任务中也带来了自己的挑战。最明显(也经常是最有效)的适应策略是对预训练模型在手头任务上进行全面微调,即端到端的微调。然而,这种策略要求为每个任务存储和部署骨干参数的单独副本。这是一项昂贵且通常难以实现的提案,特别是对于现代Transformer-based架构而言,其规模明显大于其卷积神经网络(ConvNet)对应物,例如,ViT-Huge [19](632M参数)与ResNet-50 [31](25M参数)相比。因此,我们追问,从效果和效率的角度来看,如何最好地将大型预训练Transformer适应到下游任务?
图1. 视觉提示微调(VPT)与其他迁移学习方法的比较。 (a) 根据调整范围,将当前的迁移学习协议分为三类:全面微调,以头为导向的方法和以骨干为导向的方法。 (b) 相反,VPT在输入空间中添加额外的参数。 (c) 在适应预训练ViT-B骨干的广泛下游分类任务上,不同方法的性能,平均值和标准偏差已标注。
图1其实就能看出这篇文章核心想法,就是引入了额外的参数,被前置到每个transformer层的输入序列中,并在微调期间与线性头一起学习。
有一个直接的方法是转向我们已经完善用于适应ConvNets到新任务的其他策略,如图1(a)所示。一种流行的方法是仅对一部分参数进行微调,比如分类器头部 [56,36,11] 或偏置项 [8]。先前的研究还研究了在骨干中添加额外的残差块(或适配器)[68,87]。我们可以为Transformers实施类似的策略。然而,总体而言,这些策略在准确性上表现不如全面微调。
本文探索了一种不同的途径。与其修改或微调预训练的Transformer本身,我们修改了输入到Transformer的方式。借鉴最近在NLP中关于Prompting的进展 [50,48,45,51],我们提出了一种新的简单而高效的方法来适应下游视觉任务的Transformer模型(图1(b)),即Visual-Prompt Tuning(VPT)。我们的方法仅在输入空间引入少量任务特定的可学习参数,同时在下游训练期间保持整个预训练Transformer骨干不变。在实践中,这些额外的参数简单地被前置到每个Transformer层的输入序列中,并在微调期间与线性头一起学习。
(这段可以不看,主要说他牛逼的)在使用预训练的ViT骨干的跨不同领域的24个下游识别任务中,VPT击败了所有其他迁移学习基线,甚至在20个案例中超越了全面微调,同时保持了对于每个个别任务存储显著较少参数(不到骨干参数的1%)的优势(图1(c))。这个结果展示了视觉提示的独特优势:在NLP中,Prompt Tuning只能在某些情况下与全面微调的性能匹敌 [45]。VPT在低数据情境下特别有效,并在数据规模扩大时保持其优势。最后,VPT在一系列Transformer规模和设计(ViT-Base/Large/Huge,Swin)上都具有竞争力。总体而言,我们的结果表明,VPT是适应不断增长的视觉骨干的最有效方式之一。
2 相关工作(这部分首先介绍了transformer的卓越性能与迁移学习的相关知识;然后对标NLP介绍了prompt相关工作,最后引出自己在CV的prompt工作(毕竟从引言开始就是要对标NLP的prompt))
Transformer模型 [73] 在自然语言处理领域取得了巨大的成功 [17,66,7]。Transformer架构的胜利也扩展到各种计算机视觉任务,包括图像分类 [19,52]、目标检测 [9,49]、语义和全景分割 [71,89,78]、视频理解 [25,79,21] 和少样本学习 [18],超越了先前的最先进方法。Transformers也广泛用于最近的自监督预训练方法 [11,30,3]。鉴于它们相对于ConvNets的卓越性能和更大规模,如何高效地将Transformers适应不同的视觉任务仍然是一个重要的未解问题。我们提出的VPT为此提供了一个有望的前进道路。
在ConvNets的背景下,已经对视觉任务的迁移学习进行了广泛研究 [92],并引入了许多技术,包括侧调整 [87]、残余适配器 [67]、偏置调整 [8] 等。相对较少的关注被付予了视觉Transformer的适应以及这些上述方法在这种全新类型的架构上的表现如何仍然是未知的。另一方面,鉴于基于大规模预训练的Transformer语言模型(LM) [17,66,7] 的主导地位,已经提出了许多方法 [29,28,35] 以有效地微调LM以适应不同的下游自然语言处理任务 [77,76]。其中,我们在实验中关注以下两种代表性的方法,用于基准测试目的:Adapters [64] 和 BitFit [5]。
Adapters [34] 在每个Transformer层内插入额外的轻量级模块。一个适配器模块通常包括线性下投影,随后是非线性激活函数,以及线性上投影,再加上一个残差连接 [63,64]。而不是插入新的模块,[8] 提出在微调ConvNets时更新偏置项并冻结其他骨干参数。BitFit [3] 将这一技术应用于Transformers,并验证了其在LM微调中的有效性。我们的研究表明,总体而言,相对于NLP中上述两种成熟的方法,VPT在使Transformer模型适应视觉任务方面提供了改进的性能。
Prompting [50] 最初指的是将语言指令前置到输入文本中,以便预训练的LM可以“理解”任务。通过手动选择提示,GPT-3在少样本或零样本设置中甚至展现出对下游迁移学习任务的强大泛化能力 [7]。除了关于如何构建更好提示文本的后续工作 [70,37],最近的研究提出将提示视为任务特定的连续向量,并在微调期间通过梯度直接优化它们,即Prompt Tuning [48,45,51]。与全面微调相比,它实现了可比较的性能,但存储参数的数量减少了1000倍。尽管最近也将prompting 应用于视觉-语言模型 [65,91,39,84,22],但prompting 仍然限制在文本编码器的输入。由于视觉和语言模态之间的差异,在本文中我们提出一个问题:相同的方法是否可以成功应用于图像编码器?我们是第一个(参见相关的并行工作 [69,80,14,2])来解决这个问题,并通过跨多个领域和骨干架构进行广泛实验证明了视觉提示的一般性和可行性。
3.方法
我们提出了视觉提示微调(VPT)以适应大型预训练的视觉Transformer模型。VPT在Transformer的输入空间中注入少量可学习参数,并在下游训练阶段保持骨干冻结。总体框架如图2所示。我们首先在第3.1节定义符号,然后在第3.2节正式描述了VPT。
图2. 我们提出的视觉提示微调的概述。我们探讨了两种变体:(a) 将一组可学习参数前置到每个Transformer编码器层的输入(VPT-deep);(b) 仅将提示参数插入到第一层的输入(VPT-shallow)。在进行下游任务的训练过程中,只有提示和线性头的参数会被更新,而整个Transformer编码器保持冻结。
一图胜千言,我始终觉得一篇好的文章,看图就可以了。这篇文章的具体思路就是在编码层输入一组可学习参数,分两种情况:一种是只在第一层嵌入,一种是每一层都嵌入。
4 实验
我们评估了在不同规模下采用预训练的Transformer骨干进行大范围下游识别任务的VPT。首先在第4.1节中描述我们的实验设置,包括预训练的骨干和下游任务,以及对比的替代迁移学习方法的简要介绍。然后,在第4.2节中展示了我们方法的有效性和实际实用性。我们还系统地研究了不同的设计选择如何影响性能(第4.3节)(),这有助于更好地理解我们的方法。
4.1 实验设置
预训练的骨干模型。我们在视觉领域尝试了两种Transformer架构,Vision Transformers(ViT)[19]和Swin Transformers(Swin)[52]。本节中的所有骨干都是在ImageNet-21k [16]上预训练的。我们遵循原始的配置,例如,划分的图像补丁数量,是否存在[CLS]等。更多细节包含在附录A中。
基线方法。我们将VPT的两个变体与其他常用的微调协议进行比较:
(a) Full:完全更新所有骨干和分类头参数。
(b) 集中在分类头的方法。它们将预训练的骨干视为特征提取器,在微调过程中固定其权重:
– Linear:仅使用线性层作为分类头。
– Partial-k:微调骨干的最后k层,同时冻结其他层,如[85,88,60,30]中所采用的。它重新定义了骨干和分类头的边界。
– Mlp-k:使用具有k层的多层感知器(MLP)而不是线性层作为分类头。
(c) 在微调过程中更新骨干参数的子集或在骨干中添加新的可训练参数的方法:
– Sidetune [87]:训练一个“side”网络,并在线性插值预训练特征和侧调整特征之间,然后馈入分类头之前。 – Bias [8,5]:仅微调预训练骨干的偏置项。
– Adapter [34,63,64]:在Transformer层内插入带有残差连接的新MLP模块。
表1. 在受监督的ImageNet-21k上预训练的ViT-B/16。对于每种方法和每个下游任务组,我们报告了平均测试准确度得分以及与Full相比的胜利次数(·)。"Total params"表示所有24个下游任务所需的总参数数。"Scope"表示每种方法的微调范围。"Extra params"表示除预训练骨干和线性头之外是否存在额外的参数。
表3. 语义分割:使用SETR [89]在ViT-L上对ADE20k [90]进行的验证结果。在所有方法中,除了Full之外,最佳的mIoU得分被加粗显示。还包括了对ResNet-101 [10]进行完全微调的结果。SS/MS:单尺度/多尺度推理。
因为最近在做分割,所以我重点看了分割这一块的性能,感觉如果用来作分割效果不一定好,之前有朋友复现过确实分割效果差点意思。我们探索了VPT在视觉分类之外的可行性,通过使用Transformer模型SETR-PUP [89]评估ADE20K [90]语义分割任务。它在ViT骨干上添加了一个标准的ConvNet头来执行分割。事实上,目前的方法仍然是与ConvNet头一起对预训练骨干进行完全微调(Full)。 我们包含了两种额外的协议进行比较:只更新头层(Head Only)和更新头层以及骨干中的偏置向量(Bias)。 在表3中,我们报告了在进行多尺度推理和不进行多尺度推理的情况下的val mIoU结果。虽然参数高效的协议无法与Full竞争,但VPT仍然与Bias相媲美。值得注意的是,VPT在与完全微调的最新ConvNet模型(DeepLab v3+ [10])相比,提供了竞争力强的结果,同时调整的参数数量明显较少(分别为15M vs. 64M)。
6.结论
我们提出了Visual Prompt Tuning(VPT),这是一种新的参数高效方法,用于利用大型视觉Transformer模型进行各种下游任务。VPT在输入空间引入了特定任务的可学习提示,同时保持预训练的骨干不变。我们展示了VPT可以超越其他微调协议(通常包括完全微调),同时大幅减少存储成本。我们的实验还提出了有关不同预训练目标下的视觉Transformer微调动态以及如何高效转移到更广泛的视觉识别任务的引人入胜的问题。因此,我们希望我们的工作能够激发未来关于如何最好地发挥视觉中大型基础模型潜力的研究。
观后感:
个人感觉这篇文章想法还是挺有意思,选择在引入了额外的参数(这个参数只占不到整体模型的1%),被前置到每个transformer层的输入序列中,并在微调期间与线性头一起学习。当然在分类的效果也不错,但是因为最近有分割任务需求,他在分割上面的性能和完全微调相比稍逊,所以暂时不考虑复现了。
参考文献
Jia M, Tang L, Chen B C, et al. Visual prompt tuning[C]//European Conference on Computer Vision. Cham: Springer Nature Switzerland, 2022: 709-727.