当前位置: 首页 > news >正文

论文《Exploring to Prompt for Vision-Language Models》阅读

论文《Exploring to Prompt for Vision-Language Models》阅读

  • 论文概况
  • 论文动机(Intro)
  • Methodology
    • Preliminary
    • CoOp
      • [CLASS]位置
      • Context 是否跨 class 共享
      • 表示和训练
  • Experiments
    • Overall Comparison
    • Domain Generalization
    • Context Length (M) 和 backbone选择
    • 和 Prompt Ensembling的比较
    • 与精调模型进行比较
    • 可解释性
  • 总结

论文概况

今天带来的论文是《Exploring to Prompt for Vision-Language Models》,主题是基于CLIP的VLPT(Vision-Language Pre-Training)模型的提示学习(Prompt Learning),论文提出框架 CoOpContext Optimization),通过一个简单的提示向量自动学习的idea,完成了相当不错的结果。

论文由南洋理工S-Lab发表,发表在IJCV上(2022)。

论文地址:https://arxiv.org/abs/2109.01134
代码地址:https://github.com/KaiyangZhou/CoOp

论文动机(Intro)

诸如 CLIP 和 ALIGN 等 VLPT模型证明了这种 文本-图像对齐的大模型的巨大潜力。通过 提示 (Prompting),VLPT可以很好地用于下游任务。

提示学习的重要性:随随便便改动一下prompt,即使意思相同,模型的表现也会有很大的不同。如下图所示:
Illustration Example

a photo of [CLASS]
a photo of a [CLASS]

即使只是差一个“a”,在结果上也能体现出5个点左右的差异。
其余的观察:
(1)如加入描述性后缀,如“a type of flower”,“texture”,也会影响分类表现;
(2)加入描述性前缀也会影响推荐性能,如“a centered satellite photo”

基于上述观察,作者提出了CoOp,共包含两个implementations:

  • Unified Context,即针对不同的class使用同一套prompt,不单独进行区分
  • Class-specific Context,即针对单独的分类class单独一套prompt embedding

Methodology

Architecture

Preliminary

CLIP的大致流程:
text encoder(通常为Transformer)负责对文本进行编码(对于分类任务,具有多个分类class的文本,通过将其融入prompt,输入text encoder);
image encoder(通常为ResNet或ViT)负责对图片进行编码;
通过cosine对比相似度,完成下游的分类任务

这里统一介绍一下符号并介绍一下基本设置:

(1)prompt处理:对于模板“a photo of [CLASS]”,当前的label如果是“dog”,那么先替换进去,生成“a photo of dog”,在前面后面分别加上特殊标记token,生成“[SOS] a photo of dog [EOS]”,prompt最多容纳77个token(CLIP限制)。Transformer将其映射成512维的embedding,[EOS]作为整个prompt句子的代表被用于后续的对比(需要通过 Layer Normalization 操作和 Linear Projection Layer)

(2)Training: CLIP经历了共计 400 million个 高质量 图片-文本对的预训练过程

(3)Zero-Shot 推理:CLIP蕴含了大量的先验知识, f \mathbf{f} f 代表图片 x x x 的 encoding 向量,对于 K K K 个分类对应的prompt,CLIP 输出了 { w } i = 1 K \{\mathbf{w}\}_{i=1}^{K} {w}i=1K K K K 个 text encoding embedding。然后通过一个 softmax 进行相似度计算:

p ( y = i ∣ x ) = exp ⁡ ( cos ⁡ ( w i , f ) / τ ) ∑ j = 1 K exp ⁡ ( cos ⁡ ( w j , f ) / τ ) , p(y=i \mid \boldsymbol{x})=\frac{\exp \left(\cos \left(\boldsymbol{w}_{\boldsymbol{i}}, \boldsymbol{f}\right) / \tau\right)}{\sum_{j=1}^K \exp \left(\cos \left(\boldsymbol{w}_{\boldsymbol{j}}, \boldsymbol{f}\right) / \tau\right)}, p(y=ix)=j=1Kexp(cos(wj,f)/τ)exp(cos(wi,f)/τ),
其中, τ \tau τ 是温度系数,这个宏参一般还挺重要。

