CoCoOp(论文解读):Conditional Prompt Learning for Vision-Language Models

news2024/11/22 22:32:03

摘要

随着预训练的视觉语言模型(如 CLIP)的兴起,研究使这些模型适应下游数据集的方法变得至关重要。最近CoOp方法将NLP领域中的提示学习引入到视觉领域中,来调整预训练的视觉语言模型。具体来说,CoOp 将提示中的上下文转换为一组可学习的向量,并且只需少量带有标签的图像进行学习,就实现比手动修改提示更大的提升。

本文发现 CoOp 的一个关键问题:学习的上下文提示无法扩展到同一数据集中更广泛的未见的类,这表明 CoOp 在训练过程中对基础类别的数据产生了过拟合。

为了解决这个问题,本文提出了条件上下文优化(CoCoOp),它通过学习一个轻量级的神经网络来扩展CoOp,为每个图像生成一个输入条件token(vector)。

与 CoOp 的静态提示相比,本文的动态提示会适应每个实例,因此对类偏移的敏感度较低。大量实验表明,CoCoOp 比 CoOp 对不可见的类别的泛化效果要好得多,甚至显示出超越单个数据集的可转移性,并且还会产生更强的领域泛化性能。

Introduction

最近在大规模的视觉-语言预训练方面的研究在zero-shot图像识别方面取得了惊人的性能,证明了在这种范式下学习开放世界视觉概念的潜力。其中关键设计在于如何对视觉概念进行建模。在传统的监督学习中,标签是离散化的,每个类别都与一个随机初始化的权重向量相关联,该权重向量被学习来最小化相同类别的图像的距离。这种学习方法侧重于封闭集的视觉概念,将模型限制在预定义的类别列表中,当涉及到训练过程中不可见的新类别时是不可扩展的。

相比之下,对于CLIP 和ALIGN等视觉语言模型,分类权重由参数化的文本编码器(如Transformer)通过提示生成。例如,为了区分包含不同品种的狗和猫的宠物图像,可以采用类似“A photo of {class},a type of pet”这样的提示模板作为文本编码器的输入,因此,可以用真实的类别名称填充“{class}”标记来合成用于分类的类特定权重。与离散标签相比,视觉语言模型的监督来源来自自然语言,这使得开放集的视觉概念可以被广泛探索,并已被证明在学习可转移表示方面是有效的。

随着视觉语言模型的兴起,最近开始研究模型如何有效地适应下游数据集。为了适应网络规模的数据,例如CLIP使用的4亿对图像和文本,视觉语言模型被专门设计为具有超高容量,这意味着模型大小是巨大的,通常具有数亿个参数甚至数十亿个参数。因此,对整个模型进行微调,正如深度学习研究中经常采用的那样,是不切实际的,甚至可能损害学习良好的表征空间。

一种更全面的方法是添加一些对任务有意义的上下文来调整提示,例如上述宠物数据集的“a type of pet ”,这已被证明可以提高性能。然而,提示工程非常耗时且效率低下,因为它必须基于反复试验,并且也不能保证最佳提示。为了自动化提示工程,周等最近探索了提示学习的概念,用于调整预训练的视觉语言模型。其方法是上下文优化(CoOp),利用神经网络的可微性,将提示中的文本单词转化为一组可学习的向量。只用少数标记图像用于学习,CoOp 在广泛的图像识别数据集中比密集调整的手动提示取得了巨大的改进。

本文发现 CoOp 的问题:可学习的上下文向量无法泛化到同一任务中不可见的类别。解释图1:CoOp 学习的上下文提示在区分“到达门”和“大教堂”等基类方面效果很好,但当它被迁移到新的类别(如“风电场”和“火车铁路”)时,准确性会显著下降,即使任务的性质保持不变,比如识别场景变化。结果表明,学习到的上下文向量过拟合到基类,因此无法捕获对扩展场景识别至关重要的元素。本文认为该问题是由 CoOp 的静态设计引起的,一旦学习上下文就会固定,并且仅针对一组特定的(训练)类进行优化。相反,zero-shot方法采用的手动设计的提示具有相对的通用性。

为了解决泛化性弱问题,本文引入了一个新概念:条件提示学习。其关键思想是根据每个输入实例(图像)进行提示,而不是一旦学习后固定。为了使模型的参数效率高,本文引入了一种简单而有效的条件提示学习实现。具体来说,本文通过学习一个轻量级神经网络来扩展 CoOp,为每张图像生成一个输入条件token,该token与可学习的上下文向量相结合。本文方法称为条件上下文优化 (CoCoOp)。有趣的是,CoCoOp的范式类似于图像描述,这解释了实例条件提示更具有普遍性的原因:它们经过优化以表征每个实例(对类偏移更有鲁棒性),而不是仅服务于某些特定类。

