论文解读:Visual Prompt Tuning

news2024/11/28 4:28:19

Comment: ECCV2022

摘要

当前调整预训练模型的方法需要更新backbone的全部参数,即完全微调。本文提出了一种高效的方法VPT,成为视觉中大规模transformer模型完全微调的替代方案。从微调大规模语言模型中吸取经验,VPT仅在输入空间中引入少数的可训练参数,保证骨干网络参数冻结。通过对各种下游识别任务的广泛实验证明,与其他参数高效的微调方法相比,VPT实现了显著的性能提升。最重要的是,在许多情况下,VPT在模型容量和训练数据规模上甚至优于完全微调,同时降低了每个任务的存储成本。

Introduction

对于各种识别任务,都可以通过调整在大规模数据集上进行预训练的模型来获得最准确的结果,这一发现反映了自然语言处理 (NLP)的发展。乍一看,这是好事:只需利用最新、最好的基础模型,就可以在多个识别问题上取得快速的进展。然而,在实践中,调整大规模预训练模型适应下游任务本身就存在挑战。最常见的调整策略是针对下游任务的预训练模型进行端到端的全面微调。但是,这个策略需要为每个任务单独存储并部署主干参数的副本。这是一个昂贵且不可行的方法,尤其是对于基于 Transformer 的架构,它们比卷积神经网络 (ConvNet) 的对应物大得多,例如,ViT-Huge(632M 参数)与ResNet-50 (25M 参数)。因此,我们提出问题,考虑到有效性和效率问题,使大型预训练 Transformer 架构适应下游任务的最佳方法是什么?

一种简单的方法是转向我们已经完善的其他策略,使卷积网络适应新任务,如图 1(a) 所示。一种流行的方法是只微调一组参数,例如分类器头或偏差项(bias)。先前的研究还着眼于在骨架上添加额外的残余阻滞(或适配器Adapter)。可以对 Transformer 实施类似的策略。但是,一般来说,这些策略在准确性方面表现不佳。

本文将探讨一条不同的路线。我们没有改变或微调预先训练的 Transformer 本身,而是修改 Transformer 的输入。从NLP中提示的最新进展中汲取灵感,本文提出了一种新的简单有效的方法来使transformer模型适应下游任务(图1b),即视觉提示调优(VPT)。本文方法只在输入空间中引入了少量特定于任务的可学习参数,同时在下游训练期间冻结了整个预训练的 Transformer 主干。这些额外的参数简单地添加到每个 Transformer 层的 input 序列中,并在调优过程中与线性头一起训练。

在使用预训练的 ViT 主干网络,在跨越不同领域的 24 个下游识别任务中,VPT 击败了所有其他迁移学习基线,甚至在 20 种情况下超过了完全微调,同时保持了为每个任务存储明显较少的参数(不到主干参数的 1%)的优势图 1(c)。这一结果证明了视觉提示的独特优势:而在 NLP 中,提示调优只能在某些情况下匹配完整的微调性能。VPT 在低数据量范围内特别有效,并在数据规模上保持其优势。最后,VPT 在一系列 Transformer 规模和设计(ViTBase/Large/Huge、Swin)中具有竞争力。综上所述,结果表明 VPT 是适应不断增长的视觉支柱的最有效方法之一。

Approach

本文提出VPT来调整大规模预训练视觉transformer模型。VPT将少量可学习参数注入到transformer的输入空间,并在下游训练阶段中保证主干冻结。

3.1 Preliminaries

(1)对于具有N层的普通的ViT,一张图像被分成m个固定大小的patch(其中h,w分别表示图像patch的高和宽):

(2)每个patch加上位置编码被编码进d维的潜在空间:

(3)图像patch编码的集合定义为:
Ei = {ej i ∈ Rd | j ∈ N, 1 ≤ j ≤ m},作为第(i+1)个transformer层(Li+1)的输入。

(4)连同一个额外的可学习的分类token[CLS],整个的ViT可以被表述为:

