MAE模型介绍

article/2025/11/10 21:52:39

目录

介绍

模型

 ​编辑

 实验过程

结论

 


介绍

 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 上的应用 

模型

 

预训练流程: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,解码器尝试重构缺失的像素信息,还原原始图片。 

图片还原:

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

 实验过程

主要结果:

 

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 %
  • 网格采样

训练时间:

 

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

绝对时间

128个 TPU v3的 core, tensorflow 实现

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

 

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

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

 

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

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

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

 

 

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

图8:跟 ViT 里面的结果比

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

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

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

到底调多少层:

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

调 4 - 5 层比较好

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

结论

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

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

和 NLP 类似的效果:

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

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

scale well:能跑大数据集。

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


 

论文: 原文链接

代码:代码链接


http://chatgpt.dhexx.cn/article/KAVbHLUf.shtml

相关文章

深度学习:MAE 和 RMSE 详解

平均绝对误差MAE(mean absolute error) 和均方根误差 RMSE(root mean squared error)是衡量变量精度的两个最常用的指标,同时也是机器学习中评价模型的两把重要标尺。 那两者之间的差异在哪里?它对我们的生活有什么启示…

RMSE、MAE等误差指标整理

1 MAE Mean Absolute Error ,平均绝对误差是绝对误差的平均值 for x, y in data_iter:ymodel(x)d np.abs(y - y_pred)mae d.tolist()#maesigma(|pred(x)-y|)/m MAE np.array(mae).mean() MAE/RMSE需要结合真实值的量纲才能判断差异。 下图是指,假如g…

MAE详解

目录 一、介绍 二、网络结构 1. encoder 2. decoder 3. LOSS 三、实验 全文参考:论文阅读笔记:Masked Autoencoders Are Scalable Vision Learners_塔_Tass的博客-CSDN博客 masked autoencoders(MAE)是hekaiming大佬又一新作,其做法很…

crontab用法详解

crontab命令用于设置周期性被执行的命令,适用于日志备份,清理缓存,健康状态检测等场合。 crontab的配置文件:/etc/crontab

linux的crontab用法与实例

linux的crontab用法与实例 crontab的适用场景 在Linux系统的实际使用中,可能会经常让系统在某个特定时间执行某些任务的情况,比如定时采集服务器的状态信息、负载状况;定时执行某些任务/脚本来对远端进行数据采集或者备份等操作。 首先通过…

定时任务 crontab 命令安装和用法整理

Crontab 概念 crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令,类似于闹钟,可以定时执行任务。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中(是“cron table”的简写&#…

crontab用法与实例

crontab用法与实例 本文基于 ubuntu 18.04 在Linux系统的实际使用中,可能会经常碰到让系统在某个特定时间执行某些任务的情况,比如定时采集服务器的状态信息、负载状况;定时执行某些任务/脚本来对远端进行数据采集等。这里将介绍下crontab的配…

crontab的基本用法

1、 crontab -l 查看所有的定时任务 2、 crontab -e 编辑定时任务。 i 进入编辑模式 。esc退出编辑模式。:wq! 保存并退出。 报错信息: “/tmp/crontab.4qE940”:1: bad month errors in crontab file, can’t install. 说明定时任务编辑失败,文件中有错…

linux中crontab的用法

一:crontab 简介 crontab是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程…

1.4 - 操作系统 - Linux计划任务,CronTab用法详解

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「订阅专栏」:此文章已录入专栏《网络安全入门到精通》 CronTab计划任务 一、服务二、查看计划任务三、编辑计划任务四、删除计划任务五、配置文件Linux系统使用CronTab命令来操作计划任务。…

crontab 详细用法、定时任务 、时间规则

简介 Linux crontab和Windows task schedules非常的相似。Crontab可以用来在系统中定期的执行任务。比如:写了一个爬虫需要每天早上八点执行,就可以用到Crontab;安装的Tomcat服务器需要每天凌晨重启一次,也可以使用到Crontab。总之&#xff0…

crontab的使用方法介绍

使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命令。例如系统管理员安排一个备份任务使其每天都运行 安装:apt-get install cron (服务器环境下默认都会安装) 使用:crontab -e 进入编辑页面(第一次进入会让你选择编辑…

Crontab配置及使用总结

1、 crontab命令概念 crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。 cron 系统调度进程。 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不…

APP测试基本流程及测试基本点

1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间。正式测试前先向主管确认项目排期。 1.3测试资源 测试任务开始前,检查…

1 APP测试基本流程

1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间。正式测试前先向主管确认项目排期。 1.3测试资源…

APP测试基本流程及测试要点

APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间。正式测试前先向主管确认项目排期。 1.3测试资源 …

手机app测试方法(一)基本流程

1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间。正式测试前先向主管确认项目排期。 1.3测试资源…

App测试基本流程以及注意事项

目录 1 APP测试基本流程 1.1流程图 1.2测试周期 1.3测试资源 1.4日报及产品上线报告(内部报告机制) 2 App测试点 2.1安全测试 2.1.1软件权限 2.1.2安装与卸载安全性 2.1.3数据安全性 2.1.4通讯安全性 2.1.5人机接口安全性 2.2安装、卸载测…

App自动化测试怎么做?实战分享App自动化测试全流程

一、什么是app测试?什么是app自动化测试? 概念:所谓app测试也称之为移动测试,通俗易懂的理解就是测试我们平时手机使用的程序。那什么是app自动化测试呢? 通常情况下是随app产品不断迭代更新,给测试⼈员也…

安卓APP测试要怎么测,测试流程和重点有哪些?我来告诉你

目录 一、安卓系统知识概述 1.1 安卓系统架构 1.2 安卓权限系统 1.3 认识adb与安卓间的通信 二、安卓APP测试流程图 三、安卓App测试点 3.1 UI测试 3.2 兼容性测试 3.3 安装卸载/本地升级测试OTA 3.4 版本在线升级测试FOTA 3.5 交互测试 3.6并发测试 3.7 客户端数据…