UNIFIED VISION AND LANGUAGE PROMPT LEARNING

本文分析了文本提示调优(如CoOp)和视觉提示调优(如VPT)在不同视觉任务上的局限性,发现它们在处理视觉特征方差和文本嵌入方差时表现不一致。为了解决这个问题,提出了统一提示调优(UPT),这是一种学习跨模态提示的策略,通过轻量级Transformer层来优化文本和视觉编码器。实验表明,UPT在小样本学习和域泛化任务上优于单模态方法,证明了其在适应不同数据分布方面的有效性。
摘要由CSDN通过智能技术生成

代码:https://github.com/yuhangzang/UPT

目录

摘要

1.简介

2.方法

2.1 PRELIMINARIES(回顾之前的方法)

2.2 Analysis(分析)

2.3 Unified Prompt Tuning(统一提示调优)

3.Experiments(实验)

3.1 Few-Shot Learning(小样本学习)

3.2 Domain Generalization(域泛化)

3.3 Ablation Studies(消融实验)

3.4 Qualitative Results(定性结果)

4.相关工作

5.总结


动机:之前的工作都是在单模态上做prompt,可能在某些任务上效果不错,在其他任务上效果很差。两种有代表性的prompt tuning方法,即text prompt tuning(CoOp论文)和visual prompt tuning(VPT),但没有一种单模态prompt tuning方法始终表现良好:text prompt tuning在类内视觉方差高的数据上失败,而visual prompt tuning不能处理类间方差低的数据。

本文研究将数据集映射到统一到向量空间中发现,在Text Prompt Tuning中随着视觉特征方差增大,Text Prompt Tuning对于Zero-shot CLIP的提升在减少,而在Visual Prompt Tuning中,随着文本embedding的方差增大,对Zero-shot CLIP的提升在增加。所以,为了同时适配Text 和Image ,跨模态的Prompt Tuning的技术是十分必要的,本文就提出了Unified Prompt Tuning。

摘要

prompt tuning是一种参数和数据高效的迁移学习范式,它只对模型输入空间中的少量参数进行调优,自从CLIP这样的大型视觉语言模型出现以来,它已经成为视觉领域的一种趋势。本文系统地研究了两种有代表性的prompt tuning方法,即text prompt tuning和visual prompt tuning。一个重要的发现是,没有一种单模态prompt tuning方法始终表现良好:text prompt tuning在类内视觉方差高的数据上失败,而visual prompt tuning不能处理类间方差低的数据。为了结合这两个方法的优点,我们提出了一种简单的方法,称为统一prompt tuning(UPT),它本质上是学习一个微小的神经网络来联合优化不同模式的提示。在超过11个视觉数据集上的大量实验表明,UPT在few-shot学习基准和域泛化基准上实现了比单模态方法更好的权衡。

1.简介

在数百万图像-文本对上预训练的视觉-语言(VL)模型(例如CLIP 和ALIGN )在各种下游任务(如few-shot learning)上显示出有前景的可迁移性和open-vocabulary perception。当将大型VL模型用于下游任务时,由于其巨大的参数大小,通常不能直接对整个模型进行微调。因此,许多研究探索了prompt tuning,即冻结VL模型的参数,只微调额外的可学习参数,即提示,以高效和有效地适应下游任务的VL模型。

一个典型的VL模型包含两个子网络——一个图像编码器和一个文本编码器——以提取视觉和文本模式的representations。相应的,现有的prompt tuning方法可以分为两种类型:text prompt tuning和visual prompt tuning。对于text prompt tuning方法,如CoOp ,额外的text prompt被视为可学习参数,应用于CLIP中的文本编码器(图1(a)),以减轻潜在的次优手工制作的文本提示模板(例如,“a photo of a [CLASS].”)。相反,visual prompt tuning方法侧重于调制图像编码器(图1(b))。例如,VPT (Jia et al., 2022)将可学习参数(称为视觉提示)注入多层visual transformers。一般来说,这些提示方法考虑独立地调整视觉和文本形式的表示。