本文在 11 个数据集上进行了全面的实验,其中涵盖了各种视觉识别任务。具体来说,本文设计了一个从基础类别到新类别的泛化设置,其中首先使用基类学习模型,然后在新类上进行测试。与zero-shot方法和CoOp相比,该方法取得了最佳的整体性能(表1)。重要的是,在不可见类中,CoCoOp 比 CoOp 有了显著的改进(图 3(a)),从而大大缩小了手动提示和可学习提示之间的差距。

在更具挑战性的场景中,为一个任务学习的上下文迁移到一个含有若干不同类别的任务中,CoCoOp仍然比CoOp更具优势(表2),这表明实例条件提示更具可迁移性,并且有潜力在更大规模上取得成功。CoCoOp 还获得了比 CoOp 更强的领域泛化性能(表 3),进一步证明了动态提示的优势。

Methodlogy

3.1. Reviews of CLIP and CoOp

Contrastive Language-Image Pre-training

CLIP已经很好地展示了学习开放集中视觉概念的潜力。CLIP 包含图像编码器和文本编码器。图像编码器可以是 ResNet或ViT,用于将图像转换为特征向量。文本编码器是一个Transformer,一系列单词嵌入作为输入,输出文本特征向量。

在训练过程中,CLIP 采用对比损失来学习两种模态的联合嵌入空间。具体来说,对于batch_size图像-文本对,CLIP 最小化每张图像与匹配文本的余弦相似度,同时最大化与所有其他不匹配文本的余弦相似度,并且每个文本的损失也以类似的方式计算。经过训练后,CLIP可用于zero-shot图像识别。x代表图像编码器生成的图像特征, 为文本编码器生成的一组权重向量,每个权重向量代表一个类别(假设总共有 K 个类别)。具体而言,每个 wi 都来自于一个提示,例如“A photo of {class}”,其中“{class}”标记填充了第 i 个类名。预测概率为:

Context Optimization (CoOp)

CoOp旨在克服提示工程中的低效率问题,以便更好地将预训练的视觉语言模型适应下游任务。CoOp 的关键思想是使用可以从数据中端到端学习的连续向量对每个上下文token进行建模。具体来说,CoOp 没有使用“a photo of a”作为上下文向量,而是引入了 M 个可学习的上下文向量 {v1, v2, . . . , vM },每个向量都与单词嵌入具有相同的维度。第 i 个类的提示内容变为 ti = {v1, v2, . . . , vM , ci},其中 ci 是类别名称的单词嵌入。设g(·) 表示文本编码器,则预测概率为

为了使 CLIP 适应下游图像识别数据集,可以使用交叉熵损失作为学习目标。由于文本编码器 g(·) 是可微分的,因此梯度可以反向传播以更新上下文向量。CLIP 的基础模型在整个训练过程中被冻结,本文也是这样。

3.2. CoCoOp: Conditional Context Optimization

CoOp 是一种数据高效的方法,允许仅使用下游数据集中少量的标记图像来训练上下文向量。然而,CoOp 不能推广到同一任务中不可见的类别。本文认为,实例条件上下文可以更好地泛化,因为它为了减少过拟合,将焦点从一组特定的类别转移到每个输入实例,从而转移到整个任务上。

实现 CoCoOp 的一种简单方法是构建 M 神经网络来获取 M 上下文token。但是这样的设计需要 M 倍神经网络的大小,这比 CoOp 中的 M 个上下文向量要大得多。本文提出了一种在实践中非常有效的参数效率设计。解释图2:具体来说,在 M 上下文向量之上,本文进一步学习了一个轻量级神经网络,称为 Meta-Net,用于为每个输入生成一个条件token,然后将其与上下文向量相结合。

hθ(·)代表由θ参数化的Meta-Net,则当前的上下文提示为:

其中x表示图像的特征向量,π = hθ(x)为Meta-Net生成的实例条件,vm表示原本第m个(m ∈ {1, 2, ..., M })的可学习的上下文向量。因此文本提示成为:

预测概率:

在训练过程中,本文更新上下文向量 以及 Meta-Net 的参数 θ。在这项工作中,Meta-Net采用两层瓶颈结构构建,其中隐藏层将输入维度降低了16×。Meta-Net 的输入只是图像编码器的输出特征。

