【提示学习论文六】MaPLe: Multi-modal Prompt Learning论文原理
文章目录
- MaPLe: Multi-modal Prompt Learning 多模式提示学习
- 文章介绍
- 动机
- MaPLe:Multi-modal Prompt Learning 模型结构
- 1、Deep Language Prompting 深度语言提示
- 2、Deep Vision Prompting 深度视觉提示
- 3、Vision Language Prompt Coupling 视觉语言提示耦合
- 提示耦合过程
- 实验
- 1、通过V-L prompts prompting CLIP
- 2、基类到新类的泛化
- 3、跨数据集评估
- 4、域泛化
- 5、消融实验
- 总结
MaPLe: Multi-modal Prompt Learning 多模式提示学习
文章介绍
- 这篇文章于2023年发表在CVPR(Conference on Computer Vision and Pattern Recognition),作者是Muhammad Uzair Khattak,Hanoona Rasheed,Muhammad Maaz,Salman Khan,Fahad Shahbaz Khan。
- 研究发现Clip的问题:在单个分支(语言或视觉)中使用prompt来调整表示是次优的,它不能在下游任务上灵活地动态调整两个表示空间。
- 作者提出了针对视觉和语言分支的多模态提示学习(MaPLe),以改善视觉和语言表征之间的一致性。
- 与CoCoOp方法相比更好。
动机
作者认为,Clip中只有文本编码器学习prompt,不足以对图像编码器所需的适应进行建模,因此着手基于多模态提示学习(MaPLe)来充分微调文本和图像编码器表示。
MaPLe:Multi-modal Prompt Learning 模型结构
- 这是第一个用于微调CLIP的多模式提示方法。
- 多模态提示是在视觉和语言分支的多个转换块中学习的,以逐步学习两种模态的协同行为。
- 提出了耦合函数,将文本和图像编码器中的提示学习联系起来,作为两种模式之间的桥梁,允许梯度的相互传播,以促进协同作用。
- 在视觉和语言分支的前 J J J 层( J J J < K K K )引入 learnable token。
text encoder | 文本编码器 | image encoder | 图像编码器 |
---|---|---|---|
W i W_i Wi | word embeddings | E i E_i Ei | image embeddings |
L i L_i Li | 某层transformer | V i V_i Vi | 某层transformer |
P i P_i Pi | 提示 | P i P_i Pi | 提示 |
c i c_i ci | class(CLS) tokens |
1、Deep Language Prompting 深度语言提示
-
作者在 text encoder 的前 J J J 层各引入了 b b b 个learnable tokens : { P i ∈ R d l {P_i \in \mathbb{R}}^{d_{l}} Pi∈Rdl} i = 1 b _{i=1}^b i=1b。
-
输入: [ P 1 , P 2 , … , P b , W 0 ] [P_1, P_2, \ldots , P_b, W_0] [P1,P2,…,Pb,W0]
-
前 J J J 层:提示tokens被引入到每一层 L i L_i Li,与 W i W_i Wi 进行连接,这里的 [ ⋅ , ⋅ ] [ \cdot, \cdot] [⋅,⋅] 是指连接操作。(包括第 J J J 层)
[ − , W i ] = L i ( [ P i − 1 , W i − 1 ] ) i = 1 , 2 , … , J (1) \left[ -, W_i \right] = L_i \left( \left[P_{i-1}, W_{i-1}\right] \right) \text { } i = 1, 2, \ldots, J \quad \tag{1} [−,Wi]=Li([Pi−1,Wi−1]) i=1,2,…,J(1)
- 后 J J J 层:没有额外的提示输入,而是处理前一层的prompt,通过自注意力机制和前馈神经网络来处理文本数据,计算最后的文本表示 z z z 。
[ P j , W j ] = L j ( [ P j − 1 , W j − 1 ] ) j = J + 1 , … , K (2) [P_j, W_j] = L_j \left( \left[P_{j-1}, W_{j-1}\right] \right) \text { } j = J + 1, \ldots, K \quad \tag{2} [Pj,Wj]=Lj([Pj−1,Wj−1]) j=J+1,…,K(2)
z = TextProj ( w N K ) (3) z = \text{TextProj} \left(w_{N_K}\right) \quad \tag{3} z=TextProj(wNK)(3)
- 当 J = 1 J = 1 J=1 时,提示 P P P 只应用于第一个Transformer层的输入,此时深度语言提示技术退化为CoOp 。
2、Deep Vision Prompting 深度视觉提示
- 类似于深度语言提示,在 text encoder 的前 J J J 层各引入了 b b b 个learnable tokens : { P i ~ ∈ R d v {\tilde{P_i} \in \mathbb{R}}^{d_{v}} Pi~∈Rdv} i = 1 b _{i=1}^b i=1b。
- 前 J J J 层:
[ c i , E i ] = V i ( [ c i − 1 , E i − 1 , P ~ i − 1 ] ) i = 1 , 2 , … , J [c_i, E_i] = V_i([c_{i-1}, E_{i-1}, \tilde{P}_{i-1}]) \quad \text { } i = 1, 2, \ldots, J [ci,Ei]=Vi([ci−1,Ei−1,P~i−1]) i=1,2,…,J - 后 J J J 层:
[ c j , E j , P ~ j ] = V j ( [ c j − 1 , E j − 1 , P ~ j − 1 ] ) j = J + 1 , … , K [c_j, E_j, \tilde{P}_j] = V_j([c_{j-1}, E_{j-1}, \tilde{P}_{j-1}]) \quad \text{ } j = J + 1, \ldots, K [cj,Ej,P~j]=Vj([cj−1,Ej−1,P~j−1]) j=J+1,…,K
x = ImageProj ( c K ) x = \text{ImageProj}(c_K) x=ImageProj(cK)
3、Vision Language Prompt Coupling 视觉语言提示耦合
共享提示在两种模态之间建立联系,语言提示被引入到语言分支中的J层Transformer块中,而视觉提示通过视觉到语言的投影函数从语言提示中获得。
- independent V-L Prompting:独立V-L提示
- 通过投影函数 F ( ⋅ ) F(\cdot) F(⋅)将语言提示 P i P_i Pi 映射到视觉提示 P i ~ \tilde{P_i} Pi~
- F i F_i Fi是一个线性层,这个映射操作是一个从 d l dl dl 维到 d v dv dv 维的线性变换。
提示耦合过程
- 提示过程使用投影函数 F ( ⋅ ) F(\cdot) F(⋅) 在前 J J J 个transformer块中进行
- 语言分支:通过 F i F_i Fi 对 P i P_i Pi 进行映射,得到了 P i ~ \tilde{P_i} Pi~。
- 视觉分支:通过引入了调整后的视觉提示 P i ~ \tilde{P_i} Pi~,保持了分支之间的协同作用。
实验
1、通过V-L prompts prompting CLIP
- shallow MaPLe(第1行)在泛化方面提供了对CoOp和Co-CoOp的持续改进。
- 深度语言提示(第3行)比深度视觉提示(第2行)有所改善,表明在语言分支学习的提示能更好地适应CLIP。
- 虽然单独结合上述两种方法(第4行)进一步提高了性能,但它很难从语言和视觉分支中获得综合效益。
- MaPLe与深度提示(第4行)结合了提示在两个分支中的好处,通过在语言提示上执行视觉提示的显式条件反射来强制交互。它提供了新类和基类准确度的改进,导致最佳HM为78.55%。
2、基类到新类的泛化
- 给出了MaPLe在11个识别数据集上从基类到新类的泛化设置下的性能。
- 与最先进的Co-CoOp相比,MaPLe在所有11个数据集上的基本类和新类性能都有所提高,只有Caltech101的基本类性能略有下降。
- 与CLIP相比,Co-CoOp仅在4/11数据集上有所提高,平均新分类准确率从74.22%降至71.69%。
- MaPLe是一个强大的竞争对手,它在6/11数据集上的新类别上提高了CLIP的准确性,平均增益从74.22%提高到75.14%。
3、跨数据集评估
我们通过在所有1000个ImageNet类上学习多模态提示,然后直接将其转移到剩余的10个数据集上,来测试MaPLe的跨数据集泛化能力。MaPLe表现出有竞争力的性能,平均准确率最高,为66.30%。
4、域泛化
评估了ImageNet训练模型对各种域外数据集的直接可移植性,并观察到,与表5所示的所有现有方法相比,它持续提升。
5、消融实验
- Prompt Depth(左):深度J对语言和视觉分支深度的影响
MaPLe在深度为 9 时实现了最大性能 - Prompt Length(右):提示符长度对MaPLe的影响
随着提示符长度的增加,基类上的性能一般保持不变,而新类的准确率则下降。这表明过拟合本质上损害了对新类别的泛化。
- Effectiveness of Multi-modal Prompting:多模式提示的有效性
- Prompting complexity:提示复杂度
MaPLe提供了更好的推理和训练速度,MaPLe†的参数比MaPLe小约9倍,MaPLe†对所有层prompt使用统一的V-L耦合函数,比MaPLe少约9倍的参数,但性能差异不大。
总结
大规模V-L模型(例如CLIP)对下游任务的适应是一个具有挑战性的问题,因为大量的可调参数和有限的下游数据集大小。提示学习是一种高效且可扩展的技术,可以根据新的下游任务定制V-L模型。为此,目前的提示学习方法要么只考虑视觉方面的提示,要么只考虑语言方面的提示。我们的工作表明,对视觉和语言分支进行提示是至关重要的,以使V-L模型适当地适应下游任务。此外,我们提出了一种策略,通过在不同的transformer阶段将视觉提示明确地限制在文本提示上,来确保视觉语言模式之间的协同作用。我们的方法提高了对新类别、跨数据集迁移和具有域迁移的数据集的泛化能力。
相关文章:

【提示学习论文六】MaPLe: Multi-modal Prompt Learning论文原理
文章目录 MaPLe: Multi-modal Prompt Learning 多模式提示学习文章介绍动机MaPLe:Multi-modal Prompt Learning 模型结构1、Deep Language Prompting 深度语言提示2、Deep Vision Prompting 深度视觉提示3、Vision Language Prompt Coupling 视觉语言提示耦合提示耦合过程 实验…...

wpf使用Popup封装数据筛选框
(关注博主后,在“粉丝专栏”,可免费阅读此文) 类似于DevExpress控件的功能 这是DevExpress的winform筛选样式,如下: 这是DevExpress的wpf筛选样式,如下: 这是Excel的筛选样式,如下: 先看效果 本案例使用wpf原生控件封装,功能基本上都满足,只是颜色样式没有写…...
微信小程序 - 视图与逻辑 介绍
文章目录 视图与逻辑一、页面导航1、页面导航 - 声明式导航1.1 导航到tabBar页面1.2 导航到非tabBar页面1.3 后退导航 2、页面导航 - 编程式导航2.1 导航到tabBar页面2.2 导航到非tabBar页面2.3 后退导航 3、页面导航 - 导航传参3.1 声明式导航传参3.2 编程式导航传参3.3 在 on…...

