【论文精读】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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学