MaPLe(论文解读): Multi-modal Prompt Learning

2024-09-05 13:04

本文主要是介绍MaPLe(论文解读): Multi-modal Prompt Learning,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Comment: Accepted at CVPR2023

摘要

预训练的视觉语言模型(VL-PTMs)(比如CLIP)在下游任务中已经表现出不错的泛化能力。但是它们对输入文本提示模板的选择很敏感,需要仔细选择提示模板才能表现良好。

受到NLP领域的启发,最近的CLIP的自适应性方法开始学习提示作为文本输入,来微调CLIP以适应下游任务。本文能注意到,在CLIP的单个分支(语言或图像分支)中使用提示来调整表示的效果是次优的,因为它不具备在下游任务中动态调整两个表示空间的灵活性。

本文提出了针对语言和图像两个分支的多模态提示学习MaPLe(Multi-modal Prompt Learning),来提高图像和本文表示之间的一致性。本文的设计促进了视觉-语言之间的强耦合,从而确保了相互协同,防止学习独立的单模态的解决方案。更进一步,本文在模型的不同阶段引入不同的提示,逐步对不同阶段的特征关系进行建模,从而实现丰富的上下文学习。

本文在泛化到新的类、新的目标数据集和未见过的域转移三个代表性任务上评估了本文方法的有效性。与最先进的Co-CoOp方法相比,MaPLe表现出良好的性能,在11个不同的图像识别数据集,在新类别上的绝对增益为3.45 %,在总体调和均值上的绝对增益为2.72 %。

Introduction

基本的视觉语言模型(例如CLIP)在下游任务中已经展现出不错的泛化能力。这些模型通过训练,可以在网络规模的数据上对齐文本和视觉两个模态的信息(比如CLIP中4亿图像文本对)。由于自然语言中丰富的监督,这些模型可以对开放词汇的视觉概念进行推理。在推理的过程中,将文本提示(a photo of <class>)输入到文本编码器成为query查询。输出的文本嵌入和来自图像编码器的视觉嵌入进行匹配,来预测输出类。已经证明,设计高质量的上下文提示可以提高CLIP和其他V-L模型(视觉语言模型)的性能。

尽管CLIP在泛化到新概念方面表现出有效性,但其庞大的规模和训练数据的稀缺性(例如few-shot的设置)使其为下游任务微调整个模型变得不可行。这种微调可能会忘记在大规模预训练中获得的有用的知识,并且可能会对下游任务造成过拟合的风险。为了解决上述挑战,现有的工作提出了文本提示学习,来避免手动调整提示模板,并且提供了一种机制,能够保证原始权重冻结的情况下调整模型。图1-a:受NLP的启发,这些方法仅探索了CLIP文本编码器中的提示学习,而调整CLIP中图像编码器仍然是未探索的话题。

本文的动机来自于CLIP的多模态本质,文本编码器和图像编码器同时存在,两者都有助于正确对齐视觉、语言两个模态。本文认为任何提示方法应该完全适应模型,因此,仅学习CLIP中文本编码器学习提示不足以模拟图像编码器所需要的调整。

解释图1-b:为此,本文着手实现提示方法的完整性,并且提出了MaPLe,来充分微调文本和图像编码器中的表示,从而在下游任务中实现最佳的对齐。

本文在三个关键的代表的场景中进行了广泛的实验,包括从基本到新的泛化、跨数据集评估和领域泛化,证明了MaPLe的优势。

解释图1-c:在基于新类别的泛化上,MaPLe在11个不同的图像识别数据集上超过了现有的快速学习方法,并且在新类别上取得了3.45 %的绝对平均增益,在调和均值上取得了2.72 %的绝对平均增益,超过了最先进的方法Co - CoOp。此外,MaPLe在跨数据集迁移和领域泛化中表现出良好的泛化性能和鲁棒性,与现有方法相比取得一致的改进。

贡献总结

(1)本文在CLIP中提出了多模态提示学习来更好地对齐视觉-语言表征。这是第一个用于微调CLIP的多模态提示方法。

(2)为了将文本和图像编码器中的提示联系起来,提出了一个耦合函数将视觉提示条件化到它们对应的文本提示上。它作为两种模态之间的桥梁,允许梯度的相互传播以促进协同作用。

(3)本文的多模态提示在视觉和语言分支的多个transformer块中学习,以逐步学习两种模态的协同行为。这种深度提示策略允许独立地对上下文信息进行建模,从而为视觉-语言表征的对齐提供了更大的灵活性。

Method

本文的方法是通过提示微调上下文,对预训练的多模态CLIP进行微调,以更好地泛化到下游任务中。

介绍图2:与以往只在语言分支上学习提示的方法不同,MaPLe提出了一种联合提示学习的方法,它在视觉语言两个分支上学习上下文提示。

具体来说,本文在语言分支中添加了可学习的上下文标记,并且通过一个耦合函数将视觉提示条件化在文本提示中,从而建立两者之间的交互。

为了学习层次化的上下文表示,本文在文本和图像两个分支中引入深度提示,这是通过在不同的transformer块中独立可学习上下文提示来实现的。

在微调过程中,只有上下文提示及其耦合函数能够被学习,而模型的其余部分被冻结。

3.1Revisiting CLIp

本文在一个预训练的VL模型CLIP上构建了本文的方法,该模型包含一个文本编码器和图像编码器。与当前的提示方法一致,本文使用基于ViT的CLIP模型。CLIP编码一张图片I和与之对应的文字描述。

Encoding Image:

图像编码器V有K个transformer层。首先将输入图片I分割为M个大小固定的图像patches,然后投影成为图像嵌入E0(图像patches的向量表达)。

