CoOp: Learning to Prompt for Vision-Language Models

CoOp: Learning to Prompt for Vision-Language Models

在这里插入图片描述

论文地址:https://arxiv.org/pdf/2109.01134.pdf

CoOp的全称为Context Optimization,即上下文优化,其将CLIP中人工设置的Prompt,变为一个可学习的(learnable)prompt,并经过在11个下游任务上验证发现,CoOp+CLIP极大的提升了原CLIP的性能。

1.CoOp模型

有两种方法,分别为unified context和class-specific context,其中unified context指同一个数据集训练一个固定的context,而class-specific context是针对同一个数据集中的不同类别训练不同的context。并且作者把预测标签class放的位置有中间位置和末尾位置两种。

对于Unified Context,输入text encoder的prompt可表示为:
t = [ V ] 1 [ V ] 2 . . . [ V ] M [ C L A S S ] 或 t = [ V ] 1 . . . [ V ] M 2 [ C L A S S ] [ V ] M + 1 2 . . . [ V ] M t=[V]_{1}[V]_{2}...[V]_{M}[CLASS]\quad 或\quad t=[V]_{1}...[V]_{\frac{M}{2}}[CLASS][V]_{\frac{M+1}{2}}...[V]_{M} t=[V]1[V]2...[V]M[CLASS]t=[V]1...[V]2M[CLASS][V]2M+1...[V]M
对于一个数据集,需要训练得到M个context token。其中[CLASS]在预测时更换成各个类的名称。在执行预测时,对类别i的预测概率为:
p ( y = i ∣ x ) = e x p ( < g ( t i ) , f > ) / τ ) ∑ j = 1 K e x p ( < g ( t j ) , f > ) / τ ) p(y=i|x)=\frac{exp(<g(t_{i}),f>)/\tau )}{\sum_{j=1}^{K}exp(<g(t_{j}),f>)/\tau )} p(y=ix)=j=1Kexp(<g(tj),f>)/τ)exp(<g(ti),f>)/τ)
其中f为image feature,ti表示把[CLASS]换成第i类的名称。最终得到的结果就是计算当前image feature属于第i类的概率。

对于Class-Specific Context(CSC),输入的text encoder的prompt可表示为:
t = [ V ] 1 i [ V ] 2 i . . . [ V ] M i [ C L A S S ] ≠ t = [ V ] 1 j [ V ] 2 j . . . [ V ] M j [ C L A S S ] 或 t = [ V ] 1 i . . . [ V ] M 2 i [ C L A S S ] [ V ] M + 1 2 i . . . [ V ] M i ≠ t = [ V ] 1 j . . . [ V ] M 2 j [ C L A S S ] [ V ] M + 1 2 j . . . [ V ] M j i ≠ j   a n d   i , j   ϵ 1 , 2... K t=[V]_{1}^i[V]_{2}^i...[V]_{M}^i[CLASS] \neq t=[V]_{1}^j[V]_{2}^j...[V]_{M}^j[CLASS]\\ 或t=[V]_{1}^i...[V]_{\frac{M}{2}}^i[CLASS][V]_{\frac{M+1}{2}^i}...[V]_{M}^i\neq t=[V]_{1}^j...[V]_{\frac{M}{2}}^j[CLASS][V]_{\frac{M+1}{2}}^j...[V]_{M}^j\\i\neq j \ and\ i,j\ \epsilon {1,2...K} t=[V]1i[V]2i...[V]Mi[CLASS]=t=[V]1j[V]2j...[V]Mj[CLASS]t=[V]1i...[V]2Mi[CLASS][V]2M+1i...[V]Mi=t=[V]1j...[V]2Mj[CLASS][V]2M+1j...[V]Mji=j and i,j ϵ1,2...K
在训练时就是使交叉熵损失函数最小。

2.实验部分

在这里插入图片描述

CLIP+CoOp模型在11个数据集上的平均分数,M=16代表训练的context token的长度为16,mid和end分别代表把CLASS放在中间位置和末尾位置,CSC代表使用的是Class-Specific Context方法。从图中可看出,CLIP+CoOp均比微调的CLIP效果好,并且使用unified context在one-shot时的性能就与Zero-shot CLIP的性能相匹配。

并且我们可在图中看出unified context要比CSC的效果好很多,作者推测,由于是few-shot,可以学到的东西有限,所以性能提升不明显。并且class token放在句子中间还是放在句子末尾位置对性能的影响不大。

3.总结

CoOp将人工设置的Prompt,变为一个learnable prompt,并在CLIP上取得了很不错的效果。但其学到的context连起来无法用正常语言进行解释,引人思考。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CoOp和CoCoOp是两个不同的模型,它们在上下文标记的数量上有所区别。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 ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值