从ViT到MAE,transformer架构改造Autoencoder

news2024/11/17 7:20:44

Vision Transformer (ViT)

论文出处[2010.11929] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale (arxiv.org)

传统的卷积神经网络(CNN)在图像分类、目标检测等任务上表现出色,但其局限性也逐渐显露:对大规模数据的依赖、对局部特征的过度关注等。ViT的出现颠覆了传统认知,它采用了自注意力机制(self-attention)来捕捉图像全局信息,避免了CNN中固有的局部感知问题。

但是图片数据是信息量十分大的,这个和1语言有着本质区别。人们日常沟通的语言都是具备高密度信息的,是高度凝练的结果。所以再注意力机制解决NLP问题的任务中,一般是以句子的形式去处理文本。但是在图片的角度来说这是完全不可行的。我们不能直接无脑的把一个图片按照所有的像素来展开,这样去做注意力机制产生的计算量是十分惊人的。

为了解决这个问题,ViT模型将输入图像分成若干个图块,通过线性变换后将它们展平成序列,然后引入自注意力机制对序列进行处理,最终完成图像分类等任务。这种全注意力的机制使得ViT在一定程度上克服了CNN的不足,并在多个视觉任务上展现了出色的性能,比如在ImageNet数据集上的表现超越了传统CNN模型。

工作流程

  1. 图像分块: 首先,输入的图像被分割成固定大小的图块。每个图块包含像素信息,并被视为序列化的数据。

  2. 嵌入式嵌入(Embedding): 接下来,每个图块通过一个线性投影(projection)转换为具有更高维度的特征向量,以便进行后续处理。

  3. 位置编码(Positional Encoding): 为了保留图块之间的空间位置信息,一个位置编码向量被添加到每个图块的特征向量中,以区分它们在输入图像中的位置。

  4. Transformer编码器: 特征向量(包含位置编码)随后被输入到Transformer编码器中。这里的Transformer编码器通常包含多个Transformer块,每个块由多头自注意力机制(Multi-head Self-Attention)和前馈神经网络(Feed-Forward Neural Network)组成。

    • 自注意力机制(Self-Attention): 通过自注意力机制,每个图块可以“关注”其他所有图块,从而捕捉全局特征。这种机制使得ViT能够实现对整个图像的全局感知,而非局部。

    • 前馈神经网络(Feed-Forward Neural Network): 在自注意力机制之后,每个位置的特征向量会经过一个前馈神经网络进行非线性变换,以更好地学习特征表示。

  5. Transformer解码器(可选): 在某些任务中,ViT可能还包含一个Transformer解码器,用于执行特定的输出任务,如图像分类、目标检测等。

  6. 输出层: 最终,ViT的输出会通过一个适当的输出层结构进行处理,如全连接层用于图像分类,或者特定的检测头用于目标检测。

Masked Autoencoder (MAE)

论文出处

[2111.06377] Masked Autoencoders Are Scalable Vision Learners (arxiv.org)

MAE其实就是ViT的一个改进。这个改进有点类似于Denoising Autoencoder的思想。作者把图片的可见patch转成序列形式,用编码器进行编码,前后的维度是不变的,根据位置嵌入给序列加上被掩码的部分,再做decoder解码,解码后的维度也不变,但是解码器预测还原出了一个patch序列,然后转化可以成为一个新的清晰图片。可以观察到encoder画的比decoder更大,因为编码器是更加复杂的,需要深层网络去学习图片的特征,但是decoder只是一个轻量的解码器

MAE模型预训练

  1. 切分图片,随机均匀的采样策略,挑选其中的一小部分作为训练的输入,其余都被mask

  2. 针对可见的部分做位置编码得到encoder patches

  3. 做位置还原,加入被掩码的部分mask ed patches

  4. decoder做预测,预测缺失部分的像素点

  5. loss部分就是和原来的图片计算MSE

linear probing:在预训练模型的后面加上一些线性变换层来做下游任务改造,不会影响到整个模型的参数

fine tune:微调模型,会修改整个模型的参数

