【论文笔记】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微调动态的有趣问题,以及如何以高效的方式将其迁移到更广泛的视觉识别任务。 因此,我们希望我们的工作能够激发未来关于如何最大限度地发挥大型基础模型在视觉领域潜力的研究。

相关推荐
烟锁池塘柳07 分钟前
【深度学习】评估模型复杂度:GFLOPs与Params详解
人工智能·深度学习
果冻人工智能8 分钟前
🧠5个AI工程师在第一次构建RAG时常犯的错误
人工智能
白熊18814 分钟前
【计算机视觉】CV实战项目- DFace: 基于深度学习的高性能人脸识别
人工智能·深度学习·计算机视觉
layneyao16 分钟前
自动驾驶L4级技术落地:特斯拉、Waymo与华为的路线之争
人工智能·华为·自动驾驶
訾博ZiBo17 分钟前
AI日报 - 2025年04月30日
人工智能
毒果22 分钟前
深度学习大模型: AI 阅卷替代人工阅卷
人工智能·深度学习
吾日三省吾码32 分钟前
GitHub Copilot (Gen-AI) 很有用,但不是很好
人工智能·github·copilot
一颗橘子宣布成为星球1 小时前
Unity AI-使用Ollama本地大语言模型运行框架运行本地Deepseek等模型实现聊天对话(一)
人工智能·unity·语言模型·游戏引擎
南 阳1 小时前
从微服务到AI服务:Nacos 3.0如何重构下一代动态治理体系?
人工智能·微服务·云原生·重构
fmingzh1 小时前
NVIDIA高级辅助驾驶安全与技术读后感
人工智能·安全·自动驾驶