论文《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),论文提出框架 CoOp (Context Optimization),通过一个简单的提示向量自动学习的idea,完成了相当不错的结果。
论文由南洋理工S-Lab发表,发表在IJCV上(2022)。
论文地址:https://arxiv.org/abs/2109.01134
代码地址:https://github.com/KaiyangZhou/CoOp
论文动机(Intro)
诸如 CLIP 和 ALIGN 等 VLPT模型证明了这种 文本-图像对齐的大模型的巨大潜力。通过 提示 (Prompting),VLPT可以很好地用于下游任务。
提示学习的重要性:随随便便改动一下prompt,即使意思相同,模型的表现也会有很大的不同。如下图所示:

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

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=i∣x)=∑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=i∣x)=∑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

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

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

Context Length (M) 和 backbone选择

基本上, M = 8 M=8 M=8 或者 M = 16 M=16 M=16 效果较好;
ViT-B/16 作为 图像编码器 效果更好些。
和 Prompt Ensembling的比较
Prompt Ensembling 就是将 好几个 prompt 对应的分类器进行组合,从而用于提高分类效果。
结果如下:

与精调模型进行比较

CoOp表现好于其他精调结果,而且精调结果提升不大,退步反而不小。
可解释性
作者在语义空间中,通过比较相似性(欧氏距离),找到与最终任务最相关的 token,看看有没有语义上的可解释性。

