[MAE]Masked Autoencoders掩膜自编码器

2023-11-02

 

目录

非对称的编码-解码架构:

方法

 流程

编码器

解码器

Partial Fine-tuning

图像MAE

MixMIM

Uniform Masking

HiViT

视频MAE

VideoMAE

多模态MAE

M3AE


https://github.com/facebookresearch/mae

分别是提供了可视化demo,微调代码,预训练代码

  •  Visualization demo

  •  Pre-trained checkpoints + fine-tuning code

  •  Pre-training code

随机遮盖输入图片的子块,重建丢失像素

由MAE预训练的模型具有很好的泛化性能

非对称的编码-解码架构:

编码器的输入为没有被mask的子块;

解码器为轻量级

(解码器仅在图像重建的预训练中起作用,因此解码器设计可独立于编码器,且灵活和轻量级),

输入为编码器的输入和被mask部分的位置信息,

输出为待重建的丢失像素的值。

方法

与经典自编码器不同之处在于:

采用了非对称设计,

使编码器仅依赖于 部分观测信息  (无需掩码token信息,BERT需要),

轻量解码器则直接与 所得隐式表达掩码token  进行原始信号重建

 流程

  1. 对图片切分 patch, 随机挑选少部分(比如文中25%)作为网络输入;
  2. 输入通过 encoder 得到对应编码后的 encoded patches
  3. 将 encoded patches 还原到对应的原始位置,并在缺失的部分补上 masked patches
  4. 送入 decoder, 每个 decoder 预测对应 patch 的图像像素点;
  5. 计算预测的像素和原始图片的像素之间 MSE 作为 loss。(损失函数则采用了MSE,注:类似于BERT仅在掩码块计算损失。)
  6. 取训练完的模型的 encoder 部分作为下游任务的 basemodel 并在下游任务下 finetune。

编码器

采用ViT架构,但仅作用于可见的未被Mask的块。

先通过 Linear Projection 编码图片,

再加上位置编码

随后送入一堆连续的 Transformer Block 里面。

编码器的输出将通过reshape构建重建图像

Reconstruction target  该MAE通过预测每个掩码块的像素值进行原始信息重建 。

由于该编解码仅在较小子集块(比如25%)进行处理,且未用到掩码Token信息。

这就使得可以训练一个非常大的编码器 。

解码器

输入包含:整个图片 patches 集合

(1) 编码器的输出;

(2) 掩码token。

每个 mask tokens 都是一个共享的、学习的向量,它指示了这里有一个待预测的 tokens

位置嵌入添加到这个完整 image patch 集合中的所有 tokens

解码器同样包含一系列Transformer模块。

解码器的最后一层为线性投影层(Linear Projection),其输出通道数等于每个块的像素数量

MAE解码器 仅在  预训练阶段  用于  图像重建,编码器  则用来生成用于  识别  的图像表达 。

解码器的设计可独立于编码设计,具有高度的灵活性

其重建目标为每个掩码块的规范化像素值 。

计算每个块的均值与标准差,对该块进行归一化,采用归一化的像素作为重建目标提升表达能力。

Simple implementation  MAE预训练极为高效:

1.通过  线性投影Linear Projection  与 位置编码  对每个输入块生成token

2.随机置换(random shuffle)token序列  并根据  掩码比例masking ratio移除 最后一部分token;

3.完成编码后,把 unmasked patches 输出到 Encoder 中,得到这些 tokens 的表征.

在编码块中插入掩码token并反置换(unshuffle)得到全序列token以便于与target进行对齐;

4.把 Encoder 的输出,结合 masked tokens (可学习的向量),执行 unshuffle操作恢复顺序,再一起输入到 Decoder 中。将解码器作用于上述全序列token。

正如上所述:MAE无需稀疏操作。此外,shuffle与unshuffle操作非常快,引入的计算量可以忽略。

分类有ImageNet数据,检测有COCO数据,分割有ADE数据

Partial Fine-tuning