尽管已经取得了重大改进,但我们观察到现有的prompt tuning 方法由于下游任务中视觉特征和文本embedding的固有差异,无法获得一致的性能提升。也就是说,使用单模态提示可能在一个任务上获得良好的结果,而在其他任务上表现不佳。为了分析这一现象,我们通过视觉特征的类内方差和文本embedding的类间方差来衡量数据分布的差异,并研究数据统计与性能改进之间的相关性。如图1(d)所示,当图像特征的类内方差较大时(右下),我们观察到CoOp很难学习合适的文本提示来改进文本分类器。至于视觉prompt tuning,当文本embeddings的类间方差较低时,VPT面临困难,如图左下角所示。第1(e)段。也就是说,如果文本分类器是基于低可分性的文本embeddings建立的,那么调整视觉提示对提高最终性能几乎没有帮助。此外,类内视觉方差和类间文本方差通常是正交的。因此,我们可以观察到,不同数据集的单模态prompt tuning方法差异很大:在Flowers102上,CoOp以8.1%的优势击败VPT,而在EuroSAT上,VPT比CoOp高8.4%。考虑到不同的下游任务,选择哪种提示模态进行tuning就成了一个进退两难的问题。显然,关键是同时调整文本和视觉提示,以克服不同数据分布之间的巨大差异。一个简单的解决方案是将文本和视觉提示引入模型,并共同优化两个特定于模态的提示。然而,我们发现,由于文本和图像模态之间的内在差异,这种幼稚的联合训练会导致次优性能。特别是,如我们的实验所示,性能有时比调整特定于模态的提示更差。

解决上述问题需要modality-agnostic的优化来连接独立的提示。为此,我们提出了一个统一的文本和视觉模式的prompt tuning,称为统一提示调优(UPT),见图1(c)。具体来说,我们从一个共享的初始提示开始,并提出了一个轻量级的自注意网络来为CLIP文本和visual encoders生成提示。我们的经验表明,这样的设计可以保持各自模式的利益。

我们的贡献总结如下:

1)我们对现有的文本或视觉prompt tuning策略进行了全面的分析;

2)我们提出了一种统一的VL模型提示方法,以优化视觉和文本模态representations;

3)我们进行了大量的实验,表明统一提示调优是一种可行的策略,优于以前的单模态提示调优方法,特别是在few-shot学习和域泛化设置下。我们希望我们的工作可以激励未来对VL模型使用多模态提示的研究。

2.方法

2.1 PRELIMINARIES(回顾之前的方法)

CLIP:CLIP由两个子网络组成:图像编码器φ和文本编码器ψ。这两个编码器分别将文本和图像输入映射到一个联合隐藏空间R^{d},其中视觉和语言模态的语义很好地对齐。这里,d是指文本或图像编码器的最终隐藏维度(例如,在ResNet backbone中d = 256,在ViT backbone中d = 512)。给定一个输入图像x和一组类别Y = {y1, y2,…, yk}(例如,对于ImageNet, k = 1000),图像编码器提取相应的图像特征z =f_{\phi }(x)∈R^{d}。首先将Y中的类名填充到手工制作的文本提示模板a photo of a [class]中,得到文本描述A,由文本编码器进一步处理得到文本representations:W = f_{\psi }(A)∈R^{d*k}。最终预测计算如下:

 其中cos(·,·)表示余弦相似度,τ是一个固定的温度值(例如,τ = 100)。从概念上讲,对于Eq.(1)中输入图像x的决策过程是这样制定的:文本编码器ψ从open-set类别Y中生成动态分类器W,图像编码器φ产生编码的视觉特征z。在实践中,在VL模型中对数百万个参数(即φ和ψ)进行微调以在每个下游任务中进行迁移学习通常是不可实现的。

