首页 > 编程知识 正文

何凯明新作MAE 学习笔记

时间:2023-05-06 20:08:08 阅读:258177 作者:2968

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

学习MAE视频【mgdjc】
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】 Transforme纯注意力(attention)机制的编码器和解码器。 【BERT】 BERT使用完形填空的自监督的训练机制,使用了Transformer的编码器。将Transformer拓展到更一般的NLP任务 【ViT】 ViT是Transformer在CV上的应用。证明了数据量足够大的时候,Transformer精度要高于RNN/CNN。 【MAE】 MAE是BERT在CV上的应用。 【MAE】Title

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

【MAE】Abstract

MAE:Masked AutoEncoders

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


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

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

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

图3 COCO验证集的效果

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

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

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

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

decoder的最后一层: a linear projection

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

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

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

【两种微调】

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

【实验结果】

scratch, original: 76.5, ViT 所有的内容在 ImageNet-1K上训练, 结果不稳定 200
epochesscratch, our impl.: 82.5 加入 strong regularization A.2 ViT 文章说 ViT
需要很大的数据才行 小一点的数据 + 合适的正则化 ✔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(jpdds 的做法,通过 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】在迁移学习的应用 目标检测

语义分割
【MAE】结论

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

需要mask更多的块,降低剩余块之间的冗余度,任务变得复杂一些使用一个 Tranformer 架构的解码器,直接还原原始的像素信息,使得整个流程更加简单一点加上在 ViT 工作之后的各种技术,训练更鲁棒

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。