当前位置: 首页 > news >正文

【无监督】2、MAE | 自监督模型提取的图像特征也很能打!(CVPR2022 Oral)

在这里插入图片描述

文章目录

    • 一、背景
    • 二、方法
    • 三、效果

论文:Masked Autoencoders Are Scalable Vision Learners

代码:https://github.com/facebookresearch/mae

出处:CVPR2022 Oral | 何凯明 | FAIR

一、背景

本文的标题突出了两个词:

  • masked:借鉴了 BERT 中的 mask 方法,在视觉中引入了 mask 的操作,随机 mask 掉一些图像块,然后预测这个图像块
  • scalable:说明模型有很好的扩展性

auto:自回归模型,特点就是标签和样本来自于同一个东西

  • 比如 NLP 中一个被 mask 掉一些 word 的句子是输入样本, mask 掉的单词是学习的标签,这两个东西都来自于同一个句子。所以说不说 auto 都是可以的
  • 但在视觉任务中,很少有样本和标签是来自于同一个东西的,一般标签是文本,样本是图片
  • 所以这里的 auto 的意思就是说,在模型训练的时候,训练的样本和标签是来自于一个图片的,所以引入了 auto 这个前缀
  • autoencoder 就表示自编码器

MAE 是怎么做的:

  • 随机的盖住图片中的一些块儿,然后再去重构这些被盖住的像素
  • 思想来自于 BERT,这里 mask 掉的是一个 patch

核心设计:

  • 非对称的 encoder-decoder 架构,非对称是指编码器是作用在可见的像素上,解码器是作用在所有块的特征上的(对被 mask 掉的块来说,解码器是要学习不可见的块)。解码器相比编码器更小,开销不到编码器的 1/10
  • 作者发现当遮掉图像中绝大部分的像素(如 75%)时,那么会得到一个很有意义的自监督的任务(因为如果遮住很少的部分可能插值就能重构了,而学习不到更深层的表征)

效果:

  • 在 ViT-H 上使用小的数据集 ImageNet-1k 的时候,就能得到在 ViT 中使用百倍以上图片训练的效果(87.8%),而且是没有使用标签的
  • MAE 主要是用来做迁移学习的,在迁移学习上表现的比较好,在物体检测、示例分割、语义分割上都挺好的,所以通过不带标签的数据使用自监督方法训练出来的模型,在迁移学习上的效果也很不错,达到了 BERT 在 NLP 中的效果。

MAE 和对比学习的不同(对比学习也是自监督学习的一种):

  • MAE 是对一张图像随机 mask 掉像素,通过模型来还原像素
  • 对比学习是使用代理任务(如数据增强)来将一张图像变成 两张不同的图像,通过对比学习来让模型学习哪些图像是正样本对,从而学习出图像特征

二、方法

在这里插入图片描述

注意:

  • encoder 的输入是经过 mask 的 patch embedding
  • decoder 的输入是 encoder 的输出 embedding 被 mask 掉的 token 编码,这里 mask 掉的 token 编码是待学习的的向量,而不是直接把原图信息输入了

预训练过程:

  • 输入是被打 patch 然后遮盖一些 patch,灰色表示被 mask 掉,对 patch 得到 patch embedding ,且加上位置编码,然后随机打乱这些 patch embedding,如果要删除80%的话,就把最后的 80% patch 拿掉就可以了,和随机抹除 mask 的意义是一样的。
  • 把保留的可见的 patch embedding 送入 encoder(ViT),得到每个块的特征表示(较大的绿色块),经过提取后的特征块会根据之前块的编号重新拉长,也就是恢复到打乱顺序之前的顺序,被 mask 掉的块也会放上原来的像素特征(小的灰色块)
  • 重新放回原来位置的特征序列送入 decoder,用于恢复全部的像素信息,然后计算 MSE loss
  • 而且这里的编码器灰色块比解码器更大一些,说明主要的计算量来自编码器,因为对图像信息的编码很重要,而且编码器接收的是少量的没有被盖住的图片,计算量相对少一点

怎么重构出原图:

  • 解码器的最后一层是线性层,如果一天 patch 是 16x16 的话,就输出 256 维度的特征,拿到后 reshape 到 16x16 即可

损失函数:MSE

  • 预测像素和真正像素做相减,然后做平方和
  • 而且只在被 mask 掉的像素块上做 MSE,因为有一些像素是没有被盖住的,本来模型就是可见的,所以不用计算 MSE

如果像用这个结构做一些其他的视觉任务:

  • 只需要编码器,不需要解码器,将这个结构当做一个特征提取器
  • 具体的做法就是,输入的图像不用 mask,只需要打成 patch 序列,然后经过 encoder 得到对应的特征就可以了

效果展示:

