SwapPrompt(论文解读): Test-Time Prompt Adaptation for Vision-Language Models

2023(Neural IPS)

摘要

测试自适应 (TTA) 是无监督域自适应(UDA)中一种特殊且实用的设置,它允许源域中的预训练模型去适应另一个目标域中的未标记测试数据。为了避免计算密集型的骨干网络微调过程,因此利用预训练视觉语言模型(例CLIP、CoOp)zero-shot的泛化潜力,仅对未见测试域的运行时提示进行调整。

然而,现有的解决方案尚未充分利用预训练模型的表征能力,因为它们只关注基于熵的优化,其性能远低于监督提示适应方法,例如CoOp。

本文提出了SwapPrompt,可以有效地利用自监督对比学习来促进测试时提示适应。SwapPrompt 采用双重提示范式,即在线提示和目标提示,目标提示从在线提示中取平均值以保留历史信息。此外,SwapPrompt 应用了交换预测机制,该机制利用预训练模型的表征能力,通过对比学习来增强在线提示。具体来说,就是使用在线提示与输入图像的增强视图一起,来预测类别分配,该类别分配由目标提示与同一图像的另一种增强视图生成。

SwapPrompt可以部署在视觉语言模型上,无需额外要求,实验结果表明,该算法在ImageNet和其他9个数据集上实现了最先进的测试时自适应性能。研究还表明,SwapPrompt甚至可以在监督提示适应方法下实现相当的性能。

Introduction

当训练数据与测试数据存在分布差异时,深度神经网络的泛化性能可能会受到影响。领域适应的关键是构建模型,通过将源域知识迁移到目标域来调整数据分布的变化,这在训练阶段同时需要源域和目标域数据。然而,在实际场景中,通常只有经过源域训练后的模型可用,而没有访问源域数据的权限,或者没有权限更改原始的训练过程。为了解决这个问题,目前已经提出了测试时自适应(TTA),它仅利用未标记的测试数据流使模型适应目标域数据/不可见数据。现有的工作已经开发了诸如熵最小化,类原型,图像生成和自监督训练等技术,这些技术已经显示出卓越的性能。

尽管传统基于模型的 TTA 方法效果不错,但它们通常依赖于对模型主干参数的计算密集型调整。随着视觉语言预训练模型(CLIP 、CoOp、CoCoOp)的出现,情况将变得更糟,这些模型具有大量参数且难以优化。因此,探索高效的技术很必要,这些技术保证主干网络固定,仅微调一小部分参数,以便在测试期间使模型适应新的领域。预训练的视觉语言模型是在大量图像-文本对上训练,引入了强大的范式,为解决这个问题提供了新的见解。一种简单的方法是利用预训练视觉语言模型的zero-shot能力,利用下游任务中带标记数据进行微调来区分测试数据的各个领域,但是TTA场景中无带标签的下游数据,所以不合适。Shu提出了测试时提示调整(TPT)来解决测试时标签稀缺问题。然而,直接通过最小化熵调整特定于实例的提示,它可能会导致模型过度信任风险(即,为错误结果产生高置信度)。

本文提出了 SwapPrompt,这是一种新颖的测试时提示适应(TTA)方法。

解释图1:与以前的方法不同,SwapPrompt 在测试域中利用自监督对比学习策略,该策略由两个关键组成:指数移动平均 (EMA) 提示和提示交换预测机制。(1)EMA 机制采用双重提示范式:目标提示和在线提示。我们优化在线提示,同时通过慢移动平均过程逐步更新目标提示,该过程结合过去的信息以提高稳定性和有效性。(2)提示交换预测机制的灵感来源于无监督学习方法SwAV 。根据图像的增强视图和在线提示,SwapPrompt 预测同一图像的增强视图的类别分配。这使在线提示能够学习更多的表征知识。交换预测策略背后的基本原理是同一图像的两中不同增强视图应该具有相似的类别分配。利用对比表示学习方法来产生更好的决策边界。

