BEIT:基于图像重建进行预训练!微软提出BEIT,Top-1准确率达86.3%!代码已开源!...

关注公众号,发现CV技术之美

 写在前面

在本文中,作者介绍了一种自监督视觉表示模型BEITB idirectional E ncoder representation from I mage T ransformers)。继BERT在自然语言处理领域开发之后,作者提出了一种用于预训练视觉Transformer的masked image modeling 任务。

具体来说,在本文的预训练中,每个图像都有两个视图,即图像 patche (如16×16像素)和视觉token (即离散token)。作者首先将原始图像“tokenize”为视觉token。然后随机mask一些图像patch,并将它们输入主干Transformer中。预训练的目标是基于损坏的图像patch恢复原始视觉token

在预训练BEIT之后,作者通过在预训练编码器上附加任务层,直接微调下游任务上的模型参数。在图像分类和语义分割方面的实验结果表明,该模型与以前的预训练方法相比取得了较好的效果。

 1. 论文和代码地址

8aa23debec8cb78a09e4babacc4a8196.png

BEIT: BERT Pre-Training of Image Transformers

论文:https://arxiv.org/abs/2106.08254
代码:https://github.com/microsoft/unilm/tree/master/beit

 2. Motivation

Transformer在计算机视觉方面取得了非常不错的性能。然而,实证研究表明,视觉Transformer比卷积神经网络需要更多的训练数据。为了解决data-hungry的问题,自监督预训练是利用大规模图像数据的一种很有前景的解决方案。

目前,BERT在自然语言处理方面取得了巨大成功。它的 masked language modeling任务首先随机mask了文本中部分token,然后根据损坏文本的Transformer编码结果恢复mask的token。

受BERT的启发,作者采用去噪自编码的思想对视觉Transformer进行预训练,这一点在CV界还没有得到很好的研究。直接对图像数据进行Bert形式的预训练是一个挑战。对于vision Transformer的输入单元,即图像patch,没有预先存在的词汇表。

因此,不能简单地使用softmax分类器来预测所有可能的mask patch候选。相反,语言词汇,如单词和BPE,定义明确,易于自编码预测。一个简单的替代方法是将任务视为回归问题,直接预测mask patch的原始像素。然而,这种像素级恢复任务往往会在预训练的局部相关性和高频细节上浪费建模能力 。本文的目标是克服上述问题,对视觉Transformer进行预训练。

在这项工作中,作者提出了一种自监督视觉表示模型BEIT。受BERT的启发,作者提出了一个预训练任务,即 masked image modeling(MIM) 。MIM对每个图像使用两个视图,即图像patch和视觉token。

作者将图像分割成一个网格的patches,这些patch是主干Transformer的输入表示。此外,作者将图像“tokenize”为离散视觉token,这是通过离散VAE的潜在代码获得的。在预训练期间,作者随机mask部分图像patch,并将损坏的输入到Transformer。该模型学习恢复原始图像的视觉token,而不是mask patch的原始像素。

 3. 方法

a6827b2b2ddebc33a95e46f359650e02.png

给定一个输入图片x,BEIT将其编码为上下文化的向量表示。如上图所示,BEIT通过掩蔽图像建模(MIM)任务以自监督学习方式进行预训练。MIM的目标是基于编码矢量恢复被mask的图像块。对于下游任务(如图像分类和语义分割),作者在预训练的BEIT上附加任务层,并微调特定数据集上的参数。

3.1 Image Representations

在本文的方法中,图像有两个表示视图,即图像patch视觉token 。这两种类型分别作为预训练的输入和输出表示。

3.1.1 Image Patch

2D图像被分割成一系列patch,以便标准Transformer可以直接接受图像数据。形式上,作者reshape图片为个patch,

其中C是通道数,(H,W)是输入图像分辨率,(P,P)是每个patch的分辨率。图像patch被展平成向量并线性投影,这类似于BERT中的单词嵌入。图像块保留原始像素,并在BEIT中用作输入特征。

在本文的实验中,作者将每幅224×224的图像分割成一个14×14的图像网格,其中每个图像网格的大小为16×16。

3.1.2 Visual Token

与自然语言类似,作者将图像表示为基于“image tokenizer”获得的离散token序列,而不是原始像素。具体来说,作者将图片标记化为,其中词汇包含离散的token索引。

作者通过离散变分自编码器(DVAE)学习image tokenizer。在视觉token学习过程中,有两个模块,即tokenizer解码器 。tokenizer据视觉码本(即词汇表)将图像像素x映射为离散的tokens z。解码器学习基于token z重建输入图像x。

重建目标可以写成。由于潜在的视觉token是离散的,模型训练是不可微的。因此,作者采用Gumbel-softmax用来训练模型。此外,在dVAE训练过程中,在上加入一个统一的先验。

作者将每个图像标记为14×14的视觉token grid。词汇表大小设置为。

3.2 Backbone Network: Image Transformer

参考ViT,作者使用标准Transformer作为骨干网络。因此,在网络结构方面,可以直接将结果与以前的工作进行比较。

Transformer的输入是一系列图像patch 。然后将这些patch线性投影以获得patch嵌入,其中。

此外,作者在输入序列中添加了一个特殊的token [S]。作者还添加了标准的可学习一维位置嵌入。输入向量到Transformer中。

