首页 > 其他分享 >VIT

VIT

时间:2024-11-14 15:41:48浏览次数:1  
标签:编码 Transformer 训练 16 patch VIT 图片

PDF: https://arxiv.org/abs/2010.11929
CODE: https://github.com/google-research/vision_transformer

一、大体内容

前面介绍了Transformer及其在NLP领域的两大发展方向BERT和GPT,但当时Transformer在CV领域的很难扩展,主要是如果对图片逐像素进行注意力机制,其复杂度是成平方增大的,比如224 * 224的图片,如果拉直则变成50776维向量,这种对应的序列维度太大,会造成注意力机制计算量非常大,而且224的图片在CV领域还算小的,为了处理这个问题,有一些方法先利用CNN进行特征提取,然后对输出的特征图在进行自注意力机制,有一些方法则是在CNN网络架构上局部采用自注意力机制,还有的采用滑动窗口来控制其复杂度,这些方式都是基于CNN架构,主要思想是通过近似来降低图片的复杂度。和VIT最像的是2020年的一篇文章,其将图片划分成2 * 2大小的块,并利用Transformer结构,在CIFAR-10数据集上取得了很好的效果;还有一篇是iGPT,其采用无监督的方法进行训练并在ImageNet上取得了72%的准确率。

VIT大体思想是将图片划分成较大的块,将块展开后经过一个线性层得到特征编码,然后直接输入到Transformer结构,并在ImageNet-21K和JFT-300M等大数据集上分类取得了很好的结果。VIT验证了纯Transformer结构在CV领域的有效性,这是一篇挖坑之作,后续很多论文都是基于其进行改进,比如探索自监督训练,应用于其他方向检测、分割。ViT还在NLP和CV之间架起了桥梁,为后续多模态发展奠定了基础。

依据参数量的不同,划分成了不同大小的模型。

由于patch大小不同,其对应的效果也不太一样,文中提到的ViT-L/16表示采用ViT-L模型,且patch的大小为16*16。

二、贡献点

  • 将CV问题转换成了一个NLP问题,直接用Transformer进行训练也能取得很好的效果
  • 将图片通过划分成块,在较大数据集上取得了很好的效果(划分块这里和20年那篇文献很像,只是别人数据集图片就小,划分为2*2,还有就是受限于资源,所以VIT从这个方面讲就是更大的块,更大的数据集)
  • 采用无监督训练方式可以带来提升,这不久后何凯明大神就提出了MAE,借鉴BERT完型填空的思路,将部分patch给抹掉,然后利用网络恢复出来和原数据进行对比学习
  • 训练同等效果的模型,ViT所用资源、耗时较小(注意这里的小是相对的,在TPUv3上训练也要2500天)

三、细节

3.1 网络结构

整体结构上和BERT一样,采用了Transformer编码器,主要不同点在于输入数据的处理。数据处理好后输入到Transformer 编码器,再将输出的特殊编码特征经过一个MLP层(包含两个有GELU的非线性层),然后再输出对应的类别信息。

其中x是图片预处理后的输入,E表示一个全连接网络,\(E_{pos}\)是位置编码,MSA是Transformer里面的多头注意力,LN表示Layernorm方法。

  • 数据前处理
    图片首先划分成一个一个的patch,每个patch单独展开后输入到一个全连接层用来提取每个patch的特征编码,然后引入一个特殊编码用于后续进行分类,在把位置编码和上述特征编码和特殊编码进行相加,保持维度不变,这就完成了数据前处理。这里以2242243的图片划分成大小16 * 16的块为例。
    计算块个数:224 * 224 / (16 * 16) = 196,则图片划分后共196个patch。
    计算每个patch的特征:196个patch 每个patch展开后维度为:16 * 16 * 3 = 768,再接入一个全连接层:权重参数为768 * 768,则最终得到的特征维度不变还是 196 * 768
    在新增一个特殊编码,特征维度变为:197 * 768
    上述特征再加上位置编码(注意是直接相加)后还是:197 * 768

3.2 归纳偏置

虽然Transformer具有全局特征,对遮挡相比于CNN要好,但是缺失了CNN拥有的归纳偏置:局部特征相同和平移等变性,但可以通过大量数据集来训练获得,如下小数据集上预训练 RestNet效果更好,规模变大后VIT效果会慢慢变好。如下图灰色实线分别表示ResNet系列精度的上下限,
不同的实心圆表示不同大小模型的效果,随着数据集的不断增大效果还在提升(ResNet152这样看也是没有到达瓶颈)。

都在大数据集上预训练,则vit在同等计算条件下 要比resnet好

3.3 模型微调和高分辨率图片

  • 模型微调
    通常在大数据集上预训练ViT模型,然后再在下游任务上进行微调,首先要移除预训练网络的预测头然后获得特殊编码的输出特征,再接入网络对下游任务进行适配。

  • 高分变率图片
    如果尺寸和训练的图片尺寸不一样,如何利用预训练好的模型。对于高分辨率图片按照相同大小的patch进行划分,这会导致序列个数变多,那提前训练好的位置编码可能又没用了,文中给的办法是采用了插值的方法,依据图像中的实际位置和预训练的位置编码对新的序列进行插值。

3.4 自监督训练