除了自监督对比学习的损失函数外,我们还采用了传统的交叉熵损失,如 CLIP 和 CoOp,它使用 CLIP 生成的高置信度的伪标签来调整提示。本文方法也可用于在线测试时场景,其中测试数据以小批量流的形式到达。本文将对所有测试数据执行的操作分解为多个小批量。本文在各种测试时适应基准上评估了本文方法,包括ImageNet和基于它的四个自然分布偏移数据集,以及九个细粒度分类数据集。实验结果表明,该方法实现了最先进的测试时适应性能。

本文贡献:

(1)本文提出了SwapPrompt,一种新颖的测试时提示适应方法,它采用自监督对比学习策略,使提示能够更好地适应下游图像分类任务。

(2)本文首次将无监督表征学习应用于预训练视觉语言模型的快速适应。本文引入了 EMA 提示和提示交换预测策略,使提示能够从预训练模型的强大表征能力中学习更多的知识。

(3)本文对 ImageNet 及其 4 个变体以及其他 9 个图像分类数据集进行了广泛的实验。实证评估表明,本文方法明显优于当前的 TPT 方法,甚至可以在大多数数据集上与监督提示适应方法竞争。

 Methodology

3.1 Preliminary and Problem Definition

本文专注于预训练视觉语言模型的测试时提示适应,其中模型在源域上训练,在目标域上进行测试。CLIP(“A photo of [CLS]”)表现出强大的zero-shot泛化能力。然而,这些手工制作的提示并不能完全提取CLIP从大规模、多样化的预训练数据集中学到的丰富知识。优化的提示可以进一步提高 CLIP 获得目标域知识的能力。目前已经有一些关于监督目标域数据的相关工作,包括CoOp方法,本文方法的一部分也融入了CoOp的思想。然后,我们将简要回顾 CoOp 并定义本文中使用的符号。

Context Optimization (CoOp)

CoOp是一种基于CLIP的提示调整的方法。与CLIP类似,CoOp包含一个文本编码器g()和一个图像编码器f()。

目标域数据集:

其中xi表示第i个输入的图像,yi表示相应的类标签,N代表样本个数,其中C表示类别数。

t代表连续的可学习向量,{t;c}表示传递到文本编码器的第c个类别的输入。

zi = f (xi)表示图像编码器输出得到的特征编码,wc = g({t; c})表示文本编码器输出的特征编码。

对于第c个类别中图像xi的预测概率为:

对于所有训练数据,CoOp使用以上公式求所有类的预测概率,并最小化交叉熵损失以调整提示。

Test-Time Prompt Adaptation.

在测试时场景中,来自目标域中带有标签的数据不可以得到,因此不能像CoOp那样优化提示。

因此使用没有标签数据的目标域数据集:

测试时间提示调整的目标可以表示为:

其中L表达交叉熵损失函数,其目的就是设计无监督提示调整方法,促进提示t与目标域数据兼容,为CLIP获取等多的目标域知识。

3.2 Overview of SwapPrompt

SwapPrompt包含两个重要部分:EMA提示和提示交换预测。介绍图2:SwapPrompt采用双重提示范式:在线提示和目标提示两种。通过应用EMA策略,两种提示相互学习以适应目标域。此外,与以往一个提示对应一个图像的框架不同,SwapPrompt采用提示交换预测机制,为提示自适应建立自监督表征学习,其目标是为统一图像的两种不同的增强分配相似的类别。

3.2.1 Exponential Moving Average Prompt

SwapPrompt的目标就是学习一种可以应用于测试数据的在线提示to,使用目标提示tt引导在线提示to的更新。该设计的动机是:给定目标提示tt,我们可以通过预测目标提示tt生成的表征知识来训练一个新的、有改进的在线提示to。通过反复使用后续的在线提示作为新的目标提示进一步训练,我们就可以得到一个质量随时间提高的提示序列。实际中,SwapPrompt使用在线提示的缓慢移动的指数平均值作为新的目标提示,从而在每个训练step下进行以下的更新(ε ∈ [0, 1],表示目标提示的衰减率):

