【论文精读】MAE:Masked Autoencoders Are Scalable Vision Learners 带掩码的自动编码器是可扩展的视觉学习器

本文主要是介绍【论文精读】MAE:Masked Autoencoders Are Scalable Vision Learners 带掩码的自动编码器是可扩展的视觉学习器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录

【论文精读】Transformer:Attention Is All You Need
【论文精读】BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding
【论文精读】VIT:vision transformer论文

文章目录

  • 系列文章目录
  • 一、前言
  • 二、文章概览
    • (一)研究背景
    • (二)MAE的主要思想:
    • (三)相关工作
  • 三、模型细节
    • (一)掩码
    • (二)MAE编码器
    • (三)MAE解码器
    • (四)重建目标
    • (五)简单实现
  • 四、ImageNet数据集上的实验
    • (一)MAE与ViT的比较
    • (二)消融实验
    • (三)MAE与之前工作的对比
    • (四)迁移学习的效果
  • 五、总结


一、前言

  • Transformer:
    • 使用纯注意力机制的编码器结构
    • 在机器翻译任务上比RNN架构更好
  • Bert:
    • 基于transformer编码器的架构,将transformer拓展到更一般的NLP任务上面
    • 使用了完形填空的自监督训练机制,不需要使用标号,而是通过预测一个句子中看不见的masked的词,从而获取对文本特征的抽取的能力,所以Bert可以在大规模的,没有标号的数据上,训练出很好的模型
    • (Bert预测的东西相对简单,所以其解码器就是最后那一个全连接输出层)
  • Vit:
    • 可以理解成transformer在图像方面的应用
    • 将图片分割成一个个小的patch,每个方块当作一个词,然后放进transformer中去训练,
    • vit证明在训练数据集足够大的时候,精度相对于cnn精度会更高
  • MAE:
    • 可以认为是Bert的cv版本,将整个训练拓展到没有标号的数据上面。通过完形填空获得对图片的理解。

二、文章概览

(一)研究背景

自监督预训练在nlp领域得到了很好的发展(基于GPT中的自回归语言建模和 BERT中的屏蔽自动编码),但视觉自动编码方法的进展却落后于 NLP。

视觉和语言之间的屏蔽自动编码的不同之处:

  • 在视觉领域,卷积网络在过去十年中占据主导地位,卷积通常在规则网格上运行,将掩码标记或位置嵌入等“指标”集成到卷积网络中并不简单
  • 语言和视觉之间的信息密度不同,语言具有高度语义和信息密度。当训练模型仅预测每个句子中的几个缺失单词时,此任务似乎会引发复杂的语言理解。而图像是具有大量空间冗余的自然信号,可以从邻近的patch中恢复丢失的patch,而几乎没有高级别的信息;

为了克服视觉与语言之间存在的这种差异并使得模型学习到有用的特征,文章采用的策略是屏蔽很大一部分的随机patch。这种策略不仅在很大程度上减少了冗余,并创造了一项具有挑战性的自我监督任务,需要超越低级图像统计的整体理解。
在这里插入图片描述

  • 语言和视觉的输出级别不同:在语言中,解码器预测包含丰富语义信息的缺失单词,而在视觉中,解码器重建图像像素,像素的语义级别要更低。因此,虽然在 BERT 中,解码器可能很简单(MLP),但对于图像,解码器设计在确定学习的潜在表示的语义级别方面起着关键作用。

(二)MAE的主要思想:

屏蔽输入图像的随机patch并重建丢失的像素(屏蔽的是块,预测的是块里的所有像素)

  • 非对称编码器-解码器架构:
    • 编码器作用于可见的patch
    • 轻量级解码器用于用于根据潜在表示和掩码标记重建原始图像

非对称:编码器和解码器看到的内容是不一致的

  • 屏蔽高比例的输入图像(例如 75%)会产生一项不平凡且有意义的自我监督任务
    • 意思就是说如果屏蔽的内容太少,任务过于简单,模型很难学到有意义的内容
    • 屏蔽的内容较多时,模型能够学到更多有意义的内容

在这里插入图片描述

(三)相关工作

  • 掩码语言建模
  • 自动编码
  • 掩码图像编码
  • 自监督学习

三、模型细节

掩码自动编码器(MAE)是一种简单的自动编码方法,可以在给定部分观察的情况下重建原始信号:

  • 与所有自动编码器一样,MAE方法由编码器和解码器组成。编码器将观察到的信号映射到潜在表示,解码器从潜在表示中重建原始信号。
  • 与经典自动编码器不同,MAE采用非对称设计,允许编码器仅对部分观察到的信号(没有掩码标记)进行操作,并采用轻量级解码器,从潜在表示和掩码标记中重建完整信号。

(一)掩码

将图像划分为规则的不重叠的块,然后随机采样patch的子集,屏蔽(即删除)剩余没有采样到的patch。

随机采样遵循均匀分布,不放回。均匀分布可以防止潜在的中心偏差(即图像中心附近有更多的掩模斑块)。

(二)MAE编码器

MAE的编码器就是ViT,没有做任何改动,但是它之作用在可见的、未屏蔽的补丁。

具体做法与ViT一致,通过添加位置嵌入的线性投影来嵌入patch,然后通过一系列 Transformer 块处理结果集。对于被mask掉的patch,不会输入MAE编码器。

(三)MAE解码器

  • MAE 解码器的输入是完整的标记集,包括编码的可见patch和掩码标记。这个完整集合中的所有标记都会加入位置嵌入,从而获取他们在图像中的位置信息。
  • 所有被mask掉的patch的编码是一个共享的、课学习的向量。
  • MAE 解码器仅在预训练期间用于执行图像重建任务。因此可以以独立于编码器设计的方式灵活地设计解码器架构。(进行其他任务时可以灵活的选择对应的解码器)