Text Prompt Tuning:为了高效和有效的模型自适应,文本提prompt tuning方法考虑在不微调文本编码器ψ的情况下生成更自适应的分类器。例如,上下文优化(CoOp) 引入一组可学习的参数T∈R^{d*m}来取代手工制作的文本提示模板(a photo of a [CLASS])。Y中的类名的措辞将以以下形式与这些文本提示连接:

 这里,符号m表示提示符长度。生成的动态文本表示由文本编码器提取:W =f_{\psi } (\hat{T})∈R^{d*k}。在每个下游任务中,可学习提示符T将使用每个任务特定的目标函数进行优化,例如,在few-shot学习中,交叉熵分类损失L_{CE}(p, y)。请注意,图像和文本编码器(φ和ψ)在下游训练期间都是冻结的。因此,更新文本提示符T将相应地调整生成的分类器W对下游任务的决策边界。

Visual Prompt Tuning:相反,视觉提示调优方法侧重于提取更多可迁移的视觉特征,同时保持视觉编码器φ不变。随着文本prompt tuning方法的成功,最近的视觉提示调优(Visual prompt tuning, VPT)为视觉编码器φ引入了类似的提示调优方法。假设图像编码器φ包含L个Vision Transformer层,第i层的输出为li,其中i = 1,2,…, L,由下式给出:

 式中,c∈R^{d}表示分类token([CLS]), Z = [z1, z2,…,zs]∈R^{d*s}表示输入的长度为s的图像patch token。对于第i层编码器,插入一组可学习的视觉提示V^{i}R^{d*n},计算如下:

 其中n表示可视提示的长度。提出了两种VPT变体:shallow VPT和deep VPT。对于VPT-shallow,视觉提示仅插入到第一个Transformer层(i = 1)。而对于VPT-deep,在每一层都引入了视觉提示。可学习的视觉提示是独立于数据的,一旦学习,可以调节输入图像的视觉特征z,以便更好地进行下游迁移学习。

2.2 Analysis(分析)

我们进行了一系列探索性研究来分析文本/视觉prompt tuning的特点。首先,当使用两种具有代表性的文本和视觉prompt tuning方法(CoOp )和VPT 调整CLIP模型时,我们测量了所有11个下游视觉数据集的视觉特征z和文本embeddings W(即分类器)的方差(详细实现参见附录A)。对于文本提示调优,如图1(d)所示,我们观察到CoOp在视觉特征之间具有低类内方差的数据集(如Flowers102)上表现良好,但在具有高类内特征方差的Food101数据集上表现不佳。在视觉提示调优方面,VPT在类间文本embeddings较大的SUN397数据集上成功提高了性能,而在类间文本embeddings方差较小的Food101和Flowers102数据集上效果较差。文本/视觉prompt tuning的性能改进与下游数据集中视觉特征z或文本embeddings W的方差高度相关。

为了理解这一现象,我们选择了两个下游视觉数据集(Flowers102 , EuroSAT )进行进一步分析。在下游训练中,我们将视觉特征z和文本embeddings W(即分类器)投影到sphere space R^{3}中,以获得更好的可视化。如图2所示,我们可以观察到:

1)对于类内视觉特征方差较高的EuroSAT数据集,CoOp中的文本提示无法适应文本分类器w。显然,与zero-shot CLIP基线相比,图2(b)中的文本分类器几乎没有变化(图2(a))。

2)对于类间文本embedding方差较低的Flowers102数据集,VPT中的视觉提示对视觉特征z的调制效果不明显(图2)。2(g)),因此不能获得相当大的性能增益。

综上所述,单模态提示调优方法(CoOp和VPT)面临的困境是,由于下游任务中视觉特征和文本embedding的固有差异,很难实现对Zero-shot CLIP的一致改进。我们的观察促使我们提出一种统一的提示tunes方法,同时对z和W进行调优。

2.3 Unified Prompt Tuning(统一提示调优)

