Masked Feature Prediction for Self-Supervised Visual Pre-Training
0.背景
监督学习:利用大量的标注数据来训练模型,模型的预测和数据的真实标签产生损失后进行反向传播(计算梯度、更新参数),通过不断的学习,最终可以获得识别新样本的能力
- 自监督学习: 自监督学习主要是利用辅助任务(pretext)从大规模的=无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征。(也就是说自监督学习的监督信息不是人工标注的,而是算法在大规模无监督数据中自动构造监督信息,来进行监督学习或训练。因此,大多数时候,我们称之为无监督预训练方法或无监督学习方法,严格上讲,他应该叫自监督学习)
无监督学习:不依赖任何标签值,通过对数据内在特征的挖掘,找到样本间的关系,比如聚类相关的任务。
对于自监督学习来说,存在三个挑战:
- 对于大量的无标签数据,如何进行表征/表示学习?
- 从数据的本身出发,如何设计有效的辅助任务 pretext?
- 对于自监督学习到的表征,如何来评测它的有效性?
对于第三点,评测自监督学习的能力,主要是通过 Pretrain-Fintune 的模式。我们首先回顾下监督学习中的 Pretrain - Finetune流程:我们首先从大量的有标签数据上进行训练,得到预训练的模型,然后对于新的下游任务(Downstream task),我们将学习到的参数(比如输出层之前的层的参数)进行迁移,在新的有标签任务上进行「微调」,从而得到一个能适应新任务的网络。
自监督的 Pretrain - Finetune 流程:首先从大量的无标签数据中通过 pretext 来训练网络(自动在数据中构造监督信息),得到预训练的模型,然后对于新的下游任务,和监督学习一样,迁移学习到的参数后微调即可。所以自监督学习的能力主要由下游任务的性能来体现。
如下图2所示,我们之前在做 Supervised Learning的时候,如何让model输出我们想要的 [公式] 呢?你得要有label的资料。假设今天要做情感分析,让机器看一段文字,输出对应的情感是正面的还是负面的。那你要有一大堆文章和对应的label,才能够训练model。
那 Self-Supervised 就是在没有label的情况下自己想办法监督自己。还是同样的一堆资料 [公式] ,我们现在把它分成2部分: [公式] 和 [公式] 。然后把 [公式] 输入到模型里面,让它输出 [公式] ,然后我们让 [公式] 与 [公式] 越接近越好,这个就是 Self-Supervised Learning。换言之在 Self-Supervised Learning里面输入的一部分作为了监督信号,一部分仍作为输入。
图2:Supervised Learning 和 Self-Supervised Learning
1.自监督代表——BEiT
BEiT 是把 BERT 模型成功用在 image 领域的首创,也是一种自监督训练的形式,所以取名为视觉Transformer的BERT预训练模型。这个工作用一种巧妙的办法把 BERT 的训练思想成功用在了 image 任务中
BERT方法讲解
BERT模型,它的架构就是Transformer 的 Encoder,里面有很多Self-attention,MLP,Normalization等等。
图4:BERT的架构就是Transformer 的 Encoder
接下来要做的事情是把这段输入文字里面的一部分随机盖住。随机盖住有2种,一种是直接用一个Mask把要盖住的token (对中文来说就是一个字)给Mask掉,具体是换成一个特殊的字符。另一种做法是把这个token替换成一个随机的token。
图5:把这段输入文字里面的一部分随机盖住
接下来把这个盖住的token对应位置输出的向量做一个Linear Transformation,再做softmax输出一个分布,这个分布是每一个字的概率,如下图6所示。
那接下来要怎么训练BERT呢?因为这时候BERT并不知道被 Mask 住的字是 “湾” ,但是我们知道啊,所以损失就是让这个输出和被盖住的 “湾” 越接近越好,如下图7所示。
图6:把这个盖住的token对应位置输出的向量做一个Linear Transformation
图7:让这个输出和被Mask 住的 token 越接近越好
下面的问题是:BERT到底应该怎么用呢?
我们现在训练的BERT模型其实只会做2件事情:
- Masked token prediction:预测盖住的词是什么。
- Next sentence prediction:预测两个句子是不是前后接起来的。
那么接下来神奇的地方是:BERT可以被用在很多下游任务 (Downstream Tasks) 上,这些下游任务可能和Masked token prediction,Next sentence prediction毫无关联,但是BERT可以作为预训练模型被用在它们上面。
图11:BERT的训练过程
所以BERT其实不仅可以用在NLP上,还可以用在CV里面
但是BERT 可以直接用在视觉任务上吗?
-
困难的地方:
视觉任务没有一个大的词汇表。在 NLP 任务中,比如图3所示,假设我们盖住词汇 “湾”,那么就想让模型根据这个不完整的句子来预测被盖住的 token 是 “湾”,此时我们有个词汇表,比如这个词汇表一共有8个词,“湾” 是第3个,则 “湾” 这个 token 的真值就是
只需要让模型的输出和这个 [公式] 越接近越好。但是 CV 任务没有这个词汇表啊,假设我盖住一个 patch,让模型根据这个不完整的 image 来预测被盖住的 patch 是什么。那么对应的这个 [公式] 是什么呢?
假设这个问题可以得到解决,我们就能够用 masked image modeling 的办法 (和BERT类似,盖住图片的一部分之后预测这部分) 训练一个针对图片的预训练模型,这个预训练模型就也可以像 BERT 一样用在其他各种 CV 的下游任务中啦。
BEIT 通过一种巧妙的方式解决了这个问题。
BEiT方法讲解
在 BEIT 眼里,图片有 2 种表示的形式:
image → image patches | visual tokens
图9:图片有 2 种表示的形式:image patches or visual tokens
BEIT的结构可以看做2部分,分别是:
- BEIT Encoder
- dVAE
BEIT Encoder 类似于 Transformer Encoder,是对输入的 image patches 进行编码的过程,dVAE 类似于 VAE,也是对输入的 image patches 进行编码的过程,它们会在下面分别详细介绍。
https://zhuanlan.zhihu.com/p/381345343
2.MaskFeat 详解
MaskFeat预测流程
(1)首先将video切分为space-time cubes作为输入,cubes再被映射为tokens序列(each token represents a space-time cube);
(2)序列中的部分tokens被随机mask,替换为[MASK] token(learnable);
(3)再加上位置编码,送入transformer得到output tokens,其中masked cubes对应的ouput tokens再经过一个linear layer得到预测结果(output tokens corresponding to the masked cubes are projected to the prediction by a linear layer)
(4)label是masked cube时间维度上中间时刻的2-D patch对应的特征(The prediction is simply the feature of the 2-D spatial patch temporally centered in each masked cube),注意loss仅对masked cubes计算
目标特征
共设置了五种类型,可以分为两类,第一类是one-stage targets,可以直接获得,例如pixel colors和HOG;第二类是two-stage targets,特征提取自一个训练好的网络(类似于model distillation),因此需要额外的计算量
(1)pixel colors:最简单的target,直接复原真实RBG值,这里使用normalized RGB value(normalized by the mean and the standard deviation of the dataset),最小化 [公式] 距离。虽然简单,但缺点是容易对局部信息和高频细节过拟合,这些对于图像的语义理解可能是没有任何帮助的(Though simple, pixels as target have a potential downside of overfitting to local statistics (e.g. illumination and contrast variations) and high-frequency details, which are presumably insignificant for interpretation of visual content)
(2)HOG:首先计算整张图的HOG feature map,然后split提取masked patches对应的部分,以避免patch边缘padding操作,再将统计得到的直方图拉直成一维向量作为target feature,计算l2 loss
在HOG特征描述符(feature descriptor)中,梯度方向的分布(the distribution of gradient orientations),也就是梯度方向的直方图被视作特征。HOG首先计算每个pixel的梯度方向和梯度值(magnitude and orientations of gradients),然后在子区域/cell中计算梯度直方图,并在block中执行normalizaiton。有关HOG的原理,参考:一文讲解方向梯度直方图(hog)
(3)Discrete variational autoencoder (dVAE):预训练一个dVAE(参考DALL-E),将每个patch编码为一个token(8192维),采用交叉熵损失函数(参考BEiT)。dVAE的预训练和tokenization过程会带来额外计算量
(4)Deep features:通过dVAE得到的是discretized tokens(discretization),为了与之对比,直接使用continuous deep network features作为目标特征(discretization vs continuous unsupervised/supervised features),CNN or ViT(For CNN teachers, we use the last layers’ features corresponding to the masked patches and for ViT we use the respective output patch tokens),同时考虑监督学习和自监督学习,理论上监督学习特征(supervised features)语义更强。该方式同样引入了额外计算
(5)Pseudo-label:探究一个语义级别更高的预测目标(an more high-level semantic prediction target),使用Token Labeling(2021-NIPS-All Tokens Matter_ Token Labeling for Training Better Vision Transformers)提供的labels(generated by a pre-trained high-performance supervised deep network teacher),使用交叉熵损失函数进行优化
实验设置和结果
One-stage methods
简单的pixel colors的学习在image上结果都比BEiT和DeiT效果好(82.5 vs 81.0 vs 81.9),但是pixel colors并不是理想的targets(because they are considered to be too explicit)(和DALL-E结论相同)。很明显HOG效果出色
Two-stage methods
dVAE和from-scratch baseline相比在video和image上都提升了性能,但是不如HOG。可以看到unsupervised feature同样可以带来性能提升,缺点是额外计算(上千个epochs的训练)(the unsupervised features need to be computed on the target data)。supervised features带来的性能提升并不多,在fine-tune阶段出现了过拟合(In fact, we notice significant over-fitting during fine-tuning for supervised features and token labels, suggesting that predicting features learned from class labels is not suitable in MaskFeat.),原因作者推断是(We hypothesize that class label being invariant to local shapes and textures of the same object disables the ability of MaskFeat to model object’s internal structure
Experiments: Image Recognition
策略是预训练加微调(The evaluation protocol is pre-training followed by end-to-end fine-tuning),预训练使用IN-1K数据集(224x224),数据增强(minimal data augmentation: random resized cropping and horizontal flipping),mask比例40%(block-wise masking,参考BEiT)
MaskFeat预训练1600个epochs,微调300个epochs。ViT缺少CNN的归纳偏置,非常依赖于大规模监督预训练,依赖于海量标签数据,但是使用了MaskFeat之后,可以大大降低模型对海量标签数据的依赖。同时ViT-L比ViT-B的性能更好,证明了MaskFeat的可扩展性(more gains are observed on ViT-L compared with ViT-B, suggesting that it is scalable to larger models)
和其它自监督预训练方法(DINO、MoCo v3)对比,MaskFeat只需要单视角预训练(single-view pre-training),不依赖于数据增强,简单且效果好