Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【论文复现】掩码自回归编码器

【论文复现】掩码自回归编码器

作者头像
Eternity._
发布于 2024-12-24 01:03:45
发布于 2024-12-24 01:03:45
15400
代码可运行
举报
文章被收录于专栏:登神长阶登神长阶
运行总次数:0
代码可运行

概述

掩码自动编码器MAE是一种可扩展的计算机视觉自监督学习器。MAE的基本思路是:屏蔽输入图像的随机补丁,并重建丢失的像素,它基于两个核心设计。

  • 一种非对称编码器-解码器架构,其中编码器只对可见的补丁子集进行操作(没有掩码标记),
  • 一个轻量级解码器,它根据潜在表示和掩码标记重建原始图像。

本文所涉及的所有资源的获取方式:这里

方法

MAE的掩码自编码器是一种简单地自编码方法,它在给定原始信号的部分观测值的情况下重建原始信号。和所有的自编码器一样,MAE有一个将观察到的信号映射到潜在表示的编码器,以及一个从潜在表示重建原始信号的解码器。与经典的自编码器不同,MAE采用了一种非对称设计,允许编码器仅对部分观察到的信号进行操作(没有掩码标记),并采用了一个轻量级解码器,该解码器根据潜在表示和掩码标记重建全部信号。

掩码   与ViT相同,MAE将图像划分为规则的非重叠块,之后,MAE对补丁的子集进行采样,并屏蔽(即移除)剩余的补丁。MAE的采样策略很简单,对补丁随机采样,不进行替换,遵循均匀分布。具有高掩码比(去除的补丁所占的比值)的随机采样在很大程度上消除了冗余,从而产生了一个无法通过从可见的相邻补丁外推来解决的任务,均匀分布防止了潜在的中心偏差(即图像中心附近的掩码补丁越多),最后一个高度稀疏的输入为设计一个有效地编码器创建了机会。

MAE编码器   MAE的编码器是一个ViT,但只应用与可见的、未屏蔽的补丁。就像在标准的ViT中一样,MAE的编码器通过添加了位置嵌入的线性投影来嵌入补丁,然后通过一系列Transformer块来处理结果集。然而,MAE的编码器只对全集的一小部分(例如25%)进行操作。这使MAE能够仅使用一小部分计算和内存来训练非常大的编码器。

MAE解码器   MAE解码器的输入是由编码器的可见补丁和掩码令牌组成的完整令牌集。每个掩码标记是一个共享的、学习的向量,指示要预测的丢失补丁的存在。MAE将位置嵌入添加到该全集中的所有令牌中,如果没有这一点,掩码令牌将没有关于其在图像中的位置信息。

MAE解码器仅在预训练期间用于执行图像重建任务(只有编码器用于产生用于识别的图像表示。)因此,可以以独立于编码器设计的方式灵活地设计解码器架构。

重建目标   MAE通过预测每个掩码补丁的像素值来重建输入,解码器输出中的每个元素是表示补丁的像素值的矢量。解码器的最后一层是线性投影,其输出通道的数量等于块中像素值的数量。对解码器的输出进行重构以形成重构图像。MAE的损失函数在像素空间中计算重建图像和原始图像之间的均方误差(MSE),与BERT相同,MAE只计算掩码补丁上的损失。 MAE还研究了一种变体,其重建目标是每个被屏蔽补丁的归一化像素。具体来说,MAE计算一个Patch中所有像素的均值和标准差,并使用它们对该patch进行归一化。使用归一化像素作为重建的目标提高了表示质量。

简单地实现   首先,MAE为每个输入补丁生成一个标记(通过添加位置嵌入的线性投影),接下来,MAE随机打乱令牌列表,并根据屏蔽比率删除列表的最后一部分。这个过程为编码器生成一小部分标记,相当于采样补丁而不进行替换。编码后,MAE将一个掩码令牌列表添加到编码补丁列表中,并对这个完整列表纪念性unshuffle(反转随机混洗操作),以将所有标记与其目标对齐。编码器应用于该完整列表(添加了位置嵌入)。如前所述,不需要稀疏运算,这种简单地实现引入了可忽略不计的开销,因为混洗和取消混洗操作很快。

演示效果


MAE随机掩码图像

具有GAN损失的情况

核心逻辑

