CoCoOp: Conditional Prompt Learning for Vision-Language Models

目录

Abstract

Motivation

Method

Experiments

Generalization from base to new classes within a dataset

Cross-dataset transfer

Domain generalization

Further Analysis

 Limitations

One more thing


Abstract

CoOp将prompt中的上下文单词转换为一组可学习的向量,并且只需少数标记的图像用于学习,就可以实现比密集调整的手动prompt更大的改进。

但是研究中发现了CoOp的一个问题:泛化性差,即学习的上下文向量不能推广到同一数据集中的未知类,这表明CoOp在训练时过拟合到了base classes。

为了解决这个问题,作者提出Conditional Context Optimization (CoCoOp)。CoCoOp在CoOp基础之上引入一个轻量级的神经网络为每张图像生成input-conditional tokens (vectors),这些tokens会加到原本CoOp中的learnable vectors上,从而可以学习到更泛化的prompt。

相比CoOp中静态的prompt,CoCoOP这种动态的prompt是能适应每个实例的(instance-adaptive),对于class shift更加鲁棒。实验表明对于未知类,CoCoOp的泛化性比CoOp好,甚至还展示了有潜力的单数据集迁移性。

Motivation

作者展示了一个例子来说明CoOp和CoCoOp对于未知类的结果对比:

 CoOp 学习的上下文在区分训练期间见到过的基类时效果很好,但当它迁移到新的(未知)类时,例如“风力发电场”和“火车铁路”,尽管任务的性质(场景识别)保持不变,精度却会严重下降。

结果表明,CoOp在下游任务上训练时容易过拟合到 base classes上,因此无法捕获到更泛化,且对广泛场景识别重要的元素。CoOp的context 仅针对一组特定的类别上优化,而且在学习之后就固定了,一种简单的解决方法就是将CoOp中unified context,变成instance-adaptive context。这样对于每个样本都有一个特定的prompt,从而会让context 的聚焦从一组特定类别上,转移到每个样本的特征或者属性上,进而就减少了过拟合,对于class shift更加鲁棒。

Method

回顾CoOp:

CoCoOp由两个可学习的组件组成:一组上下文向量和一个轻量级神经网络(Meta-Net),它为每个图像生成一个输入条件token。

相比于CoOp,CoCoOp增加了一个Meta-Net, 设为ℎ(⋅) ,Meta-Net的输入是image feature x ,输出则是一个instance-conditional token \pi :

然后\pi与每个context token v_{m}相加,得到v_{m}(x)

 因此,第 i 类的prompt以输入为条件,即:

 预测概率的计算公式如下:

在训练过程中,更新上下文向量{Vm} 以及Meta-Net的参数θ。Meta-Net是一个两层瓶颈结构(Linear-ReLU-Linear),隐层将输入维度降低了16倍。

Experiments

Generalization from base to new classes within a dataset

第一个实验:在一个数据集中从基类到新类的泛化

  • 将每一个数据集的classes平均分成2组,一组base classes,一组new classes;
  • 训练时只有base classes的16-shot数据训练;
  • H:Base和New的准确率的调和平均数

总体来看,CoCoOp在这里更像是介于CoOp和CLIP的中间效果:对于基类不如CoOp,但是超过CLIP;对于未知类不如CLIP(4/11),但是超过了CoOp。

但是我觉得,实际上还是CLIP更好,因为实验test时候对 CLIP 的 manual prompt 是用所有类别调整过的,  实际应用中对多个数据集的泛化直接用CLIP的zero-shot就好。

对于CoCoOp和CoOp在从基类到新类别泛化综合比较:

CoCoOp对于未知类的泛化性高于CoOp,但是对于基类的准确率不如CoOp,这是因为:CoOp专门针对基类进行优化,而CoCoOp针对每个实例进行优化,以便获得对整个任务的更多泛化

Cross-dataset transfer

第二个实验:跨数据集迁移。

在这里只考虑 prompt learning方法,作者将在ImageNet里的1000个类学习到的context,迁移到另外10个数据集上比较,也就是说,把ImageNet作为源域,另外10个数据集作为目标域进行测试:

 在10/11数据集下,CoCoOp的性能都要超过CoOp。

Domain generalization

第三个实验:域泛化。

对于OOD的泛化研究近年来做的比较多,CoOp的可学习prompt方法对于domain shift表现较好,本节就验证CoCoOp是否还能保持CoOp的优势。

 从ImageNet学习到的context 迁移到四个专门设计的基准测试中来评估CoCoOp的域泛化性能。结果表明,这两种prompt learning方法在所有目标数据集上都明显优于CLIP。与Coop相比,CoCoOp在ImageNetV2上的性能略差,但在其他三个版本上的性能要好一些。

结果证实,instance-conditional prompts具有更强的领域概括性。

Further Analysis

对初始化和context的长度分别做消融实验,结果如下:

 Limitations

1、因为CoCoOp是基于实例条件设计的,对于每个图像,都需要通过文本编码器对特定于实例的prompt 进行独立的前向传递。这比CoOp的效率低得多,CoOp只需要通过文本编码器对任何大小的 mini-batch 的prompt进行一次前向传递。

因此,和CoOp相比,CoCoOp需要消耗更大的GPU内存,因此实验部分:we train CoCoOp with batch size of 1 for 10 epochs.

2、在11个数据集的结果中,CoCoOp在未知类上的表现仍然落后于CLIP,这表明基于学习的prompt和人工设计的prompt之间还存在着差距。

One more thing

对于未来的工作,作者也提出了一些可探究的点,比较有趣的一点是扩充 元网络meta-net ,甚至是混合不同数据集的不同训练数据等。

通过实验部分也能看到,CoCoOp其实介于CoOp和CLIP之间的一个方法。CoOp的设计初衷用于将CLIP先验知识快速adapt到下游任务上,其提升了accuracy的同时也牺牲了generalization,所以CoOp更加“专”而“精”;而CLIP从头到尾都是在追求generalization,所以CLIP在所有数据集上的效果都还不错,但不够“精”,却更加“广泛”而“粗糙”。

而CoCoOp则介于它们之间,从研究上来看是没问题的,但是从工程角度,实际应用来看就有点疑惑了:我们什么时候才需要CoCoOp呢?它的应用场景真的广吗?就很值得考虑了。举个例子,如果说想完成某个具体的下游任务我就直接用CoOp,如果我想同时完成很多下游任务 追求泛化性,那么我就选CLIP。这样看,CoCoOp的motivation并不是很强。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
CoOpCoCoOp是两个不同的模型,它们在上下文标记的数量上有所区别。CoOp中引入了较少的上下文标记数量,而CoCoOp引入了更多的参数,即Meta-Net。通过消融实验可以发现,增加参数大小并不是关键,因为用较大的GPU内存来训练CoCoOp相比CoOp会消耗更多的资源。因此,在实验中,CoCoOp使用了批大小为1的训练,并进行了10个epochs的训练。综合来看,CoCoOp在一些方面表现介于CoOp和CLIP之间。对于基类来说,CoCoOp不如CoOp,但超过了CLIP;对于未知类来说,CoCoOp不如CLIP,但超过了CoOp。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [CoOp & CoCoOp](https://blog.csdn.net/qq_46563097/article/details/130281970)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [CoCoOp: Conditional Prompt Learning for Vision-Language Models](https://blog.csdn.net/LuvLive/article/details/130601750)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值