编码器包含L层Transformer块: ,其中。最后一层的输出向量用作图像块的编码表示,其中是第i个图像patch的向量。

3.3 Pre-Training BEIT: Masked Image Modeling

作者提出了一个masked image modeling(MIM) 任务来预训练BEIT。作者随机mask一定比例的图像patch,然后预测与mask patch对应的视觉token。

给定一个输入图像x,作者将其拆分为N个图像patch(),并将其tokenize为视觉token()。作者随机mask大约40%的图像patch,其中mask位置表示为。

接下来,作者用一个可学习的嵌入替换mask patch。然后损坏的patch被送入到了L层的Transformer中。最终隐藏向量被视为输入patch的编码表示。

对于每个mask位置,作者使用softmax分类器来预测相应的visual tokens,其中是损坏的图像,,。

预训练目标是最大限度地提高损坏图像中正确视觉token的对数可能性:

其中,为训练语料库,表示随机mask的位置,表示根据 得到的损坏图像。

8cd803659e302cea58161e5cfd05c7fc.png

作者在本文中采用了blockwise mask ,而不是随机选择mask的patch。如上面的算法所示,每次都会mask一块图像patch。对于每个block,作者将最小patch数设置为16。然后,随机选择mask patch的纵横比。重复上述两个步骤,直到获得足够的mask patch,即0.4N,其中N是图像patch的总数,0.4是 masking ratio。

MIM任务受masked language modeling的启发,blockwise mask也广泛应用于类BERT模型中。然而,直接使用像素级自编码进行视觉预训练会促使模型关注局部相关性和高频细节。BEIT通过预测离散的视觉token克服了上述问题,它将细节总结为了高级抽象。

3.4 Fine-Tuning BEIT on Downstream Vision Tasks

在预训练BEIT之后,作者在Transformer上附加一个任务层,并微调下游任务上的参数。本文以图像分类和语义分割为例。通过BEIT,在其他视觉任务上利用预训练然后微调范式也是很简单的。

Image classification

对于图像分类任务,作者直接使用一个简单的线性分类器作为任务层。具体来说,作者使用平均池化来聚合表示,并将全局表示提供给softmax分类器。类别概率计算为

其中为第i个图像patch的最终编码向量,是一个参数矩阵,C是标签数。作者通过更新BEIT和softmax分类器的参数来最大化标记数据的可能性。

Semantic segmentation

对于语义分割,作者遵循SETR-PUP中使用的任务层。具体来说,使用预训练的BEIT作为主干编码器,并结合几个deconvolution层作为解码器来产生分割。该模型也进行了端到端的微调,类似于图像分类。

Intermediate fine-tuning

在自监督的预训练之后,可以在数据丰富的中间数据集上进一步训练BEIT,然后在目标下游任务上微调模型。这种中间微调是NLP中BERT微调的常见做法,因此可以直接遵循BEIT的方法。

 4.实验

4.1 Image Classification

224876bc46f3525c0445f39970fcf1f0.png

上表展示了不同方法在CIFAR-100和ImageNet-1K数据集上的Top-1准确率。可以看出,相比于其他自监督学习方法,本文的方法能够实现更高的性能。

Fine-tuning to 384×384 resolution

fc0d74dee550200a9d2389f7021e1c63.png

上表展示了ImageNet数据集上,用384×384的分辨率进行微调的实验结果,可以看出,本文的方法依旧能够达到更高的实验性能。

Convergence curves

6d1ff9c2e93823050b0c11a3362e3df2.png

上图展示了DeiT和BEiT的收敛曲线,可以看出,BEiT比DeiT收敛更快,性能更高。

4.2 Semantic Segmentation

cb8f9ef9e9bdca92ba33c1b63ada01a7.png

上表展示了本文方法在ADE20K数据集上进行语义分割任务的实验结果。

4.3 Ablation Studies

2cce6710410c2ea19354e0e6fa02f0aa.png

上表展示了本文提出的不同模块和训练策略,在ImageNet分类和ADE20K语义分割上进行消融实验的结果。

4.4 Analysis of Self-Attention Map

58c764f2ae7ca5c2175b292e9b6e41c4.png

上图展示了BEiT不同的query点进行Self-Attention的Attention Map可视化结果。

 5. 总结

在这项工作中,作者提出了一个用于视觉Transformer的自监督预训练框架,对下游任务(如图像分类和语义分割)微调之后,实现了非常好的实验性能。

作者表明,所提出的方法对于使类似于BERT的预训练(即 auto-encoding with masked input)能够很好地用于图像Transformer是至关重要的。

这篇文章跟Kaiming最新的那篇文章不同之处是,这篇文章把图片离散化成了一个一个的数字,所以可以和文本一样进行处理,另外,Kaiming的文章对patch进行了一定程度的移除,所以可以省计算量,而这篇文章却没有。

▊ 作者简介

研究领域:FightingCV公众号运营者,研究方向为多模态内容理解,专注于解决视觉模态和语言模态相结合的任务,促进Vision-Language模型的实地应用。

知乎/公众号:FightingCV

feb339cb62e6b9626b99f352b4a1d2cd.png

END

欢迎加入「自监督交流群👇备注:监督

850d166d69d712cc84ffc24ec970b89d.png

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值