Learning to Prompt for Vision-Language Models

1.问题背景

识别正确的提示(识别精度尽可能高的提示),通常需要花费非常多的时间来进行单词的调

整,在单词中的一个轻微改变都可以使得在性能上有巨大的不同。但是可以发现即使是做了大量的调整,最后的精度可能不是最优的。

受到NLP领域中prompt learning研究的启发,本文提出了Context Optimization(CoOp),

具体来说固定整个预训练模型的参数,然后对text encoder中的提示词进行学习,自动化提示工程。

对于一个新的类别分类任务来说,一个描述与任务相关的类别的句子通过text encoder合成一

个分类权重,之后与图像编码器产生图像特征进行比较。

2.解决办法

提出了CoOp模型,模型如下图所示

其主要思想是使用一组可学习向量对提示的上下文进行建模,这些向量可以通过最小化分类损

失来优化(问什么是最小化分类损失,而不是最大化图像特征和文本特征之间的相似分数?目标是学习到prompt vector,现在已经知道与每个图像特征所对应的文本特征了,需要对prompt vector进行优化学习,所以通过模型预测的类别与真实类别的交叉熵来最小化分类损失进行优化)。提出了两种设计:一种是统一上下文,它与所有类共享相同的上下文向量;另一个是特定于类的上下文,它为每个类学习一组特定的上下文向量。

3.方案实现细节

模型:CLIP(image encoder:ResNet-50/ViT,text encoder:Transformer)

训练目标:训练CLIP将图像和文本的两个嵌入空间对齐。具体来说,学习目标是一种对比损

失。给定一批图像-文本对,CLIP会最大化匹配对的余弦相似性,同时最小化所有其他未匹配对的余弦相似性。为了学习更适合下游任务的各种视觉概念,CLIP的团队收集了一个由4亿对image-text组成的大型训练数据集。

经典CLIP模型的概率输出如下所示:

本文的方法:①Unified Context:所有的类别公用一个相同的context word(类似于经典CLIP

模型的提示,区别是该方法的提示是在一个连续的空间中搜索,解释性不强);②每个类别有各自的可学的上下文。

方法①的格式(M是一个超参数):

g是文本编码器,提示ti中的class token被第i个类名相关的词嵌入向量取代。也可以把class token 放在中间

后面的这种形式增加了学习的灵活性,提示可以用补充描述填充后面的单元格(比如提示"a photo of a [CLASS],a type of flower"),也可以使用终止信号(如句号)提前切断句子(比如:a flower photo of a [CLASS].)。

方法②Class-Specific Context:即设计特定于类别的上下文(class-specific context,CSC),

每个类的上下文向量是不同的。该方案作为unified context的替代方案,CSC被发现对于细粒度的分类任务特别有用。

训练:该算法基于交叉熵最小化标准分类损失,梯度可以通过文本编码器g(·)进行反向传播,

利用参数中编码的丰富知识优化上下文。连续表示的设计还允许在单词嵌入空间中进行充分的探索,这有助于任务相关上下文的学习。

所提出的方法解决了最近提出的大型vision-language模型(比如CLIP)的适应问题。但是此方法

和NLP中所发展的提示发展方法有所不同。首先,模型的主干结构不同,其次预训练目标不同,一个是对比学习,一个是自回归学习。

4.实验部分

选择了11个图片分类数据集。数据集构成了一个全面的基准,涵盖了一系列不同的视觉任务,

包括对一般对象、场景、动作和细粒度类别的分类,以及识别纹理和卫星图像等特殊任务。数据集的统计如下所示:

分别使用1,2,4,8,16shots训练然后在完整的测试集中部署模型,最终显示运行3次的平均

值。

实验中的CoOp有四个版本,将类标记定位在末尾或中间;unified text vs CSC。在实验中使用

ResNet-50作为image encoder,实验结果图如下所示:

CoOp的上下文向量通过从均值为0,标准差为0.02的高斯分布随机初始化(采用别的初始化策略)。

两个基线方法:zero-shot CLIP和the linear probe。

(1)和手动提示的比较结果图如下所示:

从平均性能图来看,①class token在中间或者是在尾部都有一个相似的性能,因为他们的性能

曲线高度重合;②可以看到CLIP+CoOp是一个很强的小样本学习者,平均只需要两个shot就可以获得比zero-shot较大的优势。(CSC比默认模型性能低的原因,默认的模型使用了Unified context,所以当其使用2-shot时候,假设有n个类,则训练数据的数量为2*nCSC每个类则有2个例子去学习context word的表示;二者相比,后者的训练数据较少,不能学到较多的上下文知识。);③

从使用16-shot的图4中看,本文的方法在大多数细粒度数据集(包括Flowers102,StanfordCars

FGVCAircraft)以及现场和动作识别数据集(即SUN397& UCF101)上,性能的提升也非常显著(超过10%)。Food101数据集出现了负增长。原因是CoOp和linear probe是一种基于学习的方法,其性能会因为训练数据中包含噪音而导致性能下降,在Food101数据集中,存在着带有强烈颜色,甚至有时标签错误的噪音数据。

