【论文笔记】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获取。

Visual-Prompt Tuning (VPT) vs. other transfer learning methods

方法

Preliminaries

对于一个具有NN 层的 ViT,输入图像被分割成mm 个固定大小的块{IjR3×h×wjN,1jm}\{I_j \in \mathbb{R}^{3 \times h \times w} \mid j \in \mathbb{N}, 1 \leq j \leq m\}

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

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

e0j=Embed(Ij)e0jRd,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

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

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

[xi,Ei]=Li([xi1,Ei1])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

y=Head(xN)\mathbf{y} = \text{Head}(\mathbf{x}_N)

其中xiRd\mathbf{x}_i \in \mathbb{R}^d 表示 [CLS]Li+1L_{i+1} 输入空间中的嵌入。

[,][\cdot, \cdot] 表示在序列长度维度上的堆叠和连接,即[xi,Ei]R(1+m)×d[\mathbf{x}_i, \mathbf{E}_i] \in \mathbb{R}^{(1+m) \times d}

每一层LiL_i 包含多头自注意力(MSA)和前馈网络(FFN),以及层归一化和残差连接。

一个神经分类头用于将最终层的 [CLS] 嵌入xN\mathbf{x}_N 映射到预测的类概率分布y\mathbf{y}

Visual-Prompt Tuning (VPT)

给定一个预训练的Transformer模型,我们在Embed层之后的输入空间中引入一组维度为dd 的连续嵌入,即提示(prompts)。

在微调过程中,只有任务特定的提示被更新,而Transformer主干保持冻结。

根据涉及的Transformer层的数量,我们的方法有两种变体,VPT-Shallow和VPT-Deep,如图2所示。

Overview of our proposed Visual-Prompt Tuning

VPT-Shallow

提示仅被插入到第一个Transformer层L1L_1 中。

每个提示token是一个可学习的dd-维向量。

一组pp 个提示表示为P={pkRdkN,1kp}\mathbf{P} = \{\mathbf{p}^k \in \mathbb{R}^d \mid k \in \mathbb{N}, 1 \leq k \leq p\},浅层提示的 ViT 为:

[x1,Z1,E1]=L1([x0,P,E0])[\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])

[xi,Zi,Ei]=Li([xi1,Zi1,Ei1])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

y=Head(xN)\mathbf{y} = \textcolor{red}{\text{Head}}(\mathbf{x}_N)

其中ZiRp×d\mathbf{Z}_i \in \mathbb{R}^{p \times d} 表示由第ii-个Transformer层计算的特征,且[xi,Zi,Ei]R(1+p+m)×d[\mathbf{x}_i, \mathbf{Z}_i, \mathbf{E}_i] \in \mathbb{R}^{(1+p+m) \times d}

颜色红色\textcolor{red}{\bullet} 和蓝色\textcolor{blue}{\bullet} 分别表示可学习和冻结的参数。

值得注意的是,对于 ViT,xN\mathbf{x}_N 对提示的位置是不变的,因为它们是在位置编码之后插入的,例如,[x0,P,E0][\mathbf{x}_0, \mathbf{P}, \mathbf{E}_0][x0,E0,P][\mathbf{x}_0, \mathbf{E}_0, \mathbf{P}] 在数学上是等价的。

这也适用于 VPT-Deep。

VPT-Deep

提示在每个Transformer层的输入空间中引入。

对于第(i+1)(i+1)-个层Li+1L_{i+1},我们表示输入可学习提示的集合为Pi={pikRdkN,1km}\mathbf{P}_i = \{\mathbf{p}_i^k \in \mathbb{R}^d \mid k \in \mathbb{N}, 1 \leq k \leq m\}

深层提示的 ViT 可以表示为:

[xi,_,Ei]=Li([xi1,Pi1,Ei1])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

y=Head(xN)\mathbf{y} = \textcolor{red}{\text{Head}}(\mathbf{x}_N)

其中xi\mathbf{x}_i 表示第ii-个Transformer层的输入,Pi\mathbf{P}_i 表示第ii-个Transformer层的可学习提示,Ei\mathbf{E}_i 表示第ii-个Transformer层的嵌入。

Storing Visual Prompts

VPT 在存在多个下游任务时是有益的。

我们只需要为每个任务存储学习到的提示和分类头,并重用预训练Transformer模型的原始副本,从而显著降低存储成本。

例如,给定一个具有8600万个参数(M)和d=768d = 768 的 ViT-Base,50个浅层提示和深层提示分别产生额外的p×d=50×768=0.038p \times d = 50 \times 768 = 0.038 M 参数和N×p×d=0.46N \times p \times d = 0.46 M 参数,分别占所有 ViT-Base 参数的0.04%和0.53%。

实验

主实验

ViT-B/16 pre-trained on supervised ImageNet-21k

Performance comparison on different downstream data scales, averaged across 5 FGVC tasks

VPT vs. Full across model scales (ViT-B, ViT-L and ViT-H), for 3 VTAB task groups

Different Transformer architecture: Swin-B pre-trained on supervised ImageNet-21k as backbone

消融实验

Ablation on prompt location

Ablation on prompt length

Ablation on prompt depth

Ablation on final output

Analysis and Discussion

Visualization

t-SNE visualizations of the final [CLS] embedding xN of 3 VTAB tasks from the test set, from Tab. 1

Apply VPT to more vision tasks

Semantic Segmentation: ADE20k [90] validation results with SETR [89] on ViT-L

Apply VPT to more pre-training methods

Different pre-trained objectives: MAE [30] and MoCo v3 [11] with a ViT-B backbone

Apply VPT to ConvNets

Apply VPT to ConvNets: ResNet-50 and ConvNeXt-Base

总结

我们提出了一种名为视觉提示微调(Visual Prompt Tuning)的新参数高效方法,旨在利用大型视觉Transformer模型完成各种下游任务。

VPT在输入空间中引入了特定任务的可学习提示,同时保持预训练骨干网络不变。

我们表明,VPT在大幅降低存储成本的同时,可以超越其他微调协议(通常包括全量微调)。

我们的实验还提出了关于具有不同预训练目标的视觉Transformer微调动态的有趣问题,以及如何以高效的方式将其迁移到更广泛的视觉识别任务。

因此,我们希望我们的工作能够激发未来关于如何最大限度地发挥大型基础模型在视觉领域潜力的研究。