文章目录
BEIT: BERT Pre-Training of Image Transformers
基本信息
- 论文链接:arxiv
- 发表时间:2021
- 应用场景:VIT预训练、图像分类
摘要
存在什么问题 | 解决了什么问题 |
---|---|
1. 之前基于VIT的预训练方法大都是基于像素级别的复原任务,比如预测某个patch内像素的平均值,这可能会浪费模型容量。 | 1. 提出了自监督视觉表达模型BEIT,创新性的通过masked image modeling(MIM)方式对VIT模型进行预训练,即让模型直接预测离散的视觉token数值。BEIT在下游任务图像分类上精度超越了MoCoV3,语义分割任务上精度可比。 |
模型结构
Image Patch
和VIT完全一致。
具体流程为:打patch->flatten->fc维度映射。其中patch_size=16x16
Visual Token
目的是要为每个image patch预测一个离散的值,进而可以通过CE Loss进行端到端训练。
这就需要一个image tokenizer,作者这里直接用预训练好的DALL-E作为image tokenizer,省去了自己训练一个dVAE模型的前置工作量。
Backbone Network: Image Transformer
和VIT几乎一致。
组好的patch加上一个特殊token——[S](其实就是将VIT中的 < c l s > <cls> <cls>换成了 < s > <s> <s>),再和一个可学习的1d position embedding相加后送进transoformer encoder,取网络最后一层的输出 H L H^L HL作为每个patch的特征表示。
Pre-tTraining BEIT: Masked Image Modeling
BEIT的预训练任务。
随机mask掉40%的image patch,mask方法采取Blockwise Masking策略,具体算法如下,比较简单,不再赘述。
对于被mask掉的patch,将其替换成token < M > <M> <M>即可(M是一个可学习向量,替换过程发生在加position embedding vector之前)。
对于输出层,接一个输出维度为8192的全连接层对被mask掉的patch进行端到端训练即可。
实验
预训练阶段,模型配置和VIT完全一致,预训练数据集采用ImageNet-1K,数据增强采用flip、color jitter,预训练方法采用MIM,所以用不到图片原有的label,最后FC层输出维度为8192。
finetune阶段
- 对于图像分类,对网络最后一层的输出做AvgPool,然后通过FC层预测相应的类别数目,再通过CELoss做端到端训练。
- 对于语义分割,将网络SETR-PUP的backbone换成预训练好的Beit即可。
ImageNet-1k以及CIFAR-100上的精度超越了之前的预训练方法:
在ImageNet-1k上,同参数量下精度超越DeiT和VIT:
语义分割任务,ADE20K数据集上达到47.7的miou:
总结
- 基于VIT提出了一个新的预训练任务MIM,不需要任何图片类别信息的情况下,通过预测离散化的image token类别进行预训练(前提是要有一个训练好的dVAE模型),并由此衍生出BEIT模型(VIT)。该模型在下游图像分类以及语义分割任务上取得了comparable results。
- 直接预测image token的离散数值,屏蔽掉了图像中的相关细节,尽可能的构建一个泛化能力更强的backbone。
- 没发现 < S > <S> <S> token到底有啥附加功能,fine tune阶段用的是avg策略,并没有用到 < s > <s> <s> token……