图像嵌入Ei与一个可学习的[CLS]标识ci一起,输入到第(i+1)个transformer块中,并依次进行K个transformer块的处理:

为了得到最终的图像的向量化表示,将最后一个transformer块Vk中的类标记ck通过Imageproj投影到一个公共的特征空间:

Encoding Text:

CLIP文本编码器首先将输入文本拆分成单词或者子词,将其映射成为唯一的标识符token;然后将其投影为单词嵌入W0(单词token的向量表达)。

单词嵌入Wi会作为第(i+1)个transformer块的输入:

为了得到最终文本的向量化表示,将最后一个trnasformer块中最后一个token的文本嵌入通过TextProj映射到公共的特征空间中。

Zero-shot Classification:

对于zero-shot分类,手工设计文本提示Prompt(A photo of <class>):

3.2. MaPLe: Multi-modal Prompt Learning

1.为了有效地微调CLIP用于下游图像识别任务,本文探索了多模态提示调节的潜力。本文认为先前的工作主要探索了单模态的方法,但是单模态的方法不能灵活且动态地调整语言和视觉表示空间。为了实现提示的完整性,本文强调了多模态提示方法的重要性。

解释图3:将MaPLe与最新工作Co-CoOp进行了对比。CLIP、CoOp和Co-CoOp的图像嵌入是相同的,因为它们在视觉分支部分都不学习视觉提示。可视化的结果显示,MaPLe的图像嵌入更具有可分性,表明除了文本提示以外,学习视觉提示也能更好的适应CLIP。

2.除了多模态提示以外,本文发现在更深层次的transformer块中学习提示对于逐步对阶段特征进行建模是至关重要的。因此,本文在视觉和语言两个分支中第J层引入可学习的token。

3.2.1 Deep language Prompting

(1)为了学习语言的上下文提示,本文在CLIP的语言分支中引入了b个可学习的token。此时输入嵌入为:

其中W0表示固定的输入token序列。

(2)在文本编码器中的每一个transfomrmer块Li中都会引入新的可学习的token,一直到第J个transformer块:

(3)在文本编码器中的第J个transformer块之后,每一层的输出就会称为下一层的输入。

(4)最终计算文本的向量表示z:将文本编码器中最后一个transformer块中的Wk中最后一个位置上的隐藏状态利用TextProj投射到公共的特征空间中:

3.2.2 Deep Vision prompting

(1)与深层语言提示类似,在CLIP的视觉分支中,引入b个可学习的token

(2)同样,在视觉编码器中的每一个transformer块中Vi中引入可学习的token,一直到第J个transformer块。

(3)图像编码器中的第J个transformer 块之后,每一层的输出就成为下一层的输入

(4)最终得到图像的向量化表示x:将图像编码器中最一层的transformer中的输出ck的隐藏状态通过ImageProj映射到公共的特征空间中。

总结:本文的深度提示方法为不同特征层次结构提供了学习提示的灵活性。本文发现,与单模态提示相比,跨阶段共享提示效果更好,因为连续的transformer块之间的关联性更强。

3.2.3 Vision Language Prompt Coupling

本文认为,在提示微调中,需要采取多模态的方法同时适应CLIP中图像和文本两个分支,从而实现上下文优化的完整性。

一种最简单的方式就是在同一训练过程中将文本提示P和视觉提示P~组合起来。我们将这种设计命名为“独立的V-L提示”。尽管这种设计满足了提示完整性方面的需求,但是这种设计缺乏语言和文本两个分支之间的协同,因为两个分支在学习任务相关的上下文提示时没有交互。

为此,本文提出一种分支感知的多模态提示,通过跨模态共享提示将CLIP的语言分支和视觉分支一起微调。

语言提示token 被引入到文本编码器中前J个Transformer块。为了确保V-L提示之间的相互协同性,视觉提示P~是将文本提示P通过视觉-文本映射得到的,称为V-L耦合函数F(·)。

这个耦合函数通过一个线性层来实现,将dl维度(文本向量的维度)映射到dv维度(视觉向量的维度)。这个耦合函数充当了两个模态之间的桥梁,从而促进了梯度的相互传递。

与单模态的V-L提示不同,显性条件化有助于两个分支在共享的嵌入空间中学习提示,从而提高协同性。

Conclusion

大规模的VL模型(比如CLIP),由于其可调参数较多和下游数据集规模受限,其对下游任务的适应性是一个挑战性问题。

提示学习是一种高效且可扩展地调整VL模型的方法,使其能够适应和处理新的下游任务。为此,当前的提示学习要么只考虑视觉分支的提示,要么只考虑文本分支的提示。

本文的工作证明,对于视觉和文本的分支来说,适当地调整VL模型来适应下游任务是至关重要的。因此,本文提出了一种策略,通过在不同的transformer阶段将视觉提示条件化于文本提示,来确保视觉-语言模态之间的协同。

本文方法提高了对新类别、跨数据集迁移和具有领域转移的数据集的泛化能力。

这篇关于MaPLe(论文解读): Multi-modal Prompt Learning的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1139039

相关文章

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

MySQL的ALTER TABLE命令的使用解读

《MySQL的ALTERTABLE命令的使用解读》:本文主要介绍MySQL的ALTERTABLE命令的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、查看所建表的编China编程码格式2、修改表的编码格式3、修改列队数据类型4、添加列5、修改列的位置5.1、把列

Linux CPU飙升排查五步法解读

《LinuxCPU飙升排查五步法解读》:本文主要介绍LinuxCPU飙升排查五步法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录排查思路-五步法1. top命令定位应用进程pid2.php top-Hp[pid]定位应用进程对应的线程tid3. printf"%