何凯明新作MAE 学习笔记

【MAE与之前AI和CV领域最新工作的关系】

学习MAE视频【李沐】
He, K., Chen, X., Xie, S., Li, Y., Dollár, P., & Girshick, R. (2021). Masked autoencoders are scalable vision learners. arXiv preprint arXiv:2111.06377.
在这里插入图片描述

【Transformer】

  1. Transforme纯注意力(attention)机制的编码器和解码器。

【BERT】

  1. BERT使用完形填空的自监督的训练机制,使用了Transformer的编码器。
  2. 将Transformer拓展到更一般的NLP任务

【ViT】

  1. ViT是Transformer在CV上的应用。
  2. 证明了数据量足够大的时候,Transformer精度要高于RNN/CNN。

【MAE】

  1. MAE是BERT在CV上的应用。
【MAE】Title

Masked Autoencoders 带掩码的自编码器 是可扩展的视觉学习器 scalable vision learners

【MAE】Abstract

MAE:Masked AutoEncoders

  1. MAE虽然自称是一个自编码器(auto-encoder),但是也包含了编码器和解码器。MAE的编码器只关注可见的patches,节省计算时间。
  2. 通过随机盖住图像中大量的块(75%),迫使模型学习更好的表征,重构缺失的像素
  3. MAE 使用小数据集 ImageNet-1K 100w 图片,self-supervise达到的效果很好
  4. MAE主要用来做迁移学习,证明在别的任务上表现很好。
【MAE】图1 MAE Architecture

在这里插入图片描述
5. encoder的计算量要大于decoder:计算量主要来自于encoder,对图片像素进行编码。
6. 预训练才同时需要encoder和decoder。
7. 用 MAE 做一个 CV 的任务,只需要用编码器。一张图片进来,不需要做mask,直接切成 patches 格子块,然后得到所有 patches 的特征表示,当成是这张图片的特征表达,用来做 CV 的任务。

【MAE】 在数据集上的测试效果
  1. 图2 ImageNet验证集的效果

P.S. MAE不一定对所有的数据效果都很好,这里放的可能是比较好的结果。
在这里插入图片描述

  1. 图3 COCO验证集的效果

在这里插入图片描述

  1. 图4 遮盖不同比例的区域时还原效果的对比

在这里插入图片描述

【MAE】 Discussion and Conclusion
  1. 【MAE媲美有标号学习的效果】NLP领域,self-supervised已经有很多的应用,但在CV 里有标号的预训练数据是主流。 MAE在 ImageNet数据集上,通过自编码器学习到可以媲美有标号的结果。
  2. 【图像和语言的差别】
    1. a word in a sentence:一个词是语义单元,包含较多语义信息。
    2. a patch in an image:一定的语义信息,但不是一个语义的 segment。一个 patch 并不含有一个特定的物体,可能是多个物体的一小块 or 一个物体重叠的一块。
    3. 即使图片和语言的 masked 的单元包含语义信息不同,MAE or Transformer 可以学到一个隐藏的比较好的语义表达。
  3. 【基于MAE的拓展性工作可能会出现的问题】
    1. MAE基于图像本身信息学习,如果图像信息中包含bias,会产生负面影响。
    2. MAE是生成模型,生成原始的像素,有误导人们的可能。
【MAE】 Introduction
what makes masked autoencoding different between vision and language?
  1. CV主要适用CNN,卷积窗口不容易将mask放进去。卷积窗口扫过来、扫过去时,无法区分边界,无法保持 mask 的特殊性,无法拎出来 mask;最后从掩码信息很难还原出来
  2. 语言和图像的信息密度不同。
    1. NLP 的一个词是一个语义的实体,一个词在字典里有很长的解释;一句话去掉几个词,任务很难(BERT 的mask 比例不能过高)
    2. CV 随机去掉很高比例的块,极大降低图片的冗余性 这一块的周边块都被去掉了,这一块和很远的块的关系不那么冗余 nontrivial 任务,使模型去看 一张图片的全局信息,而不仅关注局部
  3. auto-encoder的decoder:CV 还原图片的原始像素(低层次的表示);NLP 还原句子里的词(语义层次更高)。图片分类、目标检测的 decoder:一个全连接层;语义分割(像素级别的输出):一个全连接层不够,很有可能使用一个转置的卷积神经网络、来做一个比较大解码器。