几个关键的点

  1. 不同的mask对应的是不同的语义输出,模型可以有泛化能力。作者选用了75%的mask比例,他们对模型的linear probing和fine tune统计比较实验都发现这个比例最合适

  2. decoder的深度和宽度对于linear probing影响很大,对于fine tune比较小,这是因为linear probing只会调整模型的浅层,受预训练模型约束较大

  3. encoder不需要使用masked token,这个位置和NLP有区别,因为下游任务是看不到这些部分的。BERT的encoder和MAE的decoder的类似,MAE先用不带mask的部分encoder是为了获取高维语义信息,提高信息的密度,这是图片和文字任务区别,文字本身就是一个高密度的信息,而图片中含有很多的无用信息。这也解释了为什么要选用75%这么高比例的mask,因为图片本身的冗余信息太多了,只有mask高到了一定的比例任务才会具有挑战性,模型才能更好地学习

  4. 重建像素用到了归一化像素值的方式,这样可以让patch之间的差异更加明显模型能够学习到更多的特征

  5. 数据增强的效果其实不是很明显,因为MAE这个操作本身就是一个数据增强

Partial Fine-tuning:

作者提出的一个概念,结合linear probing和fine tune,调整encoder的最后一部分的层,达到两者之间效果的一个均衡

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1467339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【大数据】Flink 内存管理(二):JobManager 内存分配(含实际计算案例)

Flink 内存管理(二):JobManager 内存分配 1.分配 Total Process Size2.分配 Total Flink Size3.单独分配 Heap Size4.分配 Total Process Size 和 Heap Size5.分配 Total Flink Size 和 Heap Size JobManager 是 Flink 集群的控制元素。它由三…

virtualenv env_name 使用 virtualenv 创建 python 虚拟环境

为什么要用这个 win7 32 环境下 pycharm 只能用低版本的,比如 2016,2018 此时pycharm 图形界面创建的 虚拟环境版本很低,有些包不兼容,因此用 virtualenv 模块,可以创建 20 版本以上的虚拟环境 virtualenv env_name官方文档 http…

全面解析企业财务报表系列之四:财务报表的真实性和可靠性

全面解析企业财务报表系列之四:财务报表的真实性和可靠性 一、什么是会计方法二、选择会计方法三、会计方法的重要性四、会计报表常用的造假手段五、财务报表经常被遗漏的重要事件六、财务报告造假的资信敏感性七、财务报告审计的重要性八、审计报告 一、什么是会计…

nginx重新编译添加模块或去除不需要的模块

在使用nginx中,我们可能需要对已经安装的nginx进行添加或者删除模块 1、先查看nginx安装了哪一些模块 nginx -V2、来到nginx源码目录,根据如下规则,自行根据需求更改命令 如果要去掉nginx自带的模块,就是用–without做为前缀进…

Stable Diffusion 绘画入门教程(webui)-ControlNet(IP2P)

上篇文章介绍了深度Depth,这篇文章介绍下IP2P(InstructP2P), 通俗理解就是图生图,给原有图加一些效果,比如下图,左边为原图,右边为增加了效果的图: 文章目录 一、选大模型二、写提示词三、基础参…

Siamfc论文中文翻译(详细!)

Fully-Convolutional Siamese Networks for Object Tracking 用于对象跟踪的Siamese网络 说明 建议对照siamfc(2021版)原文阅读,翻译软件翻译出来的效果不好,整体阅读体验不佳,所以我对译文重新进行了整理&#xff0…

5分钟JavaScript快速入门

目录 一.JavaScript基础语法 二.JavaScript的引入方式 三.JavaScript中的数组 四.BOM对象集合 五.DOM对象集合 六.事件监听 使用addEventListener()方法添加事件监听器 使用onX属性直接指定事件处理函数 使用removeEventListener()方法移除事件监听器 一.JavaScript基础…

悄悄话花费的时间(C语言)【二叉树各结点统计求和】

题目描述 给定一个二叉树,每个节点上站着一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。 初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收到悄悄话花费的时间。 输入描述 …

element导航菜单el-menu添加搜索功能

element导航菜单-侧栏&#xff0c;自带的功能没有搜索或者模糊查询。 找了找资料 找到一个比较可行的&#xff0c;记录一下&#xff1a; //index.vue的代码 <div style"overflow:auto"><el-menu :default-active"$route.path":default-openeds&…

如何在 Tomcat 中为 Web 应用程序启用和配置缓存?

在Tomcat中为Web应用程序启用和配置缓存通常涉及到对Tomcat的连接器&#xff08;Connector&#xff09;进行配置&#xff0c;以及可能的话&#xff0c;配置Web应用程序本身以支持缓存。 1. 配置Tomcat连接器以启用缓存 Tomcat的连接器可以通过其配置来启用各种…