3.2.2 Prompt Swapped Prediction

在自监督学习领域中,跨视图预测在许多现存工作中广泛应用。这些方法通常将预测问题投射到一个表征空间,然后使用来自同一图像的不同增强视图来学习表征。假设一张图像的不同增强视图在表征空间中相对接近。

与直接强制在表示空间中图像特征之间的一致映射不同,SwAV将一组图像特征进行聚类,使用聚类中心作为原型,并匹配同一图像的不同增强版本到这些原型上,以计算其聚类分配。SwAV通过比较它们的聚类分配,而非图像特征,在多个图像视觉之间进行对比学习。

受到SwAV的启发,本文将一张图像的增强视图分配给原型,从而获得软类别分配,然后使用同一张图片的另一个增强视图来预测其类别分配。这种方法很适合CLIP,因为它有自然的原型:文本编码器输出的文本特征。

(1)具体来说,对于测试数据集Dtest中的所有类别Y ∈ {1, 2, . . . , C},目标提示tt会为文本编码器形成C种输入:

文本编码器会根据输入为不同的类别生成C种文本特征:

由于在大规模的图像文本对种进行有监督的对比预训练,CLIP生成的文本特征与相同类别的图像特征相似度很高,与不同类别的图像特征相似度比较低。因此,这C个文本特征可以作为一组高质量的原型。

(2)对于一个图像xi,本文使用两种不同的图像增强方法A1A2来获得两种不同的增强视图A1(xi)和A2(xi)。图像编码器生成相应的图像特征

Eq.1:

(3)通过在文本特征原型与对应类别的两个增广图像视图特征计算Eq1得到相应的类别分配:

其中:

(4)类似,在线提示to产生的预测表示为:

(5)文本建立了图像xi的提示交换预测损失函数(其中l表示衡量预测结果和类别分配之间差异的函数):

其中损失函数:

其中在线提示to通过Eq7被优化,而目标提示tt不会被该损失函数更新。

3.2.3 Prompt Optimization by Pseudo Label

除了使用自监督表征学习方法来优化提示,本文也使用了一组带有标签的数据来优化在线提示,与CoOp类似。但是与CoOp不同,CoOp中目标域的数据标签可用,在测试场景中测试数据的标签不可用。因此,本文首先使用手工提示( A photo of class)对测试数据进行推断,得到它们的伪标签,然后使用Eq6和交叉熵损失:

3.3 Algorithm Workflow

在使用Eq7、Eq9和伪标签训练之前,我们需要进行数据选择来过滤掉潜在的噪声伪标签。具体来说,我们首先使用CLIP和手工设计的提示来获得测试数据的伪标签和分类置信度。然后,对于每个类,只选择置信度排名最高的前K个测试数据。这些被选择的测试数据组成了调整集Dadapt,这是Dtest的一个子集。对于调整集中的测试数据,使用以下函数进行提示调整:

当目标图像以小批量流到达时,即测试数据是在线的,我们无法对整个测试数据集的置信度进行排序。然而,我们仍然可以对小批量进行基于置信度的排序,以选择置信度最高的前k个( k < K)测试数据,同时保持训练过程的其余部分不变。当新的小批量测试数据到来时,对可用的测试数据再次进行置信度排序,得到新的D adapt,以便及时适应。

Conclusion

在本文中,我们研究了一种新的测试时提示适应方法SwapPrompt,以学习适应预训练视觉语言模型的测试域提示。具体来说,我们维护一个在线提示和一个由 EMA 更新的目标提示,它们相互交互和学习。本文设计了一种交换预测机制来训练在线提示,使其能够预测目标提示在不同增强视图下对同一图像的类别分配。SwapPrompt 可以很容易地部署在视觉语言模型的测试时。在各种数据集上进行了大量的实证实验,以验证SwapPrompt的有效性和优越的性能。

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

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

