MMRL: Multi-Modal Representation Learning for Vision-Language Models(多模态表示学习)

news2025/6/4 23:14:09

摘要

预训练的VLMs,对于跨任务的迁移学习至关重要,然而,在few-shot数据集上微调会导致过拟合,降低在新任务上的性能。为解决这个问题,提出一种新的多模态表征学习框架(MMRL),该框架引入了一个共享、可学习且与模态无关的表示空间,MMRL将空间标记(tokens)投影到文本和图像表征标记(tokens)上,从而促进多模态交互。与之前仅有话类token特征的方法不同,MMRL在encoders的最高层集成了表示tokens——在encoders中,数据集特定的特征更为突出,同时在较低层保留了广义知识。在训练过程中,表征特征和类特征都被优化,其中对表征tokens应用了一个可训练的投影层,而类别token投影层则保持冻结,以保留预训练知识,此外,还引入了一正则化项,以使类别特征和文本特征与来自冻结VLM的零样本特征对齐,从而保证模型的泛化能力,在推理阶段,采用了解耦策略,即对与基础类别,同时利用表征特征和类别特征;而对于新任务,则仅使用保留了更多通用知识的类别特征,在15个数据集上进行的大量实验表明,MMRL优于现有最先进的方法,在任务特定适配与泛化之间实现了平衡的权衡。Code is available at
https://github.com/yunncheng/MMRL

1、介绍

介绍了视觉语言模型(VLMs),如CLIP,因其能利用文本和视觉模态的互补信息而受到关注,但在适应新任务时存在局限性,因为微调大规模架构需要大量计算资源。

为促进VLMs的高效适应,提出了提示工程和集成等策略,但手动设计提示耗时且需要专业知识,无法保证找到最优提示。CoOp引入了提示学习,通过优化连续可学习的向量来实现高效的数据集适应。MaPLe发现仅在文本模态内进行提示学习可能并非最优,提出了一种多模态提示学习方法,通过耦合函数将深度提示嵌入到VLM编码器的较低层中,以增强视觉和文本表征之间的对齐。

除了提示学习外,还介绍了适配器风格学习方法,通过在VLMs中集成轻量级模块来调整为下游数据集提取的特征。CLIP-Adapter和MMA是这种方法的例子,它们通过不同的方式优化文本和视觉表征之间的对齐。

当前的多模态深度提示学习方法在浅层应用提示拼接可能会损害通用知识,且主要更新都集中在文本提示上。此外,提示学习和适配器风格方法都容易过拟合到特定的数据分布或任务类别,导致VLMs的泛化能力和零样本学习能力下降。

为应对这些挑战,我们提出了一种新颖的多模态表征学习框架,该框架有别于传统的提示学习和适配器风格方法。具体而言,我们在编码器的较高层引入了一个共享、可学习且与任何模态都无关的表征空间。这个空间作为多模态交互的桥梁,将该空间中的标记映射到图像和文本表征标记上,然后与原始编码器标记拼接,以实现有效的多模态交互。我们的表征标记旨在从下游任务中学习数据集特定的知识,同时对原始分类标记进行正则化处理,以保留大量可泛化的知识。MMRL具有三个关键优势:(1)一个无偏的共享表征空间,促进了平衡的多模态学习;(2)通过避免在编码器的浅层集成提示,保留了原始VLM的泛化能力;(3)与仅通过可学习的提示或适配器来优化类别标记特征的提示学习或适配器风格方法不同,我们的方法支持跨类别的解耦推理。在训练过程中,我们优先优化表征标记特征,其投影层是可训练的,而原始类别标记的投影层则保持固定。为进一步保留类别标记的泛化能力,我们使用一个正则化项,将其特征与来自冻结VLM的零样本特征对齐。在推理阶段,对于基础类别,我们同时利用表征标记和类别标记特征;而对于未见类别或新数据集,则仅使用类别标记特征。我们的主要贡献总结如下:
• 我们引入了多模态表征学习(MMRL)框架,该框架包含一个共享、无偏且可学习的空间,该空间桥接了图像和文本模态,在原始编码器的较高层促进了多模态交互。
• 采用解耦策略,通过为下游任务适配表征标记,同时对新任务中的原始类别标记进行正则化处理,保留了VLM的泛化能力。
• 大量实验表明,MMRL显著提高了下游任务的适应性和泛化能力,相较于基线方法取得了更优的性能。