(2)和Linear probe CLIP的比较

        后者平均需要超过4-shot才能与zero-shot的表现相同,而CoOp在4-shot时的平均性能已经

超出了zero-shot大约十七个点。

在极少量数据的情况下,两种模型的性能差距较大,这表明CoOp比从头开始学习的Linear

Probe更有效。

        在DTD,EuroSAT以及两个细粒度的数据集(Flowers102和FGVCAircraft)上,Linear probe模型与CLIP+CoOP的性能相当,这是因为经过预训练的CLIP的特征空间被证明是强大的,该原因使得线性探测模型成为一个强大的竞争对手。尽管如此,CoOp的CSC版本可以在上述数据集上击败Linear probe CLIP(某些图片的特征容易学,这可能使得在少样本的情况下学得其好的上下文词表示。此时,相比较unified context,CSC更好所以CSC的性能会和unified context持平或者超过,并且超过Linear probe。看所有图的CSC和默认模型的走向,发现当数据足够多的时候CSC会在某一个点超越默认模型)。

       (3)Unified Context VS Class-specific Context

       平均而言,使用统一的上下文可以带来更好的性能,关于何时应用CSC,本文提出了建议。对于通用对象(ImageNet& Caltech101)、场景(SUN397)和动作(UCF101),使用Unified Context显然更好。Unified Context在一些细粒度数据集(包括OxfordPets和Food101)上也能更好地工作,但在其他数据集(如StanfordCars、Flowers102和FGVCAircrafter)上,CSC版本是首选。CSC在DTD和EuroSAT这两项特殊任务上的表现也更好,尤其是在16-shot时。在低下数据集下,CSC性能不如Unified Context,因为前者比后者有更多的参数。

(4)Domain Generalization

       CoOp是在一个特定的数据上学习的,可能会学的一些特定于数据集的信息,不利于在没见过分布上的泛化。但是CLIP就不存在这样的问题,CLIP与特定的数据分布无关,并且也见证了其强大的迁移能力。

      源数据集ImageNet,目标数据集ImageNetV2,ImageNet-Sketch,ImageNet-A,ImageNet-R。目标数据集与源数据集的类名兼容,所以学到的提示可以直接拿过去使用。

ImageNetV2是一个在遵循ImageNet数据收集过程的同时,使用不同的数据来源所产生的测试集

ImageNet Sketch包含属于相同1000个ImageNet类的草图图像。

ImageNet-A和-R都包含从ImageNet的1000个类的200个子集类。前者由现实世界中的逆向过滤图像组成,导致当前ImageNet分类器产生较低的结果,而后者则以不同的图像样式(如绘画、卡通和雕塑)呈现ImageNet类

实验结果如下所示:

观察发现,CLIP+CoOp的鲁棒性强于zero-shot,表明我们学到的提示就有很好的泛化性。而Linear Probe CLIP的分布迁移性能比较差。

       (5)超参数的选择

        ①Context length的长度越长,性能越好;但是较短的Context length有利于distribution shifts。所以选择完美的上下文长度没有黄金法则,因为需要在性能和对分布变化的鲁棒性之间取得平衡。

②Vision Backbones的选择,越先进的体系结构,性能越好

③Prompt ensembling,未来的工作可以从ensembling的角度研究如何提高CoOp。

④可解释性

       里边的某些单词与任务相关,比如Food101中的enjoyed,OxfordPets中的paw、fluffy,DTD中的pretty等等。但是,当将所有最近的单词连接在一起时,提示并没有表示出多大的含义。

       还观察到,当使用手动初始化(如“a photo of a ”)时,收敛向量的最近单词主要是用于初始化的单词。作者推测,学习到的向量可能会对现有词汇表之外的含义进行编码(指的是a photo of a 这些单词不在词汇表中)。

       最后作者提到,不能根据观察结果得出一个准确的结论,因为使用距离最近的词去解释所学到提示向量是不准确的——向量的语义不一定与距离他最近的词相关。

5.总结

       研究揭示了CLIP模型如何使用提示学习转化为数据高效的学习者(在少量shot的例子中,其性能超过Linear probe CLIP和zero-shot CLIP),同时也看到CoOp在领域泛化比手动设计的提示表现要好。

       值得注意的是,论文首次全面研究了提示学习适应大型视觉模型,使得模型更好应用于下游任务。尽管表现非常出色,但与NLP中的其他持续快速学习方法一样,CoOp的结果也相对难以解释。实验还表明,鉴于CoOp在Food101上的表现较弱,它对噪音标签很敏感

猜你喜欢

转载自blog.csdn.net/qq_43775680/article/details/123954000