论文精读系列——Masked Autoencoders Are Scalable Vision Learners

文章的出发点

请添加图片描述
基于注意力机制的Transformer网络在NLP领域掀起了一股风暴,而在视觉领域,ViT也成功讲Transformer引进了过来。紧跟着Transformer,Bert设计了带mask的训练任务,可以使得Transformer在大量的无标注的任务中做预训练,锻炼出模型提取特征的能力,进而迁移到下游任务。在此基础上,能否设计一个类似的任务,使得CV领域也可以在大量的无标注的数据上做预训练呢?本文解决的就是这样一个任务。

具体实现

标题图像和自然语言之间的差异

毫无疑问,如果能够完全的借鉴Bert的工作,那将会是最为简单便捷的。但是图像和自然语言之间的很大的差异性导致想要讲Bert的工作完全迁移到CV领域上面变得很不可取。下面简单讲述一下图像和自然语言之间的差异:

<1>两者之间的信息密度不同,自然语言的信息密度很大,每一个词都显得很关键,比如说“狗咬人”和“人咬狗”看似只是简单的交换了两个词的位置,但是语义上已经发生了翻天覆地的变化。如果你把“狗”字给mask掉变成“人咬_",那么预测这个词将会变得非常困难。但是图像处理则不然,图像之间有很多冗余的信息,去掉一小块可以从它的临近像素中推断出这一小块的内容。

<2>传统的基于卷积的神经网络不是很好做mask处理,也不方便嵌入位置信息(不是很理解这里的嵌入位置信息),好在ViT已经引进注意力机制,解决了这方面的问题。(这里我有一个想法,目前类似于Bert和MAE,他们设计出实验来实现无标记的预训练任务,但是这些实验在CNN网络中确实不好做,但是真的就没有办法在CNN网络的基础上面来设计一个无标签的预训练的实验吗?如果CNN也能够做到这种大规模的无标签的预训练,CNN由于更加适合图片,它的效果也许会更好

<3>在解码器方面,由于NLP领域输出的是自然语言,自然语言往往富含的是高层次的抽象的语义,而CV方面,由于我们要重构的是像素级别的图片,因此Bert中可以运用一个MLP做解码器但是CV领域不行。

Bert调整到CV的具体做法

将图片中的小部分patch丢进encoder中

基于上面提到的种种NLP和CV的差异,作者在ViT的基础上,提出了MAE。MAE借鉴了Bert的mask的思想,但是为了克服上面提到的第一点的不同,也就是图像和自然语言的信息密度不同,作者选择了随机mask掉图像中的大部分patch(比如说75%),只留了一小部分用于图像重构。作者给出的解释是,这可以使得网络不能从局部的像素中学习(类似于插值),而迫使其从图像的全局来学习信息。

从网络框架中就可以看出来,文中只是把那些没有被mask的patch丢进encoder中做了编码,最后将编码得到的特诊和mask趋于的位置信息丢进由transformer构成的解码器中做解码宠从而还原出图像,这样做可以大大降低训练的计算复杂度,因为图片的大部分patch都是被mask掉的。大约可以降低3倍左右。

从模型中可以看出,Encoder画的比Decoder要大,这表明模型的计算复杂度大部分来自于Encoder,Decoder只是一个轻量级的解码器,用于预训练时帮助Encoder训练,当把模型迁移到下游任务时,只需要Encoder和下游任务解释器做微调即可,不需要Decoder了。

实验中的部分结果如下:
实验结果
看起来很魔幻,有的仅凭几个像素patch就很大程度上还原出了图像。但是我发现它还原的细节都不是很好,就像作者所说的,它很大程度上把握了图像的整体。但是我想它细节上面处理的不好,很有可能是因为有的细节被完全mask掉了,没有提供一点多余的信息,所以没有办法还原了,这一定程度上是由于它random mask掉了图像的大部分区域,那么有没有什么更好的mask的方法能够经可能的保留图片的细节并且减少图像patch信息之间的冗余性呢?可不可以设计一个轻量级的网络来做到这样的mask效果?如果真的可以做出一个这样的mask效果,会对模型提取特诊的能力有提升吗?如果做出这样的mask之后能够做到用少量的patch就还原出图像,那么可以基于此做出一个图像压缩的技术吗?

实验结果

通过使用MAE中提到的方法,我们仅在ImageNet-1K的图像数据集上就可以把像ViT-Huge这样大的模型训练到87.8%的精度。同时MAE在分类,分割等多尺度的任务上面表现都超过了现有的SOTA模型。

此外,还有很重要的一点就是随着模型的不断增大,模型的表现还在越来越好也就是说还远没有饱和。

作者认为MAE可以看作是加噪声的自动编码器的一种(自动编码器比如说PAC和K-means)

本文的实验部分的loss函数类似于Bert,都是基于mask部分算的均方误差损失(MSE),解码器最后输出的是一个长为H*W的向量,只要最后reshape成图片就可以了。

文中提到,MAE的实现方法很简单,只需要将图片划分为一个一个的patch,随后将这些patch做一个shuffle操作(随机打乱,取前k个patch作为非masked区域。将这些趋于丢到Encoder中做训练,这里的训练过程和ViT是一摸一样的。做完训练后将得到的特诊和mask趋于的位置编码做一个unshuffle操作结合,丢到Decoder中做还原,得到Loss返回Encoder做调整。

在这里插入图片描述
上图是以ViT-Large为baseline的对比,其中第一个是最普通的ViT-Large,第二个是加了正则化的,第三个是baseline MAE,可以看出有很大的提升。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

论文主要有以下三点贡献:
<1>在ViT的基础上提出了random mask任务
<2>采用高比例的mask(75或以上)并且只对非mask区域做Encoding,这样第一个可以迫使模型学习高层次的图片语义信息,第二可以大大加快训练的速度(3倍左右)
<3>提出了非对称的Encoder-Decoder网络框架,帮助进行无监督的预训练任务。

思考

<1>目前类似于Bert和MAE,他们设计出实验来实现无标记的预训练任务,但是这些实验在CNN网络中确实不好做,但是真的就没有办法在CNN网络的基础上面来设计一个无标签的预训练的实验吗?如果CNN也能够做到这种大规模的无标签的预训练,CNN由于更加适合图片,它的效果也许会更好

<2>Decoder还原得到的图片的细节上面处理的不好,很有可能是因为有的细节被完全mask掉了,没有提供一点多余的信息,所以没有办法还原了,这一定程度上是由于它random mask掉了图像的大部分区域,那么有没有什么更好的mask的方法能够经可能的保留图片的细节并且减少图像patch信息之间的冗余性呢?可不可以设计一个轻量级的网络来做到这样的mask效果?如果真的可以做出一个这样的mask效果,会对模型提取特诊的能力有提升吗?如果做出这样的mask之后能够做到用少量的patch就还原出图像,那么可以基于此做出一个图像压缩的技术吗

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值