根据我们的分析,我们设计了一种简单而有效的多模态统一提示调优(UPT)方法来适应VL模型。具体来说,我们没有为文本和视觉编码器引入两组孤立的特定于模态的提示(即,Eq.(2)中的T和Eq.(4)中的V),而是考虑学习一组统一的模态无关提示来调整VL模型。如图3所示,我们定义了一组长度为n的可学习提示符U∈R^{d*n}我们不是简单地将统一提示附加到文本和视觉编码器中,而是使用轻量级Transformer层θ来转换统一提示U,如下所示:

 其中,self- attention 操作符SA、前馈网络FFN和层归一化LN得到变换后的提示符\hat{U}。轻量级Transformer层中的self-attention模块允许两种模式之间的有益交互,从而最大限度地发挥互补效果。我们的统一提示可以引入到VL模型的多个层中。特别地,对于每一个第i层的文本和图像编码器,我们考虑学习一组分层提示符\hat{U}^{i},并将\hat{U}^{i}={\hat{U}_{t}^{i}\hat{U}_{v}^{i}}分成两部分,分别发送到文本和视觉编码器中。在下游训练中,我们冻结了文本和视觉编码器(ψ和φ),只优化了统一的提示U和轻量级的Transformer层θ。通过这种方式,Eq.(1)中的动态分类器W和视觉特征z都可以有效地调整为下游任务的可靠预测。如图2 (d)和(h)所示,与单模态提示相比,我们的统一提示可以同时获得对齐良好的文本分类器和可分离的视觉特征。

3.Experiments(实验)

在本节中,我们在两个问题设置下进行实验,即(1)少量图像分类(第3.1节)和(2)域泛化(第3.2节)。我们还在3.3节中介绍了几种设计选择的消融研究。我们将我们的方法与以下方法进行比较:(1)zero-shot CLIP。该基线使用手工制作的文本提示模板,不涉及任何提示学习策略。

(2)单模态提示调优方法,包括文本模态的CoOp (Zhou et al., 2022a)和视觉模态的VPT (Jia et al., 2022)。在域泛化设置中,我们进一步与CoCoOp (Zhou et al., 2022b)进行了比较,通过输入条件设计提高了CoOp的泛化性能。对于VPT,我们报告了浅层和深层变体的结果,如第2.1节所述。

3.1 Few-Shot Learning(小样本学习)

 在本节中,我们通过使用不同的策略进行prompt tuning来衡量模型的泛化能力,在特定的下游任务中,每个类只使用有限数量的标记示例。具体实施情况见附录B。

 数据集:遵循Zhou等人使用11个数据集(ImageNet、Caltech101 、OxfordPets 、StanfordCars 、Flowers102 、Food101 、fgcv - aircraft、SUN397 、UCF101、DTD 、EuroSAT )作为基准。根据Zhou等人,我们采用few-shot评估方案,选择1/2/4/8/16个shots进行训练,整个测试集进行评估。我们用不同的随机seeds报告三次运行的平均结果,以减少方差。具体结果如图4所示。

单模态基线的局限性:图4显示,现有文本prompt tuning方法CoOp和视觉prompt tuning方法VPT的性能改进在不同的数据集之间并不一致。特别是,CoOp在一些数据集上获得了比VPT更好的性能,如StanfordCars和SUN397。然而,对于其他具有高类内视觉方差的数据集,VPT比CoOp有效得多。例如,在EuroSAT数据集上,VPT-deep击败CoOp超过12%。先前单模态基线的差异也与我们在图1(d)和图1(e)中的动机一致。根据VPT,VPT-deep比VPT-shallow更有效,我们的实验结果也验证了这一点。我们后来表明,在域泛化设置中,VPT-shallow比VPT-deep获得更强的性能(第3.2节)。

UPT vs 单模态基线:我们的UPT比单模态prompt tuning的CoOp和VPT有明显的优势,正如平均性能所示(图4左上角)。一般来说,UPT和基线之间的平均性能差距随着可用于prompt tuning的shot数量的增加而增加。具体来说,UPT在1/2/4/8/16镜头设置上,与文本prompt tuning方法CoOp相比,精度提高了0.48/1.36/1.29/2.46/3.19(%)。同样,UPT比视觉prompt tuning方法VPT-deep实现了0.89/2.70/2.03/2.40/2.01(%)的精度增益。值得注意的是,UPT在具有挑战性的大型数据集上显著提高了CoOp和VPT-deep的性能,例如具有1000个类的ImageNet和具有397个类别的SUN397。UPT在StanfordCars和FGVC Aircraft等细粒度数据集上也超过了CoOp和VPT-deep。我们还观察到UPT在两个数据集(OxfordPets和Food101)上表现出较少的改进,可能是由噪声训练数据引起的。总体而言,图4中的实验结果证明了我们提出的UPT的有效性。

