【论文阅读】Masked Autoencoders Are Scalable Vision Learners

发布时间 2023-06-10 10:56:43作者: 睡晚不猿序程

?前言

  • ?博客主页:?睡晚不猿序程?
  • ⌚首发时间:2023.6.10
  • ⏰最近更新时间:2023.6.10
  • ?本文由 睡晚不猿序程 原创
  • ?作者是蒻蒟本蒟,如果文章里有任何错误或者表述不清,请 tt 我,万分感谢!orz


1. 内容简介

论文标题:Masked Autoencoders Are Scalable Vision Learners

发布于:CVPR 2022

自己认为的关键词:MAE

是否开源:无官方实现


2. 论文速览

论文动机

  1. 在 NLP 领域非常火的 掩膜学习 在 CV 领域的应用远远落后于 NLP
  2. 回答现存的问题——NLP 和 CV 领域的 masked autoencoding 方法有什么不同吗?

本文工作

  1. 分析了 CV 领域的掩膜学习和 NLP 领域的掩膜学习的异同之处
  2. 提出了 MAE(masked autoencoder),一种应用于 CV 领域的自监督学习方法(基于掩膜学习)

完成效果

  1. 提高模型的泛化效果,一个 ViT-Huge 模型使用了这种方法可以达到 87.8% 的准确率,仅仅使用 ImageNet-1K 数据集(原本的话要在超大数据集上进行预训练)

  2. 迁移到下游任务的时候,超越了有监督的预训练方式(MAE)


3. 图片、表格浏览

图一

image-20220923085443531

清楚展示了模型架构

模型分为编码器解码器,编码器作用域图像的未遮盖部分,接着输出这些图像块的隐藏表示

接着使用一个轻量化的解码器,其输入为可见图像块的隐藏表示+被遮挡的图像块,遮盖解码器要通过这些输入来重建原始图像。

经过了上述步骤完成预训练,解码器就被抛弃了,然后把编码器直接用于完整的未被遮挡的图片并进行识别任务

图二

image-20220923090722539

展示了 MAE 在 ImageNet 验证集上的结果,可以看到左边是被遮挡的图片,中间是 MAE 重建的图片,右边的原始图片,重建的效果非常的好

但是图片的质量可以看出下降了,作者指出,对于图片的可见块是不计算损失的,虽然如果把可见块的处理计入损失,图像质量会增加,但是我们希望更直观的观察模型的行为,不这么做

图三

image-20220923090944822

上面展示了在 COCO 验证集上的结果,并且使用的模型是在 ImageNet 上训练的(和图二的权重一致)

图四

image-20220925141351236

使用 ImageNet 验证集进行重建,使用的 MAE 预训练模型是使用了 75% 的遮盖率训练的,但是测试时候的输入这概率更高。结果预测的图片和原本的大有不同,展示了这个方法可以用在生成模型