开源免费的NTFS for mac工具mounty

开源免费的NTFS for mac工具mounty 安装依赖 brew install gromgit/fuse/ntfs-3g-macbrew install --cask macfuse安装mounty 如果已经安装macFUSE和ntfs-3g-mac&#xff0c;可以直接点击下载的dmg安装包&#xff0c;安装升级。第一次启动mounty&#xff0c;你需要接受一系列…

Oracle迁移到mysql-导出mysql所有索引和主键

导出建库表索引等&#xff1a; [rootlnpg ~]# mysqldump -ugistar -pxxx -h192.168.207.143 --no-data -d lndb > lndb20230223-1.sql 只导出索引&#xff1a;参考&#xff1a;MYSQL导出现有库中的索引脚本_mysql 导出数据库所有表的主键和索引-CSDN博客 -- MYSQL导出现有…

国内排名比较好的ai软件有哪些?极力推荐这几款

随着人工智能技术的不断演进&#xff0c;越来越多的写作者开始借助AI写作软件来提升写作效率。在国内&#xff0c;有许多实用且易用的AI写作工具&#xff0c;让写作变得更加便捷和高效。以下是6款国内优秀的AI写作软件&#xff0c;让您的写作过程更加顺畅。 第一款&#xff1a;…

[附完整代码]群智能算法跑21种真实世界优化问题,并输出结果到excel||群智能算法跑CEC 2020真实世界优化问题,并输出结果到excel

1、简介 灰狼算法跑跑21种真实世界优化问题|足球训练队优化算法跑21种真实世界优化问题||牛顿拉夫逊算法跑21种真实世界优化问题||冠状豪猪CPO跑21种真实世界优化问题。 ‘FTTA’,‘BWO’, ‘CPO’, ‘FHO’, ‘GWO’, ‘HHO’, ‘NRBO’,‘SCA’,‘SGA’,WOA’跑21种真实世…

Python爬虫-报错requests.exceptions.SSLError: HTTPSConnectionPool

在学习python爬虫&#xff0c;在公司运行代码没有问题&#xff0c;但是下班回来把代码拉下来运行&#xff0c;却出现问题。 问题&#xff1a; requests.exceptions.SSLError: HTTPSConnectionPool(host‘campusgateway.51job.com’, port443): Max retries exceeded with url…

如何用jmeter请求application/octet-stream,image/jpeg

用postman调用时&#xff1a; 用jmeter&#xff1a; 注意上图不要勾选&#xff0c;不然会把所有的内容都以二进制传进去&#xff0c;我们不勾选只传二进制的图片内容&#xff0c;勾选了会把MIME类型、参数名称都转为二进制传进去。会报错。

MySQL-基本使用,数据类型,简单操作

1. 数据库概述 1.1 数据库(DatBase) 数据库&#xff0c;就是遵循一定数据格式的数据集合&#xff0c;可以认为他是对文件系统的改进。它解决了不同操作系统之间&#xff0c;数据格式的兼容性问题。也就是说&#xff0c;只要是同一个数据库的数据文件&#xff0c;即使从windows迁…

linux服务器tomcat日志中文出现问号乱码

目录 一、场景二、排查三、原因四、解决 一、场景 tomcat日志的中文出现问号乱码 乱码示例 ??[377995738417729536]????????? ac??????????????message:二、排查 1、使用locale命令查看服务器当前使用的语言包 发现只用的语言包为utf-8&#xff0…

Openstack云计算框架及前期服务搭建

openstack介绍 Openstack是一个开源的云计算管理平台项目&#xff0c;由几个主要的组件组合起来完成具体工作&#xff0c;支持几乎所有的云环境&#xff0c;项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台 ----百度百科 Openstack是一个云操作系统&a…

Rust通用代码生成器莲花发布红莲尝鲜版二十一发布介绍视频,前端代码生成物大翻新

Rust通用代码生成器莲花发布红莲尝鲜版二十一发布介绍视频&#xff0c;前端代码生成物大翻新 Rust通用代码生成器发布了红莲尝鲜版二十一的最新介绍视频&#xff0c;前端代码生成物大翻新。视频请见&#xff1a; Rust通用代码生成器&#xff1a;莲花&#xff0c;红莲尝鲜版二…