Clip微调系列:《coOp: learning to prompt for vision-language models》

论文链接:arxiv.org/pdf/2109.01134v1

推荐视频(clip_coop的代码逻辑讲解,代码简单,有助于理解):CLIP和CoOp工作的简单Pytorch复现和理解_哔哩哔哩_bilibili

其他参考链接:CoOp - CLIP 自适应Prompt工程 【一】_coop clip-CSDN博客 


 动机

如下图所示,有三种手工设计的prompt提示词:

  1. a [class]
  2. a photo of [class]
  3. a photp of a [class]

用这三种提示词去做zero-shot测试,实验发现尽管这三种提示词在我们人为看来区别不大,但是实际结果却不同------>文本输入(即提示词)对下游数据集性能起关键作用。

因此,作者提出:想让机器自己学习到最合适的prompt提示词来获得更好的结果


具体方法

如下图所示,原本在CLIP中,文本端的输入就是人为手工设计的prompt + class(A photo if a [class]);

具体而言,就是

1. 先给定所有的标签labels,然后加上prompt(A photo of) 变成完整的input

2. 再使用tokenizer(bert中先wordpieces)将人能看懂的词语映射成为768维的向量,这里又10个labels,所以是[10,768]维的输入到Text Encoder。

下图是coOp的方法,文本输入端的prompt 变成了 可学习的向量 + class。

具体而言:

1. 刚开始给的还是 a photo of [class]

2. 将这个a photo of [class] 传给预训练好的模型,加载预训练权重,得到学习好的这个句子对应的向量(10,4,768);

3. clip中原本就直接用这个得到的向量去和图片做交叉熵损失找出相似度最大的类别;

4. coOp得到预训练模型学习好的向量以后,把class类别的向量冻结住;

5. 将得到的4(A photo of [class])的前三个向量当作初始值,然后去学习;

 6. 将学习后得到的这三个向量再和[class]拼接回原来的模样,再去 做相似度计算。

最终得到的前三个向量也就是我们学习得到的prompt,作者将每个词向量与预训练词典进行欧式距离计算。 选择最接近的向量词,作为填充,最终构成一句话,发现其实没有语言逻辑,人是看不懂的。


细节

其实作者考虑了两种可学习prompt:unified context统一可学习 , class-specific context特定类别可学习

我们上面举的例子是 unified context,也就是虽然有十个类别,但是学习到的learnable prompt 都是相同的;

还有一种class-specific context就是不同的类别对应一种learnble prompt。

还考虑了[class]在句子中的不同位置:mid or end.

下面是实验结果:

都是少样本训练(0-16个样本量)

  1.  大部分数据集下, CoOp的效果会明显好于 Linear Probe 形式。且对于 Base model,只有在 8 到 16个 数据集以上的 Few-Shot 才会比 CLIP 的 Zero-Shot 更具优势。
  2. Prompt词语的 语句序列构成, [CLASS] 在中间 和 在末尾 影响较少,说明 文本Encoder 对于 Prompt词的排序序列 有更强的鲁棒性。
  3. 统一可学习向量unfiied context 与特定可学习向量class-specific context 相比,  明显发现 unified context 的效果会更好一些。

结果3 是因为:训练的数据参数比 统一可学习向量 多的多,然而在 Few-Shot 数据量明显不够,如果要对class-specific context有更好的效果,就需要更多的参数来去拟合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91686.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[论文阅读] 人工智能 + 软件工程 | 开源软件中的GenAI自白:开发者如何用、项目如何管、代码质量受何影响?

开源软件中的GenAI自白:开发者如何用、项目如何管、代码质量受何影响? 论文:Self-Admitted GenAI Usage in Open-Source SoftwarearXiv:2507.10422 Self-Admitted GenAI Usage in Open-Source Software Tao Xiao, Youmei Fan, Fabio Calefato…

AI绘画版权问题全解析:你的作品真的属于你吗?

AI绘画版权问题全解析:你的作品真的属于你吗? 关键词:AI绘画、版权归属、生成式AI、训练数据、独创性、法律合规、知识产权 摘要:当你用MidJourney生成一张“赛博朋克风格的熊猫”,或用Stable Diffusion画出“梵高笔触的星空咖啡馆”时,你是否想过:这张图的版权属于你、…

深入理解Linux文件I/O:系统调用与标志位应用

目录 一、引入 二、标志位 1、什么是标志位? 2、标志位传递示例 输出结果分析 关键点解释 三、文件描述符(File Descriptor)(先大概了解) 四、接口介绍:open()函数 1、命令查看 2、头文件 3、函数原型 4、参数说明 …

海康线扫相机通过采集卡的取图设置

目录 1、扫描高度小于65000行 1.1 软触发 1、采集卡设置项 2、相机设置项 1.2 硬触发 1、采集卡设置项 2、相机设置项 2、扫描高度大于65000行 1.1 软触发 1、采集卡设置项 2、相机设置 1.2 硬触发 1、采集卡设置项 2、相机设置 2.1 帧扫描 2.2 行扫描 3、注意…

InfluxDB 3与Apache Parquet:打造高性能时序数据存储与分析解决方案

在当今数据驱动的时代,各行业产生的数据量呈爆炸式增长,如何高效存储和管理海量数据成为企业和开发者面临的重大挑战。对于时序数据而言,其具有数据量大、写入频繁、查询模式多样等特点,对存储系统的性能和效率提出了更高的要求。…