其中xi表示[CLS]在Li+1层输入空间的嵌入向量。

(5)每一层Li都由多头自注意力(MSA)和前馈网络(FFN)以及Layer Norm和残差连接组成。最后的神经分类头用于将最后一层的[CLS]嵌入映射到预测的类概率分布y中。

3.2 Visual-Prompt Tuning (VPT)

给定一个预训练的transformer模型,我们在嵌入向量之后(进入编码器之前)引入p个连续的d维嵌入,即提示。在微调期间,只有任务特定的提示会被更新,transformer主干保持冻结。根据涉及到的transformer层数不同,本文提出两种变体,即VPT-shallow和VPT-Deep。

VPT-Shallow

提示仅插入到transformer中L1层中,每一个提示都是一个d维的可学习向量。p个提示的集合记为:

因此VPT-Shallow:

其中Zi表示第i个transformer层计算的特征,其维度为:[xi, Zi, Ei] ∈ R(1+p+m)×d。其中红色表示可学习的参数,蓝色表示冻结的参数。

VPT-Deep

在Transformer中每层的输入空间中都引入了提示。对于第(i+1)层,我们将输入的可学习提示的组合定义为:

因此VPT-Deep:

Storing Visual Prompts

VPT在存在多个下游任务时是有利的。我们只需要为每个任务存储学习到的提示和分类头,并重用预训练的transformer模型的原始备份,显著降低了存储成本。例如,给定一个具有8600万( M )参数和d = 768的ViT - Base,50个浅层提示和深层提示产生额外的p × d = 50 × 768 = 0.038 M和N × p × d = 0.46 M参数,分别仅占所有ViT - Base参数的0.04 %和0.53 %。

Conclusion

本文提出 Visual Prompt Tuning,这是一种新的参数高效方法,可利用大型视觉 Transformer 模型执行各种下游任务。VPT 在输入空间中引入了特定于任务的可学习提示,使预训练的主干保持固定。本文证明VPT 可以超越其他微调协议(通常包括完全微调),同时显著降低存储成本。我们的实验还提出了关于微调具有不同预训练目标的视觉 Transformer 的动力学,以及如何以有效的方式转移到更广泛的视觉识别任务的有趣问题。

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

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

相关文章

【C语言】通讯录的实现(详解)

通讯录的实现 主要用到的知识: 1.结构体相关知识 2.枚举 3.多文件 在学习完结构体和枚举后就可以利用学过的知识去实现一个通讯录了 1.通讯录要求 用C语言所学知识实现下面这样一个通讯录 1.通讯录100个联系人 2.姓名 性别 年龄 电话 地址 3.添加联系人 4.删除指…

SQL server数据库实现远程跨服务器定时同步传输数据

项目背景 公司新建项目,需要访问生产数据,但是规定不能直接访问生产数据库服务器,所以得考虑通过中间库的形式实现。经过评估项目需求 ,以及当前拥有的环境。 需求: 1.用户不需要实时获取生产数据 2.用户只需要指定的…

Python青少年简明教程:函数

Python青少年简明教程:函数 在Python中,函数是一段可重用的代码块,用于执行特定的任务。函数能够接受输入参数,执行特定的操作,并返回结果。 Python提供了许多内置函数,如print()、len()、eval()等&#x…

Java基于微信小程序的校园兼职小程序

博主介绍:✌stormjun、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…

shadertoy-sdf 操作

vec3 col getBackgroundColor(uv); float d1 sdCircle(uv, 0.1, vec2(0., 0.)); float d2 sdSquare(uv, 0.1, vec2(0.15, 0));float res; // result1、union res min(d1, d2); // union2、intersection res max(d1, d2); // intersection3、subtraction res max(-d1, d…

Python实战案例数据合并订单表和商品价格表数据

有如下数据,订单表和商品价格表,进行数据合并,输出客户需要的效果。 数据样例:👇 订单表: 商品价格表: 最终效果: 01实现思路 目的是将订单数据和商品价格数据按照商品id和时间进行匹配,以…

