MAE
一、大体内容
PDF: https://arxiv.org/abs/2111.06377
CODE: https://github.com/facebookresearch/mae (原文采用tensorflow 和 TPU 没有开源)
前面已经介绍了Transformer、BERT、ViT,这里理一下大概关系。首先Transformer将注意力机制引入到NLP领域,得到很大的提升,接着BERT借助Transformer的编码器并采用完型填空的方式对其进行自监督训练,而ViT通过将图片分块的方式将Transformer的结构引入到了CV领域,这一篇的MAE可以理解成在ViT和BERT的基础上对图片进行自编码训练。
1.1 出发点
Transformer和BERT等在NLP领域应用效果非常好,但在CV领域却没有展开应用。作者引入了一个问题:自编码器在NLP和CV存在哪些不同?以这个问题展开从三个方面给出了解释。
- 架构还是不同的。在视觉上卷积网络在过去十年中占据主导地位,卷积通常在规则网格上运行,将掩码或位置编码等“指标”集成到卷积网络中并不简单。然而,ViT的提出使得架构差距得到了解决。
- 信息密度不一样。语言是人类生成的信号具有高度的语义和信息密度。当训练一个模型来预测每句话中只有几个缺失的单词时,都会是一个复杂的语言理解任务。相反,图像信息具有更多的冗余性。我们可以从相邻的补丁中直接通过插值恢复出缺失的区域,而无需对物体和场景进行高级理解。为了克服这种差异并使得网络学习到有用的特征,我们随机去掉非常多的块,这种策略大大减少了冗余,并创建了一个具有挑战性的自我监督任务,需要从低层次去全面理解图像。
- 自编码器的解码器不同。CV借助其还原低层次的像素。在NLP中解码器预测包含丰富语义信息的缺失单词,虽然在BERT中,解编码器可以是MLP,但对于图像来说,解码器设计在确定学习到的潜在表示的语义方面起着关键作用。
因此本文提出MAE: 随机遮住大量的图像块,然后利用解码器重构出被遮挡的块的像素信息。
1.2 整体结构和流程
先随机对图像块进行遮挡,遮挡比例为75%,然后将可见的图像块经过映射得到特征编码,加上位置编码后输入到ViT(encoder部分),将输出特征再恢复至原先顺序,被遮挡的块加上位置编码后再输入到Decoder,恢复出遮挡区域信息。
二、贡献点
- 采用大量随机遮挡图像块的方式在CV领域进行自监督训练
- 遮挡大量块后可以节省训练时间,便于后续扩充
- Decoder是独立的,可以用训练好的Encoder输出作为下游任务的输入
三、细节
3.1 自编码器和编码器有啥区别
自编码强调标签和样本都来源于同一个样本。MAE中训练的标签就是原图像的部分区域块,和训练样本来源一样。
3.2 图像遮挡
和ViT一样,先把图片划分成没有重叠的patch,再采用随机的方式进行遮挡,遮挡少了的话可以通过插值恢复,容易学不到特征。
-
采样比例
通过实验对比分析,遮挡75%左右预训练效果较好
-
采样方式
还对比了不同的遮挡方式,发现随机遮挡效果也较好且比较容易实现。
3.3 MAE Encoder
Encoder结构采用的是ViT,将未被遮挡的块经过一个线性层后得到特征编码,再加上位置信息输入到ViT,注意被遮挡的块直接移除,不作为Encoder的输入。
训练好的Encoder可以直接作为下游任务,也有都采用的,比如这一篇文章将MAE和目标检测结合:https://arxiv.org/pdf/2205.09613
3.4 MAE Decoder
输入是可见Patch经过Encoder得到的特征 + 不可见patch的位置编码,并恢复至原有图像的顺序,Decoder只是在进行图片重构的预训练任务中用到,其和Encoder相对独立,其他下游任务可以直接采用训练好的Encoder。
重构的目标是和被遮挡区域进行对比,Decoder的每一个输出都表示一个patch的信息,最后一层对其进行线性映射得到和patch块像素个数一致的大小,然后reshape后和原有图像进行MSE。在实现上还对每个patch块进行了归一化处理。
-
预训练效果好
-
训练次数和精度
随着次数的增加精度还在提高
四、效果
-
和其他方法在ImageNet-1K上比较
-
和其他预训练方法比较
MAE在较小的数据集上就能取得很好的效果
-
微调效果
-
目标检测
-
语义分割
-
分类
-
重建
-
重建和真实图对比