MAE论文笔记

article/2025/11/10 21:37:54

MAE论文笔记

Masked Autoencoders Are Scalable Vision Learners

MAE模型和其他的结构的关系,可以认为是在ViT的基础上实现类似于BERT的通过完型填空获取图片的理解

image-20220408085308976

标题和作者

Masked Autoencoders Are Scalable Vision Learners

其中的Autoencoders 中的auto是“自”的意思,主要是指输入(x)和输出(y)是来自于同一个变量(相同),题目设置使用Autoencoders 使用为在CV领域这中类型的结构还很少,在NLP领域很广泛,因此作者在这里表明了。论文的名字很有意义,将结论浓缩成一句话

作者团队是何凯明大神团队

image-20220408090514770

Abstract

本文证明了masked autoencoders(MAE)是一种可扩展的计算机视觉 self-supervised 学习器。我们的MAE方法很简单:我们屏蔽输入图像的随机patches并重建缺失的pixels.。它基于两个核心设计。第一,我们开发了一个非对称encoder-decoder体系结构,其中一个编码器只在可见的patches子集上运行(没有掩码标记,即没有被遮挡的,减少计算量),另一个轻量级解码器从潜在表示和掩码标记重建原始图像。第二,我们发现掩蔽输入图像的高比例(例如75%)会产生一项a nontrivial and meaningful(不平凡且有意义)的自监督任务。将这两种设计结合起来,使我们能够高效地训练大型模型:我们加快训练速度(提高3倍或更多),并提高精度。我们的可扩展方法允许学习具有良好通用性的高容量模型:例如,在仅使用ImageNet-1K数据的方法中,vanilla ViT-Huge模型的精度最高(87.8%)。下游任务中的迁移性能优于有监督的预训练,并表现出良好的伸缩行为.(自监督效果很好,主要用来做迁移学习)

MAE 结构

图片输入切分成小patch,使用mask遮挡一些patch,将未遮挡的patch拉伸成向量做encoder,之后将遮挡的patch(只有位置信息的embedding)和未遮挡做完encoder 的patch按照之前的顺序放回,现在还是被拉伸的状态(向量)。encoder过程结束,将组合完成的向量输入decoder,解码器会尝试把遮挡部位里面的像素信息全部重构回来。(对ViT有了几倍的加速)

上面整个流程是做预训练的步骤,如果使用MAE做计算机任务,只需要编码器,不需要解码器,只需要需输入图像,不允许对图像切分。

image-20220408092326802

各类数据集测试效果

ImageNet

遮挡80%patch

image-20220408093112695

COCO

遮挡80%patch

image-20220408093318546

遮挡各类图像和不用比例遮挡效果

效果惊人

image-20220408093552796

Discussion and Conclusion(结论)

扩展性好简单算法是深度学习的核心(看似简单其实很难实现,指着对小部分人的简单)。在NLP中,简单的self-supervised学习方法(例如[47,14,48,4])可以从指数缩放模型中获益。在计算机视觉中,尽管在自我监督学习方面取得了进展,但实际的预培训模式仍主要受到监督(例如[33,51,25,16])。在这项研究中,我们在ImageNet和转移学习中观察到,自动编码器——一种简单的自我监督方法,类似于NLP中的技术——提供了可扩展的优势。CV中的自我监督学习现在可能正走上与NLP类似的轨道

另一方面,我们注意到,图像和语言是signals of a different nature,必须仔细处理这种差异。图像只是光照记录,没有语义分解成文字的视觉模拟。我们没有尝试删除对象,而是删除了最有可能不构成语义段的随机patches。同样,我们的MAE重建像素,而像素不是语义实体。然而,我们观察到(如图4),我们的MAE推断出复杂的整体重建,表明它已经学习了许多视觉概念,即语义。我们假设这种行为是通过MAE内部丰富的隐藏表征发生的。我们希望这一观点将启发未来的工作。(虽然图像的语义信息不像文本的语义信息那么明显,图像中冗余了更多的信息,但是这种情况下MAE还是可以很好的学习到隐藏信息。)

更广泛的影响:提出的方法基于训练数据集的学习统计数据预测内容,因此将反映这些数据中的偏见,包括具有负面社会影响的偏见。模型可能会生成不存在的内容。这些问题需要进一步的研究和考虑,在这项工作的基础上生成图像。

1、Introduction

深度学习见证了能力和容量不断增长的体系结构的爆炸式增长[33,25,57]。在硬件快速增长的帮助下,如今的模型很容易超过100万张图像[13],并开始需要数亿张通常无法公开获取的标签图像[16]。