相关文章

JavaScript(31)——内置构造函数

构造函数 构造函数是一种特殊的函数&#xff0c;主要用于快速初始化对象 用大写字母开头只能由new操作符来执行 function Stu(name, age) {this.name namethis.age age}const xiaom new Stu(小明, 18)const xiaoh new Stu(小红, 19)console.log(xiaom);console.log(xiaoh…

使用 Visual Studio 编辑器作为 DailyNotes 的 markdown 编辑器

DailyNotes 是我使用过的最优秀的日常笔记管理工具&#xff0c;为它配置一个好的 markdown 编辑器&#xff0c;可以大幅提升效率。 除了使用 Typora 作为 markdown 编辑器&#xff0c;Visual Studio Code 也是一个非常不错的选择&#xff0c;令人惊喜的是&#xff0c;它也支持…

ts枚举类型校验,提示枚举信息

ts 类型验证&#xff0c;提示枚举信息 const eventTypeList [MOUSE_MOVE, // 鼠标移动LEFT_CLICK // 左键单击// MOUSE_OUT, ] as consttype EventTypeList typeof eventTypeList[number]

Pod基础使用

POD基本操作 1.Pod生命周期 在Kubernetes中&#xff0c;Pod的生命周期经历了几个重要的阶段。下面是Pod生命周期的详细介绍&#xff1a; Pending&#xff08;待处理&#xff09;: 调度: Pod被创建后&#xff0c;首先进入“Pending”状态。此时&#xff0c;Kubernetes的调度器…

uniapp中 使用 VUE3 组合式API 怎么接收上一个页面传递的参数

项目是uniapp &#xff0c;使用了vue3 vite // 使用的组合式API 的 语法糖 <script setup> // 无法使用 onLoad <script> 使用不了下面方法获得上一个页面参数传递 onLoad(options){ } 解决方案1&#xff08;亲测Ok&#xff09;&#xff1a;消息通知与监听…

虹软科技25届校招笔试算法 A卷

目录 1. 第一题2. 第二题3. 论述题 ⏰ 时间&#xff1a;2024/08/18 &#x1f504; 输入输出&#xff1a;ACM格式 ⏳ 时长&#xff1a;2h 本试卷分为不定项选择&#xff0c;编程题&#xff0c;必做论述题和选做论述题&#xff0c;这里只展示编程题和必做论述题&#xff0c;一共三…

Win11搭建Angular开发环境

作为一名后端程序员&#xff0c;无论当前的工作是否需要&#xff0c;会一点点前端无疑对自己是有帮助的。今天就来介绍一下如何搭建Angular的开发环境。我也是摸着石头过河&#xff0c;所以很多东西也不熟悉&#xff0c;先按照Angular官网的介绍来配置吧。 这个是Angular最新版…

mmyolo训练模型报错:ValueError: Key img_path is not in available keys解决办法

使用mmyolo训练模型 的时候报错&#xff1a;ValueError: Key img_path is not in available keys. Traceback (most recent call last): File “tools/train.py”, line 123, in main() File “tools/train.py”, line 119, in main runner.train() File “/root/anaconda3/en…

erlang学习:erlang学习:书上案例22.6练习题3

初步实现了书上案例第二&#xff0c;三问的要求&#xff0c;对输出结果有部分偏差&#xff0c;没有实现对已完成任务状态的记录&#xff0c;因此已完成任务输出无论如何都是0&#xff0c;明天会在record中加一个字段进行已完成任务状态的记录 (2) 添加一个名为job_centre:stati…

服务器备份

服务器备份 一、方案 FreeFileSync freeSSHd Windows任务计划程序 FreeFileSync&#xff1a;设置文件备份方案&#xff08;双向同步、镜像同步、更新同步、自定义同步&#xff09;&#xff0c;适用于本地的文件同步之外&#xff0c;还支持 Google Driver、SFTP 和 FTP 三种…