提出了一种 Partial Fine-tuning 的新套路,它不同于之前人们常用的 Linear Probing (只训练最后一层线性分类器的参数) 和 Fine-tuning (训练所有层的参数)

Partial Fine-tuning 是指 只训练最后模型的若干层的参数

图像MAE

MixMIM

论文标题:

MixMIM: Mixed and Masked Image Modeling for Efficient Visual Representation Learning

论文地址:

https://arxiv.org/abs/2205.13137

论文动机:

现有 MIM 方法通常使用特殊符号 [MASK] 替换部分输入 token,并旨在恢复原始图像块。

然而,使用 [MASK] 符号会导致两个问题。

一方面,预训练中使用的 [MASK] 符号从未出现在微调阶段,导致预训练微调不一致。

另一方面,预训练网络在处理非信息性 [MASK] 符号时浪费了大量计算,使得预训练效率低下。

当使用较大的掩蔽比时,这些问题变得更加严重。

虽然 MAE 不存在上述问题,因为它丢弃了 mask token,并且只在轻量级解码器中使用了 [MASK] 符号。

此外,目前 MAE 只适用于标准的 ViT 架构,如何使用 MAE 有效地预训练具有局部域操作的层次 ViT 架构,例如 Swin Transformer,仍然是一个问题。

方法介绍:

为了解决上面的问题,作者提出了 MixMIM,该结构吸收了 BEiT 和 MAE 的优点。

如上图所示,给定训练集中的两幅随机图像,

MixMIM 创建了一幅以随机混合 mask 为输入的混合图像,

并训练一个层次 ViT 来重建两幅原始图像以学习视觉表示。

由于作者在 encoder 中没有采用 mask token,

因此大大缩短了预训练和微调之间的 gap,也消除了处理 mask token 所需要的时间,提高了计算效率。

编码器在进行 attention 计算时,作者用了 attention mask,阻断了跨图片 token 之间的交互。

在解码阶段,作者通过 attention mask 分别去除图像的 token,并进行图像重建。

Uniform Masking

论文标题:

Uniform Masking: Enabling MAE Pre-training for Pyramid-based Vision Transformers with Locality

论文地址:

https://arxiv.org/abs/2205.10063

代码地址:

https://github.com/implus/UM-MAE

论文动机:

MAE 中最有影响力的设计之一是非对称编码器-解码器体系结构。

与接收整个 patch token 序列的解码器部分不同,编码器部分仅将可见图像 patch(通常仅占总 patch 的 25%)作为输入。

有趣的是,这种设计不仅显著降低了预训练的复杂性,而且还获得了优异的微调性能。

然而,非对称结构的成功应用依赖于 Vanilla Vision Transformer(ViT)的“全局”特性,其自注意机制可以对离散图像块的任意子集进行推理。

虽然目前金字塔结构的 ViT 通过引入局部窗口操作,取得了非常好的结果,但 MAE 并不能在金字塔结构的 ViT 上进行应用。

因为每个局部窗口中可见元素的数量通常不相等,这妨碍了基于窗口的操作的有效并行计算。

为了成功地对具有局部性的基于金字塔的 VIT 进行 MAE 预训练(即采用有效的不对称结构),

作者提出了包含均匀采样(US)和二次掩蔽(SM)步骤的 Uniform Masking(UM)策略。

方法介绍:

本文的 Uniform Masking(UM)策略如上图所示,

主要分为两个步骤:

第一步为均匀采样(US),使用均匀约束对 25% 的可见图像 patch 进行采样,这样,每个窗口将会留下 25% 的 token。

与 MAE 中采用的随机采样相比,均匀采样(US)对均匀分布在 2D 空间上的图像块进行采样,使其与具有代表性的基于金字塔的 VIT 兼容。

然而,通过相邻的低级别图像统计信息为像素重建提供更简单的方式,US 潜在地降低自监督任务的挑战性。这已经在 MAE 中得到证明。

为了解决这一问题,作者进一步提出了二次掩蔽(SM)策略,

该策略为在第一步均匀采样后的特征图上进行随机 mask。