自然语言处理(NLP)通过自我监督的预训练成功地解决了这种对数据的需求。这些解决方案基于GPT[47,48,4]中的自回归语言建模和BERT[14]中的屏蔽自动编码,在概念上很简单:它们删除部分数据,并学习预测删除的内容。这些方法现在可以训练包含超过1000亿个参数的可推广NLP模型[4]。

masked autoencoders是一种更通用的去噪自动编码器[58],它的想法很自然,也适用于计算机视觉。事实上,密切相关的研究在视觉[59,46]中,他领先于BERT。然而,尽管随着BERT的成功,人们对这个想法产生了极大的兴趣,但视觉中自动编码方法的进展却落后于NLP。我们问:是什么让masked autoencoders在视觉和语言之间有所不同?我们试图从以下角度回答这个问题:

1)直到最近,二者的架构还是不同的。在视觉上,卷积网络[34]在过去十年中占主导地位[33]。卷积通常在规则网格上运行,将‘indicators’(如mask tokens [14] or positional embeddings [57])集成到卷积网络中并不容易。然而,随着Vision Transformers(ViT)[16]的引入,这一architectural差距得到了解决,不应再构成障碍。 (无法添加掩码和位置信息的问题已经解决)

2)语言和视觉的信息密度是不同的。语言是人类产生的、语义和信息高度密集的信号。当训练一个模型来预测每个句子中只有几个漏掉的单词时,这项任务似乎可以诱导复杂的语言理解。相反,图像是具有高度空间冗余的自然信号,例如,可以从几乎没有高水平的相邻patches.中恢复缺失的斑块不理解部分、对象和场景。为了克服这种差异并鼓励学习有用的特性,我们展示了一种简单的策略在计算机视觉中很有效:masking a very high portion of random patches(屏蔽很大一部分随机patches.)。这种策略在很大程度上减少了冗余,并创建了一个具有挑战性的自我监督任务,这需要对低级别图像统计之外的整体理解。要从质量上了解我们的重建任务,请参见图2-4。 (图像冗余信息太多,语言中每个词都具有比较高的语义,为了解决图像信息冗余的情况,使用遮挡大面积patch构建自监督任务。让模型更关注全局信息,而不是学习局部的特征修复patch中的插值)

3)自动编码器的解码器将潜在表示映射回输入,在重建文本和图像之间起着不同的作用。在视觉中,解码器重建像素,因此其输出的语义级别低于普通识别任务。这与语言不同,在语言中,解码器预测包含丰富语义信息的缺失单词。虽然在BERT中,解码器可能是微不足道的(一个MLP)[14],但我们发现,对于图像解码器设计在确定学习到的潜在表示的语义水平方面起着关键作用

在这种分析的推动下,我们提出了一种简单、有效、可扩展的蒙面自动编码器(MAE),用于视觉表征学习。我们的MAE从输入图像中屏蔽随机patches,并在像素空间中重建缺失的patches。它有一个不对称的编码器设计。我们的编码器只在可见的patches子集上运行(没有掩码标记),我们的解码器是轻量级的,它通过潜在表示和掩码令牌重建输入(图1)。在我们的非对称编码器-解码器中,将掩码令牌转移到小型解码器会大大减少计算量。在这种设计下,非常高的掩蔽率(例如75%)可以实现双赢:它优化了精度,同时允许编码器只处理一小部分(例如25%)patches.。这可以将总体预训练时间减少3倍或更多,同样可以减少内存消耗,使我们能够轻松地将MAE扩展到大型模型。

我们的MAE学习非常高容量的模型,这些模型具有很好的通用性。通过MAE预训练,我们可以在ImageNet-1K上训练像ViT-Large/-Huge [16]这样的数据饥饿(小数据量)模型,从而提高泛化性能。使用vanilla ViT-Huge model,在ImageNet-1K上进行微调时,我们实现了87.8%的精度。这比之前所有只使用ImageNet-1K数据的结果都要好。我们还评估了转移学习在目标检测、实例分割和语义分割方面的应用。在这些任务中,我们的预训练比受监督的预训练获得了更好的结果,更重要的是,我们通过扩展模型观察到了显著的收益。这些观察结果与NLP自我监督预训练[14,47,48,4]中的观察结果一致,我们希望它们能让我们的领域探索类似的轨迹。

2、Related Work