CoOp

事实上,CoOp 就只是把原来离散的 prompt (是指通过人手动输入)更改为一些需要学习的连续向量。形式上表现为以下格式:

[CLASS]位置

(1)放在末尾:

t = [ V ] 1 [ V ] 2 … [ V ] M [ C L A S S ] \boldsymbol{t}=[\mathrm{V}]_1[\mathrm{~V}]_2 \ldots[\mathrm{V}]_M[\mathrm{CLASS}] t=[V]1[ V]2[V]M[CLASS]

(2)放在中间:
t = [ V ] 1 … [ V ] M 2 [ C L A S S ] [ V ] M 2 + 1 … [ V ] M \boldsymbol{t}=[\mathrm{V}]_1 \ldots[\mathrm{V}]_{\frac{M}{2}}[\mathrm{CLASS}][\mathrm{V}]_{\frac{M}{2}+1} \ldots[\mathrm{V}]_M t=[V]1[V]2M[CLASS][V]2M+1[V]M

Context 是否跨 class 共享

(A)多个 class 共享一套参数,即:

[ V ] 1 i [ V ] 2 i … [ V ] M i = [ V ] 1 j [ V ] 2 j … [ V ] M j [\mathrm{V}]_1^i[\mathrm{~V}]_2^i \ldots[\mathrm{V}]_M^i = [\mathrm{V}]_1^j[\mathrm{~V}]_2^j \ldots[\mathrm{V}]_M^j [V]1i[ V]2i[V]Mi=[V]1j[ V]2j[V]Mj
其中 i ≠ j i \neq j i=j and i , j ∈ { 1 , … , K } i, j \in\{1, \ldots, K\} i,j{1,,K}.

这种叫做 Unified Context;

(B)不同 class 不共享,单独一套embedding,即:

[ V ] 1 i [ V ] 2 i … [ V ] M i ≠ [ V ] 1 j [ V ] 2 j … [ V ] M j [\mathrm{V}]_1^i[\mathrm{~V}]_2^i \ldots[\mathrm{V}]_M^i \neq[\mathrm{V}]_1^j[\mathrm{~V}]_2^j \ldots[\mathrm{V}]_M^j [V]1i[ V]2i[V]Mi=[V]1j[ V]2j[V]Mj
其中 i ≠ j i \neq j i=j and i , j ∈ { 1 , … , K } i, j \in\{1, \ldots, K\} i,j{1,,K}.

这种叫做 Class-Specific Context (CSC)。

表示和训练

上述两个分别进行排列组合,得到 1A ; 1B; 2A; 2B 四种格式,用于后面实验进行分析。

针对不同的 class 进行相似度比照:

p ( y = i ∣ x ) = exp ⁡ ( cos ⁡ ( g ( t i ) , f ) / τ ) ∑ j = 1 K exp ⁡ ( cos ⁡ ( g ( t j ) , f ) / τ ) p(y=i \mid \boldsymbol{x})=\frac{\exp \left(\cos \left(g\left(\boldsymbol{t}_i\right), \boldsymbol{f}\right) / \tau\right)}{\sum_{j=1}^K \exp \left(\cos \left(g\left(\boldsymbol{t}_j\right), \boldsymbol{f}\right) / \tau\right)} p(y=ix)=j=1Kexp(cos(g(tj),f)/τ)exp(cos(g(ti),f)/τ)

通过 cross-entropy 计算分类损失,通过梯度传播更新提到的 { [ V ] 1 i [ V ] 2 i … [ V ] M i } i = 1 K \{[\mathrm{V}]_1^i[\mathrm{~V}]_2^i \ldots[\mathrm{V}]_M^i\}_{i=1}^{K} {[V]1i[ V]2i[V]Mi}i=1K