Limitations

第一个限制是关于训练效率:CoCoOp 的训练速度很慢,如果将批处理大小设置为大于 1,则会消耗大量 GPU 内存。这是因为 CoCoOp 基于实例条件设计,该设计要求每个图像通过文本编码器独立转发特定于实例的提示(每张图像都会前向传递自己的实例提示)。这与 CoOp 的效率要低得多,CoOp 只需要通过文本编码器对任何大小的整个小批量进行一次前向传递提示。

第二个限制是,在 11 个数据集中的 7 个数据集(见表 1)中,CoCoOp 在不可见类别的表现仍然落后于 CLIP,这表明需要付出更多努力才能完全缩小或推翻手动提示和可学习提示之间的差距。

 Discussion and Conclusion

本文解决了大型预训练人工智能模型的可用性的一个重要问题,即如何使它们适应下游应用。这些模型,也称为基础模型,在视觉和NLP领域中都受到了学术界和工业界越来越多的关注,因为它们在处理各种下游任务的能力方面非常强大。但是,基础模型在数据规模和计算资源方面进行预训练的成本很高,并且通常包含大量的参数,以便开发足够的能力。例如,我们实验中使用的基于ViT-B/16的CLIP模型具有高达150M的参数大小。这些因素共同凸显了研究有效的适应方法以实现基础模型民主化的必要性。

本文遵循参数高效提示学习的路线,为静态提示的泛化性问题提供了解决方法,更重要的是,表明基于条件提示学习的简单设计在各种问题场景中都表现出色,包括从基础类别到新类别的泛化、跨数据集提示迁移和领域泛化。

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

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

相关文章

DataGridView用法合集(9):添加控件

目录 45. DataGridView列中显示选择框CheckBox 46. DataGridView中显示下拉框ComboBox 47. DataGridView单击打开下拉框 48. DataGridView中显示按钮 49. DataGridView中显示链接 50. DataGridView中显示图像 45. DataGridView列中显示选择框CheckBox [VB.NET] 添加Chec…

MySQL5.7数据库---入门教程(小白教程)

一、MySQL安装 本文以MySQL5.7安装为例。在设置完root密码和添加一个用户后,一路默认。 1、 2、通过点击红圈里的箭头选择对应的版本。 3、 4、端口(Port)一般默认不需要更改。 5、 二、配置环境变量 配置环境变量可以方便在win系统中cmd…

HarmonyOS 端云一体化 -- 项目初始化

HarmonyOS 端云一体化 – 项目初始化 端云一体化官方简介 本文档基于 api9 编写本来我想用最新版的api搞,但是在 AppFallery Connect 上创建项目的时候有bug,没没办法成功创建应用,无奈只能切换到 api9 版本。 1.新建项目 1.1 登录华为官…

突破大模型极限!GLM-4-long百万长文本模型上线bigmodel.cn

最近业务上多了长文本的需求,因为要在prompt里面塞进比较多的rag内容,以供决策,且这些召回的内容,都有可能用到。这非常考验大模型的长文本能力,技术选型上都要着重考察这部分。 正巧,上次清影试用后&…

游戏开放式新手引导框架设计

强制性引导:只能点某个按钮 优:程序简单 缺: 玩家体验差 开放式引导:不强制点 优:玩家体验好 缺: 程序复杂 需求分析: 1.开放式引导,引导是到达某个条件后进行一系列行为&#xff08…

水星Mercury X1轮式人形机器人结合openc算法&STag标记码视觉系统实现精确抓取!

本案例展示了如何利用视觉系统提升机械臂的抓取精度,成功实现了人形机器人的双臂抓取不在局限于单臂抓取。 引言 如今市面上已经有了许多不同类型的人形机器人,涵盖了服务行业和医疗行业等各个领域。这些机器人以其智能化和自动化的特性逐渐融入我们的日…

比例PQ阀信号放大器的选择

比例PQ阀信号放大器的选择时,需要考虑一系列的因素以确保放大器能精确匹配比例阀的需求,保障液压系统的高效和稳定运行。根据所控制的比例阀类型,选择与之兼容的放大器型号。如各厂商不带反馈比例方向阀、比例溢流阀、比例减压阀等均可用BEUE…

RabbitMQ 集群部署方案

RabbitMQ 一、安装 RabbitMQ二、更改配置文件三、配置集群四、测试 环境准备:三台服务器,系统是 CentOS7IP地址分别是: rabbitmq1:192.168.152.71rabbitmq2:192.168.152.72rabbitmq3:192.168.152.73 一、…

