MAE模型介绍

目录

介绍

模型

 ​编辑

 实验过程

结论

 


介绍

 Masked Autoencoders Are Scalable Vision Learners

      Facebook Al的kaiming大神等人于2021年十一月提出了一种带自编码器(MAE),它基于(ViT)架构。他们的方法在imageNet上的表现要好于从零开始训练的VIT。

灵感来源:

       监督学习是训练机器学习模型的传统方法,它在训练时每一个观察到的数据都需要有标注好的标签,如果我们有一种训练机器学习模型的方法不需要收集标签,会怎么样?如果我们从收集的相同数据中提取标签呢?这种类型的学习算法被称为自监督学习。这种方法在自然语言处理中工作得很好。一个例子是BERT,谷歌自2019年以来一直在其搜索引警中使用BERT。不幸的是,对于计算机视觉来说,情况并非如此。

MAE总体想法:

       随机遮住大量的块,然后去重构这些被遮住的像素信息,让它使用一个非对称的编码器和解码器的机制。

非对称:编码器和解码器看到的东西不一样

  • 编码器只看到可见块
  • 解码器拿到编码器的输出之后,重构 masked patches

非对称的原因:
大量 masked 块,
编码器只看可见块,极大降低计算开销、减少内存消耗 。

关于MAE:

  • BERT 的一个 CV 的版本 
  • 基于 ViT ,BERT化
  • 把整个训练 拓展到没有标号的数据上面
  • 通过完型填空来获取图片的一个理解 
  • MAE 加速 Transformer 在 CV 上的应用 

模型

 MAE模型介绍_第1张图片

预训练流程:input --> patches --> masked --> unmasked patches in encoder --> unmasked +                            masked 按位置排列进 decoder --> decoder 重构 masked patches 的像素。

  • patches + masked:一张红色鸟图片进来,切成 patches,masked 块 (3/4) 是 灰色的。
  • unmasked patches,encoder:没有 masked (1 / 4) 的块 进入 encoder (ViT),得到每一块的特征(蓝色)。
  • encoder 的输出 和 masked tokens 按照在图片中的原始位置排列成一长条向量 (包含位置信息)。
  • 长条向量 进入 decoder,解码器尝试重构缺失的像素信息,还原原始图片。 

图片还原:

MAE模型介绍_第2张图片

       虽然细节有一点模糊,钟的指针、车的形状、狗、灯都还原的很好。图片尺寸只有那么高,分辨率有限。图三是Coco数据集,表明在不同的数据集上效果也不错。
 

 实验过程

主要结果:

MAE模型介绍_第3张图片

 

a:解码器的深度,多少个 Transformer 块; end to end fine-tuning 贵一点,但效果好

  • 全都 ft,深度和效果关系不大 84.x
  • 只调 lin, 深度深一点好

b: 解码器的宽度,每一个 token 表示成一个多长的向量

  • 512 比较好

c: 编码器要不要加入被盖住的 masked 块:

  • 不加很好,精度高、计算量更少
  • 非对称的架构 精度好、性能好

d: 重构的目标

  • 每个像素的MSE
  • 每个像素的MSE + normalization 均值为0 方差为 1 效果好
  • PCA 做一次降维
  • dVAE: BEiT 的做法,通过 ViT 把每一个块映射到一个离散的 token,像 BERT 一样的去做预测

e :怎么样做数据增强

  • 什么都不做
  • 固定大小的裁剪
  • 随机大小的裁剪
  • 裁剪 + 颜色变化

MAE 对数据增强不敏感

f :怎么采样 被盖住的块

  • 随机采样 最简单最好
  • 按一块块的采样 50 %
  • 按一块块的采样 75 %
  • 网格采样

训练时间:

MAE模型介绍_第4张图片

 

  • ViT-Large + 解码器只使用一层 Transformer 的块:84.8% 精度不错,耗时最少
  • 带掩码的块 + 大的解码器,加速 3.7倍
  • ViT huge 加速也比较多

绝对时间

128个 TPU v3的 core, tensorflow 实现

训练时间是10个小时 和 大概是一天多,可以忍受

MAE模型介绍_第5张图片

 

图 6 表示的是不同的掩码采样策略的区别

  • 随机采样效果好
  • 尽量的按照一块一块的来切
  • 按照格点来切

MAE模型介绍_第6张图片

 

图 7 :预训练的轮数和微调的精度的对比 

ImageNet-1K 上训练个 1,000 个数据轮,精度有提升,在一直训练一直学习,过拟合也没那么多严重,因为1,000轮是非常非常多的

  • 一般在 ImageNet 上训练, 200轮 enough

MAE模型介绍_第7张图片 

 

表3:跟前面结果比 MAE 效果是最好的

图8:跟 ViT 里面的结果比

  • 最上面的虚线:ViT 在 JFT 3亿标号的图片数据集合的效果
  • 排第二的线:只使用 ImageNet-1K 也就是1/300数据的效果
  • 两根线很接近,不能说这是一个很公平的比较
  • JFT数据集包括的类数远远大于 ImageNet
  • 它们很多是一些 顾我自己 care 的一些目标,但是 ImageNet很多都是一些猫猫狗狗的图片
  • 测试集也是 ImageNet,JFK 它多了很多很多 可能跟你那些标号不那么一样的图片

把验证集换到一个 不那么跟 ImageNet 相像的数据集上,可能这个差距会大一点。

MAE模型介绍_第8张图片

调编码器所有层的参数和最后一层的参数效果差距大

到底调多少层:

  • 少,快,精度差
  • 多,慢,精度好

调 4 - 5 层比较好

  • 底层不调:底层学到的东西稍微是比较低层次一点,你可以换一个任务也不需要变太多
  • 上面那些层,跟你的任务相关,要调

结论

MAE预训练,只使用 ImageNet-1K 100w 无标号数据,ViT-Large/-Huge 达到 ViT 需要 100倍于 ImageNet-1K 的数据 的效果。

迁移学习效果也很好,预训练的模型在 目标检测、实例分割、语义分割 的效果都很好。

和 NLP 类似的效果:

  • 在大量的没有标号的数据上,通过自监督学习训练出来模型,迁移学习效果不错。

simple:作者的简单是在 ViT 基础上,MAE 提出来的东西相对简单。

scale well:能跑大数据集。

CV 里 有标号的预训练数据是主流。MAE 在 ImageNet 数据集上,通过自编码器学习到 可以媲美 有标号的 结果。


 

论文: 原文链接

代码:代码链接

你可能感兴趣的:(人工智能,transformer,深度学习)