3.2 Domain Generalization(域泛化)

CLIP等预训练的VL模型具有较强的泛化能力。然而,在特定下游数据集上调优的提示可能会阻碍对训练集之外类别的泛化能力。在本节中,我们评估了不同prompt tuning方法对分布外(OOD)数据的泛化能力。

数据集:遵循(Zhou等人,2022a)使用五个数据集(ImageNet ,ImageNet V2,ImageNet- Sketch ,ImageNet- A 和ImageNet- R)进行评估。根据该协议,我们在ImageNet上训练了一个模型,并在ImageNet的其他四个变体上对其进行了评估。

结果:表1总结了结果。我们报告源和目标数据集上的平均精度(倒数第二列),以及目标数据集上的OOD平均精度(最后一列)。结果表明,VPT-shallow(第2行)比VPT-deep(第3行)获得了更高的OOD精度,并且文本prompt tuning方法优于视觉prompt tuning方法。此外,本文的UPT(第5行)通常比单模态基线(第1- 4行)更好,并且获得与CoCoOp相当的性能。我们的UPT在5个目标数据集上获得了4次最佳结果,表明UPT在域泛化设置中是一种可靠的提示调优方法。

3.3 Ablation Studies(消融实验)

与联合训练基线的比较:如图5(a)所示,多模态提示的一种简单方法是将文本提示(使用CoOp)和视觉提示(使用VPT)联合调优。我们调查了这种联合培训方案的有效性,并在表2第4行中报告了其结果。从结果中,我们看到这种联合训练方案的性能略低于视觉prompt tuning方法VPT-deep (78.70% vs 79.39%),并且不如我们的UPT。

文本和视觉模式的共享提示:我们还研究了直接分享不同模式提示的结果。如图5(b)所示,共享提示将针对文本和视觉模式进行优化。该方案不同于建议的UPT,在UPT中,共享提示被转换为self-attention。实验结果如表2第5行所示,我们观察到,在所有方法中,这种提示共享策略的性能最差。

MLP基线:对于我们提出的UPT,我们使用具有self-attention operator的Transformer层来部分共享不同模态的超参数。在这里,我们研究了一个更简单的设计,它使用两个MLP层生成统一的提示。结果如表2第6行所示。MLP基线仍然具有竞争力,在两个数据集上产生最佳性能。尽管如此,在11个数据集上的平均结果仍然比提出的基于self-attention的方法差。

3.4 Qualitative Results(定性结果)

虽然很难可视化文本prompt tuning过程中学习到的内容,但可以可视化VPT和UPT遵循自监督学习方法DINO学习到的视觉提示(Caron et al., 2021)。特别是,对于ViT(Vision Transformer, ViT)的每一层,我们可以计算视觉提示和图像patch token的自注意响应映射。图6比较了VPT和建议的UPT的响应映射。我们发现,与VPT相比,UPT表现出更强的自注意反应。这可能是UPT在few-shot学习和OOD泛化设置上获得更好性能的可能原因。

4.相关工作

V-L models:最新的视觉语言预训练模型使用对比损失将图像编码器(例如,ViT )和文本编码器(例如,BERT)在公共特征空间中对齐。这些视觉语言模型是在网络规模的图像-文本对上进行训练的,并且可以在各种下游任务之间转移,例如点云分类、视频分类、目标检测和语义分割。在这项工作中,我们的目标是探索如何使CLIP模型适应下游的few-shot recognition任务。

Text Prompt Tuning:prompt tuning的概念最早是在NLP领域提出的。特别地,文本提示符引用语言模型的特定于任务的模板。例如,在情感分析中,模板可能是“I [MASK] the movie.”,其中屏蔽占位符将被“love”或“hate”填充。文本提示调优的常见做法包括(i)在字典中搜索特定单词,称为硬提示学习,或(ii)将掩码符号转换为可学习的向量,称为软提示学习。在大型视觉语言模型(例如CLIP )出现后,文本提示调整也被应用于计算机视觉中,这些模型太大而无法进行微调。CoOp 是一项代表性的工作,它将CLIP文本分支中的输入上下文toekns转化为可学习的向量,使CLIP适应下游图像识别。CoOp的其他后续研究包括CoCoOp 、DualCoOp (Sun等人,2022)、ProGrad (Xing等人,2022)和ProDA (Lu等人,2022)。