Masked language modeling及其自回归模型,例如BERT[14]和GPT[47,48,4],是NLP中非常成功的预训练方法。这些方法保留了部分输入序列,并训练模型来预测缺失的内容。这些方法已经被证明具有很好的可扩展性[4],大量证据表明,这些经过预训练的表示法可以很好地推广到各种下游任务。

Autoencoding是学习表征的经典方法。它有一个将输入映射到潜在表示的编码器和一个重建输入的解码器。例如,PCA和k-means是自动编码器[29]。去噪自动编码器(DAE)[58]是一类破坏输入信号(添加噪音)并学习重建原始未破坏信号的自动编码器。可以将一系列方法视为不同损坏下的广义DAE,例如,掩蔽像素[59,46,6]或移除颜色通道[70]。我们的MAE是一种去噪自动编码,但在许多方面不同于经典的DAE。

Masked image encoding方法从被蒙版损坏的图像中学习表示。[59]的开创性工作将掩蔽作为DAE中的一种噪声类型。上下文编码器[46]使用卷积网络修复大型缺失区域。受NLP成功的推动,最近的相关方法[6,16,2]基于Transformers[57]。iGPT[6]对像素序列进行操作,并预测未知像素。ViT论文[16]研究了用于自监督学习的遮罩patch预测。最近,BEiT[2]提出预测discrete tokens[44,50]。

Self-supervised learning方法对计算机视觉产生了极大的兴趣,通常专注于不同的 pretext tasks进行预训练[15,61,42,70,45,17]。最近,对比学习[3,22]已经很流行,例如[62,43,23,7],它对两个或多个视图之间的图像相似性和差异性(或仅相似性[21,8])进行建模。对比和相关方法强烈依赖于数据扩充[7,21,8]。自动编码追求一个概念上不同的方向,它表现出我们将要展示的不同行为。

3. Approach

我们的掩蔽自动编码器(MAE)是一种简单的自动编码方法,根据原始信号的部分观察结果重建原始信号。 与所有自动编码器一样,我们的方法有一个编码器,将观察到的信号映射到潜表示,还有一个解码器,从潜在表示中重建原始信号。与经典的自动编码器不同,我们采用了一种非对称设计,允许编码器仅对部分观察到的信号(不带掩码标记)进行操作(为了节省生开销),并采用一个轻量级解码器,从潜在表示和掩码标记重建完整信号。图1说明了接下来介绍的想法。

Masking:在ViT[16]之后,我们将图像分割为规则的非重叠patches。然后我们对一部分patches进行采样,并屏蔽(即移除)剩余的patches。我们的采样策略很简单:我们在不替换的情况下随机采样,遵循均匀分布。我们简单地称之为“随机抽样”。

Random sampling with a high masking ratio(即移除的patches的比率)在很大程度上消除了冗余,因此产生了一个无法通过从可见的相邻patches中外推来轻松解决的任务(见图2-4)。均匀分布可防止潜在的中心偏移(即,图像中心附近有更多遮罩patches)。最后,高度稀疏的输入为设计高效编码器创造了机会,下面介绍。

MAE encoder我们的编码器是ViT[16],但仅适用于可见的、未屏蔽的patches。就像在标准ViT中一样,我们的编码器通过添加位置嵌入的线性投影嵌入patches,然后通过一系列变换块处理结果集。然而,我们的编码器只在完整集合的一小部分(例如25%)上运行。去除遮掩的patches;不使用Masked patches。这使我们能够用一小部分计算和内存来训练非常大的编码器。整个集合由轻量级解码器处理,如下所述。

MAE decoder :MAE解码器的输入是由(i)编码可见patches和(ii)掩码令牌组成的全套令牌。参见图1。每个掩码标记[14]都是一个共享的学习向量,表示存在要预测的错误patches。我们向这个完整集合中的所有标记添加位置嵌入;如果没有这一点,掩码令牌将没有关于其在图像中位置的信息。解码器还有一系列变换块。

MAE解码器仅在预训练期间用于执行图像重建任务(仅编码器用于生成用于识别的图像表示)。因此,解码器架构可以以独立于编码器设计的方式灵活设计。我们用非常小的解码器进行实验,比编码器更窄、更浅。例如,与编码器相比,我们的默认解码器每个令牌的计算量小于10%。在这种非对称设计中,全套令牌仅由轻量级解码器处理,这大大减少了训练前的时间。