(四)重建目标

解码器的最后一层是线性投影,其输出通道的数量等于patch中像素值的数量。

如果一块patch里的像素是16x16,线性层就是256的维度。

损失函数:像素空间中重建图像和原始图像之间的均方误差(MSE)

仅在屏蔽patch上计算损失

(五)简单实现

  • 将图像划分成 patches:(B,C,H,W)->(B,N,PxPxC);
  • 对各个 patch 进行 embedding(实质是通过全连接层),生成 tokens,并加入位置信息(position embeddings):(B,N,PxPxC)->(B,N,dim);
  • 随机均匀采样。将序列随机打乱(shuffle),前25%作为unmask tokens 输入 Encoder,后面的丢掉
  • 编码后的 tokens 与 masked tokens( 可以学习的向量,加入位置信息)unshuffle,还原到原来的顺序,然后喂给 Decoder。

如果 Encoder 编码后的 token 的维度与 Decoder 要求的输入维度不一致,则需要先经过 linear projection 将维度映射到符合 Decoder 的要求

  • Decoder 解码后取出 masked tokens 对应的部分送入到全连接层,对 masked patches 的像素值进行预测,最后将预测结果(B,N’,PxPxC)与 masked patches 进行比较,计算 MSE loss。

四、ImageNet数据集上的实验

(一)MAE与ViT的比较

  • scratch,original:ViT-L/16模型在ImageNet-1k上从头训练,效果其实不是很稳定。(200epoch)
  • scratch,our impl.:ViT-L/16加上比较强的正则,从72.5提升到了82.5。
  • baseline MAE:先使用MAE做预训练,然后在ImageNet上做微调,这时候就不需要训练完整的200个epoches,只需要50个就可以了,从82.5提升到了84.9。
    在这里插入图片描述

(二)消融实验

第一列(ft)表示所有可以学习的权重都跟着调,第二列(lin)表示只调最后一个线性层

  • 解码器深度(需要用到多少个transformer块):ft方式虽然比较贵,但是效果会好很多。使用8块比较好,不过解码器深度关系并不是很大,都是84左右。如果只调最后一层的话,用深一点的会比较好。

  • 解码器宽度(每个token表示成一个多长的向量):512比较好。

  • 编码器中要不要加入被盖住的那些块:不加入被盖住的那些块,精度反而更高一些,而且计算量更少,所以本文采用的非对称的架构。

  • 重建目标对比:fine-tune的值是差不多的,所以在值差不多的情况下,当然是倾向于使用更简单的办法

    • 第一行:MAE现行做法
    • 第二行:预测时对每个patch内部做normalization,效果最好。
    • 第三行:PCA降维
    • 第四行:BEiT的做法,通过vit把每一块映射到一个离散的token上面再做预测。
  • 数据增强方法:one表示什么都不做,第二行表示只裁剪(固定大小),第三行表示按照随机的大小裁剪,最后一行表示再加上一些颜色的变化。从表中可以发现,做简单的随即大小的裁剪,效果就已经很不错了,所以作者说MAE对于数据的增强不那么敏感。

  • 采样策略。随机采样,按块采样,按网格采样。发现随机采样这种做法最简单,效果也最好 。
    在这里插入图片描述
    在这里插入图片描述

  • 掩码率:掩码率越大,不管是对fine-tune也好,还是对于只调最后一层来讲也好,效果都是比较好的。特别是只调最后一层的话,对掩码率相对来讲更加敏感一点
    在这里插入图片描述

  • 训练时间:使用vit-large而且解码器只使用一层transformer块的时候,精度也是不错的,时间是最小的,和第一行(使用所有的带掩码的块)相比,加速是3.7倍。如果是vit-huge的话,加速时间也是比较多的。
    在这里插入图片描述

  • 预训练的轮数:在ImageNet-1k上训练1000个数据轮的话,能够看到精度的提升,这也是一个非常不错的性质,说明在一直训练的情况下,过拟合也不是特别严重(1000轮其实是非常多的,一般在ImageNet上训练200轮就差不多了)
    在这里插入图片描述

(三)MAE与之前工作的对比

基本上MAE的效果是最好的:
在这里插入图片描述

MAE基本只需要微调最后4层就可以了。这表示底部层学到的东西稍微是比较低层次一点,在换另外一个任务的时候也不需要变化太多,但是上面的层还是和任务比较相关的,最好还是做一些调整。
在这里插入图片描述

(四)迁移学习的效果

COCO数据集上的目标检测结果:用MAE当作主干网络之后效果是最好的
在这里插入图片描述

COCO数据集上的语义分割结果:用MAE当作主干网络之后效果是最好的
在这里插入图片描述

五、总结

MAE的算法就是利用vit来做和BERT一样的自监督学习,其在vit基础之上提出了几点:

  • 盖住更多的块,使得剩下的那些块,块与块之间的冗余度没有那么高,这样整个任务就变得复杂一点
  • 使用一个transformer架构的解码器,直接还原原始的像素信息,使得整个流程更加简单一点
  • 加上vit工作之后的各种技术,使得它的训练更加鲁棒一点

以上三点加起来,使得MAE能够在ImageNet-1k数据集上使用自监督训练的效果超过了之前的工作。

参考:
MAE 论文逐段精读【论文精读】
李沐精读论文:MAE 《Masked Autoencoders Are Scalable Vision Learners》

这篇关于【论文精读】MAE:Masked Autoencoders Are Scalable Vision Learners 带掩码的自动编码器是可扩展的视觉学习器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/842854

相关文章

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件