ViT和MAE模型结合初探
介绍
transfomer在NLP领域的应用已经非常广泛,但是在CV领域的应用还比较少,主要是因为CV领域的数据是二维的,而transfomer是基于序列的,因此需要将二维数据转换成序列数据,这就是ViT的由来。ViT是将图像分割成一个个patch,然后将patch展开成序列,再输入到transformer中,这样就可以将transformer应用到CV领域了。然而transformer相比于CNN缺少一个平移不变性,因此Transformer需要在模型中学习到这个归纳偏差(inductive bias),因此需要更多的数据来训练Transformer模型,来达到相同的性能。在ViT论文中,作者在使用相同的ImageNet-1k的数据集时,性能相比于当时的baseline模型还要差1~2百分点,当在更大的数据集上ImageNet-100k上训练时,ViT的性能已经能够媲美CNN的SOTA了,当在谷歌的大规模数据集JFT-300M上训练时,ViT的性能已经超过了CNN的SOTA了。因此,ViT的性能与数据集的大小是正相关的,这也是ViT的一个缺点,因为ViT的训练需要更多的数据,而且训练时间也会更长。
具有标记的数据往往相比于无标记的数据集更难以获取,并且获取的成本也要远远高于无标记数据集。因此,基于无标记数据的无监督学习成为了目前备受关注的研究方向。目前无监督学习方向主要分为两大类:对比学习和掩码学习。
- 对比学习通过设置正样本和负样本,正负样本通过模型得到各自的特征,设定loss使得特征的相似度越低越好;这使得模型能够通过关注正负样本的差别来学习到深层的表示,不同领域的对比学习设定正负样本的规则也不同,在分类任务中可以将和当前样本一致的数据视为正样本,不一致的视为负样本。
- 掩码学习通过将输入数据的一部分掩盖,然后让模型去预测掩盖的部分,这样模型就能够学习到输入数据的一些特征;掩码学习不经用于CV,也用于NLP等众多领域,如BERT、GPT等。在CV领域目前比较流行的掩码学习模型为MAE(Masked AutoEncoder)、SIMM。
无监督学习能够通过大量无标记的数据学习到数据的深层表示,而同时ViT需要大量的数据。一个很自然的想法是将ViT和MAE等无监督学习的模型结合起来,通过无监督学习得到的backbone来指导ViT的训练,从而减少ViT的训练数据,并且帮助ViT学习到更加深层的表示。
主要方法
- 直接将MAE的训练得到的模型作为ViT的backbone,然后在ViT的训练中进行微调。从头训练一个MAE显然对于我来说是不显示的,MEA的模型可以从网上下载,由于MAE训练的模型已经取得了很好的效果,显然它已经学习到了诸如平移不变性等CNN和图像等众多的性质,因此直接在MAE得到的模型上做ViT的微调,获取可以继承MAE的性质,同时又能够学习到特定领域的特征。
- 使用知识蒸馏的方法,将MAE的模型作为teacher模型,ViT作为student模型,通过知识蒸馏的方法来训练ViT。知识蒸馏的方法是将teacher模型的输出作为student模型的标签,通过最小化student模型的输出和teacher模型的输出的差异来训练student模型。知识蒸馏的方法可以帮助student模型学习到teacher模型的知识,从而达到和teacher模型相近的性能。和ViT一同发表的另一篇DeiT模型描述了使用知识蒸馏的方法,使用CNN作为teacher模型,transformer作为stduent模型,可以训练一个性能相比于CNN更好的模型。这说明CNN作为teacher模型,它可以传送关于一些平移不变性的归纳偏差给transformer模型,从而帮助transformer模型学习到更好的表示。因此,我们可以使用MAE作为teacher模型,ViT作为student模型,通过知识蒸馏的方法来训练ViT,从而帮助ViT学习到更好的表示。因为,我们也认为MAE已经学习到了一些关于平移不变性的归纳偏差,因此可以帮助ViT学习到更好的表示。
实验设计
由于算力的原因,我采取了一些折衷的处理方式:
- 无法从头训练一个MAE模型,因此我直接从transformer的社区获得了一个MAE模型,这个模型是在ImageNet-1k上训练的,所以为了避免我训练的数据已经在Image-1k上,我使用了人脸作为训练数据,ImageNet-1k中并不存在大量的人脸数据.
- 在知识蒸馏中,无法从头开始进行蒸馏,学习到一个新的模型,因此我只观察了一段时间的蒸馏过程,主要是观察蒸馏过程中的loss变化。
对于方法1,测试了多种不同的微调和迁移方式,例如只迁移Patch_embedding, + transformer_block.只对FC进行微调,只对Block进行微调,和全部一起训练。
对于方法2,观察相同training配置下的loss的变化情况,和ViT训练的loss情况进行对比。
为了节省显存,加快训练速度,采用了目前较为流行的fp16的压缩模型的方式,即将模型的参数转换成fp16的数据类型,这样可以减少显存的占用,加快训练速度。但是,这样也会带来一些问题,例如在使用fp16的情况下,模型的参数的梯度会变得非常小,因此需要对梯度进行放大,这样会导致梯度爆炸的问题,因此需要对梯度进行裁剪,这样会导致模型的收敛速度变慢。因此,我在训练过程中,对梯度进行了裁剪,裁剪的阈值为1.0。
实验结论
通过掩码学习得到的ViT模型是可以作为ViT的预训练模型,并且,只移植PatchEmbedding相比于只移植TransformerBlock,效果更好。这个原因可能是因为PatchEmbedding是是确定位置编码的,在ViT中使用的是可学习的PositionEmbedding,在ViT论文中,作者画出的Patch Embedding图像也能够索命PM层包含了模型的位置编码信息。
通过知识蒸馏的方法,ViT的loss下降的更快,这表明MAE确实将一些关于平移不变性的归纳偏差传递给了ViT,从而帮助ViT学习到更好的表示。为了进一步说明通过MAE进行知识蒸馏能够使得ViT更快理解平移不变性,将PM层的参数通过ViT的方法展示出来,可以证明ViT确实理解了平移不变性,PM层更类似最终的ViT的PM层。我们并没有完整的通过类似于DeiT一样训练一个ViT,知识观察了Loss曲线,并取出了训练过程中的部分层参数进行分析,所以对于最终的结果的性能还需要进一步的分析。
附录
本实验采用了ViT-T的模型结构;详细的结构可以参看ViT论文。
知识蒸馏:采用了类似DeiT的令牌来进行知识的传递,相比于传统的通过最小化模型输出的特征方式,这种方式能够在模型的每一层都进行知识传递,从而更好的帮助模型学习到更好的表示,而不仅仅是在最后一层通过梯度反向传播。
MAE的模型结构:采用了MAE的模型结构,详细的结构可以参看MAE论文。
ViT和MAE模型结合初探的更多相关文章
- Generative Pre-trained Transformer(GPT)模型技术初探
一.Transformer模型 2017年,Google在论文 Attention is All you need 中提出了 Transformer 模型,其使用 Self-Attention 结构取 ...
- CSS3盒模型display初探(display:box/display:flex)
可以实现水平等分切割等.日后在研究,做个记录. 首先要声明:display:box,像谷歌浏览器要加前缀识别码:display:-webkit-box; 然后才开始使用其属性,同时也是要带上前缀识别码 ...
- Kakao Brain 的开源 ViT、ALIGN 和 COYO 文字-图片数据集
最近 Kakao Brain 在 Hugging Face 发布了一个全新的开源图像文本数据集 COYO,包含 7 亿对图像和文本,并训练了两个新的视觉语言模型 ViT 和 ALIGN ViT 和 A ...
- 大型网站演化(转载 http://homeway.me/2014/12/10/think-about-distributed-clusters/)
0x01.大型网站演化 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率. 集群主要分为:高可用集群(High Availability Clu ...
- [转]基于WorldWind平台的建筑信息模型在GIS中的应用
1 引言 随着BIM(Building Information Modeling)的不断发展,建筑信息建模的理念贯穿着建筑.结构.施工.运行维护以及拆迁再规划的整个建筑的生命周期,这种理念不仅使得 ...
- [Feature] Final pipeline: custom transformers
有视频:https://www.youtube.com/watch?v=BFaadIqWlAg 有代码:https://github.com/jem1031/pandas-pipelines-cust ...
- 图灵,咕泡,鲁班学院--Java高级架构师-互联网企业级实战VIP课程(价值6380)
课程介绍: 讲课内容涉及Java互联网技术工程框架.应用框架. 性能调优 (Tomcat Nginx JVM) 分布式框架(并发编程 Zookeeper N ...
- ICCV2021 | 重新思考视觉transformers的空间维度
论文:Rethinking Spatial Dimensions of Vision Transformers 代码:https://github.com/naver-ai/pit 获取:在CV技 ...
- EdgeFormer: 向视觉 Transformer 学习,构建一个比 MobileViT 更好更快的卷积网络
前言 本文主要探究了轻量模型的设计.通过使用 Vision Transformer 的优势来改进卷积网络,从而获得更好的性能. 欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结.最新技术跟 ...
- Unity3D游戏开发初探—2.初步了解3D模型基础
一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...
随机推荐
- nacos v2.2 k8s部署启动报错:nacos server did not start because dumpservice bean construction failure. errMsg102, errllsg dataSource or tableName is null
背景 最近搭建个nacos环境,用的镜像是2.2版本的,yaml如下: nacos-conf apiVersion: v1 kind: ConfigMap metadata: name: nacos- ...
- C++面向对象多级菜单向Arduino的移植
前段时间写了一篇文章<C++面向对象语言自制多级菜单>,文中指出了可以将HeleMenu库进行移植,现已完成技术思路,特此记录. 一.特性 基本与上一篇文章指出的一致,只是将菜单显示和响应 ...
- W5100 硬件协议栈 调试经验
--- title: W5100 硬件协议栈 调试经验 date: 2020-06-21 11:22:33 categories: tags: - debug - tcpip - w5100 - su ...
- QT学习:07 字符编码的问题
--- title: framework-cpp-qt-07-字符编码的问题 EntryName: framework-cpp-qt-07-char-coding date: 2020-04-13 1 ...
- 题解:洛谷 P1137 旅行计划
标签:图论,拓扑,dp 题意 给定一张 \(n\) 个点 \(m\) 条边的 DAG,对于每个 \(i\),求以它为终点最多经过多少个点? 思路 由于是 DAG,求的是终点 \(i\) 经过的所有点, ...
- 三层交换机vlan间路由
sw1: [Huawei]vlan batch 10 20 [Huawei]int e0/0/1 [Huawei-Ethernet0/0/1]port link-type access [Huawei ...
- 嵌入式基础测试手册——基于NXP iMX6ULL开发板(3)
基于测试板卡:创龙科技TLIMX6U-EVM是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理器设计的评估板,由核心板和评估底板组成.核心板经过专业的PCB Layout ...
- virtualbox ubuntu拓展存储空间
1. 关闭虚拟机,右键点击virtualbox图标,选择打开文件位置,记录下路径: 2. 找到需要拓容的ubuntu虚拟机的.vdi文件,记录下路径: 3. windows命令行转到virtualbo ...
- SpringMVC面试题及答案
SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决? 问题:单例模式,在多线程访问时有线程安全问题 解决方法:不要用同步,在控制器里面不能写字段 SpringMvc 中控制器的注 ...
- 【一天一点.NET小知识】运用向量Vector<T>加速求和计算
随着 .NET 版本的演进,从 .NET Standard 2.0 版本开始,支持 Vector<T> 类型. Vector<T> 类型:表示指定数值类型(适用于并行算法的低级 ...