Reconstruction target:我们的MAE通过预测每个mask patches的像素值来重建输入。解码器输出中的每个元素都是代表一个patches的像素值向量。解码器的最后一层是一个线性投影,其输出通道的数量等于一个patches中像素值的数量。解码器的输出被重塑,以形成重建图像。我们的损失函数计算像素空间中重建图像和原始图像之间的均方误差(MSE)。我们只计算mask patches的损失,类似于BERT[14]

我们还研究了一种变体,其重建目标是每个遮罩patches的归一化像素值。具体来说,我们计算一个patches中所有像素的平均值和标准偏差,并使用它们来规范化这个patches。在我们的实验中,使用归一化像素作为重建目标提高了表示质量。

Simple implementation:我们的MAE pre-training可以有效实施,而且重要的是,不需要任何专门的操作。首先,我们为每个输入面片生成一个标记(通过添加位置嵌入的线性投影)。接下来,我们随机洗牌令牌列表,并根据掩蔽率移除列表的最后一部分(只保留需要比例的前面部分,例如掩码率为75%,那么在shuffle之后就保留前25%做计算)。这个过程为编码器生成一小部分令牌,相当于在不替换的情况下采样补丁。编码后,我们将掩码标记列表附加到已编码补丁列表中,并取消填充该完整列表(反转随机洗牌操作),以将所有标记与其目标对齐。解码器应用于这个完整列表(添加了位置嵌入)。如前所述,不需要稀疏操作。由于shuffle和unshuffle操作的速度很快,这个简单的实现带来的开销可以忽略不计。

4. ImageNet Experiments

我们在ImageNet-1K(IN1K)[13]训练集上进行自我监督的预训练。然后我们进行监督训练,用(i)端到端微调(全部参数可调整)或(ii)线性探测(只修改最后的线形层)来评估表征。我们报告了单个224×224作物的top-1验证精度。详情见附录A.1。

Baseline: ViT-Large在我们的消融研究中,我们使用ViT-Large(ViT-L/16)[16]作为主干。ViT-L非常大(比ResNet-50[25]大一个数量级),并且容易过度拟合。以下是从零开始训练的ViT-L与从基线MAE微调的ViT-L之间的比较:

image-20220410095247435

我们注意到,从无到有地训练受监督的ViT-L是不寻常的,需要一个强正则性(82.5%,见附录a.2)。即便如此,我们的MAE预训练还是带来了很大的进步。这里的微调只适用于50个epochs(而从零开始则为200个),这意味着微调的准确性在很大程度上取决于预训练。

4.1、解码器深度(transformer块数)

Ft是指参数全部都调整,Lin是指只调整线形层

image-20220410101034847

4.2、解码器的宽度(每个token表示成多少维度的向量)

image-20220410101302125

4.3、解码器是否加入mask token

结果发现不加入mask token效果好,对应第一行

image-20220410101530285

4.4、Reconstruction target(重构的目标是什么?)

前两行是加不加mask token效果差不多,pca是使用了降维,dVAE token是通过ViT把每一个块映射到离散的token上,类似BERT的做法,可以让结构像BERT一样做预测。

image-20220410101657711

4.5、数据增强

四种情况:不做数据增强、裁剪且固定大小、裁剪随机大小、裁剪且颜色随机

结论:MAE对数据增强不敏感

image-20220410102146220

4.6、怎样mask?

可以看到随机裁剪的效果最好

image-20220410102426364

4.7、Masking ratio.

image-20220410103203743

4.8、Wall-clock time of our MAE training

image-20220410103357698

4.9、Training schedules.

image-20220410103442336

4.10、预训练模型之后微调多少层合适?

image-20220410103715358

5. Transfer Learning Experiments

5.1、目标检测效果

image-20220410103841599

5.2、图像分割效果

image-20220410103931491

5.3、Pixels vs. tokens

image-20220410104101251


http://chatgpt.dhexx.cn/article/uwjeRJAY.shtml

相关文章

MAE

背景 作者开门见山说明了深度学习结构拥有越来越大的学习容量和性能的发展趋势,在一百万的图像数据上都很容易过拟合,所以常常需要获取几百万的标签数据用于训练,而这些数据公众通常是难以获取的。MAE的灵感来源是DAE(denosing autoencoder)…

RMSE(均方根误差)、MSE(均方误差)、MAE(平均绝对误差)、SD(标准差)

RMSE(Root Mean Square Error)均方根误差 衡量观测值与真实值之间的偏差。 常用来作为机器学习模型预测结果衡量的标准。 MSE(Mean Square Error)均方误差 MSE是真实值与预测值的差值的平方然后求和平均。 通过平方的形式便于…

【深度学习】详解 MAE

