【论文笔记】Visual Prompt Tuning

🍎个人主页:小嗷犬的个人主页

🍊个人网站:小嗷犬的技术小站

🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。


基本信息

标题 : Visual Prompt Tuning
作者 : Menglin Jia, Luming Tang, Bor-Chun Chen, Claire Cardie, Serge Belongie, Bharath Hariharan, Ser-Nam Lim
发表 : ECCV 2022
arXiv : https://arxiv.org/abs/2203.12119

摘要

当前在适应预训练模型的方法中,涉及更新所有骨干参数,即全量微调。

本文介绍了视觉提示微调(VPT),作为大规模视觉Transformer模型中全量微调的高效且有效的替代方案。

受到最近在大规模语言模型高效调优方面的进展的启发,VPT在保持模型骨干冻结的同时,仅在输入空间引入少量(小于模型参数的1%)可训练参数。

通过在广泛下游识别任务上的大量实验,我们表明VPT相较于其他参数高效调优协议实现了显著的性能提升。

最重要的是,VPT在很多情况下甚至优于全量微调,无论是在模型容量还是训练数据规模上,同时降低了每项任务的存储成本。

代码可在https://github.com/kmnp/vpt获取。

方法

Preliminaries

对于一个具有 N N N 层的 ViT,输入图像被分割成 m m m 个固定大小的块 { I j ∈ R 3 × h × w ∣ j ∈ N , 1 ≤ j ≤ m } \{I_j \in \mathbb{R}^{3 \times h \times w} \mid j \in \mathbb{N}, 1 \leq j \leq m\} {Ij∈R3×h×w∣j∈N,1≤j≤m}。

h , w h, w h,w 分别是图像块的高度和宽度。

每个块首先被嵌入到 d d d-维的潜在空间中,并带有位置编码:

e 0 j = Embed ( I j ) e 0 j ∈ R d , j = 1 , 2 , ... m \mathbf{e}_0^j = \text{Embed}(I_j) \quad \mathbf{e}_0^j \in \mathbb{R}^d, j = 1, 2, \ldots m e0j=Embed(Ij)e0j∈Rd,j=1,2,...m

我们表示图像块嵌入的集合为 E i = { e i j ∈ R d ∣ j ∈ N , 1 ≤ j ≤ m } \mathbf{E}_i = \{\mathbf{e}i^j \in \mathbb{R}^d \mid j \in \mathbb{N}, 1 \leq j \leq m\} Ei={eij∈Rd∣j∈N,1≤j≤m},作为输入到第 ( i + 1 ) (i+1) (i+1)-个Transformer层 ( L i + 1 ) (L{i+1}) (Li+1)。

与一个额外的可学习分类标记([CLS])一起,整个 ViT 可以表示为:

x i , E i \] = L i ( \[ x i − 1 , E i − 1 \] ) i = 1 , 2 , ... , N \[\\mathbf{x}_i, \\mathbf{E}_i\] = L_i(\[\\mathbf{x}_{i-1}, \\mathbf{E}_{i-1}\]) \\quad i = 1, 2, \\ldots, N \[xi,Ei\]=Li(\[xi−1,Ei−1\])i=1,2,...,N y = Head ( x N ) \\mathbf{y} = \\text{Head}(\\mathbf{x}_N) y=Head(xN) 其中 x i ∈ R d \\mathbf{x}_i \\in \\mathbb{R}\^d xi∈Rd 表示 `[CLS]` 在 L i + 1 L_{i+1} Li+1 输入空间中的嵌入。 \[ ⋅ , ⋅ \] \[\\cdot, \\cdot\] \[⋅,⋅\] 表示在序列长度维度上的堆叠和连接,即 \[ x i , E i \] ∈ R ( 1 + m ) × d \[\\mathbf{x}_i, \\mathbf{E}_i\] \\in \\mathbb{R}\^{(1+m) \\times d} \[xi,Ei\]∈R(1+m)×d。 每一层 L i L_i Li 包含多头自注意力(MSA)和前馈网络(FFN),以及层归一化和残差连接。 一个神经分类头用于将最终层的 `[CLS]` 嵌入 x N \\mathbf{x}_N xN 映射到预测的类概率分布 y \\mathbf{y} y。 #### Visual-Prompt Tuning (VPT) 给定一个预训练的Transformer模型,我们在Embed层之后的输入空间中引入一组维度为 d d d 的连续嵌入,即提示(prompts)。 在微调过程中,只有任务特定的提示被更新,而Transformer主干保持冻结。 根据涉及的Transformer层的数量,我们的方法有两种变体,VPT-Shallow和VPT-Deep,如图2所示。 ![Overview of our proposed Visual-Prompt Tuning](https://i-blog.csdnimg.cn/direct/bfa9921fba5743f49b02e7f16468b1fe.png) ##### VPT-Shallow 提示仅被插入到第一个Transformer层 L 1 L_1 L1 中。 每个提示token是一个可学习的 d d d-维向量。 一组 p p p 个提示表示为 P = { p k ∈ R d ∣ k ∈ N , 1 ≤ k ≤ p } \\mathbf{P} = \\{\\mathbf{p}\^k \\in \\mathbb{R}\^d \\mid k \\in \\mathbb{N}, 1 \\leq k \\leq p\\} P={pk∈Rd∣k∈N,1≤k≤p},浅层提示的 ViT 为: \[ x 1 , Z 1 , E 1 \] = L 1 ( \[ x 0 , P , E 0 \] ) \[\\mathbf{x}_1, \\mathbf{Z}_1, \\mathbf{E}_1\] = \\textcolor{blue}{L_1}(\[\\textcolor{blue}{\\mathbf{x}_0}, \\textcolor{red}{\\mathbf{P}}, \\mathbf{E}_0\]) \[x1,Z1,E1\]=L1(\[x0,P,E0\]) \[ x i , Z i , E i \] = L i ( \[ x i − 1 , Z i − 1 , E i − 1 \] ) i = 2 , 3 , ... , N \[\\mathbf{x}_i, \\mathbf{Z}_i, \\mathbf{E}_i\] = \\textcolor{blue}{L_i}(\[\\mathbf{x}_{i-1}, \\mathbf{Z}_{i-1}, \\mathbf{E}_{i-1}\]) \\quad i = 2, 3, \\ldots, N \[xi,Zi,Ei\]=Li(\[xi−1,Zi−1,Ei−1\])i=2,3,...,N y = Head ( x N ) \\mathbf{y} = \\textcolor{red}{\\text{Head}}(\\mathbf{x}_N) y=Head(xN) 其中 Z i ∈ R p × d \\mathbf{Z}_i \\in \\mathbb{R}\^{p \\times d} Zi∈Rp×d 表示由第 i i i-个Transformer层计算的特征,且 \[ x i , Z i , E i \] ∈ R ( 1 + p + m ) × d \[\\mathbf{x}_i, \\mathbf{Z}_i, \\mathbf{E}_i\] \\in \\mathbb{R}\^{(1+p+m) \\times d} \[xi,Zi,Ei\]∈R(1+p+m)×d。 颜色红色 ∙ \\textcolor{red}{\\bullet} ∙ 和蓝色 ∙ \\textcolor{blue}{\\bullet} ∙ 分别表示可学习和冻结的参数。 值得注意的是,对于 ViT, x N \\mathbf{x}_N xN 对提示的位置是不变的,因为它们是在位置编码之后插入的,例如, \[ x 0 , P , E 0 \] \[\\mathbf{x}_0, \\mathbf{P}, \\mathbf{E}_0\] \[x0,P,E0\] 和 \[ x 0 , E 0 , P \] \[\\mathbf{x}_0, \\mathbf{E}_0, \\mathbf{P}\] \[x0,E0,P\] 在数学上是等价的。 这也适用于 VPT-Deep。 ##### VPT-Deep 提示在每个Transformer层的输入空间中引入。 对于第 ( i + 1 ) (i+1) (i+1)-个层 L i + 1 L_{i+1} Li+1,我们表示输入可学习提示的集合为 P i = { p i k ∈ R d ∣ k ∈ N , 1 ≤ k ≤ m } \\mathbf{P}_i = \\{\\mathbf{p}_i\^k \\in \\mathbb{R}\^d \\mid k \\in \\mathbb{N}, 1 \\leq k \\leq m\\} Pi={pik∈Rd∣k∈N,1≤k≤m}。 深层提示的 ViT 可以表示为: \[ x i , _ , E i \] = L i ( \[ x i − 1 , P i − 1 , E i − 1 \] ) i = 1 , 2 , ... , N \[\\mathbf{x}_i, \\_, \\mathbf{E}_i\] = \\textcolor{blue}{L_i}(\[\\mathbf{x}_{i-1}, \\textcolor{red}{\\mathbf{P}_{i-1}}, \\mathbf{E}_{i-1}\]) \\quad i = 1, 2, \\ldots, N \[xi,_,Ei\]=Li(\[xi−1,Pi−1,Ei−1\])i=1,2,...,N y = Head ( x N ) \\mathbf{y} = \\textcolor{red}{\\text{Head}}(\\mathbf{x}_N) y=Head(xN) 其中 x i \\mathbf{x}_i xi 表示第 i i i-个Transformer层的输入, P i \\mathbf{P}_i Pi 表示第 i i i-个Transformer层的可学习提示, E i \\mathbf{E}_i Ei 表示第 i i i-个Transformer层的嵌入。 ##### Storing Visual Prompts VPT 在存在多个下游任务时是有益的。 我们只需要为每个任务存储学习到的提示和分类头,并重用预训练Transformer模型的原始副本,从而显著降低存储成本。 例如,给定一个具有8600万个参数(M)和 d = 768 d = 768 d=768 的 ViT-Base,50个浅层提示和深层提示分别产生额外的 p × d = 50 × 768 = 0.038 p \\times d = 50 \\times 768 = 0.038 p×d=50×768=0.038 M 参数和 N × p × d = 0.46 N \\times p \\times d = 0.46 N×p×d=0.46 M 参数,分别占所有 ViT-Base 参数的0.04%和0.53%。 ### 实验 #### 主实验 ![ViT-B/16 pre-trained on supervised ImageNet-21k](https://i-blog.csdnimg.cn/direct/21bc16b67e184a9994c180bd3d540192.png) ![Performance comparison on different downstream data scales, averaged across 5 FGVC tasks](https://i-blog.csdnimg.cn/direct/04457e7622a244ea956ca7e49fa157f1.png) ![VPT vs. Full across model scales (ViT-B, ViT-L and ViT-H), for 3 VTAB task groups](https://i-blog.csdnimg.cn/direct/1824b06f27a34b81b6154d88ce9a44ca.png) ![Different Transformer architecture: Swin-B pre-trained on supervised ImageNet-21k as backbone](https://i-blog.csdnimg.cn/direct/7ca4ea5e7f4f402891a5d3891de1912b.png) #### 消融实验 ![Ablation on prompt location](https://i-blog.csdnimg.cn/direct/16156f6889c4481696412447ca60d670.png) ![Ablation on prompt length](https://i-blog.csdnimg.cn/direct/1602333c86d64c2e83d4fe65e1bd980a.png) ![Ablation on prompt depth](https://i-blog.csdnimg.cn/direct/c1c41532026e4aee8751f7c8b5937f87.png) ![Ablation on final output](https://i-blog.csdnimg.cn/direct/820f0893f9c346debd46d0f8d6472645.png) #### Analysis and Discussion ##### Visualization ![t-SNE visualizations of the final \[CLS\] embedding xN of 3 VTAB tasks from the test set, from Tab. 1](https://i-blog.csdnimg.cn/direct/a58bbc8c575942daa8ec57a6481db488.png) ##### Apply VPT to more vision tasks ![Semantic Segmentation: ADE20k \[90\] validation results with SETR \[89\] on ViT-L](https://i-blog.csdnimg.cn/direct/167ae324dd224c6381760b8a684eccef.png) ##### Apply VPT to more pre-training methods ![Different pre-trained objectives: MAE \[30\] and MoCo v3 \[11\] with a ViT-B backbone](https://i-blog.csdnimg.cn/direct/b32f9ce2af864c99bfa7bf83cf9d920e.png) ##### Apply VPT to ConvNets ![Apply VPT to ConvNets: ResNet-50 and ConvNeXt-Base](https://i-blog.csdnimg.cn/direct/b4ef1eaff5574d9fa9f5de2435389999.png) ### 总结 我们提出了一种名为视觉提示微调(Visual Prompt Tuning)的新参数高效方法,旨在利用大型视觉Transformer模型完成各种下游任务。 VPT在输入空间中引入了特定任务的可学习提示,同时保持预训练骨干网络不变。 我们表明,VPT在大幅降低存储成本的同时,可以超越其他微调协议(通常包括全量微调)。 我们的实验还提出了关于具有不同预训练目标的视觉Transformer微调动态的有趣问题,以及如何以高效的方式将其迁移到更广泛的视觉识别任务。 因此,我们希望我们的工作能够激发未来关于如何最大限度地发挥大型基础模型在视觉领域潜力的研究。

相关推荐
刘 怼怼9 分钟前
使用 Vue 重构 RAGFlow 实现聊天功能
前端·vue.js·人工智能·重构
程序员安仔10 分钟前
每天学新 AI 工具好累?我终于发现了“一键全能且免费不限量”的国产终极解决方案
人工智能
闭月之泪舞10 分钟前
OpenCv(五)——边缘检测
人工智能·计算机视觉
星霜旅人12 分钟前
K-均值聚类
人工智能·机器学习
lilye6624 分钟前
程序化广告行业(39/89):广告投放的数据分析与优化秘籍
大数据·人工智能·数据分析
欧雷殿25 分钟前
再谈愚蠢的「八股文」面试
前端·人工智能·面试
修复bug1 小时前
trae.ai 编辑器:前端开发者的智能效率革命
人工智能·编辑器·aigc
掘金安东尼1 小时前
为什么GPT-4o可以生成吉卜力风格照片,原理是什么?
人工智能
励志成为大佬的小杨1 小时前
pytorch模型的进阶训练和性能优化
人工智能·pytorch·python
知舟不叙2 小时前
OpenCV的基础操作
人工智能·opencv·计算机视觉