很有意思,模型似乎学会了一点比较奇怪的特征,比如说模型可以生成斑马了(但是原本图像只有一只斑马

图五

image-20220925142109426

上图表示了 75% 的遮盖率在微调以及 linear probing 的表现都是最好的

Linear Probing 线性探测

一种自监督模型的评估算法,完成模型的训练后,将最后一层替换为线性层,而模型的前面几层不变,只通过监督数据去训练模型的最后一层得到的结果

表一

image-20220925143929879

各类表格的汇总:

a:一个更深层的 decoder 的重建效果更好

b:decoder 可以比 encoder 要小

c:没有 mask tokens 的 encoder 速度更快且正确率更高

应该就是在预训练的时候移除了 mask token,只输入了可见的 token,这样可以提高准确性

因为模型在预训练的时候输入的大部分是 mask token,但是在实际微调的时候,输入的是完整的图片——这就是预训练和实际部署之间的差距

找到了一个非常不错的材料:https://zhuanlan.zhihu.com/p/438494704

d:重建目标:将像素作为重建目标是有效的

e:数据增强:基本不做增强,或者是做少量增强

f:mask sampling:使用随机采样的效果最好

表二

image-20220925154607621

展示了训练的速度,对比的是有 mask token 的模型

图六

image-20220925154932888

使用不同的遮盖策略对模型产生的影响

图七

image-20220925155049195

训练情况,可以看到训练得越久,其效果越好

表三

image-20220925155214838

对比了在 ImageNet-1K 上先前的结果,可以看出这里 MAE 的表现非常好

图八

image-20220925155412567

使用不同的预训练方式进行对比,可以看到使用 MAE 的训练方式可以在小规模数据集作为预训练的情况下达到非常好的效果

图九

image-20220925155537602

部分微调,0 代表着只微调 Linear Probing 部分,24 代表着微调整个网络

可以看出作者提出的 MAE 不是线性可分的,但是仍然比 MoCo v3 的效果要好

线性可分指的是;可以用一个线性函数把两类样本分开

这里的线性不可分是不是因为,只微调最后一个 linear probing 效果不是很好

表四

image-20220925160037262

COCO 物体检测和分割的结果,使用 ViT Mask R-CNN 作为基准。

表五

image-20220925160150893

ADE20K 语义分割结果

表六

image-20220925160230483

迁移学习到图片分类任务上

表7

image-20220925160329552

使用像素或者是token作为重建目标,其中三角形代表二者带来的差异,可以看出差异并不显著


4. 引言浏览

现在的数据量非常大,可以提供给自监督学习——例如 GPT 或者 BERT。

在 CV 领域,autoencoding 方法远远落后于 NLP,所以是什么让 masked autoencoding 在 CV 以及 NLP 之间产生不同呢?

回答如下:

  1. 结构差异:CNN 对于整数的 ‘指示器’ (integrate indicators)不直接,该结构缺陷已被 ViT 打破

  2. 信息密度:语言是人类创造的,具有较高的信息密度。图片是自然信号,具有大量的冗余。所以根据图片的一个部分来重建其周围部分是可行的。
    为了克服这一不同,作者使用了类似的方法,将图片的大部分信息遮盖起来——这样减少了冗余,并且要求模型去理解图片的整体信息,而不是局部信息

  3. autoencoder 的 decoder 在 NLP 和 CV 中扮演的角色不同。在 CV 中,decoder 重建的是像素,而 NLP 中其重建的是被遮盖的词,其包含有丰富的语义信息。所以 BERT 的decoder不是那么重要,反倒是对于图像,decoder 对于其高维表示的语义信息等级起到了决定性的作用

    确实,重建的如果是单个像素,其包含的信息是非常少的。一个 decoder 的性能可以决定 encoder 提取信息的质量。如果 decoder 可以很好的把信息重建回去,它也可以更有效的指导 encoder 去提取信息

根据上面三个分析,设计了 MAE:随机遮盖图像块,并在像素级别上重建遮盖的图像块,其具有不对成的 encoder-decoder 模块。

encoder 仅对图像的可见部分进行操作(也就是遮盖部分不会被输入)

decoder 是轻量化的,对完整的图像大小进行处理,也即是输入是被mask的图像以及没有被mask的图像的隐表示

因为 encoder 的输入仅仅是图像的可见块(只占了 25%)所以预训练的速度非常快,消耗的内存也更少

文中指出,原本如 ViT-Large/-Huge 这样的模型需要用到大量的数据来进行预训练,但是经过了 MAE 的处理,仅需要在 ImageNet-1K 上进行预训练就可以达到相似的准确度

文中提出的方法取得了非常好的效果,还有一个神奇的点,将模型放大后仍然取得了很好的效果


自由阅读

5. 相关工作(原文第二章)

Autoencoding :一种经典方法,用于学习表征

这种方法有一个 encoder,将输入映射到一个高维表示,并有一个 decoder 用来重建输入。

这里提到了 Denoising autoencoders(DAE):这也是一种 autoencoder,他会扰动输入信号,然后学习去重建原始图像。这里作者使用的 MAE 也算是一种 denoising autoencoding,但是和传统的 DAE 有许多不同

self-supervised learning:这里提到了对比学习,他说对比学习对数据增强较为依赖。但是 autoencoding 则不同。

对比学习确实更依赖于数据增强,因为必须要有数据增强,才可以完成 对比 操作

6. 方法(原文第三章)

和以往的 autoencoder 不同,这里使用了不对称的设计,并且输入仅仅为可见部分,masked 掉的部分就不输入了;并且使用了一个轻量化的 decoder 来重建原图,其依赖于 隐表示以及被 masked 掉的输出。

Masking

和 ViT 一样,把图片划分为不相交的 patch。接着随机采样一部分的 patch,然后 mask(实际上就是直接去除掉了),并保留剩余部分。

实际上的策略非常简单:随机采样一部分图片,然后不是用负数呀什么的去替代,而是直接给删掉了,但是保持其服从一个正态分布

这里应该是采样是均匀的吧,所以符合一个正态分布

因为使用了一个极高的 masking 比率,所以这个任务仅仅通过可见块来进行向外推测远远不够

并且采样符合一个正态分布,所以杜绝了中心偏差

最后,一个稀疏的输入将会有希望能造就一个高效的编码器

MAE encoder

使用了一个 ViT 作为 encoder,但是只对可以见的块起作用

用 Tr 的方法进行词嵌入和加性位置嵌入,然后通过 Tr 块

MAE decoder

信息会被组合起来完整的输入到 decoder 中,其内容包含:

  1. 被编码的可见块
  2. mask tokens

可见块是用于推断其他图像部分的,所以作者加入了位置嵌入,否则模型无法知道位置信息

decoder 是另外一系列 Tr 块构成的

并且,decoder 是独立于 MAE encoder 的,decoder 仅仅在预训练的时候才使用,并且用于重构图片的信息。所以 decoder 的构建是非常灵活的,因为他 独立于 encoder。论文中实验使用的 decoder 非常的小,每一个 token 的计算量也仅仅是 encoder 的10%。

重建目标

预测 mask patch 的像素值——也就是 decoder 的没有给输出都是一个像素值的向量,其代表了一个 patch

decoder 的最后一层是线性投影层,输出的通道数等于每一个patch的像素数目,最后直接使用 reshape 还原为原本的 patch

最后的监督为 MSE,用原始图像和重建图像的像素差异进行计算,并且尽在 masked patch 上计算损失

变种:重建目标为masked patch 的归一化的像素值。具体来说,作者计算了 patch 中全部像素的平均值和标准差,并使用他们来归一化 patch。在实验中,这种做法可以增强图像重构的质量

简单实施

上面写的有点小复杂,但是实施起来很简单。首先,用一张图片生成 token 序列(进行线性投影和位置嵌入)接着随机打乱 token 序列,然后基于 masked ratio 移除掉一部分。

然后经过 decoder 得到的输入和原本的 token 序列进行拼接,然后进行上面打乱的反向操作

上面得到的输出将会送入 decoder,而且送入 decoder 时会进行位置嵌入

7. 实验

使用 ImageNet 进行实验,在 ImageNet-1K 上进行自监督的预训练。使用 BiT-Large 作为消融实验的 backbone。

7.1 主要性质

这里讲了一下 MAE 方法具有的一些特性

1. Masking ratio

Masking ratio 非常高,达到了 75%,而相较于 BERT 其 mask 比率仅为 15%

模型会自己推断那些缺失的部分,然后会产生一个不同的,但是合理的结果

image-20220925141351236

作者说,他使物体与场景的格式塔有意义,而不是简单的扩展图像的边缘部分

格式塔:一种心理学理论,gestalt 的音译,指的是完形, 即具有不同部分分离特性的有机整体。具有两种含义:一指事物的一般属性,即形式;一指事物的个别实体,即分离的整体,形式仅为其属性之一。

image-20220925142109426

可以看到,在 fine-tuning 阶段,masking ratio 的影响并不是那么的大。而在 linear probing 阶段,随着 masking ratio 的增大,其缓慢增加到最优点。并且最优点和最低点的差距较大

2. Decoder design

decoder 的设计是灵活的,表1a 可以展示 decoder 的深度影响

image-20220926095242542

可以看出,如果要进行 linear probing,一个足够深的 decoder 还是有必要的

很有意思的地方是,如果 decoder 仅有一个块,在 tine-tuning 仍然可以表现的很好

表1b 展示了 decoder 的宽度影响(也就是通道数),默认使用 512 通道,但是更窄的话也能表现的很好

总之,decoder 是轻量化且高效的,计算的开销也小,非常灵活

mask token

image-20220926101215578

可以看出,在使用 linear probing 的情况下,如果使用了 mask token 一起输入,那么准确率会降低很多。

这是因为原本被 mask 掉的块也作为输入输进了 encoder 中,但实际上在后面的微调情况下并不会有这些东西,所以这就是预训练和之后微调的差距,这种差距容易造成性能的损失

并且这种做法可以做到更少的时间,内存开销,从而可以训练更大的模型

Reconstruciton target

image-20220926101701648

可以看出,基于像素并且使用标准化可以增加性能

在一个变种中,作者在一个 patch 中使用 PCA,并且用最大的 PCA 系数(96)作为目标。经过了这种操作反而降低了准确率

PCA:主成分分析

进行数据的降维,其中的系数应该意思是取前 96 个最大特征值对应的向量

参考:https://zhuanlan.zhihu.com/p/500326717

使用了另一个变种,直接去预测 token。这是 BEiT 的方法。使用了 DALLE 的预训练 dVAE 作为 tokenizer

tokenizer:分词器

NLP 中用于把句子切分为单词,并且把每个单词转换为唯一的编码

在这里,MAE decoder 直接预测 token 的 index,并使用交叉熵损失作为监督

这里是不是就转化成了类似 NLP 的做法了

这种做法在 ft 上增加了 0.4% 的正确率(对比 unnormalized pixels),但是对比 normalized pixels 没有优势,并减少了 linear probing 的正确率

并且这种做法有较大的计算开销,综合考虑,确实没啥必要哦

Data augmentation

这里应该就是分析数据增强了。这里指出,仅仅使用裁切(具有水平反转),无论是随机大小裁切或者是固定大小裁切,表现都非常的好。如果使用颜色扰动反倒会降低准确率

并且 MAE 不使用任何数据增强 也可以表现的非常好(仅仅使用中心裁切),这个和对比学习有很大的差异。如 BYOL 或者是 SimCLR 如果只使用裁切会性能会大幅下降

这里指出,MAE 的数据增强主要是靠 random masking 来实现的(后面会做消融实验)

mask sampling strategy

image-20220926103937828

这里展示了三种方法:random,block 和 grid

block 在 50% 的表现最好,75% 的时候表现变差,并且也更难训练,重建的图像也更模糊

grid 训练较为简单,并且重建图像更为锐利,但是视觉效果较差

random 的表现是最好的

训练

消融实验基于 800 个 epoch 的预训练

image-20220926104300012

可以看到,正确率持续上升,即使在 1600 个 epoch 处,也没有出现饱和的现象

8. 总结与讨论

总结了本篇论文:讨论了在 CV 领域使用子监督学习的可能性,并且有希望将 NLP 领域的子监督方法用于 CV 领域中

指出:图像信号和语言信号二者是不同的,需要小心的处理来解决他们二者的不同。

相比于移除对象,MAE 移除了图像的随机块,这些随机块很可能不构成语义实体。并且 MAE 重建的是像素,这些肯定不是语义实体。尽管如此,MAE 仍然推断出了复杂的整体重构——这表明了他已经学习了许多视觉概念,即语义。作者假设这种行为是通过 MAE 内部的一个丰富的隐藏表示来发生的

broader impacts

这里说,模型是依照训练集进行训练的,其数据会包含偏差。比如现实世界可能会有训练数据的负例。这样的话模型有可能用来生成现实中不存在的东西。

所以说,未来基于这个工作,可能用于图像生成

9. 总结、预告

9.1 总结

这篇论文提出了一个非常有潜力的自监督学习方法,MAE,仅仅基于 ViT 就可以做到在小规模数据集上进行训练,我认为让我们这种小实验室训练大 Tr 也成为了可能,未来可以研究一下

并且,他提到了可以用于图像生成,而且如果是作用在我的研究领域,比如说是图像隐写,我认为好像是一个不错的方法,虽然暂时不知道要怎么用,未来可以看一下这方面与图像生成之间的结合