论文:Masked Autoencoders Are Scalable Vision Learners
别再无聊地吹捧了,一起来动手实现 MAE(Masked Autoencoders Are Scalable Vision Learners) 玩玩吧! - 知乎
参考博文:MAE 论文逐段精读【论文精读】 - 哔哩哔哩
神洛华的博客
本文是2021.11.11发布在Arxiv上的文章,主要工作是在Vision Transformer基础上,引入自监督训练,跟BERT一样通过完形填空来获取对于图片的理解,相当于将BERT应用到CV领域,把整个训练拓展到没有标号的数据上面。最终MAE只需要Vision Transformer百分之一规模的数据集上预训练,就能达到同样的效果。而且在目标检测、实例分割、语义分割等任务上,效果都很好。
masked autoencoder are scalable vision learners:带掩码的自编码器是一个可拓展的视觉学习器
MAE的实现路径非常简单,随机地盖住图片中地一些块(patches),然后再去重构这些被盖住的像素(the missing pixels),这个思想来自于BERT中的带掩码的语言模型。
通过一下两个设计,MAE可以更高效地训练大的模型
1 非对称的encoder-decoder架构
实际上任何模型都有一个编码器和一个解码器,比如说在BERT中的解码器就是最后一个全连接输出层,因为BERT预测的东西相对来讲比较简单,所以它的解码器就是一个简单的全连接层就可以了,但是本文中可能相对复杂一点,因为需要预测一个块中所有的像素。
2、遮住了大量的块(比如说把75%的块全部遮住),迫使模型去学习一些更好的特征,从而得到一个较好的自监督训练效果。如果只是遮住几块的话,只需要进行插值就可以出来了,模型可能学不到特别的东西。编码器只需要编码1/4大小的图片,可以降低计算量,训练加速3倍或者以上
结果:最终作者只使用一个最简单的ViT-Huge模型(模型来自ViT这篇文章),在ImageNet-1K(100万张图片)上预训练,精度也能达到87.8%
在ViT这篇文章的最后一段有提到过怎样做自监督学习,作者说效果并不是很好,结论是:用有标号的模型和更大的训练集可以得到很好的效果。本文亮点是,只使用小的数据集(ImageNet-1k,100万张图片),而且是通过自监督,就能够做到跟之前可能效果一样好的模型了。
这个模型主要是用来做迁移学习,它证明了在迁移学习的其他任务上表现也非常好
这里的编码器画的稍微比解码器要宽一点,意思是说模型主要的计算来自于编码器,因为最重要的就是对图片的像素进行编码,这是在预训练的时候所干的事情。对于下游任务,就只需要编码器就够了,直接切成一个一个的小块,然后放进ViT,就能得到输入图片的特征表达,然后用来做所要处理的任务
下面是作者展示的一些模型重构效果图:
图2演示的是在ImageNet的验证集上通过MAE构造出来的图片,因为这些图片是没有参与训练的,所以只是测试结果
图3是在COCO数据集上,跟之前的处理完全一样,效果上来说也是非常惊人
图四演示的是对同一张图片遮盖不同比例的区域时的结果
简单且拓展很好的算法是整个深度学习的核心
自监督学习在最近几年是比较火的,但是在计算机视觉中,还是主要靠有标号的数据作为训练。这篇文章的工作通过在ImageNet数据集上通过自编码器学习到可以媲美有标号的时候的效果,所以是一个非常强有力的工作。
需要注意到的是图片和语言之间的一些区别,因为本文可以认为是BERT在计算机视觉上的拓展。对于语言来说,一个词是一个语义的单元,它里面所包含的语义信息比较多,在图片中虽然一个patch也含有一定的语义信息,但它不是语义的分割(也就是说这个patch中并不含有特定的物体),但是即使是在这样的情况下,MAE也能做很复杂的一些任务。作者认为MAE或者说是transformer确实能够学到隐藏的比较好的语义表达。
最后一段讲的是broder impacts
深度学习在过去一些年里有飞快的进展,但是对于计算机视觉来讲,还是依赖于需要百万级别的、甚至是更多的带有标注的图片。在自然语言处理中,自监督学习已经做的非常好了,比如BERT,可以使用没有标注的数据训练得到千亿级别的可学习参数的模型
在计算机视觉中,使用带掩码的自编码也不是那么新鲜,比如denoising autoencoder,在一个图片中加入很多噪音,然后通过去噪来学习对这个图片的理解。最近有很多工作将BERT拓展到计算机视觉上面,但是BERT在计算机视觉上的应用是落后于NLP的。
之前的CV领域都是用的CNN网络,而CNN中的卷积,是不好做掩码操作的,因为卷积核滑动时,无法识别遮盖的边界,不好将masked patches单独剔除,导致后面不好将图片还原(Transformer中,和其他词区分开来)。但是作者说,ViT成功将Transformer应用到计算机视觉领域,所以这个问题不再有了。
在自然语言中,一个词就是一个语义的实体,比如说字典中对一个词的解释就是很长的一段话,所以一句话中很难去去掉几个词(这样做完形填空才有意义)。
在图片中,像素是比较冗余的,取决于相机的分辨率有多大。如果只是简单去掉一些块的话,很有可能通过邻居的像素值进行插值还原出来。
作者的做法是,mask很高比例的像素块(比如75%),将图片中一大片都去掉, 剩下的块离得比较远,他们跟这个块的关系就不那么冗余了,大大降低图片的冗余性。这样的话就创造了一个非常有挑战性的任务,压迫模型必须学习全局信息,而不是仅仅学一个局部模型就可以进行插值还原。
关于此点论证,看上面图2.3.4就可以发现:仅仅一些局部的,很稀疏的块,就可以重构全局图片。
NLP中需要预测masked tokens,token本身就是一种比较高级一些的语义表示,而来自编码器的特征也是高度语义的,与需要解码的目标之间的 gap 较小,所以只需要一个简单的全连接层就可以解码这些tokens。ViT最后需要的是图片特征,所以也只需要MLP就可以解码
MAE中需要还原the missing pixels,这些像素是比较低层次的表示,所以一个MLP可能是不够的。在图片分类、目标检测等任务上,输出层,也就是解码器,就是一个全连接层就够了;要将自编码器的高级语义特征解码至低级语义层级,比如语义分割对每个像素做像素级别的输出,需要比较复杂的转置卷积网络才能完成解码。
正是基于以上分析,作者才提出本文的两个核心设计:高掩码率以及非对称编-解码器。
使用了MAE预训练之后,就可以只使用ImageNet-1K(100万数据)训练ViT large和ViThuge,达到在ViT中要使用100倍大小以上的训练数据才能做出来的效果,而且MAE预训练是不用标号的
而且在迁移学习上的效果也是很好的,MAE预训练出来的模型在物体检测、实例分割、语义分割上效果都非常好。也就是说在大量的没有标号的数据上通过自监督学习训练出来的模型。在迁移学习上效果也是非常不错的
5 相关工作
带掩码的语言模型
自编码器在视觉中的应用
带掩码的编码器在计算机视觉中的应用
自监督学习
比如最近一两年特别火的contrast learning,它在这一块主要使用的是数据增强,而MAE所用的和它不一样
MAE跟所有的编码器一样,将观察到的信号映射到一个latnet representation(潜表示)中,这个潜表示可以认为是语义空间上的表示,然后再通过解码器将这个潜表示用来重构出原始的信号。与经典的自动编码器不同,我们采用了一种非对称设计,自编码器看到了部分数据,然后用它来重构完整的原始信号,模型设计图如下:
下图表格中比较的是三种情况
掩码率越大,不管是对fine-tune也好,还是对于只调最后一层来讲也好,效果都是比较好的。特别是只调最后一层的话,对掩码率相对来讲更加敏感一点
表中使用vit-large而且解码器只使用一层transformer块的时候,精度也是不错的,时间是最小的,和第一行(使用所有的带掩码的块)相比,加速是3.7倍。如果是vit-huge的话,加速时间也是比较多的
绝对时间:这里使用的是128个TPU v3的core,而且使用的是tensorflow实现,训练的时间是10个小时
图中可以看到,在ImageNet-1k上训练1000个数据轮的话,能够看到精度的提升,这也是一个非常不错的性质,说明在一直训练的情况下,过拟合也不是特别严重(1000轮其实是非常多的,一般在ImageNet上训练200轮就差不多了)
基本上MAE的效果是最好的
预训练模型做微调的效果是比只做特征提取的效果更好的,但是训练时间会更长。所以作者试验了一下,微调不同的层数,模型的效果如何。
上图中,x轴表示的是有多少个transformer块要被调(这些层参数可以训练,剩下层被冻结),y轴表示的是精度。
可以看到,MAE基本只需要微调最后4层就可以了。这表示底部层学到的东西稍微是比较低层次一点,在换另外一个任务的时候也不需要变化太多,但是上面的层还是和任务比较相关的,最好还是做一些调整
下图中的表四和表五做的是COCO数据集上的目标检测和分割
从表四中可以发现用MAE当作主干网络之后效果是最好的
MAE的算法还是非常简单的,就是利用vit来做和BERT一样的自监督学习,本文在vit基础之上提出了两点
以上三点加起来,使得MAE能够在ImageNet-1k数据集上使用自监督训练的效果超过了之前的工作