0
点赞
收藏
分享

微信扫一扫

一文解读Masked Autoencoder(MAE)

Mezereon 2022-04-02 阅读 93

前言

  论文链接:https://arxiv.org/pdf/2111.06377.pdf
  跟李沐学AI:https://www.bilibili.com/video/BV1sq4y1q77t?spm_id_from=333.999.0.0
  如果说Vision Transformer是Transformer在CV领域的拓展,那么Masked Autoencoder就是BERT在CV领域的拓展。MAE使用类似于BERT的掩码机制,从图片中随机抹去一些像素,并让模型通过已知像素去构建未知像素,从而迫使模型学习图像中的特征。实验证明:MAE具有很好的像素重构能力。接下来,就开始论文的讲解吧!(注:对Vision Transformer感兴趣的小伙伴可以移步到上一篇博客:https://blog.csdn.net/abbcdc/article/details/123639566?spm=1001.2014.3001.5501)

Masked Autoencoder

Architecture

  由于模型的思想基于Vision Transformer,所以这里先回顾一下:Vision Transformer(ViT)打破了CNN在计算机视觉领域的统治地位,仅使用一个标准的Transformer Encoder,并在大规模数据集预训练的情况下,就能达到和CNN一样甚至更好的效果。具体来说:ViT模型将一张图像分割成一个个小块,每个小块作为一个单位(类似于NLP中句子的一个个单词)然后将这些小块按位置排列成一个序列,送入Transformer Encoder中获取图像信息。假设原始图像像素为224×224,块的大小为16×16,序列的长度就为2242/162=196,相比于将像素作为单位时的序列长度2242=50176减少了几百倍,而这时的序列长度就在Transformer的承载范围之内了。
  在ViT论文中的最后一段,作者说明他们尝试了使用自监督方式预训练模型,即样本和标签均来自同一物体,但效果不尽人意,因此他们认为仍然应该使用有监督+大规模数据集的预训练方式使模型效果更佳。而Masked Autoencoder提出了新的策略,证明了当使用自监督+不那么大规模的数据集对ViT模型进行预训练,可以达到较优的效果。MAE的思想如下:
在这里插入图片描述
将图像分割成一个个小块后,随机对其中的一些小块进行遮蔽,然后将没有遮蔽的像素块按顺序排列,送入Transformer Encoder中,获得特征向量;之后将遮蔽的像素块(只包含位置信息)按原来的位置插入特征向量中,再放入Decoder中,由Decoder重构像素信息,生成原始图片。注意到,图中的Encoder比Decoder大一些,是因为Encoder是一个标准的Transformer编码器,计算量比较大,而Decoder结构就比较简单了。当用于不同的下游任务时,Decoder可以替换成任意结构,而Encoder作为特征提取器需要保持不变。
  总结:Masked Autoencoder使用了掩码机制,利用编码器将像素信息映射为语义空间中的特征向量,而使用解码器重构原始空间中的像素。MAE使用的是非对称的Encoder-Decoder架构,即编码器只能看到未被遮蔽的部分像素块信息,以节省计算开销,而解码器解码的是所有像素块的特征信息。

Approach

  上面是对模型整体架构的介绍,接下来详细讲解各个部分。

  1. Masking
      MAE使用了ViT的方法,将图片分割成一个个小块,然后在这些小块中随机、均匀地选取一部分保留,剩下的全部遮蔽。作者强调了要遮蔽大量的像素块(约75%),从而减少像素块之间的冗余信息,使整个任务更具有挑战性,迫使模型去学习图像的全局特征而非局部特征,从而获得更优的图像重构能力。
  2. MAE Encoder
      Encoder即一个标准的ViT模型中的Transformer Encoder,架构如下:
    在这里插入图片描述
    不同的是,这里的输入不是全部像素块而只包含未被遮蔽的25%的像素块,节省了计算开销。
  3. MAE Decoder
      由于解码器需要重构那些被遮蔽的像素,因此输入包含两部分的信息:未被遮蔽的像素块通过编码器生成的特征向量和被遮蔽的像素块信息。被遮蔽的像素块信息全部通过一个相同的可被学习的特征向量表示。 在这里,Decoder实质上还是一个包含Transformer block的架构,因此输入向量包含了位置编码(同Encoder,Transformer无法学习位置信息,因此需要加入位置信息表明某个像素块在原始图像中的位置)。该解码器只在预训练阶段使用,在迁移到下游任务时,解码器可以根据用户的实际需求替换成任意架构。
  4. Reconstruction target
      解码器的最后一层是一个线性层。假设patch的大小是16×16,则线性层的输出维度就为256,然后再reshape为16×16,则得到了重构后的像素块。损失函数是MSE函数,即原始像素和重构后的像素相减再求平方和。只需要在被遮蔽的像素块上计算损失,因为未被遮蔽的像素块信息已经作为输入被编码器和解码器知晓。
  5. Simple implementation
      作者简单说明了整个实现流程。将输入序列进行Linear Projection并加上位置编码形成一个个token后,进行shuffle操作,然后选取前25%的token作为Encoder的输入,便完成了随机采样过程。将Encoder的输出和表示被遮蔽的像素块的向量拼接,进行unshuffle操作,即还原原始像素块的排列顺序,然后再加入位置编码,送入Decoder中,完成像素重构。

Experiments

  未完待续…

举报

相关推荐

0 条评论