【MAE 的想法】
  1. 随机遮住大量的块,然后去重构这些被遮住的像素信息;
  2. 使用一个非对称的编码器和解码器的机制。编码器只看可见的patches,可以减少计算成本。
【MAE 的优点】
  1. MAE预训练,只使用 ImageNet-1K 100w 无标号数据,ViT-Large/-Huge 达到 ViT 需要 100倍于
  2. ImageNet-1K 的数据 的效果。 迁移学习效果也很好,预训练的模型在目标检测、实例分割、语义分割的效果都很好。
【MAE】 Related Work
  1. 带掩码的语言模型:BERT, GPT
  2. auto-encoder在 CV 的应用
    1. MAE 也是一种形式的带去噪的auto-encoder
    2. masked patch 在这一个图片块里面加了很多噪声和传统的 DAE(Denoising autoencoder) 是很不一样的
    3. MAE 基于 ViT、transformer 架构
  3. 带mask的auto-encoder在 CV 的应用
    1. iGPT,GPT 在 image 的应用
    2. ViT 最后一段,怎么用 BERT 方式训练模型
    3. BEiT,BERT 在 image 上的应用
    4. 给每一个 patch 离散的标号,更像 BERT
    5. MAE 直接重构 原始的像素信息
  4. self-supervised learning
    1. 最近很火的 contrastive learning,使用数据增强
    2. MAE 不需要数据增强
【MAE】 Approach

【三个问题】
本节回答三个问题:

  • 解码器是怎么回事?
  • 还原像素信息是怎么实现的?
  • 随机采样是怎么实现的?
【Masking】
  1. 【mask如何工作?】和 ViT 的一样图片 patches 化, i.e., 一张图片 九宫格分割,3 * 3,每一格 代表一个
    patch,作为一个词 token
  2. 【random sampling】随机均匀采样块保留, 剩余块用 mask 掩码盖住。
【MAE encoder】
  1. ViT, 没有任何改动
  2. 只处理可见的patches(unmasked)
  3. encoder处理可见patches的details:
    1. 和 ViT 一样:
      每一个 patch 块拿出来,做一个线性投影,加入位置信息 -->作为一个 token进入encoder。
    2. 和 ViT 不一样:
      masked 块不进入 MAE 编码器,减少计算量。
【MAE decoder】
  1. 【unmasked patches】通过encoder->潜表示。
  2. 【masked patches】->表示为一个通过学习得到的共享向量。
  3. 【decoder】是另一个Transformer,要加入位置信息(否则,不知道是哪个mask)。
  4. 【decoder】主要对预训练使用,其他计算机任务只需要使用encoder。
  5. 【计算开销】是encoder的1/10不到。
【Reconstruction target】

decoder的最后一层: a linear projection

  1. 一个 patch 是 16 * 16 像素的话,线性层会投影到长为 256 的维度
  2. 再 reshape(16, 16), 还原原始像素信息
  3. 【Loss function】MSE
  4. 【Normalization】对要预测的像素只做一次normalization,i.e.使每一个块里面的像素均值变0,方差变1,数值上更稳定
【Simple implementation】
  1. 对每一个输入 patch 生成 a token:一个一个 patch 的线性投影 + 位置信息
  2. 随机采样:randomly shuffle 随机打断序列,把最后一块拿掉。
    1. 从头部均匀的、没有重置的样本采样
    2. 25% 意味着 随机 shuffle, 只保留前 25%
  3. 解码时:append 跟以前长度一样的这些掩码的一些词源 masked tokens (一个可以学习到的向量 + 位置信息),重新 unshuffle 还原到原来的顺序
  4. MSE 算误差时,跟原始图的 patches 对应
【MAE】 Experiments
【对比实验】