泛微基于华为仓颉编程语言开发公文交换系统 推动办公软件全面国产化

2024年6月21日下午&#xff0c;华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用&#xff0c;全新出发&#xff01;》中向全球开发者介绍了华为自研仓颉编程语言&#xff0c;并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开发布仓颉编程语言…

Windows—UDP编程

Client骨架&#xff1a; #include <iostream> #include <WinSock2.h> #pragma comment(lib,"ws2_32.lib")int main() {//启动Winsock DLLWORD wVersionRequested MAKEWORD(2, 2);WSADATA lpWSAData;WSAStartup(wVersionRequested, &lpWSAData);//…

实现AOP机制 + Spring总结

文章目录 1.目录2.SmartAnimal.java 接口&#xff08;JDK代理必须有接口&#xff09;3.SmartDog.java4.SmartAnimalAspect.java5.SunSpringApplicationContext.java1.在Bean的后置处理器之后使用动态代理2.完整代码 6.测试1.AppMain.java 调用被代理的类的方法2.结果 7.Spring底…

Unity抖音直播玩法开发流程

前言 近两年直播玩法逐渐新兴起来了&#xff0c;也出现不少质量还不错的作品&#xff0c;比如下列《红蓝对决》《三国全战》等。近期我们也做了一款直播玩法&#xff0c;就此记录下开发流程。 1&#xff0c;申请应用 进入抖音开发者平台&#xff0c;在首页入驻平台。 如果是…

Vue3+Vite 解决“找不到模块“@/components/xxx.vue”或其相应的类型声明 ts(2307)”

1. 安装插件 pnpm i types/node -D2. 修改vite.config.ts文件 import path from path;resolve: {alias: {"": path.resolve(__dirname,"./src"),},},3. 修改tsconfig.app.json文件 别人教的都是修改tsconfig.json文件&#xff0c;但是我发现可能是因为版…

写论文找不到灵感?ChatGPT能提供的一些帮助

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 在学术写作过程中&#xff0c;许多读者常常会面临一个问题——找不到灵感。面对庞大的文献和复杂的研究方向&#xff0c;往往感到无从下手。随着人工智能技术的发展&#xff0c;像ChatG…

redis面试(十九)读写锁ReadLock

读写锁ReadLock 简单来说就是互斥锁和非互斥锁。多个客户端可以同事加的锁叫读锁&#xff0c;只能有一个客户端加的锁叫写锁。这个理论应该是从数据库中来的&#xff0c;放在这里也是同样的解释。 多个客户端同时加读锁&#xff0c;是不会互斥的&#xff0c;多个客户端可以同…

“肯将玉钳作双戟,一舞天下定乾坤。”记唐铎《墨龙图》之中的笔墨画意

唐铎&#xff0c;1957 年生于北京&#xff0c;国家一级美术师&#xff0c;曾先后师从于刘文西、黄申发老师&#xff0c;原名唐京鸣&#xff0c;京城人士&#xff0c;取其名&#xff0c;不鸣则已&#xff0c;一鸣惊人之意&#xff0c;学画三十余年&#xff0c;专注于齐派虾蟹&am…

【技巧】-DNSlog外带文件

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 1.什么是DNSlog 我们都知道DNS就是将域名解析为ip&#xff0c;用户在浏览器上输入一个域名A.com&#x…

深入探索分布式任务调度框架:MySQL实现高效锁机制

本文主要介绍项目中怎么使用 MySQL 实现分布式锁的 背景 假如我们现在要做一个高性能、可扩展的分布式任务调度框架&#xff0c;要怎么设计呢&#xff1f;下面是我之前自己设计的一个架构图。 为了方便后续的分布式锁的设计&#xff0c;我们大致描述下各个角色都做了哪些事情…