图 2 是使用 MAE 在 ImageNet 验证集上构造的图片,这些是测试结果,图像没有参与训练

  • 左边一列是遮住 80% 的图像
  • 中间一列是重构的图像
  • 右边一列是真实的图片
  • 虽然细节比较模糊,但是这种能重构的思路已经很惊人了

在这里插入图片描述

在这里插入图片描述

图 4 展示了遮盖不同比例的图像的重构效果:

在这里插入图片描述

BERT 在 NLP 上取得了很大的成功,计算机视觉这边也有很多使用 BERT 思想的方法,但都不是很成功,作者认为有三个原因:

  • 第一,视觉任务上之前大多使用的都是 CNN 这种操作方式,通过不断叠加卷积核,来提取聚合的图像像素信息,但是 mask 这种操作不太适合 CNN,因为在 transformer 中,mask 掉的是一个单词,这个词是一个特定的词,会一直保留下来,和别的单词区分开来。如果在卷积上做 mask,也就是把部分像素盖住或者换上特定的值,在卷积时,无法把这部分所表达的信息识别出来,所以在后面的时候比较难还原这块到底是什么,不好加入位置编码。但现在 ViT 在视觉上的成功,已经能解决了。
  • 第二,信息的粒度不同,NLP 中每个词表示的是有语义信息的,如果去掉某些词可能会导致语义变化。但是在图片中,会有冗余的像素信息,如果去掉一个块的话,可以使用插值还原。所以作者将高比率的块随机去掉,就能极大降低图像的冗余性。这样的策略是自监督的模式,就是图像自己监督自己,会驱使模型学习全局的信息,而不是局部的信息(可以看图 2 和图 4)
  • 第三,解码器要还原的东西不同,在 NLP 中,mask 掉的是单词,解码器要还原的是单词,单词是有个哦层语义信息的,而在视觉中,mask 掉的像素,解码器要还原的是相似,像素是比较低层的信息。所以 BERT 中使用的一层全连接层解码器在图像中是不可用的,图像中需要更大的解码器来还原更复杂的特征

MAE 可以看做 BERT 在视觉上的扩展,但语言和视觉有很多不同:

  • 语言中,一个单词是有语义信息的
  • 图像中,一个 patch 虽然是图像的一部分,但不是独立的个体,不是一个含有语义信息的分割,可能是多个物体的一小块
  • 但 MAE 学到了比较好的效果,也能做一些复杂的任务,所以说 MAE 或 transformer 确实能学习一些隐藏的表达

三、效果

  • 左侧:ViT 原文在 ImageNet-1k 上训练的结果
  • 中间:作者重构和改进的的 ViT 方法(因为原文训练的不太稳定),主要是加了一些正则化的方法,因为 BiT 论文当时说 transformer 需要在很大的数据集上才能训练好,但后面大佬们就发现加入一些正则化的项也能在小的数据集上训练出好的结果
  • 右侧:MAE 在 ImageNet-1k 上预训练,再在 ImageNet 微调

在这里插入图片描述

各种消融实验:

在这里插入图片描述

mask 比例:75% 最好

在这里插入图片描述

mask 方式:随机采样最好

在这里插入图片描述

预训练轮数和微调轮数:

在这里插入图片描述

迁移学习效果:COCO 检测和分割

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

相关文章:

【无监督】2、MAE | 自监督模型提取的图像特征也很能打!(CVPR2022 Oral)

文章目录 一、背景二、方法三、效果 论文:Masked Autoencoders Are Scalable Vision Learners 代码:https://github.com/facebookresearch/mae 出处:CVPR2022 Oral | 何凯明 | FAIR 一、背景 本文的标题突出了两个词: masked…...

pytorch单机多卡后台运行

nohup sh ./train_chat.sh > train_chat20230814.log 2>1&参考资料 Pytorch单机多卡后台运行的解决办法...

linux配置上网 linux adsl拨号上网设置

Linux里面配置ADSL上网是件很麻烦的事。但配置完成之后就能开机自动拨号上网,可谓十分的方便。支持的系统有Redhat,CentOS,SuSE,FreeBSD,Ubuntu等常见的Linux。 工具/原料 ADSL网络,电信,网通,移动等常见宽带。 Linux系统的安装光…...

XML学习基础知识归纳(一)

一、XML基本概述 (1)概念:XML是可扩展的标记语言,xml文档的后缀名为 .xml (2)作用:用来用来传输和存储数据,不用于表现和展示数据,这点呢相比于HTML来说是不同的&#…...

2023.8.14论文阅读

文章目录 ESPNet: Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation摘要本文方法实验结果 DeepFusion: Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection摘要本文方法实验结果 ESPNet: Efficient Spatial Pyramid of Dilated Convo…...

FL Studio for Windows-21.1.0.3713中文直装版功能介绍及系统配置要求