2、相关工作

2.1  Vision-Language Models

2.2 Efficient Transfer Learning

提示学习方法已被证明在适配视觉语言模型(VLMs)方面是有效的。CoOp 通过将固定模板替换为可学习的连续向量,开创了提示学习的先河,提高了灵活性,但牺牲了CLIP的零样本和泛化能力。为解决这一问题,CoCoOp融入了视觉线索来生成针对特定实例的提示,从而提高了对类别分布变化的泛化能力,而ProDA  则通过学习提示分布来增强适应性。PLOT 利用最优传输方法来对齐视觉和文本模态。KgCoOp 通过最小化学习到的提示与精心设计的提示之间的差异,保留了通用的文本知识。ProGrad 选择性地更新与通用知识对齐的梯度,而RPO 则利用掩码注意力机制来缓解内部表征的偏移。除了以文本为中心的方法外,MaPLe 通过耦合函数将文本提示映射为视觉提示并加以整合,促进了跨模态的协同作用。ProVP 采用单模态视觉提示,并通过对比特征重构来使提示的视觉特征与CLIP的分布对齐。PromptSRC 采用自正则化策略来缓解过拟合问题,而MetaPrompt 则应用了一种基于元学习的提示调整算法,鼓励针对特定任务的提示能够在不同领域或类别之间进行泛化。TCP  将文本知识适配为类别感知的标记,从而增强了泛化能力。

适配器风格学习方法代表了VLM适配的另一条高效途径。CLIP-Adapter 使用轻量级适配器(以两层多层感知机(MLP)的形式实现)来通过交叉熵优化改进CLIP的特征表示。在此基础上,Tip-Adapter 缓存了训练特征,以便在测试特征和训练特征之间进行高效的相似度计算。然而,这两种方法在预测之前都是独立处理图像和文本表示的。为了解决这种分离问题,MMA 将不同分支的特征整合到一个共享空间中,允许跨分支的梯度流动,并增强了模态之间的连贯性。

除了上述方法外,还有几种方法利用大型语言模型(LLMs),如GPT-3,进行文本增强或在整个数据集上应用蒸馏技术来提高性能。然而,这些方法所带来的计算需求增加可能会使它们超出高效迁移学习的预期范围。

3、方法

本方法与之前方法一致,建立在预训练的VLM, CLIP的基础上,

3.1. Preliminary

首先定义方法中的符号,在CLIP包含两个编码器:图像编码器\nu和文本编码器\omega

Image Encoding: 图像编码器\nu,由L个transformer 层组成,定义为\{ \nu _i\}^L_{i=1}.输入图像x\in\mathbb{R}^{H\times W\times3},它被划分为M个固定大小的patchs,每个补丁都被投影到一个patch embedding中,结果为E_0\in\mathbb{R}^{M \times d_v}其中M表示patch的个数,d_v为embedding (嵌入)维度。初始嵌入向量E_0与一个可学习的类别标记(token)c_0和位置编码相结合,形成transformer的输入序列,每一层都处理这个序列:

[c_i ,E_i]=\nu _i([c_{i-0},E_{i-1}]) \, \, \, i=1,2,...L

经过所有的transformer层之后,一个patch投影层P^c_v将类别tokenc_L 的输出映射到共享的V-L潜在空间中

f=P^c_v(c_L)    其中f\in \mathbb{R}^d

Text encoding:对于输入文本,例如“A photo of a [CLASS].”它被tokenized 和转化为embeddingsT_o\in \mathbb{R}^{N \times d_t},其中N是token的长度,d_t是embedding的维度,开始文本(BOT)和结束文本(EOT)标记,分别表示为b_0e_0标记序列边界,这些 token embeddings和位置编码,通过文本编码器的L个Transformer层\{​{\omega _i}\}^L_{ i=1},如下所示:

[b_i ,T_i,e_i]=\omega _i([b_{i-0},T_{i-1}, e_{i-1}]) \, \, \, i=1,2,...L

在最后一层之后,EOT标记的输出e_L通过P_t投影到共享的V-L空间中。

w=P_t(e_L) 其中w\in \mathbb{R}^d

Classification with CLIP: 通过图像特征f和文本特征\{w_c\}^C_{c=1},对于C个类别,CLIP计算f与每个w_c之间的余弦相似度。

sim(f,w_c)=\frac{f\cdot w_c}{\left | f \right | \left |w_c \right |}   其中\left | \cdot \right |表示L_2 norm,类别概率使用sotftmax函数计算

其中\tau是温度参数,最终预测类别是概率得分最高的那个。

3.2 Multi-Modal Representation Learning (MMRL)

我们提出的MMRL旨在解决使用少量数据调整预训练VLM的挑战,同时保持对新任务的泛化能力。MMRL的训练和推理框架分别如图2和图3所示。下面,我们将详细介绍方法论。

3.2.1  Learnable Representation Space

MMRL 建立了一个共享的、可学习的表征空间 R,以促进多模态交互,通过从高斯分布中采样进行初始化。使用一个可学习的映射函数 F(\cdot ),实现为一个线性层,我们将该空间中的标记R \in \mathbb{R}^{K \times d_r}—其中 K 是tokens的数量,dr 是表征空间的维度——投影到视觉和文本模态中。

其中R^v_i \in \mathbb{R}^{K \times d_v}R^t_i \in \mathbb{R}^{K \times d_t}分别表示在第 (i+1) 层transformer中的视觉和文本模态的表征tokens。索引 J 表示这些表征token开始整合到编码器的起始层。

3.2.2. Integration into Higher Encoder Layers

为了在预训练的CLIP模型的较低层中保留广义知识,从第J层开始,将表征token R^vR^t集成到图像编码器\nu和文本编码器\omega的较高层中

对于图像编码器\nu

对于文本编码器\omega,虽然之前的提示学习涉及替换T_i的部分以融入深度提示,我们保留了整个T_i并在其之前插入R^t_i,旨在保留原始文本信息,

由于文本编码器的自回归特性,我们调整了注意力掩码矩阵以适应嵌入长度的增加。

3.2.3. Representation Learning

表征学习旨在利用表征token进行特定数据集的适应,而类标记则保留了原始CLIP的预训练知识。通过一系列旨在在训练和推理过程中保持泛化的策略,MMRL能够为不同的任务提供灵活的推理,详情如下。

 训练阶段:同时优化表征标记(representation tokens)和原始类别标记(original class token)的特征,但主要侧重于表征特征,以保留预训练知识。具体而言,表征标记的投影层是可训练的,而类别标记的投影层则保持固定。对于图像编码器\nu,在经过L层Transformer层后,得到类别标记的输出c_L \in \mathbb{R}^ {d_v},以及K个表征标记的输出R^v_L \in \mathbb{R}^{K \times d_v}。表征标记的最终输出r_L,是通过计算这K个标记的平均值得到的,

其中,r_L \in \mathbb{R}^ {d_v}。随后,我们应用补丁投影层(patch projection layers),将类别标记和表征标记的输出都映射到通用的视觉-语言(V-L)潜在空间中,从而得到类别特征f_c和表征特征f_r

其中,P^c_v是CLIP中用于类别特征的原始,即冻结的补丁投影层,而用于表征特征的P^r_v是可训练的。

对于文本编码器W,考虑到文本的序列特性,在经过L层Transformer层处理后,将与原始CLIP模型中相同的EOT标记e_L映射到通用的视觉-语言(V-L)空间中,从而得到文本特征。