【实验方法】
在 ImageNet-1K 100万张图片 数据集上

  1. 先做自监督的预训练(不用标号,只拿图片)
  2. 然后再在同样的数据集上做有标号的监督训练

【两种微调】

  1. end to end 的微调,允许改整个模型 所有的可学习的参数;
  2. linear probing 允许改最后一层的线性输出层

【实验结果】
在这里插入图片描述

  1. scratch, original: 76.5, ViT 所有的内容在 ImageNet-1K上训练, 结果不稳定 200
    epoches
  2. scratch, our impl.: 82.5 加入 strong regularization A.2 ViT 文章说 ViT
    需要很大的数据才行 小一点的数据 + 合适的正则化 ✔
  3. baseline MAE: 84.9 先使用 MAE 做预训练,再在 ImageNet 上微调 50 epoches
    数据集没变化,预训练和微调都是 ImageNet MAE 纯从图片上学到不错的信息
【消融实验】

在这里插入图片描述
(a) 解码器的深度,即多少个 Transformer 块
ft(fine-tune所有可学习的权重都一起调):效果和深度关系不大 84.x,效果更好(但耗费更贵)
lin(linear-probe只调最后一个线性层):深度深一点好

(b) 解码器的宽度,每一个 token 表示成一个多长的向量
512 最佳

(c) 编码器要不要加入masked patches:
w/o(不加masked)精度更高、计算量更少
结论:非对称的架构 精度更好、性能更好

(d) 重构的目标:minimize MSE(pixel)
w/o + normalization(均值为0 方差为 1):效果和w/差不多,但计算量更小,更简单
w/ + normalization(均值为0 方差为 1) :效果最好
PCA (做一次降维)
dVAE(BEiT 的做法,通过 ViT 把每一个块映射到一个离散的 token,像 BERT 一样的去做预测)

(e) 怎么样做数据增强
什么都不做
固定大小的裁剪(crop)
随机大小的裁剪(crop):效果最好
裁剪 + 颜色变化
结论:MAE 对数据增强不敏感

(f) 怎么采样 被盖住的块
随机采样 (采样率75 %):最简单最好
块采样 (采样率50 %)
块采样 (采样率75 %)
网格采样(采样率75 %)

【不同超参数对MAE精度的影响】
【Masking率】

在这里插入图片描述

【训练时间】

在这里插入图片描述
128核TPU-v3+TensorFlow
ViT-Large + 解码器只使用一层 Transformer 的patch:84.8% 精度不错,耗时最少 (11.8h)
ViT-Huge + 解码器只使用一层 Transformer 的patch:85.9% 精度不错,耗时最少 (29.3d)

【不同Mask采样策略的对比】

在这里插入图片描述
左:随机采样(采样率75%) 效果最好
中:方块采样(采样率50%)
右:网格采样(采样率75%)

【预训练的epochs对微调精度的影响】

在这里插入图片描述
ImageNet-1K 上训练个 1000 个数据轮,精度仍有提升,过拟合没很严重
一般在 ImageNet 上训练, 200轮就足够了,1000轮已经很多了。

【MAE与其他工作的对比】

在这里插入图片描述
在ImageNet-1K上,与以前工作对比,MAE效果最好
在这里插入图片描述
MAR预训练vs.有监督预训练:JFT效果最好,MAE次之。(可能因为JFT数据集包括的类数远远大于 ImageNet)

【MAE微调层数对精度的影响】

fine-tune层数少,快,精度差
fine-tune层数多,慢,精度好
在这里插入图片描述
调 4 - 5 层比较好

【MAE】在迁移学习的应用
  1. 目标检测

在这里插入图片描述

  1. 语义分割
    在这里插入图片描述
【MAE】结论

【MAE思想很简单】利用 ViT 来做跟 BERT 一样的自监督学习
【MAE 相对ViT 的提升点】

  1. 需要mask更多的块,降低剩余块之间的冗余度,任务变得复杂一些
  2. 使用一个 Tranformer 架构的解码器,直接还原原始的像素信息,使得整个流程更加简单一点
  3. 加上在 ViT 工作之后的各种技术,训练更鲁棒
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值