论文地址:https://arxiv.org/pdf/2111.06377.pdf
代码:https://github.com/lucidrains/vit-pytorch#masked-autoencoder
一句话简介:随机mask掉高比例image patch,输入一个非对称的autoencoder,encoder是ViT,decoder是Transformer,效果好。
1. 介绍
现在的深度学习模型已经发展到了需要数亿标记过的图像训练的程度。这种对于数据的需求已经在NLP中通过自监督预训练解决了,思想就是去掉对一部分数据,然后学习预测被去掉的内容,这种方法现在可以训练包含超过一千亿个参数的通用 NLP 模型。
CV中也有类似的思想,但是却没有像NLP取得很大的进展,那么是什么让autoencoder在CV和NLP上有所不同?
- 结构不同。直到ViT出现之前,卷积一直在CV占主导地位,将 mask token 或者 positional embedding 加入卷积并不容易
- 信息密度不同。语言是人类生成的具有高度语义和信息密集度的信号。当训练一个模型来预测每个句子的几个遗漏单词时,这个任务似乎会引起复杂的语言理解。相反,图像是具有严重空间冗余的自然信号,可以从相邻的 patch 中重新覆盖丢失的 patch。因此,作者选择了随机 mask 掉非常高比例的 image patch,减少了冗余,并创建了一个需要对图像整体有所了解的自监督任务。
- 解码器作用不同。在视觉中,解码器重构像素,因此其输出的语义水平低于普通的识别任务。 在语言中,解码器预测的是包含丰富语义信息的缺失单词。作者发现,对于图像来说,解码器的设计在决定学习到的潜在表征的语义水平方面起着关键作用。
综上,作者提出了一个简单、有效、可扩展的视觉表征学习的 masked autoencoder(MAE)。 MAE从输入图像中掩盖了随机部分,并在像素空间中重建了丢失的部分。 它有一个不对称的编码器-解码器设计。 MAE 的编码器只对可见的 patches进行操作(没有 mask token),而解码器是轻量级的,并从hidden representation 以及 mask token 中重建输入。
MAE的结构
将 mask token 放在较小的解码器部分可以减少计算,在这种设计下,一个非常高的掩码率(75%)也可以得到很好的准确性,让编码器只需要处理很小一部分的数据,因而可以减小预训练的时间和内存消耗,从而扩展到大的模型。
MAE可以学习到非常高容量的模型,并能很好地泛化。 通过MAE的预训练,可以在 ImageNet-1K 上训练像 ViT-Large/-Huge 这样对数据要求很高的模型,并提高泛化性能。 通过 vanilla ViT-Huge模型,在ImageNet-1K 上进行微调时,达到了87.8%的准确性。这超过了以前所有只使用ImageNet-1K 数据的结果。
在目标检测、实例分割和语义分割的转移学习任务中,MAE的预训练取得了比其监督预训练更好的结果,更重要的是,作者观察到通过扩展模型获得了显著的收益。这些观察结果与那些在 NLP 的自我监督预训练中的观察结果是一致的。
以75%的mask ratio预训练,但是输入有更高的 mask ratio2. 相关工作
自编码器(autoencoder)是学习表示的经典方法。它有一个将输入映射到潜在表示的编码器和一个重构输入的解码器。PCA 和 k-means 是都可以看作是自编码器。 Denoising autoencoders (DAE) 破坏输入信号并学习重建原始的、未破坏的信号,比如去掉像素或去除颜色通道。作者的 MAE 也可以看作是一种DAE,但在许多方面与经典 DAE 不同。
3. 方法
MAE 的作用是从一部分信号重建出原始信号,编码器将观察到的信号转为潜在表征,解码器从潜在表征以及 mask token 中将原始信号重建出来。采用不对称的结构。
Masking
将图像分成不重叠的 patches,随机均匀采样得到一个子集,mask ratio 指的是没有被采样到,被扔掉的部分。
具有高mask ratio的随机采样在很大程度上消除了冗余,从而创造了一个不能轻易通过从可见的相邻 patch 中推断出的任务。 均匀分布防止了潜在的中心偏向(即在图像中心附近有更多的遮蔽斑块)。 最后,高度稀疏的输入为设计一个高效的编码器创造了机会。
MAE 编码器
一个 ViT,只用在被采样出来的 patches 上,编码器通过带有附加位置嵌入的线性投影做 patch embedding ,然后通过一系列 Transformer 块处理结果。没有用到 mask token。
MAE 解码器
解码器的输入包括编码器编码过的 patch 和 mask token。每个 mask token 是一个共享的、学习过的向量,表示存在一个需要预测的缺失了的 patch。
作者在这个完整的集合中为所有的标记添加位置嵌入;如果没有这个,mask token就没有关于它们在图像中的位置的信息。 解码器有另一系列的 Transformer 模块。
MAE解码器只在预训练期间用于执行图像重建任务(只有编码器用于产生用于识别的图像表示)。因此,解码器结构可以以独立于编码器设计的方式灵活设计。 例如,设计一个非常轻量级的解码器,会大大减少了预训练时间。
重建目标
MAE通过预测每个被 masked(扔掉的,没有被采样的)patch 的像素值来重构输入。解码器输出中的每一个元素都是代表一个 patch 的像素值的向量。 解码器的最后一层是一个线性投影。
损失函数计算重建图像和原始图像之间在像素空间的均方误差(MSE)。只在被mask 的 patch 上计算损失,与BERT类似。
作者还研究了一个变体,其重建目标是每个被遮蔽 patch 的归一化像素值。 具体来说,计算一个patch中所有像素的平均值和标准差,并使用它们来做归一化。 在实验中,使用归一化的像素作为重建目标,可以提高表示的质量。
简单实现
首先通过线性偷听加上位置嵌入对每一个 patch 生成 token,然后随机打乱顺序并按比例去掉后面的一部分。
编码后,mask token 列表里加上 encoded patches,还原到打乱顺序之前的顺序,使位置对齐,这个完整的列表加上位置嵌入,一起进入解码器。
4. 实验
经过实验作者使用了8个 transformer blocks,512的宽度,作为默认的MAE decoder。与其他的自监督预训练,有监督预训练的方法对比,MAE的效果最好。用迁移学习在其他任务,例如目标检测和分割上,也取得了很好的效果提升。
5. 讨论
自监督学习在视觉中可能会有像在NLP中一样的发展。
MAE重建像素,而不是语义实体,尽管如此MAE还是能推断出整体的重建,说明它的确学到了视觉概念。
强行补头操作
抛开MAE本身到底有没有用,这篇文章中实验思路其实非常值得学习,比如实验效果不好的时候要如何去思考。
网友评论