【一键操作】【包运行及安装教程】2024数学建模国赛(高教社杯)Latex论文模板

数学建模国赛创办于1992年,每年一届,是首批列入“高校学科竞赛排行榜”的19项竞赛之一。 作为一个重量级的赛事,一次参赛将众生受益,所以相信很多同学都在为了国奖而努力,所以针对大家的参赛论文,我们之前分…

LVS集群的NAT模式和DR模式

LVS简介 LVS(Linux Virtual Server)是一个用于负载均衡的开源软件项目,旨在通过集群技术实现高性能、高可用的服务器系统。它运行在Linux操作系统上,并且可以利用内核级的资源来提高性能和稳定性。 LVS 体系结构 LVS架构 主要…

Redis远程字典服务器(7)—— set类型详解

目录 一,基本情况 二,常用命令 2.1 sadd 2.2 smembers,sismember 2.3 spop,srandmember 2.3 smove,srem 2.4 sinter,sinterstore求交集 2.5 sunion,sunionstore求并集 2.6 sdiff&#…

Mysql视图整理

理论 初级语法及操作 操作基于navicat视图化,其他管理工具基本类似 参考即可 这里附上官网免费版下载链接:Navicat Premium Lite | 简单的数据库管理和开发工具 首先:选择选中数据库--》最上面的视图--》新建视图--》 我们可以看到这里&a…

three.js 几何体、材质和网格模型

场景Scene、相机Camera、渲染器Renderer初始化完成之后,可以向场景中添加一个简单的模型进行展示。在此之前需要了解三个概念:几何体、材质、网格模型。 几何体:表示物体的几何形状。材质:表示物体的外观效果。网格模型&#xff…

springboot的学习(一):springboot的基础

简介 springboot的基础的知识点的学习总结 springboot 设计目的是为了简化spring应用的初始搭建和开发过程。 简单例子 new project,一般用这个阿里的地址:https://start.aliyun.com/ 点击next,选择jdk版本 点击next,选择模…

88.SAPUI5 Model Binding的问题-在view更改数据,model却不变

目录 1.背景 2.sap.ui.model.BindingMode sap.ui.model.BindingMode.OneWay sap.ui.model.BindingMode.TwoWay 3.oModel.setDefaultBindingMode 方法说明 execOneWay方法 execTwoWay方法 1.背景 在做一个UI5项目,后台读取sap.ui.model.Model后,把…

Vuex 深度解析 | 面试常问问题案例

Vuex 深度解析 | 面试常问问题案例 Vuex 是 Vue.js 应用程序的状态管理模式和库。它为 Vue.js 应用程序提供了一个集中存储所有组件的共享状态,并以相应的规则保证状态以一种可预测的方式发生变化。接下来,我们将深入探讨 Vuex 的核心概念、使用方式、AP…

项目管理高效秘诀:优选软件大公开

国内外主流的 10 款项目管理系统对比:PingCode、Worktile、Asana、Trello、ClickUp、Zoho Projects、Hive、Teambition、飞书、Tapd。 在寻找完美的项目管理工具时,许多团队都面临一个共同的问题:除了已知的Worktile之外,还有哪些…

“从创建到管理,Linux进程编程是你掌握系统资源的金钥匙!“#Linux系统编程之进程【下】

"从创建到管理,Linux进程编程是你掌握系统资源的金钥匙!"#Linux系统编程之进程【下】 前言预备知识一、 父进程等待子进程退出(一)1.1 为啥要等待子进程退出1.2 父进程等待子进程退出并收集退出状态1.3 编程验证僵尸进程…

【47 Pandas+Pyecharts | 杭州二手房数据分析可视化】

文章目录 🏳️‍🌈 1. 导入模块🏳️‍🌈 2. Pandas数据处理2.1 读取数据2.2 过滤数据2.3 行政区处理2.4 地址处理2.5 房屋信息处理2.6 面积处理2.7 楼层处理2.8 年份处理2.9 房价处理2.10 删除不用的列2.11 数据类型转换2.12 查看…

【数学建模】Matlab 编程

MATLAB是美国MathWorks公司自20世纪80年代中期推出的数学软件,具有优秀的数值计算能力和卓越的数据可视化。由于Maltab编程方便,有大量内部函数和工具箱可以使用,作图也 十分方便,因此在数学实验和数学建模竞赛中,我们…