总结
本文提出了 CoOp, 一个针对 CLIP 的 Prompt Learning 方法,方法简单但是有效。
相关文章:
论文《Exploring to Prompt for Vision-Language Models》阅读
论文《Exploring to Prompt for Vision-Language Models》阅读 论文概况论文动机(Intro)MethodologyPreliminaryCoOp[CLASS]位置Context 是否跨 class 共享表示和训练 ExperimentsOverall ComparisonDomain GeneralizationContext Length (M) 和 backbon…...
科普 | Runes 预挖矿概念
作者:Jacky X/推:zxl2102492 关于 Runes 协议的前世今生,可以点击阅读这篇文章 👇 《简述 Runes 协议、发展历程及最新的「公开铭刻」发行机制的拓展讨论》 什么是传统预挖矿概念 这轮比特币生态爆发之前,预挖矿&…...
蓝桥杯真题Day40 倒计时19天 纯练题!
蓝桥杯第十三届省赛真题-统计子矩阵 题目描述 给定一个 N M 的矩阵 A,请你统计有多少个子矩阵 (最小 1 1,最大 N M) 满足子矩阵中所有数的和不超过给定的整数 K? 输入格式 第一行包含三个整数 N, M 和 K. 之后 N 行每行包含 M 个整数…...
Android 14.0 SystemUI下拉状态栏增加响铃功能
1.概述 在14.0的系统产品rom定制化开发中,在对systemui的状态栏开发中,对SystemUI下拉状态栏的QuickQSPanel区域有快捷功能键开关,对于增加各种响铃快捷也是常用功能, 有需要增加响铃功能开关功能,接下来就来分析SystemUI下拉状态栏QuickQSPanel快捷功能键开关的相关源码…...
docker学习笔记 二-----docker介绍
老套路哈,第一章先科普一下三种常见的云服务类型,第二和第三章节写docker学习笔记。 一 、IAAS、PAAS、SAAS IAAS (Infrastructure as a Service):基础即服务,供应商仅提供给用户最基础设施的服务资源,也就是服务器资…...
螺旋矩阵的算法刷题
螺旋矩阵的算法刷题 本文主要涉及螺旋矩阵的算法 包括三个题目分别是 59. 螺旋矩阵 II54. 螺旋矩阵 中等LCR 146. 螺旋遍历二维数组 文章目录 螺旋矩阵的算法刷题一 、螺旋矩阵简单1.1 实现一(我认为这个方法更巧妙!!)1.2 实现二&…...
蓝桥杯算法赛(二进制王国)
问题描述 二进制王国是一个非常特殊的国家,因为该国家的居民仅由 0 和 1 组成。 在这个国家中,每个家庭都可以用一个由 0 和 1 组成的字符串 S 来表示,例如 101、 000、 111 等。 现在,国王选了出 N 户家庭参加邻国的庆典…...
7.JDK下载和安装
文章目录 一、下载二、安装三、JDK的安装目录介绍 写JAVA代码不是随随便便能写的,我们得先做一点准备工作。例如,我们平时想要玩一把游戏,就需要先下载、安装才能玩游戏。JAVA也是一样的,也是需要下载并安装相关的软件,…...
Java序列化之Jackson详解
文章目录 1 Jackson1.1 Jackson简介1.2 为什么选择Jackson1.3 Jackson的基本功能1.3.1 将Java对象转换为JSON字符串(序列化)1.3.2 将JSON字符串转换为Java对象(反序列化) 1.4 Jackson库主要方法1.5 使用Jackson基本步骤1.5.1 添加…...
深入Facebook的世界:探索数字化社交的无限可能性
引言 随着数字化时代的到来,社交媒体平台已经成为了人们日常生活中不可或缺的一部分,而其中最为突出的代表之一便是Facebook。作为全球最大的社交媒体平台之一,Facebook不仅仅是一个社交网络,更是一个数字化社交的生态系统&#…...
HTML 怎么解决上下标问题呢?
当我们阅读内容时,经常会遇到特殊格式的文本,如化学式的下标和数学公式的上标,sub 标签和sup 标签就是用来解决这个问题的。 1. 基础语法 什么是 sub 和sup标签 sub 标签用于定义下标文本,而 sup 标签用于定义上标文本。 这些…...
题目 2880: 计算鞍点
题目描述: 给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。 鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。 例如:在下面的例子中(第…...
前端Web移动端学习day05
移动 Web 第五天 响应式布局方案 媒体查询Bootstrap框架 响应式网页指的是一套代码适配多端,一套代码适配各种大小的屏幕。 共有两种方案可以实现响应式网页,一种是媒体查询,另一种是使用bootstrap框架。 01-媒体查询 基本写法 max-wid…...
蚂蚁庄园今日答案
蚂蚁庄园是一款爱心公益游戏,用户可以通过喂养小鸡,产生鸡蛋,并通过捐赠鸡蛋参与公益项目。用户每日完成答题就可以领取鸡饲料,使用鸡饲料喂鸡之后,会可以获得鸡蛋,可以通过鸡蛋来进行爱心捐赠。其中&#…...
深度学习中的随机种子random_seed
在深度学习中,random_seed是一个用于控制随机过程的种子值。这个种子值用于初始化随机数生成器,从而确保在多次实验中,涉及随机性的步骤能够产生一致的结果。这对于实验的可重复性、调试以及结果对比都是至关重要的。 具体来说,深…...
【项目技术介绍篇】若依管理系统功能介绍
作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是࿰…...
Maximum Sum(贪心策略,模运算,最大子段和)
文章目录 题目描述输入格式输出格式样例输入1样例输出1样例输入2样例输出2提交链接提示 解析参考代码 题目描述 你有一个由 n n n 个整数组成的数组 a a a 。 你要对它进行 k k k 次操作。其中一个操作是选择数组 a a a 的任意连续子数组(可能为空),并在数组的…...
Gartner 公布 2024 年八大网络安全预测
近日,Gartner 安全与风险管理峰会在悉尼举行,旨在探讨网络安全的发展前景。 本次峰会,Gartner 公布了 2024 年及以后的八大网络安全预测。 Gartner 研究总监 Deepti Gopal 表示,随着 GenAI 的不断发展,一些长期困扰网…...
《每天十分钟》-红宝书第4版-对象、类与面向对象编程(六)
盗用构造函数 上节提到原型包含引用值导致的继承问题,为了解决这种问题,一种叫作“盗用构造函数”(constructor stealing)的技术在开发社区流行起来(这种技术有时也称作“对象伪装”或“经典继承”)。基本…...
Ubuntu Desktop Server - user 用户与 root 用户切换
Ubuntu Desktop Server - user 用户与 root 用户切换 1. user 用户与 root 用户切换2. root 用户与 user 用户切换References 1. user 用户与 root 用户切换 strongforeverstrong:~$ strongforeverstrong:~$ sudo su [sudo] password for strong: rootforeverstrong:/home/s…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