Experiments

这部分简要介绍结果,不再过多赘述

Overall Comparison

Overall Performance Comparison
整体上来讲,CoOp表现随着 k-shot 中 k 的提高性能不断提高,且基本能够超过 zero-shot 的 CLIP 的表现,一开始比不过应该也正常,毕竟 embedding 还没学到什么东西;在OxfordPets和Food101上不太理想,作者推测是数据集质量不太高;另外,unified基本好过CSC(大部分情况,也有例外)。

具体提高统计为:
Improvement
如上所说,Food101表现失准。

Domain Generalization

可迁移性,分别通过在 ImageNet 上训练,并在相关的 ImageNetV2,ImageNet-Sketch,ImageNet-A,ImageNet-R 数据集上进行测试,结果如下:
Domain Generalization

Context Length (M) 和 backbone选择

Performance w.r.t M and backbone
基本上, M = 8 M=8 M=8 或者 M = 16 M=16 M=16 效果较好;
ViT-B/16 作为 图像编码器 效果更好些。

和 Prompt Ensembling的比较

Prompt Ensembling 就是将 好几个 prompt 对应的分类器进行组合,从而用于提高分类效果。
结果如下:
Comparisions with Prompt Ensembling

与精调模型进行比较

Comparisons with Fine-Tuning
CoOp表现好于其他精调结果,而且精调结果提升不大,退步反而不小。

可解释性

作者在语义空间中,通过比较相似性(欧氏距离),找到与最终任务最相关的 token,看看有没有语义上的可解释性。

Interpretability

总结

本文提出了 CoOp, 一个针对 CLIP 的 Prompt Learning 方法,方法简单但是有效。

相关文章:

  • Linux小程序: 手写自己的shell
  • LabVIEW比例流量阀自动测试系统
  • Eclipse+Java+Swing实现斗地主游戏
  • 散热风扇220v交流12v直流12038轴流风机配电箱机柜散热风扇15050
  • Rust教程:How to Rust-基本类型
  • 探索数据库mysql--------------mysql主从复制和读写分离
  • 电脑关机速度很慢怎么解决?
  • L3-016 二叉搜索树的结构
  • LeetCode //C - 436. Find Right Interval
  • MySQL进阶-----索引的语法与SQL性能分析
  • 【Python百日进阶-Web开发-Peewee】Day290 - Peewee 的扩展(十)架构迁移(下)/ 映射
  • Unity 学习日记 12.小球撞击冰块游戏
  • RabbitMQ介绍
  • 【WPF应用16】WPF如何让Canvas上的元素响应鼠标点击事件?
  • 企业产品网络安全建设日志0328
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Akka系列(七):Actor持久化之Akka persistence
  • CentOS 7 防火墙操作
  • Consul Config 使用Git做版本控制的实现
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • httpie使用详解
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java的Interrupt与线程中断
  • Java基本数据类型之Number
  • MD5加密原理解析及OC版原理实现
  • October CMS - 快速入门 9 Images And Galleries
  • swift基础之_对象 实例方法 对象方法。
  • 包装类对象
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 免费小说阅读小程序
  • 前端技术周刊 2019-02-11 Serverless
  • 算法之不定期更新(一)(2018-04-12)
  • 小程序01:wepy框架整合iview webapp UI
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #vue3 实现前端下载excel文件模板功能
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (03)光刻——半导体电路的绘制
  • (04)odoo视图操作
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (二)fiber的基本认识
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)Google的Objective-C编码规范
  • (转)Scala的“=”符号简介
  • *上位机的定义
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET 药厂业务系统 CPU爆高分析
  • .NET开发不可不知、不可不用的辅助类(一)
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .NET中winform传递参数至Url并获得返回值或文件
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [ACM] hdu 1201 18岁生日