采用对部分patch进行masked,然后进行预测这种方式进行自监督学习,ViT-B/16模型相比于自监督学习的方法在ImageNet上有2%的提升,但相比于监督学习仍旧落后4%。这个后续MAE进行了改善。

3.5 直接GAP和采用特殊编码有何区别

文中为了对齐原始的Transformer模型,采用了特殊编码【class】来作为最终的输出,还有一个更直接的是不采用这种方式,直接对学习的patch编码,然后做一个全局平均池化操作(GAP),通过实验对比,其实没多大影响,只是采用GAP的方式需要对学习率进行调整。(这感觉有时候不是方法不行,而是炼丹技术不行)。

3.6不同的位置编码方式有何影响

文中采用的是一维位置编码,附录中还展示了不同位置编码的效果差异,最终发现其实影响并不大。

  • 一维编码
    按顺序给,比如1, 2, 3, 。。。, 9

  • 二维编码
    按照patch在图片中的位置给,如:11, 12, 13, 21, 。。。, 33

  • 相对位置编码
    采用相对位置,即位置之间作差。

试验表明不同的位置编码其实影响不大,作者给出的解释是图像块上做的,学习这些小块的位置关系还是相对比较简单的。

四、效果

  • 不同模型和ResNet152比较.
    在效果上其实差别不是很大,作者突出显示了在相近效果下,ViT耗时要少

  • 注意力效果可视化

  • RGB编码可视化

  • 自注意力机制在不同层间的注意力距离
    可以看到前面几层距离比较大,表明一开始就具有全局信息

  • 不同模型在不同数据集上的效果

标签:编码,Transformer,训练,16,patch,VIT,图片
From: https://www.cnblogs.com/xiaxuexiaoab/p/18543601

相关文章

  • vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
    安装pnpminstalljavascript-obfuscator安装之后在项目根目录新建一个obfuscator.js在obfuscator.js写入以下代码直接复制粘贴`/**@用法vite打包完成后,使用命令行nodejs执行本文件:nodeobfuscator.js它会挨个把里面的js文件做混淆然后替换@说明本质就是依......
  • vite 虚拟模块初识
    介绍:Vite中的虚拟模块Vite是一个现代化的构建工具,旨在通过利用浏览器原生ES模块的可用性以及使用编译为原生语言编写的JavaScript工具来解决一些问题。用途:1.自动生成路由配置:在一些前端框架(如Vue和React)中,虚拟模块可以用来动态生成路由配置。通常,我们需要手动维护路......
  • 在vite中配置并使用环境变量
    1、配置环境变量,注意要以“VITE“开头(1)在.env.development中配置环境变量VITE_APP_ENV=development2、在vue文件中使用<scriptsetuplang="ts">console.log('环境:',import.meta.env)</script>打印得结果:{"BASE_URL":"/",......
  • 从蓝牙到WLAN:HarmonyOS Next Connectivity Kit入门
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在当今数字化时代,智能设备之间的高效通......
  • Nuxt.js 应用中的 vite:extend 事件钩子详解
    title:Nuxt.js应用中的vite:extend事件钩子详解date:2024/11/11updated:2024/11/11author:cmdragonexcerpt:vite:extend钩子允许开发者在Vite项目中扩展默认开发和构建配置。这使得开发者能够根据特定需求自定义Vite的行为,增强开发体验。categories:前端开......
  • FPGA学习笔记#6 Vitis HLS For循环的优化(2)
    本笔记使用的VitisHLS版本为2022.2,在windows11下运行,仿真part为xcku15p_CIV-ffva1156-2LV-e,主要根据教程:跟XilinxSAE学HLS系列视频讲座-高亚军进行学习目录1.循环优化中的基本参数2.PIPELINE&UNROLL    2.1.PIPELINE    2.2.UNROLL3.LOOP_MERGE1.DATAFLOW......
  • OFA-Sys/chinese-clip-vit-base-patch16 占用显存测试
    model.get_image_features(inputs) 64batch_size2096MB取消withtorch.no_grad():后8GB占满16batch_size3886MB AutoModel.from_pretrained(MODEL_NAME)执行慢,原因是需要启用网络代理,否则总是卡在验证阶段 DataLoader增加num_workers后torch.cuda.OutOf......
  • Vite与Vue Cli的区别与详解
    它们的功能非常相似,都是提供基本项目脚手架和开发服务器的构建工具。主要区别Vite在开发环境下基于浏览器原生ES6Modules提供功能支持,在生产环境下基于Rollup打包;VueCli不区分环境,都是基于Webpack。在生产环境下,两者都是基于源码文件的,Rollup和Webpack都是对代码进行......
  • nvitop 安装及使用
    因为nvitop采用纯Python编写,所以推荐采用pip命令进行安装,官方安装说明文档中提供了五种安装方式:使用pipx进行安装pipxrunnvitop使用pip3进行安装pip3install--upgradenvitop使用conda进行安装condainstall-cconda-forgenvitop从Github拉取最新版本进......
  • 【客户投诉系统】 Sringboot+vue+soap+activiti+mybatis+element-ui
    [!NOTE]分享课程系统,客户平台投诉系统主要框架:Springboot,mybatis,Activiti,soap,Element-UI,Vue主要功能:用户可以对不同的平台,例如美团、学习通、饿了么等进行投诉(Springboot,mybatis),工作管理员会对该投诉信息进行审批(Activiti),若审批通过,通过soap服务传递给对应......