随机掩码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def random_masking(self, x, mask_ratio):
        """
        Perform per-sample random masking by per-sample shuffling.
        Per-sample shuffling is done by argsort random noise.
        x: [N, L, D], sequence
        """
        N, L, D = x.shape  # batch, length, dim
        # 确定需要保存多少个patch
        len_keep = int(L * (1 - mask_ratio))
        # [1,196] 用batch此时输入的图片可能不止一个,196表示patch的个数
        noise = torch.rand(N, L, device=x.device)  # noise in [0, 1]      
        # sort noise for each sample 
        # 默认按升序排序,此时返回的是序号,首先获取从低到高排列的序号
        ids_shuffle = torch.argsort(noise, dim=1)  # ascend: small is keep, large is remove
        # 获取ids_shuffle从低到高排列的序号,这样就能还原原始的noise的情况
        ids_restore = torch.argsort(ids_shuffle, dim=1)

        # keep the first subset
        ids_keep = ids_shuffle[:, :len_keep] # 保存数据少的情况
        # [1,49,1024] dim=0 按列进行索引,dim=1按行进行索引,获取x的取值
        x_masked = torch.gather(x, dim=1, index=ids_keep.unsqueeze(-1).repeat(1, 1, D))

        # generate the binary mask: 0 is keep, 1 is remove
        mask = torch.ones([N, L], device=x.device)
        mask[:, :len_keep] = 0
        # unshuffle to get the binary mask 为0表示没有被掩码,1表示被掩码
        # 将是否被掩码通过mask表示出来
        mask = torch.gather(mask, dim=1, index=ids_restore)

        return x_masked, mask, ids_restore

编码器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def forward_encoder(self, x, mask_ratio):
        # embed patches [1,3,224,224]->[1,196,1024]
        x = self.patch_embed(x)

        # add pos embed w/o cls token 除了全局特征,全部加上了位置信息
        x = x + self.pos_embed[:, 1:, :]

        # masking: length -> length * mask_ratio
        x, mask, ids_restore = self.random_masking(x, mask_ratio)
        # id_restore保存的是原来的位置
        # append cls token
        cls_token = self.cls_token + self.pos_embed[:, :1, :]
        cls_tokens = cls_token.expand(x.shape[0], -1, -1) # [1,1,1024]
        # [1,50,1024] 要包含一个class的情况
        x = torch.cat((cls_tokens, x), dim=1) 

        # apply Transformer blocks
        for blk in self.blocks:
            x = blk(x)
        x = self.norm(x)

        return x, mask, ids_restore

解码器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def forward_decoder(self, x, ids_restore):
        # embed tokens [1,50,1024]->[1,50,512]
        x = self.decoder_embed(x)

        # append mask tokens to sequence 获取被掩码的token [1,147,512]
        mask_tokens = self.mask_token.repeat(x.shape[0], ids_restore.shape[1] + 1 - x.shape[1], 1)
        # 将经过编码的数据和原始的初始化为0的数据编码在一起。
        x_ = torch.cat([x[:, 1:, :], mask_tokens], dim=1)  # no cls token
        # 将编码的和为编码的重新转变为原始的patch大小,其实本质上只需要考虑编码的位置,因为其余都是随机初始化的
        x_ = torch.gather(x_, dim=1, index=ids_restore.unsqueeze(-1).repeat(1, 1, x.shape[2]))  # unshuffle
        x = torch.cat([x[:, :1, :], x_], dim=1)  # append cls token
        # add pos embed
        x = x + self.decoder_pos_embed

        # apply Transformer blocks
        for blk in self.decoder_blocks:
            x = blk(x)
        x = self.decoder_norm(x)

        # predictor projection 将其转换为所有像素
        x = self.decoder_pred(x)

        # remove cls token
        x = x[:, 1:, :]

        return x

部署方式


代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#  linux系统下python=3.7
conda create -n mae python=3.7
conda activate mae

# 下载torch
wget https://download.pytorch.org/whl/cu116/torch-1.13.0%2Bcu116-cp37-cp37m-linux_x86_64.whl
pip install 'torch的下载地址'
# 下载torchvision
wget https://download.pytorch.org/whl/cu116/torchvision-0.14.0%2Bcu116-cp37-cp37m-linux_x86_64.whl
pip install 'torchvision的下载地址'

pip install timm==0.4.5
pip install ipykernel
pip install matplotlib
pip install tensorboard

参考地址