大创项目推荐 深度学习疫情社交安全距离检测算法 - python opencv cnn
文章目录 0 前言1 课题背景2 实现效果3 相关技术3.1 YOLOV43.2 基于 DeepSort 算法的行人跟踪 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习疫情社交安全距离检测算法 ** 该项目较为新颖,适合作为竞赛…...

c语言-库函数strstr()、strtok()、strerror()介绍
文章目录 前言一、库函数strstr()1.1 strstr()介绍1.2 strstr()模拟实现 二、库函数strtok()2.1 strtok()介绍 三、库函数strerror()3.1 strerror()介绍 总结 前言 本篇文章介绍c语言库函数strstr()、strtok()、strerror()的使用。 一、库函数strstr() 1.1 strstr()介绍 str…...

RIP【新华三与华为区别】
【介绍】 rip分为rip 1 与 rip 2 ,rip 2 是对 rip 1 的一种升级,rip 2 可以进行认证等功能 【命令】 新华三: [HC3-R1] rip #启用rip [HC3-R1-rip] version 2 #告知rip 版本号 [HC3-R1-rip] network 192.168.1.0 #宣告其网段 [HC3-R1-rip] …...
Python从入门到精通秘籍四
Python速成,知识点超详细,跟着这个系列边输入边学习体会吧! 一、Python的判断语句的综合案例 下面是一个使用代码示例来详细说明Python判断语句的综合案例,通过用户输入来实现简单的登录验证: # 提示用户输入用户名和密码 username = input("请输入用户名:")…...
rk3568下SoftBusDumpDeviceInfo执行错误—鸿蒙开发已解决
文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结寄语项目场景: 最近也是遇到了这个问题,看到网上也有人在询问这个问题,本文总结了自己和其他人的解决经验,解决了rk3568下SoftBusDumpDeviceInfo执行错误的问题。 命令行运行 SoftBusDumpDeviceInfo,测…...
Vue 3 Composition API 详解
一、引言 在Vue 3中,引入了一个新的Composition API,旨在提供一种更灵活和可重用的方式来组织组件代码。Composition API基于函数式编程思想,允许开发者将逻辑和状态管理逻辑分离,使代码更加清晰和可维护。 二、Composition API…...