FL Studio 21简称FL水果软件,全称是:Fruity Loops Studio编曲,由于其Logo长的比较像一款水果因此,在大家更多的是喜欢称他为水果萝卜,FL studio21是目前最新的版本,这是一款可以让你的计算机就像是一个全功能的录音室&…...

基于网格变形的二维图像变形算法:C++实现与应用

在计算机图形学中,图像变形是一种常见的技术,它可以改变图像的形状和结构,以满足特定的视觉效果或者应用需求。本文将介绍一种基于网格变形的二维图像变形算法,并使用C进行实现。 一、算法原理 网格变形是一种基于网格的图像变形…...

【数据结构】八大排序详解

🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🐌 个人主页:蜗牛牛啊 🔥 系列专栏:🛹数据结构、🛴C 📕 学习格言:博观而约取&…...

VSCode如何设置高亮

一、概述 本文主要介绍在 VSCode 看代码时,怎样使某个单词高亮显示,主要通过以下三步实现: 安装 highlight-words 插件 配置 highlight-words 插件 设置高亮快捷键F8 工作是嵌入式开发的,代码主要是C/C的,之前一直用…...

密钥大全ubuntu

VMware Workstation Tech Preview 20H2 GG1JR-APD1P-0857Q-DQQN9-PU2CA VMware Workstation v16 Pro for Windows(反馈失效) ZF3R0-FHED2-M80TY-8QYGC-NPKYF YF390-0HF8P-M81RQ-2DXQE-M2UT6 ZF71R-DMX85-08DQY-8YMNC-PPHV8 VMware Workstation v15 f…...

Spring Task入门案例

Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 定位:定时任务框架 作用:定时自动执行某段Java代码 强调:只要是需要定时处理的场景都可以使用Spring Task 1. cron表达式 cron表达式…...

针对Android项目蓝牙如何学习

一、概述(Overview) 蓝牙是一种专有的开放式无线技术标准,用于在固定和移动设备之间进行短距离数据交换(使用2400–2480 MHz ISM波段的短波长无线电传输),从而创建具有高度安全性的个人局域网(PANs)。由电信供应商爱立信(telecoms vendor Ericsson)于1994年创建,[1…...

C++学习笔记总结练习:内存分配器编程实现

内存分配器练习 C内存分配器是用于管理程序运行时内存的工具。它负责分配和释放内存,以满足程序在运行过程中的动态内存需求。在C中,有几种内存分配器可供选择,包括操作系统提供的默认分配器、自定义分配器和第三方库提供的分配器。 默认分配…...

【uniapp】使用Vs Code开发uniapp:

文章目录 一、使用命令行创建uniapp项目:二、安装插件与配置:三、编译和运行:四、修改pinia: 一、使用命令行创建uniapp项目: 二、安装插件与配置: 三、编译和运行: 该项目下的dist》dev》mp-weixin文件导入微信开发者…...

【STM32】高效开发工具CubeMonitor快速上手

工欲善其事必先利其器。拥有一个辅助测试工具,能极大提高开发项目的效率。STM32CubeMonitor系列工具能够实时读取和呈现其变量,从而在运行时帮助微调和诊断STM32应用,类似于一个简单的示波器。它是一款基于流程的图形化编程工具,类…...

React 使用 i18n 翻译换行解决方法

当前问题: json 配置文件 "detail": {"10001": "Top 10 \nBIGGEST WINS" } 按以上方式文本在渲染的时候并不能识别我们加入 \n 要实现换行的意图,通过拆分成两个多语来实现又太低级。 解决方法: 在该多语…...

QEMU源码全解析37 —— Machine(7)

接前一篇文章:QEMU源码全解析36 —— Machine(6) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 特此致谢! 上回书讲完了q…...

如何将阿里云WiredTiger引擎的MongoDB物理备份文件恢复至自建数据库

数据库操作一直是一个比较敏感的话题,动不动“删库跑路”,可见数据库操作对于一个项目而言是非常重要的,我们有时候会因为一个游戏的严重bug或者运营故障要回档数据库,而你们刚好使用的是阿里云的Mongodb,那么这篇文章…...

SAP FIORI Launchpad 403 forbidden error

问题: 在前台输入/N/UI2/FLP 浏览器显示 403 forbidden 查阅资料得知 相关sicf 的服务未激活 note:3011106 检查以下所有服务是否已在事务代码 SICF 中激活: /default_host/sap/bc/ui2/nwbc/ /default_host/sap/bc/ui2/start_up /default_host/sap…...

【MongoDB】高性能非关系型数据库

文章目录 基本介绍MongoDB和redis做比较MongoDB 在Java中的使用MongoDB的应用场景 基本介绍 MongoDB是一个开源的、面向文档的NoSQL数据库管理系统。它采用了类似JSON的BSON(二进制JSON)数据模型,具有高度灵活性和可扩展性,被广泛…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

day36-多路IO复用

一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...