github地址 论文地址

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
带掩码的自编码器MAE详解和Pytorch代码实现
监督学习是训练机器学习模型的传统方法,它在训练时每一个观察到的数据都需要有标注好的标签。如果我们有一种训练机器学习模型的方法不需要收集标签,会怎么样?如果我们从收集的相同数据中提取标签呢?这种类型的学
deephub
2021/12/15
3.7K0
带掩码的自编码器MAE详解和Pytorch代码实现
Transformers 4.37 中文文档(七十三)
Vision Transformer(ViT)模型是由 Alexey Dosovitskiy、Lucas Beyer、Alexander Kolesnikov、Dirk Weissenborn、Xiaohua Zhai、Thomas Unterthiner、Mostafa Dehghani、Matthias Minderer、Georg Heigold、Sylvain Gelly、Jakob Uszkoreit、Neil Houlsby 在一张图值 16x16 个词:用于大规模图像识别的 Transformer中提出的。这是第一篇成功在 ImageNet 上训练 Transformer 编码器的论文,与熟悉的卷积架构相比取得了非常好的结果。
ApacheCN_飞龙
2024/06/26
6350
Transformers 4.37 中文文档(七十三)
Transformers 4.37 中文文档(四十九)
免责声明: 分词器的默认行为已在 2023 年 4 月修复并更改。之前的版本在目标和源分词序列的末尾都添加了 [self.eos_token_id, self.cur_lang_code]。这是错误的,因为 NLLB 论文提到了 (第 48 页,6.1.1. 模型架构):
ApacheCN_飞龙
2024/06/26
2660
preprint版本 | 何凯明大神新作MAE | CVPR2022最佳论文候选
本文证明了蒙面自动编码器(MAE)是一种可扩展的计算机视觉自监督学习器。我们的MAE方法很简单:我们屏蔽输入图像的随机补丁并重建丢失的像素。
机器学习炼丹术
2021/12/06
1.3K0
preprint版本 | 何凯明大神新作MAE | CVPR2022最佳论文候选
Transformers 4.37 中文文档(四十三)
MBart 模型是由 Yinhan Liu、Jiatao Gu、Naman Goyal、Xian Li、Sergey Edunov、Marjan Ghazvininejad、Mike Lewis、Luke Zettlemoyer 在多语言去噪预训练神经机器翻译中提出的。
ApacheCN_飞龙
2024/06/26
3610
5个时间序列预测的深度学习模型对比总结:从模拟统计模型到可以预训练的无监督模型(附代码)
来源:DeepHub IMBA本文约6700字,建议阅读12分钟本文讨论了5种专门研究时间序列预测的深度学习体系结构。 时间序列预测在最近两年内发生了巨大的变化,尤其是在kaiming的MAE出现以后,现在时间序列的模型也可以用类似MAE的方法进行无监督的预训练。 Makridakis M-Competitions系列(分别称为M4和M5)分别在2018年和2020年举办(M6也在今年举办了)。对于那些不了解的人来说,m系列得比赛可以被认为是时间序列生态系统的一种现有状态的总结,为当前得预测的理论和实践提供
数据派THU
2022/08/29
1.2K0
5个时间序列预测的深度学习模型对比总结:从模拟统计模型到可以预训练的无监督模型(附代码)
Transformers 4.37 中文文档(三十九)
Jukebox 模型在 Jukebox: A generative model for music 中由 Prafulla Dhariwal, Heewoo Jun, Christine Payne, Jong Wook Kim, Alec Radford, Ilya Sutskever 提出。它引入了一个生成音乐模型,可以生成可以根据艺术家、流派和歌词进行条件化的一分钟长样本。
ApacheCN_飞龙
2024/06/26
1610
更简单的掩码图像建模框架SimMIM介绍和PyTorch代码实现
来源:DeepHub IMBA本文约4000字,建议阅读10+分钟本文中我们介绍了 SimMIM,这是一种受掩码建模启发的强大 SSL 算法,其中一部分输入数据被掩码,模型的目标是最小化重建损失。 MAE发布以来,各种使用掩码技术的自监督掩码模型在其基础之上有了更进一步的研究。在本文中我们将探索一篇和MAE同期的工作:SimMIM: A Simple Framework for Masked Image Modeling,研究团队是微软亚研院,并在PyTorch中编写它,最后我们也会提供相关的代码。 Sim
数据派THU
2022/08/29
6290
更简单的掩码图像建模框架SimMIM介绍和PyTorch代码实现
【论文解读】A Survey on Visual Transformer及引文理解
A Survey on Visual Transformer阅读,以及自己对相关引文的理解。
黄博的机器学习圈子
2021/02/12
2.1K0
【论文解读】A Survey on Visual Transformer及引文理解
Transformers 4.37 中文文档(四十八)
MVP 模型由唐天一、李俊毅、赵新文和文继荣在《MVP: 多任务监督预训练用于自然语言生成》中提出。
ApacheCN_飞龙
2024/06/26
1750
带掩码的自编码器MAE在各领域中的应用总结
机器学习算法应该理解数据从中提取有用的特征才能够解决复杂的任务。通常训练泛化模型需要大量带注释的数据。这个是非常费时费力的,并且一般情况下都很难进行。
deephub
2022/11/11
8230
带掩码的自编码器MAE在各领域中的应用总结
Transformers 4.37 中文文档(四十二)
M2M100 模型是由 Angela Fan、Shruti Bhosale、Holger Schwenk、Zhiyi Ma、Ahmed El-Kishky、Siddharth Goyal、Mandeep Baines、Onur Celebi、Guillaume Wenzek、Vishrav Chaudhary、Naman Goyal、Tom Birch、Vitaliy Liptchinsky、Sergey Edunov、Edouard Grave、Michael Auli、Armand Joulin 在 Beyond English-Centric Multilingual Machine Translation 中提出的。
ApacheCN_飞龙
2024/06/26
3640
Transformers 4.37 中文文档(四十二)
Transformers 4.37 中文文档(九十三)
Pix2Struct 模型是由 Kenton Lee, Mandar Joshi, Iulia Turc, Hexiang Hu, Fangyu Liu, Julian Eisenschlos, Urvashi Khandelwal, Peter Shaw, Ming-Wei Chang, Kristina Toutanova 在《Pix2Struct: Screenshot Parsing as Pretraining for Visual Language Understanding》中提出的。
ApacheCN_飞龙
2024/06/26
3270
Transformers 4.37 中文文档(九十三)
Transformers 4.37 中文文档(七十七)
SeamlessM4T-v2 模型是由 Meta AI 的 Seamless Communication 团队在Seamless: Multilingual Expressive and Streaming Speech Translation中提出的。
ApacheCN_飞龙
2024/06/26
2980
FAIR 何恺明、Piotr、Ross等新作,MAE才是YYDS!仅用ImageNet1K,Top-1准确率87.8%!
在本文中,作者证明了masked autoencoders(MAE) 是一种可扩展的计算机视觉自监督学习方法。本文的MAE方法很简单:mask输入图像的随机patch,并重建丢失的像素 。它基于两个核心设计的。
CV君
2021/11/18
8080
FAIR 何恺明、Piotr、Ross等新作,MAE才是YYDS!仅用ImageNet1K,Top-1准确率87.8%!
Transformers 4.37 中文文档(五十一)
PEGASUS-X 模型由 Jason Phang、Yao Zhao 和 Peter J. Liu 在 Investigating Efficiently Extending Transformers for Long Input Summarization 中提出。
ApacheCN_飞龙
2024/06/26
1890
Transformers 4.37 中文文档(五十一)
Transformers 4.37 中文文档(五十二)
ProphetNet 模型是由 Yu Yan, Weizhen Qi, Yeyun Gong, Dayiheng Liu, Nan Duan, Jiusheng Chen, Ruofei Zhang, Ming Zhou 于 2020 年 1 月 13 日提出的ProphetNet: Predicting Future N-gram for Sequence-to-Sequence Pre-training。
ApacheCN_飞龙
2024/06/26
1540
时隔两年,CV大神何恺明最新一作:视觉预训练新范式MAE!大道至简!
论文「Masked Autoencoders Are Scalable Vision Learners」证明了 masked autoencoders(MAE) 是一种可扩展的计算机视觉自监督学习方法。
昱良
2021/11/19
8100
时隔两年,CV大神何恺明最新一作:视觉预训练新范式MAE!大道至简!
Transformers 4.37 中文文档(九十五)
TrOCR 模型是由 Minghao Li、Tengchao Lv、Lei Cui、Yijuan Lu、Dinei Florencio、Cha Zhang、Zhoujun Li、Furu Wei 在TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models中提出的。TrOCR 包括一个图像 Transformer 编码器和一个自回归文本 Transformer 解码器,用于执行光学字符识别(OCR)。
ApacheCN_飞龙
2024/06/26
3120
Transformers 4.37 中文文档(九十五)
Transformers 4.37 中文文档(九十八)
PatchTSMixer 模型是由 Vijay Ekambaram、Arindam Jati、Nam Nguyen、Phanwadee Sinthong 和 Jayant Kalagnanam 在TSMixer: Lightweight MLP-Mixer Model for Multivariate Time Series Forecasting中提出的。
ApacheCN_飞龙
2024/06/26
3540
Transformers 4.37 中文文档(九十八)
推荐阅读
相关推荐
带掩码的自编码器MAE详解和Pytorch代码实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验