基于nodejs+vue+uniapp的学习资料销售平台小程序

开发语言:Nodejs框架:expressuniapp数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:VS Code 系统展示 管理员登录 管理员主界面 用户管理 学习资料管理 订单管理 系统管理 用户…

未来已来:2024年远程控制行业的新星工具推荐

个人用户对于设备管理的便捷需求,远程控制软件都以其独特的优势,搭建起一座座沟通的桥梁。今天,我们就来探索一款集高效性、安全性与易用性于一体的远程控制软件。为了软件得到的方便我会介绍比如能从向日葵远程控制官网、TD官网、GH官网能直…

用RPC Performance Inspector 优化你的区块链

目录 什么是RPC? RPC Performance Inspector 是做什么的? 为什么需要这个工具? 如何使用它? 适合谁用? 如何使用? 什么是RPC? RPC Performance Inspector 是一个专门用于测试和分析RPC性能…

C语言 动态内存管理 #动态内存函数的介绍 #常见的动态内存错误 #C\C++ 程序的内存开辟 #柔性数组

文章目录 前言 一、为什么存在动态内存分配 二、动态内存函数的介绍 1、malloc 2、free 3、calloc 4、realloc realloc 的工作原理: 三、常见的动态内存错误 1、对NULL指针的解引用操作 2、对动态开辟空间的越界访问 3、对非动态开辟的空间使用 free 来释…

数学建模强化宝典(8)粒子群算法

前言 粒子群算法(Particle Swarm Optimization, PSO)是一种基于群体智能的优化算法,它源于对鸟群捕食行为的研究。通过模拟鸟群中的个体相互协作和信息共享来寻找最优解,粒子群算法已被广泛应用于函数优化、神经网络训练、模糊系统…

跨地域工作利器:深度解析2024年远程控制软件的新特性

无论是跨地域的团队协作、技术支持,使用远程控制工具可以让距离不再是障碍。这次我介绍一些可以直接下载使用的远程工具,比如从向日葵远程控制官网,EV官网、TV官网等就能直接下载使用的工具。 1.向日葵远程控制 链接直通车:http…

微服务--Nacos

一、Nacos简介 Nacos(Naming and Configuration Service)是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它致力于帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos支持几乎所有主流类型的服…

惠中科技智能高效综合光伏清洗技术

惠中科技综合光伏清洗技术:,引领绿色清洁新时代 随着全球对可再生能源需求的不断增长,光伏产业作为绿色能源的重要组成部分,正迎来前所未有的发展机遇。然而,光伏电站的广泛应用也带来了光伏板清洁维护的挑战。灰尘、…

SprinBoot+Vue问卷调查微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平…

AI耳机是不是好赛道

AI耳机是不是好赛道? 数科星球原创 作者丨苑晶 编辑丨大兔 AI硬件方兴未艾,行业里出现了新变化。 最近,AI耳机开始受到关注。有人将其看作可堪比无线蓝牙耳机革命的大时代,也有人认为其鸡肋无比、并不看好。询问了多家投资机…

Pr:项目设置 - 颜色

Pr菜单:文件/项目设置 File/Project Settings “项目设置”对话框中的颜色 Color选项卡主要用于管理项目的色彩空间和显示设置,确保在不同设备和环境下色彩显示的一致性和准确性,特别是处理 HDR 或对数格式的视频素材时。 颜色设置 Color Set…

SprinBoot+Vue在线商城微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平…

网络攻击的类型

网络攻击的数量正在增长,迫切需要更强大的网络安全措施来应对这些攻击。作为程序员和 IT 专业人员,我们必须了解顶级组织中发生的最常见的网络攻击类型。 以下各节详细介绍了可能损害任何系统的不同类型的网络攻击。了解这些攻击对于检测和防止进一步攻…

esp32 中断最简验证程序

13脚接3.3v脚,显示OK ,不能直接接5v电压脚 中断程序最好是为各种执行设置标志位。不能处理占用长时间的指令 准备利用中断对超声波模块编程 #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/…