利用图像特征f_c​、f_r,以及针对C个类别的文本分类器{\{ w_c \}^C_{c=1},采用交叉熵损失函数来分别优化类别特征和表征特征。

其中,如果图像x属于类别c,则y_c=1,否则y_c=0。为了进一步保留类别特征的泛化能力,我们最大化(f_c,w)与冻结的CLIP特征(f_0, w_0)之间的余弦相似度,从而显式地引导训练过程。

最终MMRL的损失函数为

其中\alpha控制特征之间的平衡,\lambda是惩罚系数

Testing on Base Classes:对于在训练过程中见过的分布内类别,我们将数据集特定的表征特征与保留泛化能力的类别特征相结合。一个属于分布内测试样本x属于第c类的概率是

其中f_cf_r分别是从类标记和表示标记中提取的特征。

Testing on Novel Classes:对于在训练过程中未见过的类别或新的数据集,我们完全依赖于类标记,这些标记保留了通用知识。

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

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

相关文章

rsync服务的搭建

目录 一、rsync介绍 rsync的安装 二、rsync的语法 三、rsync命令使用 1. 本机同步 2. 远程同步 四、rsync作为服务使用 1、尝试启动rsync程序 2、rsync的配置文件介绍 注意事项: 3. rsyncinotify实时同步 3.依赖服务托管xinetd(CentOS 6中rs…

vscode 配置 QtCreat Cmake项目

1.vscode安装CmakeTool插件并配置QT中cmake的路径,不止这一处 2.cmake生成器使用Ninja(Ninja在安装QT时需要勾选),可以解决[build] cc1plus.exe: error: too many filenames given; type ‘cc1plus.exe --help’ for usage 编译时…

HTML实现端午节主题网站:龙舟争渡,凭吊祭江诵君赋。

名人说:龙舟争渡,助威呐喊,凭吊祭江诵君赋。——苏轼《六幺令天中节》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、项目概览:传统与现代的技术碰撞1. 核心特…

uniapp uni-id 如果是正式项目,需自行实现发送邮件的相关功能

(3) 使用云对象sendEmailCode 发送邮箱验证码,报错送邮箱验证码失败 Error: 已启动测试模式,直接使用:123456作为邮箱验证码即可。 如果是正式项目,需自行实现发送邮件的相关功能 - DCloud问答 uni-id 没有实现邮箱验证码逻辑&am…

C++学习-入门到精通【12】文件处理

C学习-入门到精通【12】文件处理 目录 C学习-入门到精通【12】文件处理一、文件和流二、创建顺序文件三、从顺序文件读取数据文件定位指针对之前的程序进行修改:贷款查询程序 四、更新顺序文件五、随机存取文件1.创建随机存取文件2.修改程序:贷款处理程序…

记一次 Starrocks be 内存异常宕机

突发性 be 内存飙高,直至被系统 kill 掉,be 内存如下:其中 starrocks_be_update_mem_bytes 指标打满,重启也是如此 [rootlocalhost bin]# curl -XGET -s http://192.168.1.49:8040/metrics | grep "^starrocks_be_.*_mem_b…

LangChain-结合GLM+SQL+函数调用实现数据库查询(一)

业务流程 实现步骤 1. 加载数据库配置 在项目的根目录下创建.env 文件,设置文件内容: DB_HOSTxxx DB_PORT3306 DB_USERxxx DB_PASSWORDxxx DB_NAMExxx DB_CHARSETutf8mb4 加载环境变量,从 .env 文件中读取数据库配置信息 使用 os.getenv…

2025年渗透测试面试题总结-匿名[校招]安全工程师(甲方)(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 匿名[校招]安全工程师(甲方) 1. 介绍自己熟悉的渗透领域 2. 编程语言与开发能力 3. 实习工作内容与流程 …

PySide6 GUI 学习笔记——常用类及控件使用方法(地址类QUrl)

文章目录 地址类QUrl主要功能URL 格式介绍常见 scheme(协议)类型QUrl 类常用方法常用方法示例典型应用场景 地址类QUrl QUrl 是 PySide6.QtCore 模块中的一个类,用于处理和操作 URL(统一资源定位符)。它可以解析、构建…

任务23:创建天气信息大屏Django项目

任务描述 知识点: Django 重 点: Django创建项目Django视图函数Django路由Django静态文件Django渲染模板 内 容: 使用PyCharm创建大屏项目渲染大屏主页 任务指导 1. 使用PyCharm创建大屏项目。 创建weather项目配置虚拟环境创建ch…

数学分析——一致性(均匀性)和收敛

目录 1. 连续函数 1.1 连续函数的定义 1.2 连续函数的性质 1.2.1 性质一 1.2.2 性质二 1.2.3 性质三 1.2.4 性质四 2. 一致连续函数 2.1 一致连续函数的定义 2.2 一致连续性定理(小间距定理)(一致连续函数的另一种定义) 2.3 一致连续性判定法 2.4 连…

Flutter GridView网格组件

目录 常用属性 GridView使用配置 GridView.count使用 GridView.extent使用 GridView.count Container 实现列表 GridView.extent Container 实现列表 GridView.builder使用 GridView网格布局在实际项目中用的也是非常多的,当我们想让可以滚动的元素使用矩阵…

【深度学习】18. 生成模型:Variational Auto-Encoder(VAE)详解

Variational Auto-Encoder(VAE)详解 本节内容完整介绍 VAE 的模型结构、优化目标、重参数化技巧及其生成机制。 回顾:Autoencoder(自编码器) Autoencoder 是一种无监督学习模型,旨在从未标注的数据中学习压…

解决Window10上IP映射重启失效的问题

问题 在实际网络搭建过程中,大家有可能会遇到在局域网范围内,在自己本机上搭建一个网站或者应用时,其他设备通过本机的IP地址无法访问的问题,这个问题可以通过设置IP映射来解决,但是通过netsh interface命令设置的IP映射&#xf…

python h5py 读取mat文件的<HDF5 object reference> 问题

我用python加载matlab的mat文件 mat文件: 加载方式: mat_file h5py.File(base_dir str(N) _nodes_dataset_snr- str(snr) _M_ str(M) .mat, r) Signals mat_file["Signals"][()] Tp mat_file["Tp"][()] Tp_list mat_fil…

linux命令 systemctl 和 supervisord 区别及用法解读

目录 基础与背景服务管理范围配置文件和管理方式监控与日志依赖管理适用场景常用命令对照表实际应用场景举例优缺点对比小结参考链接 1. 基础与背景 systemctl 和 supervisord 都是用于管理和控制服务(进程)的工具,但它们在设计、使用场景和…

Spring Boot + MyBatis 实现的简单用户管理项目的完整目录结构示例

📁 示例项目结构(基于 Maven) user-management/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/usermanagement/ │ │ │ ├── controller/ │ │ │ │ └── UserC…

stm32 + ads1292心率检测报警设置上下限

这个项目是在做心率检测的时候一个小伙伴提出来的,今年五一的时候提出来的想法,五一假期的时候没时间,也没心情做这个,就把这个事情搁置了,在月中做工作计划的时候,就把这个小项目排进来了,五一…

项目练习:element ui 的icon放在button的右侧

文章目录 一、需求描述二、左侧实现三、右侧实现 一、需求描述 我们知道&#xff0c;element ui的button一般都会配置一个icon 这个icon默认是放在左侧的。 如何让它放在右侧了&#xff1f; 二、左侧实现 <el-buttontype"primary"plainicon"el-icon-d-arr…

性能诊断工具AWR配置策略与报告内容解析

AWR&#xff08;Automatic Workload Repository&#xff09;是 Oracle 数据库中的一个重要性能诊断工具。AWR 会按照固定的时间间隔自动收集数据库系统的性能统计信息。这些信息涵盖了数据库运行状态的方方面面&#xff0c;像SQL 执行情况、系统资源利用率、等待事件等。AWR抓取…