Visual Prompt Tuning:视觉prompt tuning的思想是通过在视觉输入空间中添加可学习的参数来适应大型预训练的Visual Transformers,这类似于NLP中的文本提示调整。VPT和Visual prompts 都在Transformer模型的输入中添加了可训练的tokens。最近的一项研究NOAH (Zhang et al., 2022b)使用神经架构搜索算法来识别提示模块的最佳配置。与上述讨论的单模态提示学习方法相比,本文及时研究了如何使用多模态提示学习实现更好的权衡。

5.总结

随着视觉模型沿尺寸维度的快速缩放,高效的下游自适应方法对于促进视觉模型在野外的大规模部署至关重要。本文从提示学习的角度对如何适应像CLIP这样的大型视觉语言模型进行了及时而全面的研究。特别是,我们的研究揭示了以前的单模态提示调优方法在广泛的视觉数据集上不能一致地工作。相比之下,所提出的UPT方法尽管具有简单的设计,但与单模态方法相比,实现了更好的权衡。结果表明,人们应该利用不同模式之间的对应关系来进行提示学习。

另一方面,UPT所获得的结果绝不是完美的:在消融研究中,我们观察到一些替代设计,例如使用MLP而不是Transformer,有时可能会提供更好的性能。总的来说,我们相信多模态提示学习是一个很有前途的框架,我们希望通过更先进(和高效)的设计可以实现更多的改进。

Java Unified Expression Language(JUEL)是一个基于 Java 的表达式语言,它提供了一组语法规则和函数库,可以用于在 Java 应用程序中动态地计算、处理和生成字符串、数字、布尔值和对象等数据类型。以下是一些 JUEL 的使用案例: 1. 在 JSP 页面中使用 JUEL 表达式生成动态 HTML 内容: ``` <ul> <c:forEach var="item" items="${items}"> <li>${item.name} - ${item.price}</li> </c:forEach> </ul> ``` 在这个例子中,`${item.name}`和`${item.price}`是 JUEL 表达式,它们会动态地计算出每个商品的名称和价格,并将它们插入到 HTML 中。 2. 在 JSF 应用程序中使用 JUEL 表达式进行表单验证: ``` <h:inputText id="email" value="#{user.email}" required="true" validator="#{emailValidator.validate}"> <f:ajax event="blur" render="emailMessage" /> </h:inputText> <h:message id="emailMessage" for="email" /> ``` 在这个例子中,`#{user.email}`是一个 JUEL 表达式,它会动态地计算出当前用户输入的电子邮件地址,并将它存储在一个名为`email`的属性中。在这个表单中,`email`属性是一个必填字段,所以我们使用了`required="true"`属性来指定它是必填的。同时,我们还使用了一个名为`emailValidator`的验证器来检查用户输入的电子邮件地址是否合法。`emailValidator`是一个包含了验证逻辑的 Java 类,它会在用户提交表单时被调用。 3. 在 Java 应用程序中使用 JUEL 表达式进行动态计算: ``` ExpressionFactory factory = new ExpressionFactoryImpl(); SimpleContext context = new SimpleContext(); context.setVariable("x", factory.createValueExpression(2, int.class)); context.setVariable("y", factory.createValueExpression(3, int.class)); ValueExpression expression = factory.createValueExpression(context, "#{x + y}", int.class); int result = (int) expression.getValue(context); System.out.println(result); // 输出 5 ``` 在这个例子中,我们使用了 JUEL 的 API 来创建了一个包含了表达式`${x + y}`的 JUEL 表达式。然后,我们将变量`x`和`y`绑定到了上下文中,并通过表达式的`getValue()`方法动态地计算表达式的值。最后,我们将计算出的结果输出到了控制台上。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值