API设计:从基础到最佳实践
1*vWvkkgG6uvgmJT8GkId98A.png 在这次深入探讨中,我们将深入了解API设计,从基础知识开始,逐步进阶到定义出色API的最佳实践。 作为开发者,你可能对许多这些概念很熟悉,但我将提供详细的解释,以加深你的理解…...

每日汇评:由于中东危机削弱了风险偏好,欧元将在1.0900附近波动
随着中东危机的加深,欧元兑美元面临大幅抛售; 由于高通胀,欧洲央行决策者推迟了市场对早期降息的预期; 市场将受到周三公布的美国零售销售数据的影响; 持续的中东紧张局势增强了对避险资产的吸引力,而风险感…...
算法每日一题:删除子串后的字符串最小长度 | 栈 | 字符串
大家好,我是星恒 今天给大家带来的是一道另类的栈的应用 话不多说,我们直接来体验 题目:leetcode 2696 给你一个仅由 大写 英文字符组成的字符串 s 。你可以对此字符串执行一些操作,在每一步操作中,你可以从 s 中删除 …...

SpringFramework实战指南(一)
SpringFramework实战指南(一) 一、技术体系结构1.1 总体技术体系1.2 框架概念和理解 一、技术体系结构 1.1 总体技术体系 单一架构 一个项目,一个工程,导出为一个war包,在一个Tomcat上运行。也叫all in one。 单一架…...
AtCoder ABC198
本期F为群论题,很有难度。 C - Compass Walking 为了避免精度问题,采用二分推算。但是要小心结果为1的地方。 R 2 ∗ k 2 ≥ x 2 y 2 R^2*k^2\geq x^2y^2 R2∗k2≥x2y2 # -*- coding: utf-8 -*- # time : 2023/6/2 13:30 # file : atcoder.…...

phpinfo和php -m 加载的php.ini不一致
目的: 将phpinfo在web中展示的php.ini和在命令行中展示的php.ini加载路径设置一致。 原本的php.ini加载路劲是: /usr/local/lib/php.ini 解决思路: (1)which php 查看服务器加载的php的位置,这里原来是&a…...
121.买卖股票的最佳时机 122.买卖股票的最佳时机II
121.买卖股票的最佳时机 122.买卖股票的最佳时机II 121.买卖股票的最佳时机 力扣题目链接(opens new window) 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一…...
Spring Boot整理-Spring Boot是什么?
Spring Boot 是一个开源的 Java 基础框架,它旨在简化基于 Spring 的应用开发。其核心特点在于“约定优于配置”的设计哲学,意味着它提供了一系列默认配置,从而帮助开发者更快地启动和运行新的 Spring 应用。Spring Boot 的主要特点包括: 自动配置:Spring Boot 可以根据项目…...
【pytorch】Pytorch 中的 grid 与 各种变换
Pytorch 中的 grid 与 各种变换 数学原理 **单应性(Homography) : 也就是透视变换。**单应性最初用来研究欧几里得几何中的透视和投影,而单应性一词,从词源学上来说,大致意思是“相似的绘图”。单应性的概念被引入来…...

【Linux】线程池实现
📗线程池实现(单例模式) 1️⃣线程池概念2️⃣线程池代码样例3️⃣部分问题与细节🔸类成员函数参数列表中隐含的this指针🔸单例模式🔸一个失误导致的bug 4️⃣调用线程池完成任务 1️⃣线程池概念 线程池是…...
使用Python批量上传本地maven库到nexus
背景:外包类项目开发时是调用的公司maven仓库进行开发,交付后需要将maven仓库转移到客户环境。 原理:1、打开idea运行源代码,将maven包下载到本地仓库, 2、下载包所在目录中执行脚本将本地仓库的maven包上传到客户nex…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...