20250718-4-Kubernetes 应用程序生命周期管理-Pod对象:实现机制_笔记

一、Pod对象1. 资源共享实现机制1)共享网络基本概念实现方式:通过将业务容器网络加入到负责网络的容器(infra container)实现网络共享核心特点:共享网络协议栈(包括TC…

防爆手机是什么?能用普通手机改装吗?

在石油开采平台的井架之上,在化工车间的反应釜旁,在煤矿深达千米的巷道中,一群特殊的工作人员正使用着看似普通的通讯设备。这些设备外壳上醒目的Ex防爆认证标志,揭示着其与众不同的身份——防爆手机。这类专为易燃易爆环境设计的…

gem install报错解析

报错内容 [rootlocalhost ~]# gem install bundler Fetching: bundler-2.6.9.gem (100%) ERROR: Error installing bundler:bundler requires Ruby version > 3.1.0. The current ruby version is 2.5.0.解决方案(任选其一) 这个错误表明你当前的 Ru…

css 如何实现大屏4个占位 中屏2个 小屏幕1个

1、 使用grid.container {display: grid;grid-template-columns: repeat(4, 1fr);gap: 20px;border: 1px solid red;width: 400px;height: 400px;}media (max-width: 768px) {.container {grid-template-columns: 1fr;}}media (min-width: 768px) and (max-width: 992px) {.con…

Redis学习系列之—— JDHotKey 热点缓存探测系统

一、为什么需要热点缓存探测 在回答这个问题前,我们先考虑一下:为什么光用 Redis 还不够,还需要使用本地缓存? 一般来说,Redis 集群的性能能抗住几十万并发,能够应付大部分情况。但对于一些头部 APP&#x…

Linux 安全加固

Linux 安全加固需要从​​用户权限、系统服务、网络防护、日志审计、文件系统、访问控制​​等多个维度入手,目标是减少攻击面、限制未授权访问、提升系统健壮性。以下是​​详细步骤实操示例​​,覆盖主流 Linux 发行版(如 CentOS/Ubuntu&am…

【Docker#2】容器历史发展 | 虚拟化实现方式

一、前言 – 容器技术发展史 容器技术是现今计算技术的重要组成部分,其发展历程可以追溯到很早的计算机系统提供的进程隔离工具。以下是容器技术的发展历程,其中涵盖了从早期的进程隔离技术到现代云计算和云原生的演变: ① Jail 时代 1979 年…

React + Mermaid 图表渲染消失问题剖析及 4 种代码级修复方案

Mermaid 是一个流行的库&#xff0c;它可以将文本图表&#xff08;例如 graph LR; A-->B;&#xff09;转换为 SVG 图表。在静态 HTML 页面中&#xff0c;Mermaid 会查找 <pre class"mermaid"> 代码块&#xff0c;并在页面加载时将它们替换为渲染后的图表。它…

[Element]修改el-pagination背景色

[Element]修改el-pagination背景色 代码 <el-pagination:current-page.sync"queryParams.current":page-size.sync"queryParams.size":page-sizes"[10, 20, 50, 100]"layout"prev, pager, next, jumper, sizes":total"queryP…

Docker 可用镜像列表

Docker 镜像源列表&#xff08;7月15日更新-长期&免费&#xff09;_dockerhub国内镜像源列表-CSDN博客

低代码可视化工作流的系统设计与实现路径研究

一、背景分析在数字化转型不断深化的背景下&#xff0c;企业业务流程呈现出高度定制化与动态调整的趋势&#xff0c;传统信息系统在开发周期、实施成本与扩展能力上的局限性日益凸显&#xff0c;已难以支撑快速响应和敏捷迭代的实际需求。面向这一现实挑战&#xff0c;基于 BPM…

mac mlx大模型框架的安装和使用

mlx是apple平台的大模型推理框架&#xff0c;对mac m1系列处理器支持较好。 这里记录mlx安装和运行示例。 1 安装mlx框架 conda create -n mlx python3.12 conda activate mlx pip install mlx-lm 2 运行mlx测试例 以下是测试程序&#xff0c;使用方法和hf、vllm等推理框架基…

JAVA 使用Apache POI合并Word文档并保留批注的实现

一、需求背景 在实际工作中&#xff0c;我们经常需要将多个Word文档合并成一个文件。但当文档中包含批注&#xff08;Comments&#xff09;时&#xff0c;传统的复制粘贴会导致批注丢失或引用错乱。本文将介绍如何通过Java和Apache POI库实现保留批注及引用关系的文档合并功能。…

Linux的服务管理工具:`systemd`(`systemctl`)和`SysVinit ` 笔记250718

Linux的服务管理工具:systemd(systemctl)和SysVinit 笔记250718 Linux的服务管理工具 Linux 的服务管理工具随着发行版和初始化系统的发展而演变。以下是主要的服务管理工具及其对应的初始化系统&#xff1a; 1. systemd (现代主流标准) 初始化系统&#xff1a; 是绝大多数…

Couchbase 可观测性最佳实践

Couchbase 介绍 Couchbase 是一个开源的分布式 NoSQL 数据库&#xff0c;专为高性能和高可扩展性设计&#xff0c;适用于实时数据处理的企业应用。它结合键值存储和文档数据库的优势&#xff0c;支持 JSON 文档存储&#xff0c;并通过 N1QL&#xff08;类 SQL 查询语言&#x…