与完全丢弃 mask token 的均匀采样阶段不同,SM 通过使用共享 mask token 来保持 mask patch,以确保基于金字塔的 VIT 与位置的兼容性。

通过随机 mask token,大大提高了自监督任务的难度,从而提供了更好的自监督效果。

HiViT

论文标题:

HiViT: Hierarchical Vision Transformer Meets Masked Image Modeling

论文地址:

https://arxiv.org/abs/2205.14949

论文动机:

最近,掩蔽图像建模(MIM)为视觉 Transformer 的自监督预训练提供了一种新的方法。

高效实现的一个关键思想是在整个目标网络(编码器)中丢弃掩蔽图像 patch(或 token),这要求编码器是普通视觉 Transformer(例如 ViT)。

但是分层视觉 Transformer(例如 Swin Transformer)在形成视觉输入方面具有潜在更好的特性。在本文中,作者将分层视觉 Transformer 的操作分成了三种类型:“单元内操作”、“全局单元间操作”和“局部单元间操作”。

标准 Transformer 包含其中的两种操作:

单元内操作”(即 patch embedding、LayerNorm、MLP)和“全局单元内操作”(即全局自注意力)。

因此可以丢弃单元的空间坐标,并且可以将单元序列化以进行高效计算。

但是层次视觉 Transformer 还包括局部单元间操作(如,shifting-window self-attentions, patch merging),这需要基于单元的空间坐标进行额外判断,并妨碍序列化以及移除 mask 单元。

方法介绍:

作者观察到,“局部单元间操作”对识别性能的贡献不大——真正有意义的是层次设计(即多尺度特征图)。

因此,为了使分层视觉 Transformer 能够适合 MAE 的训练,作者删除了“局部单元间操作”,从而形成了一个简单的分层视觉 Transformer。

在层次视觉 Transformer 中,通常有四个不同分辨率的阶段,其中第三阶段的层数最多,称之为主阶段。

作者移除了 Swin Transformer 的最后一个阶段,并去掉了所有局部单元间窗口注意力,只在主阶段保留 token 之间的全局注意力。

在实现中,作者将最后一个阶段合并到主阶段,以保持模型的 FLOPs 不变。早期阶段的局部窗口注意力被具有相同 FLOPs 的 MLP 所取代。

通过这些修改,作者删除了层次视觉 Transformer 中所有冗余的“局部单元间操作”。本文提出的 HiViT 结构如上图所示。由于去除了局部窗口的操作,HiViT 就能够进行 MAE 的预训练。

视频MAE

VideoMAE

论文标题:

VideoMAE: Masked Autoencoders are Data-Efficient Learners for Self-Supervised Video Pre-Training

论文地址:

https://arxiv.org/abs/2203.12602

代码地址:

https://github.com/MCG-NJU/VideoMAE

论文动机:

本文大致策略和图片 MAE 类似,但是通过将 MAE 运用在视频数据上得到了几个重要的发现:

1)极高的掩蔽率(即 90%-95%)仍然可以产生良好的 VideoMAE 性能。

2) VideoMAE 在非常小的数据集上取得了非常好的结果,而无需使用任何额外数据。

3) 在 VideoMAE 中,数据质量比数据量更重要。

方法介绍:

Pipeline 如上图所示。相比于图片 MAE,视频 MAE 在时间维度上可能存在更高的冗余,由于视频的语义在时间维度上变化缓慢,相邻帧的内容通常非常相似,因此如果不采用特殊的 mask 策略,模型可能很容易从相邻帧学到重建的知识,降低了自监督训练任务的难度。

因此,对于时间冗余,作者采用了非常高的 mask ratio 从视频中删除时间立方体。

由于采用了非对称的编码器-解码器结构,极高的 mask ratio 也大大降低了预训练的计算成本。

此外,为了考虑时间的相关性,作者采用了 tube masking strategy,以减少重建过程中的信息泄露风险。

多模态MAE

M3AE

论文标题:

Multimodal Masked Autoencoders Learn Transferable Representations

论文地址:

https://arxiv.org/abs/2205.14204

论文动机:

目前多模态数据的自监督学习主要是基于对比学习的方法,如 CLIP。

但是对比学习方法会根据使用的数据增加引入抽样偏差,这会降低下游任务的性能。

此外,这些方法仅限于成对的图像文本数据,无法利用广泛可用的未成对数据。

随着 Mask Modeling 在 CV 和 NLP 领域的广泛应用,作者尝试在多模态数据上进行 Mask Modeling 来自监督学习,进而提出了多模态掩蔽自动编码器(M3AE),它通过 mask token 预测来学习视觉和语言数据的统一编码器。

方法介绍:

本文提出的 M3AE 结构如上图所示。

M3AE 的第一步是将语言和图像组合为一个序列,对于文本,作者将其转换为了一系列离散 token;

对于图像,作者和 ViT 一样将其转换为了一系列 patch token。

然后,作者从均匀分布中采样了 s 个随机子集,并移除其他子集。

作者对文本 token 和图像 token 都应用了高掩蔽率,以消除信息冗余,并使任务变得非常困难,无法通过从可见的相邻 token 进行外推轻松解决。

与 MAE 一样,M3AE 由编码器和解码器组成,编码器只接受未掩蔽语言 token 和图像 token 作为输入。

两个模态都加了相应的位置编码。此外,为了区分模态,作者还添加了模态特定的嵌入。可学习的 CLS 嵌入被预先设置到序列的开头。

然后,通过编码器中一系列 Transformer 块对组合语言和图像嵌入进行处理,以获得最终的编码表示。

将一系列可学习的 token 加入到编码器的输出中,得到完整的 token 集合,并向完整的 token 集合中添加位置嵌入。

完成的 token 集合通过解码器处理之后,作者采用了两个线性投影输出头来计算重建,从而进行自监督任务。

参考链接:

深度分析何恺明新作MAE:通向CV大模型_极市平台的博客-CSDN博客

Masked Autoencoders Are Scalable Vision Learners 论文研读_herosunly的博客-CSDN博客

​一文看尽MAE最新进展!恺明的MAE已经提出大半年,目前发展如何?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[MAE]Masked Autoencoders掩膜自编码器 的相关文章

