摘要
- 提出一种掩码图像建模任务,以自监督方式预训练视觉transformer。
- 对BEIT进行了预训练,并对下游任务进行微调实验,如图像分类和语义分割。
- 发现自监督BEIT的自注意力机制可以学会区分语义区域和对象边界。
框架
给定输入图像 x x x,BEiT将其编码为上下文向量表示。如上图,BEiT通过自监督学习掩码图像建模 (MIM) 任务进行预训练,恢复编码向量的masked image patches。对于下游任务 (如图像分类和语义分割),在经预训练的BEiT上添加任务层,并对特定数据集上的参数进行有监督微调。
图像表示
本方法中,图像有两种表示视图,即images patches和visual tokens。两者分别在预训练任务中作为输入和输出表示。
Images patch
输入图像 x x x被splited为一个序列的patches,适应标准Transformer的输入格式。具体,先将图像 x ∈ R H × W × C x∈R^{H×W×C } x∈RH×W×Creshape为 N = H W / P 2 N=HW/P^2 N=HW/P2个patches为 x p ∈ R N × ( P 2 C ) x^p∈R^{N×(P^2C)} xp∈RN×(P2C),其中 C C C为通道数, ( H , W ) (H,W) (H,W)为输入图像分辨率, ( P , P ) (P,P) (P,P)为每个patch的分辨率。然后images patches { x i p } i = 1 N { \{x^p_i\} }^N_{i=1} {xip}i=1N被flattened为向量并经过线性投影层得到Patch Embedding,作为BEiT输入特征。
实验中 P = 16 P=16 P=16,每幅 224×224 图像被splited成 14 × 14 14×14 14×14的images patches grid ( N = 14 × 14 ) (N=14×14) (N=14×14),每个grid表示的patch尺寸为 16 × 16 16×16 16×16。
Visual token
类似于自然语言处理,图像被表示为由image tokenizer获得的离散token序列。具体,采取离散变分自编码器(dVAE)学习到的图像tokenizer,将图像 x ∈ R H × W × C x∈R^{H×W×C } x∈RH×W×Ctokenized为 z = [ z 1 , . . . , z N ] ∈ ν h × w z=[z_1,...,z_N]∈ν^{h×w} z=[z1,...,zN]∈νh×w,其中词表 (vocabulary) ν = { 1 , . . . , ∣ ν ∣ } ν={\{1,...,|ν|\}} ν={1,...,∣ν∣}包含离散的token索引。
如dVAE,在visual token的学习过程中,有tokenizer和decoder两个模块。tokenizer q ϕ ( z ∣ x ) q_ϕ(z|x) qϕ(z∣x)将图像像素 x x x映射为离散tokens z z z。decoder p ψ ( x ∣ z ) p_ψ(x|z) pψ(x∣z)学习基于visual token z z z重建输入图像 x x x。重建的优化目标写成 E z ∼ q ϕ ( z ∣ x ) [ l o g p ψ ( x ∣ z ) ] E_{z∼q_ϕ(z|x)}[logp_ψ(x|z)] Ez∼qϕ(z∣x)[logpψ(x∣z)]。由于潜在的visual tokens是离散的,模型不可微。因此,采用Gumbel-softmax训练模型。在dVAE训练过程中, q ϕ q_ϕ qϕ会加uniform先验。
实验中每幅图像被tokenized为 14 × 14 14×14 14×14的visual tokens grid,和images patches数相同。词表大小设置为 ∣ ν ∣ = 8192 |ν|=8192 ∣ν∣=8192。
主干网络:Transformer
使用标准Transformer作为骨干网络。Transformer的输入是images patches序列 { x i p } i = 1 N { \{x^p_i\} }^N_{i=1} {xip}i=1N,images patcher经线性投影获得Patch Embedding E x i p Ex^p_i Exip,其中 E ∈ R ( P 2 C ) × D E ∈ R^{(P^2C)×D} E∈R(P2C)×D;然后,在输入序列前添加一个特殊标记 [ S ] [S] [S],在将标准的可学习1D position embedding E p o s ∈ R N × D E_{pos} ∈ R^{N×D} Epos∈RN×D添加到Patch Embedding中,得到Transformer的输入向量 H 0 = [ e [ S ] , E x i p , . . . , E x N p ] + E p o s H_0 = [e_{[S]}, Ex^p_i , . . . , Ex^p_N ] + E_{pos} H0=[e[S],Exip,...,ExNp]+Epos。
编码器包含 L L L层的Transformer blocks H l = T r a n s f o r m e r ( H l − 1 ) , l = 1 , . . . , L H^l =Transformer(H^{l−1}),l = 1, . . . , L Hl=Transformer(Hl−1),l=1,...,L。最后一层的输出向量 H L = [ h [ S ] L , h 1 L , . . . , h N L ] H^L = [h^L_{[S]}, h^L_1, . . . , h^L_ N ] HL=[h[S]L,h1L,...,hNL]即为经编码的images patches(共N+1 个向量),其中 h i L h^L_ i hiL是第 i i i个图像块的images patcher向量。
预训练 BEiT:掩码图像建模
结合上述,进行整体建模。给定一个输入图像 x x x,将其split为 N个images patches ( { x i p } i = 1 N ) ({\{x^p_i\}}^N_{i=1}) ({xip}i=1N),并 tokenized为N个visual tokens ( { z i } i = 1 N ) ({\{ z_i\}}^N_{i=1}) ({zi}i=1N)。然后随机mask 40%(掩码率为 0.4)的images patches,其中masked的位置表示为 M ∈ { 1 , . . . , N } 0.4 N M∈{ \{ 1,...,N \}}^{0.4N} M∈{1,...,N}0.4N,这些位置使用可学习的嵌入 e [ M ] ∈ R D e_{[ M ] }∈R^D e[M]∈RD来替换(用于训练)。
被masked后的图像 x M = { x i p : i ∉ M } i = 1 N ⋃ { e [ M ] : i ∈ M } i = 1 N x^M={\{ x^p_i:i∉M \}}^N_{i=1}⋃{\{ e_{[M]}:i∈M \}}^N_{i=1} xM={xip:i∈/M}i=1N⋃{e[M]:i∈M}i=1N将馈入 L L L层Transformer中,得到的最后隐层向量 { h i L } i = 1 N {\{h^L_i\}}^N_{i=1} {hiL}i=1N为输入patch的编码表示。对于每个mask位置的 { h i L : i ∈ M } i = 1 N {\{h^L_i:i∈M\}}^N_{i=1} {hiL:i∈M}i=1N,使用softmax分类器预测相应的visual tokens p M I M ( z ′ ∣ x M ) = s o f t m a x z ′ ( W c h i L + b c ) p_{MIM}(z^′|x^M)=softmax_{z′}(W_ch^L_i+b_c) pMIM(z′∣xM)=softmaxz′(WchiL+bc),其中 x M x^M xM是被masked的images patches, W c ∈ R ∣ ν ∣ × D W_c∈R^{|ν|×D} Wc∈R∣ν∣×D且 b c ∈ R ∣ ν ∣ b_c∈R^{|ν|} bc∈R∣ν∣。
预训练的目标为最大化masked patches在图像中正确的visual tokens z i z_i zi的对数似然(log-likelihood)。
max ∑ x ∈ D E M [ ∑ i ∈ M log p M I M ( z i ∣ x M ) ] \max \sum_{x \in D}\mathbb{E}_M[\sum_{i \in M}\log p_{MIM}(z_i|x^M)] maxx∈D∑EM[i∈M∑logpMIM(zi∣xM)]
其中,D为训练语料库,M为随机masked的位置, x M x^M xM为根据M来masked的已损坏图像。
本算法掩码采用blockwise masking,而非随机选择patches进行mask。如下图所示,每次先计算出 s , r , a , t s,r, a,t s,r,a,t,在mask掉 i ∈ [ t , t + a ) , j ∈ [ l , l + b ) i\in[t,t+a),j\in[l,l+b) i∈[t,t+a),j∈[l,l+b)的部分。重复上述2个步骤,直到获得足够的masked patches。
MIM主要受到MLM的启发,MLM是NLP中最成功的预训练目标之一。blockwise masking也被广泛应用于 BERT-like模型。然而,直接使用像素级自编码(即恢复 masked patches 的像素)进行视觉预训练,会促使模型聚焦于短程依赖和高频细节。BEiT通过预测离散visual tokens来克服上述问题,该tokens会将细节总结为高级抽象。
VAE分析
BEiT预训练从理论上可视为变分自动编码器训练。设 x x x为原始图像, x ^ \hat x x^为masked图像, z z z为visual tokens。考虑VAE的对数似然 p ( x ∣ x ^ ) p(x|\hat x) p(x∣x^)的下界 (ELBO),带入解释即从其mask图像中恢复原始图像:
∑ ( x i , x ^ i ) ∈ D log p ( x i ∣ x ^ i ) ≥ ∑ ( x i , x ^ i ) ∈ D ( E z i ∼ q ϕ ( z ∣ x i ) [ log p ψ ( x i ∣ z i ) ] ⏟ V i s u a l T o k e n R e c o n s t r u c t i o n − D K L [ q ϕ ( z ∣ x i ) , p θ ( z ∣ x ^ i ) ] ) \sum_{(x_i,\hat x_i)\in D}\log p(x_i|\hat x_i)\ge \sum_{(x_i,\hat x_i)\in D}(\underbrace{\mathbb{E}_{z_i \sim q_{\phi}(z|x_i)}[\log p_{ψ}(x_i|z_i)]}_{Visual \ Token \ Reconstruction}-D_{KL}[q_{\phi}(z|x_i),p_{\theta}(z|\hat x_i)]) (xi,x^i)∈D∑logp(xi∣x^i)≥(xi,x^i)∈D∑(Visual Token Reconstruction Ezi∼qϕ(z∣xi)[logpψ(xi∣zi)]−DKL[qϕ(z∣xi),pθ(z∣x^i)])
其中, q ϕ ( z ∣ x ) q_ϕ(z|x) qϕ(z∣x)表示图像tokenizer,即基于输入图像采用dVAE的Tokenizer获取visual tokens; p ψ ( x ∣ z ) p_ψ(x|z) pψ(x∣z)表示输入visual tokens解码原始图像,即通过dVAE的Decoder把visual tokens重建成reconstructed image; p θ ( z ∣ x ^ ) p_θ(z|\hat x) pθ(z∣x^)表示基于masked图像恢复visual tokens,此即BEIT的预训练任务。
总结为两阶段过程学习模型:第一阶段,使用uniform作为先验最小化图像重建(Visual Token Reconstruction)损失。即保持 p θ p_θ pθ固定的情况下,学习 q ϕ q_ϕ qϕ和 p ψ p_ψ pψ。第二阶段,保持 q ϕ q_ϕ qϕ和 p ψ p_ψ pψ固定的情况下,学习先验 p θ p_θ pθ。若 q ϕ ( z ∣ x ) q_ϕ(z|x) qϕ(z∣x)已为最优,则 z ^ i = a r g m a x z q ϕ ( z ∣ x ) \hat z_i=argmax_zq_ϕ(z|x) z^i=argmaxzqϕ(z∣x),则上条公式可重写为:
∑ ( x i , x ^ i ) ∈ D ( E z i ∼ q ϕ ( z ∣ x i ) [ log p ψ ( x i ∣ z i ) ] ⏟ S t a g e 1 : V i s u a l T o k e n R e c o n s t r u c t i o n + log p θ ( z ^ i ∣ x ^ i ) ⏟ S t a g e 2 : M a s k e d I m a g e M o d e l i n g ) \sum_{(x_i,\hat x_i)\in D} \underbrace{(\mathbb{E}_{z_i \sim q_{\phi}(z|x_i)}[\log p_{ψ}(x_i|z_i)]}_{Stage \ 1:Visual \ Token \ Reconstruction}+ \underbrace{\log p_{\theta}(\hat z_i|\hat x_i)}_{Stage \ 2: Masked \ Image \ Modeling}) (xi,x^i)∈D∑Stage 1:Visual Token Reconstruction (Ezi∼qϕ(z∣xi)[logpψ(xi∣zi)]+Stage 2:Masked Image Modeling logpθ(z^i∣x^i))
Stage 2即为BEiT的预训练目标。
预训练设置
BEIT的网络架构与ViT-Base相同。使用768隐层大小的12层Transformer,注意力头数为12。FFN的中间尺寸是3072,默认patch size尺寸为 16 × 16 16 × 16 16×16,采样已训练好的图像tokenizer。视觉token词表大小为8192。
在ImageNet-1K数据集上自监督预训练BEIT,其中包含大约1.2M张图像。数据增强策略包括随机调整大小的裁剪,水平翻转,颜色抖动。输入图像尺寸为 224 × 224 224 × 224 224×224,输入被分割为 14 × 14 14 × 14 14×14的images patches和相同数量的visual token。随机掩码最多75个patch(总图像补丁的40%)。
预训练运行大约500k step(即800 epoch),batchsize为2k。采用 β 1 = 0.9 β1 = 0.9 β1=0.9, β 2 = 0.999 β2 = 0.999 β2=0.999的Adam优化。学习率设置为1.5e-3,预热10 epochs余弦学习率衰减,权重衰减是0.05。采用 r a t e = 0.1 rate = 0.1 rate=0.1的stochastic depth(训练时每个batch随机dropout网络的一些layers,测试时用完整网络),禁用dropout。
适当的初始化对稳定Transformer训练很重要。故在一个小范围内随机初始化所有参数,例如[−0.02, 0.02]。对于第 l l l层Transformer,用缩放率为 1 / 2 l 1/\sqrt{2l} 1/2l重新缩放自注意力模块和FFN的输出矩阵。
下游视觉任务微调 BEiT
预训练BEiT后,可以Transformer末尾追加一个任务层,用于微调下游任务。以图像分类和语义分割为例。
- 图像分类:对于图像分类,直接使用一个简单的线性分类器作为任务层。具体地,类别概率计算为 s o f t m a x ( a v g ( { h i L } i = 1 N W c ) ) softmax(avg(\{{h^L_i}\}^N_{i=1}W_c)) softmax(avg({hiL}i=1NWc)),其中 h i L h^L_i hiL是第 i i i个images patcher的最终编码向量, W c ∈ R D × C W_c∈R^{D×C} Wc∈RD×C是一个参数矩阵, C C C是类别数。通过有监督训练,对有标签数据进行最大似然估计。
- 语义分割:对于语义分割,遵循SETRPUP中使用的任务层。具体地,使用预训练BEiT作为主干编码器,合并几个反卷积层 (deconv) 作为解码器来产生分割。
- 中间微调:经过自监督的预训练,BEiT可以在中间数据集上进一步训练,然后在目标下游任务上微调模型 (自监督预训练 → 中间数据集微调 → 下游任务微调),可以直接采用BEIT的方法。
实验
图像分类实验
以下为在ILSVRC-2012 ImageNet数据集上用1k类和1.3M张图像评估BEIT。
BEIT实验的做法遵循下游任务Fine-tuning的做法,为预训练模型在具体小数据集上面Fine-tune之后得到的结果。分类实验在CIFAR-10和ImageNet这两个数据集上进行,训练配置如上图。
上图为CIFAR-100上的测试top-1精度。观察到,在较小的CIFAR-100数据集上,从头训练的ViT仅达到48.5%精度,BEIT通过预训练实现了90.1%,实验结果表明BEIT可以大大降低标注工作量。BEIT也优于MoCo v3、DINO。另外,在ImageNet-1K上的中间微调可改善在CIFAR-100上的结果。
上图显示了在ImageNet上,从头开始训练时ViT-384-L比ViT-384差,验证了Vision Transformer模型的data hungry的问题,解决方法为用更大的数据集ImageNet-22K,用了以后 ViT-384-L 最终比ViT-384涨了1.2个点。相比之下,BEIT-L比BEIT好2个点,BEIT-384-L比BEIT-384好1.7个点,说明大数据集对BEIT的帮助更大。
当输入图像尺寸为384×384时,在数据集上Fine-tune10个epochs,patch的大小保持不变的情况下。观察到,更高的分辨率可以提高1个精度点。当使用相同的输入分辨率时,用ImageNet-1K进行预训练的BEIT-384比使用 ImageNet-22K进行监督预训练的 ViT-384表现更好。
与最先进的监督预训练在ImageNet微调上进行了比较。除了使用ImageNet-1K还在ImageNet-22K上对BEIT进行了预训练150 epochs,在自监督预训练之后,在ImageNet-22K进行了90 epoch的中间微调。此外,使用一个内部数据集,其中约有7000万张带标签的图像,作为ImageNet-22K的直接替代。BEIT +为增加了LayerScale和相对位置偏差模块。
上图结果看到。 BEIT-L在ImageNet-22K上进行了微调,取得了与在谷歌JFT-3B上训练的ViT-L相当的性能。此外,BEIT -L在对内部70M数据集进行中间微调后,在ImageNet上获得了89.5% top-1的精度。结果表明,BEIT预训练大大减少了所需的标记工作,并推进了大尺寸视觉transformer的新技术水平。
上图显示了在ADE20K语义分割基准上的微调结果。在Swin中,使用与BEiT相同的任务层(即UperNet)并在640 × 640分辨率下评估模型。BEiT-L模型在ADE20K上获得最先进的性能。
上图二比较了从零开始训练和先训练再微调两种范式的收敛曲线。微调BEIT不仅实现了更好的性能,而且收敛速度比从头训练DeiT快得多。
消融实验
上图为在ImageNet (分类) 和 ADE20K (分割) 任务上进行的消融实验,行1观察到Blockwise masking在两种任务中都是有利的,特别是在语义分割上。行2为将预训练改为masked patches 的像素回归问题,观察到精度下降了一个点,行3在此之上减少 blockwise masking 的使用进一步降低了精度,发现blockwise masking 对像素级自动编码更有帮助,可缓解短距离依赖。行4预训练恢复100%的visual tokens会影响下游任务的性能,行5在此之上减少 masking 的使用会进一步降低精度。行6比较了不同训练 steps下的 BEiT,显示对模型进行更长时间的预训练可以进一步提高下游任务的性能。
上图显示使用LayerScale和相对位置偏差都提高了ImageNet分类和ADE20K语义分割的性能。 根据经验注意到,当将模型扩展到数十亿参数时,vanilla Transformer是最稳定的,因此我们不将LayerScale用于超大型模型。
上图为对比了在ImageNet-1K上训练的DALL-E的tokenizer和dVAE的tokenizer的性能,实验显示本文提出的tokenizer获得了更好的重构损失和ImageNet微调性能。
可视化
上图绘制了图像中不同参考点的自注意力分布图,可视化通过网络最后一层的query、key的积计算出的注意力分数产生。观察到BEIT中自注意力机制可以分离对象,即使预训练完全不依赖于任何人工标注。
reference
Bao, H. , Dong, L. , & Wei, F. . (2021). Beit: bert pre-training of image transformers.