目录 摘要 一、引言 二、相关工作 三、方法 四、ImageNet 实验 4.1 主要属性 4.2 与先前结果的对比 4.3 部分微调 五、迁移学习实验 六、讨论与结论 七、核心代码 Title:Masked Autoencoders Are Scalable Vision LearnersPaper:https://arx…

MAE模型介绍

目录 介绍 模型 ​编辑 实验过程 结论 介绍 Masked Autoencoders Are Scalable Vision Learners Facebook Al的kaiming大神等人于2021年十一月提出了一种带自编码器(MAE),它基于(ViT)架构。他们的方法在imageNet上的表现要好于从零开始训练的VIT。 灵感来源&…

深度学习:MAE 和 RMSE 详解

平均绝对误差MAE(mean absolute error) 和均方根误差 RMSE(root mean squared error)是衡量变量精度的两个最常用的指标,同时也是机器学习中评价模型的两把重要标尺。 那两者之间的差异在哪里?它对我们的生活有什么启示…

RMSE、MAE等误差指标整理

1 MAE Mean Absolute Error ,平均绝对误差是绝对误差的平均值 for x, y in data_iter:ymodel(x)d np.abs(y - y_pred)mae d.tolist()#maesigma(|pred(x)-y|)/m MAE np.array(mae).mean() MAE/RMSE需要结合真实值的量纲才能判断差异。 下图是指,假如g…

MAE详解

目录 一、介绍 二、网络结构 1. encoder 2. decoder 3. LOSS 三、实验 全文参考:论文阅读笔记:Masked Autoencoders Are Scalable Vision Learners_塔_Tass的博客-CSDN博客 masked autoencoders(MAE)是hekaiming大佬又一新作,其做法很…

crontab用法详解

crontab命令用于设置周期性被执行的命令,适用于日志备份,清理缓存,健康状态检测等场合。 crontab的配置文件:/etc/crontab

linux的crontab用法与实例

linux的crontab用法与实例 crontab的适用场景 在Linux系统的实际使用中,可能会经常让系统在某个特定时间执行某些任务的情况,比如定时采集服务器的状态信息、负载状况;定时执行某些任务/脚本来对远端进行数据采集或者备份等操作。 首先通过…

定时任务 crontab 命令安装和用法整理

Crontab 概念 crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令,类似于闹钟,可以定时执行任务。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中(是“cron table”的简写&#…

crontab用法与实例

crontab用法与实例 本文基于 ubuntu 18.04 在Linux系统的实际使用中,可能会经常碰到让系统在某个特定时间执行某些任务的情况,比如定时采集服务器的状态信息、负载状况;定时执行某些任务/脚本来对远端进行数据采集等。这里将介绍下crontab的配…

crontab的基本用法

1、 crontab -l 查看所有的定时任务 2、 crontab -e 编辑定时任务。 i 进入编辑模式 。esc退出编辑模式。:wq! 保存并退出。 报错信息: “/tmp/crontab.4qE940”:1: bad month errors in crontab file, can’t install. 说明定时任务编辑失败,文件中有错…

linux中crontab的用法

一:crontab 简介 crontab是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程…

1.4 - 操作系统 - Linux计划任务,CronTab用法详解

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「订阅专栏」:此文章已录入专栏《网络安全入门到精通》 CronTab计划任务 一、服务二、查看计划任务三、编辑计划任务四、删除计划任务五、配置文件Linux系统使用CronTab命令来操作计划任务。…

crontab 详细用法、定时任务 、时间规则

简介 Linux crontab和Windows task schedules非常的相似。Crontab可以用来在系统中定期的执行任务。比如:写了一个爬虫需要每天早上八点执行,就可以用到Crontab;安装的Tomcat服务器需要每天凌晨重启一次,也可以使用到Crontab。总之&#xff0…

crontab的使用方法介绍

使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命令。例如系统管理员安排一个备份任务使其每天都运行 安装:apt-get install cron (服务器环境下默认都会安装) 使用:crontab -e 进入编辑页面(第一次进入会让你选择编辑…

Crontab配置及使用总结

1、 crontab命令概念 crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。 cron 系统调度进程。 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不…

APP测试基本流程及测试基本点

1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间。正式测试前先向主管确认项目排期。 1.3测试资源 测试任务开始前,检查…

1 APP测试基本流程

1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间。正式测试前先向主管确认项目排期。 1.3测试资源…

APP测试基本流程及测试要点

APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间。正式测试前先向主管确认项目排期。 1.3测试资源 …