随机推荐

  • 使用librdkafka的C++接口实现简单的生产者和消费者

    一 编译librdkafka 环境 Fedora 20 32位 依赖 pthreads 必选 zlib 可选 libssl dev 可选 libsasl2 dev 可选 先查看自己的linux上是否安装了pthreads 指令如下 loca
  • 使用arm-none-eabi-gcc编译器搭建STM32的Vscode开发环境

    工具 make Windows中没有make 但是可以通过安装MinGW或者MinGW w64 得到make gcc arm none eabi 建议最新版 防止调试报错 OpenOCD vscode cubeMX VSCODE 插件 Ar
  • mysql auto reconnect_Mysql5的auto Reconnect异常

    mysql5的auto Reconnect错误 最近在一个J2EE项目的开发过程中 遇到了这样的问题 在服务器上部署好这个Web系统后 这时访问系统是很正常的 当把服务器的时间 例如 2008 03 31 加一天或更多天 例如 2008 0
  • 从零开始学习makefile(4)makefile中%、$@、$<、$^的作用

    目录 示例 头文件fun h main cpp fun cpp makefile 与 lt 是通配符 https www quora com What does o cpp in a Makefile mean是这样描述 的作用的 for
  • 求当前数组中,最大值减最小值等于sum的数组个数

    分析 应用双端队列 构造一个可以动态的求出当前数组最大值的容器 qmax 同上在构造一个qmin 从left right等于开始 如果当前区间的qmax qmin符合条件 right向右扩充 当不符合条件时 计算上一步符合条件的所有子数组个
  • SpringBoot+SpringSecurity+Freemarker页面中使用security标签

    SpringBoot SpringSecurity Freemarker项目中在页面上使用security标签控制按钮显示隐藏达到对按钮级权限控制还是比较方便的 如下配置即可 1 引入依赖
  • 【解决】git(1)获取key——git@github.com permission denied (publickey). fatal could not read from remote repo

    Github 拒绝连接 其原因有两个 这是你的私人仓库 repo Github 不信任你的计算机 因为它没有你计算机的公钥 public key 克隆是出现 解决 先看有没有ssh 一般是子这里 C Users xxxx ssh 如果没有打
  • Kafka偏移量(Offset)管理

    1 定义 Kafka中的每个partition都由一系列有序的 不可变的消息组成 这些消息被连续的追加到partition中 partition中的每个消息都有一个连续的序号 用于partition唯一标识一条消息 Offset记录着下一条
  • 【微信小程序】-- 配置uni-app的开发环境(四十八)

    所属专栏 微信小程序开发教程 作 者 我是夜阑的狗 个人简介 一个正在努力学技术的CV工程师 专注基础和实战分享 欢迎咨询 欢迎大家 这里是CSDN 我总结知识的地方 喜欢的话请三连 有问题请私信 文章目录 前言 一 配置uni app的开
  • Android 开发中让BUTTON变漂亮的小技巧

    最近在做android前端的时候 发现系统提供的button实在太过不忍直视 于是搜索了很多其他button的做法 自己也尝试了很多 但是一个一个去查有些麻烦 索性全部记下来 下面介绍几个好用的button设定 android layout
  • 【Yapi】Window10 超详细安装 Yapi 教程

    目录 问题一 Error getaddrinfo ENOTFOUND yapi demo qunar com yapi demo qunar com 80 错误处理 问题二 Npm 安装 Yapi 的时候 想指定安装目录 结果一直提示 EP
  • warning: ISO C++ forbids converting a string constant to 'char*'

    warning ISO C forbids converting a string constant to char Wwrite strings 解决办法 int main int argc char argv char str 先把C
  • sql 时间计算

    兩個時間之差的合計 DECLARE I INT SET I DATEDIFF ms GETDATE RAND 24 GETDATE SELECT convert varchar 10 I 86400000 Days convert varc
  • QT on Android的rtsp播放器demo

    手机 平板
  • 文件导入之Validation校验List对象数组

    背景 我们的接口是一个List对象 对象里面的数据基本都有一些基础数据校验的注解 我们怎么样才能校验这些基础规则呢 我们在导入excel文件进行数据录入的时候 数据录入也有基础的校验规则 这个时候我们又该如何少写代码让Validation框
  • rtthread空闲线程与定时器

    rtthread为什么要用到空闲线程 RT Thread是一个实时操作系统 它的内核采用了基于线程的设计思路 在RT Thread中 空闲线程是一种特殊的线程 它在系统没有其他任务需要执行时会被调度执行 因此 空闲线程的存在可以利用CPU的
  • 动态规划总结

    感谢赵剑波大牛的原稿 转载于http blog sina com cn zhaojianbo0124 第一节 动态规划基本概念一 动态规划三要素 阶段 状态 决策 他们的概念到处都是 我就不多说了 我只说说我对他们的理解 如果把动态规划的求
  • open3d显示RGBD点云(rope3d数据集)

    rope3d中同时有深度图 因此 可以创建rgbd图像点云 借助open3d库 需要确定相机内参和外参 注意统一坐标系 例如都显示在world坐标系 usr bin env python3 coding utf 8 for reading
  • 【六】Python全栈之路--for循环

    文章目录 1 双向循环的练习 2 break pass continue的使用 3 for循环 4 小练习 1 双向循环的练习 1 用两个循环完成十行十列的小星星 j 0 while j lt 10 打印星星 i 0 while i lt
  • [MAE]Masked Autoencoders掩膜自编码器

    目录 非对称的编码 解码架构 方法 流程 编码器 解码器 Partial Fine tuning 图像MAE MixMIM Uniform Masking HiViT 视频MAE VideoMAE 多模态MAE M3AE https git