Vision Transformer(VIT模型)

embedded/2024/11/25 5:28:54/

【11.1 Vision Transformer(vit)网络详解-哔哩哔哩】 https://b23.tv/BgsYImJ

工作流程:

①将输入的图像进行patch的划分

②Linear Projection of Flatted patches,将patch拉平并进行线性映射生成token

③生成CLS token(用向量有效地表示整个输入图像的特征)特殊字符“*”,生成Position Embedding,用Patch+Position Embedding相加作为inputs token

④Transformer Encoder编码,特征提取

⑤MLP Head进行分类输出结果

图片分块嵌入:

对于标准的Transformer模块,要求输入的是token(向量)序列,即二维矩阵[num_token,token_dim]

在代码实现中,直接通过一个卷积层来实现VIT-\frac{B}{16},使用卷积核大小为16*16,stride=16,卷积核个数为768

输入图片大小为224x224,将图片切分为固定大小16x16的patch,则每张图像会生成224x224/16x16=196个patch,输出序列为196;

196个patch(196x3)通过线性投射层(3x768)之后的维度为196x768,即一共有196个token,每个token的维度是768

[224,224,3]\rightarrow [14,14,768]\rightarrow [196,768]

 在输入Transformer Encoder之前需要加上[class]token以及Position Embedding,都是可训练的参数

拼接[class]token:Cat([1,768],[196,768])->[197,768]

叠加:

Embedding层:

Learnable embedding(可学习的嵌入):

它是一个可学习的向量,它用来表示整个输入图像的信息;这个向量的长度是 768。

Position Embedding:

如图,编号有0-9的紫色框表示各个位置的position embedding,而紫色框旁边的粉色框则是经过linear projection之后的flattened patch向量。这样每一个 token 既包括图像信息又包括了位置信息

ViT的Position Embedding采用的是一个可学习/训练的 1-D 位置编码嵌入,是直接叠加在tokens上

使用余弦相似度来表明任意两个patches之间在位置上的关联程度

Transformer Encoder:

Encoder输入的维度为[197, 768],输出的维度为[197, 768],可以把中间过程简单的理解成为特征提取的过程

 Transformer Encoder就是将Encoder Block重复堆叠L次

 

流程:

①Layer Norm层中使用Layer Normalization

②Multi-Head Attention

③Dropout层,论文中使用Dropout,但实际中使用DropPath效果更好

④捷径分支与输入进行相加操作,类似ResNet残差结构

⑤Layer Norm接MLP Block

⑥再接Dropout

⑦捷径分支 

MLP Head:

定义:

MLP Head 是指位于模型顶部的全连接前馈神经网络模块,用于将提取的图像特征表示转换为最终的分类结果或其他预测任务输出。MLP Head 通常跟在 Transformer Encoder 的输出之后,作为整个模型的最后一层。

可以简单理解为一个全连接层,若需要类别概率需要再接上一个softmax激活函数

注意:

 在Transformer Encoder前有个Dropout层,后有一个Layer Norm

训练ImageNet21K是由Linear+tanh激活函数+Linear

迁移到ImageNet1K上或自己的数据上,只有一个Linear

MLP Block:

如图下图所示,就是全连接+GELU激活函数+Dropout组成也非常简单,需要注意的是第一个全连接层会把输入节点个数翻4倍[197, 768] -> [197, 3072],第二个全连接层会还原回原节点个数[197, 3072] -> [197, 768]

注意:

第一个全连接层是输入节点个数的四倍

第二个全连接层将输入还原为原来的大小

VIT-B/16模型结构:

Vision Transformer维度变换: 

 

流程:

①输入图像的input shape=[1,3,224,224],1是batch_size,3是通道数,224是高和宽

②通过patch embedding,由卷积核和faltten组成,因为是16*16的卷积核,个数为768,步距为16,数据变为14*14*768;高度和宽度方向进行展平处理,变为196*768

③concat上一个class token(可训练参数),196*768和1*768拼接为197*768

④与position embedding(可训练参数)相加,相加操作保持shape一致

⑤通过Dropout层

⑥经过Transformer Encoder,将Encoder Block重复L次(VIT-B/16中重复12次)

⑦得到Layer Norm的数据是197*768

⑧提取class token对应的输出,对输入进行切片,提取class token输出1*768

⑨通过MLP Head 得到最终输出,pre-logits是一个全连接层+tahn激活函数

其余:

 

 Layer是Transformer Encoder中重复堆叠Encoder Block的次数

Hidden Size是通过Embedding层后每个token的dim(向量长度)

MLP size是Transformer Encoder中MLP Block第一个全连接的节点个数(是Hidden Size的四倍)

Heads代表Transformer中Multi-Head Attention的heads数 

混合模型:

用传统的卷积神经网络提取特征,然后通过VIT进一步得到最终结果

R50的卷积层采用的是StdConv2d,不是传统的Conv2d

将所有的BatchNorm层替换成GroupNorm层

把stage4中的三个Block移到stage3中


http://www.ppmy.cn/embedded/140298.html

相关文章

【计算机网络】数据链路层

跨网络传输的本质:由许多局域网(子网)转发的结果 要彻底理解跨网络转发,首先要理解 -> 局域网中报文的转发原理! ​​​​​​​ 一、以太网帧格式 1.报头的含义 源地址/目的地址:源MAC地址和目的MAC地址 帧协议类型&…

<硬件有关> 内存攒机认知入门,内存的选择 配置 laptop PC 服务器

原因 这不是黑五吗,给我儿子买了台最便宜 ($300) DELL laptop,CPU 是 i5-1235U,但只有 8GB 内存。升级内存吧。 如何选择内存:家用范围 这里不考虑品牌,在我眼里,区别就是价格,还有所谓的物理…

osgEarth加载大疆数据

一、结果 二、代码 // osg #include <osgDB/ReadFile> // 读取文件 #include <osgViewer/Viewer>// 显示文件

AJAX请求返回报错NET::ERR_CERT_DATE_INVALID

问题 今天帮客户 把 系统迁移到 新服务器&#xff0c; 但是页面请求后台总是不出数据&#xff0c; 打开开发者助手&#xff0c;看到报错NET::ERR_CERT_DATE_INVALID 使用浏览器直接在谷歌浏览器直接调用API&#xff0c;提示 安全证书已经 2 天前过期&#xff0c; 解决方法…

物联网核心安全系列——智能汽车安全防护的重要性

汽车行业引入的智能硬件技术已经越来越多&#xff0c;早先设计者更多考虑到的是硬件成本和软件用户体验等因素&#xff0c;但随着国外两位技术人员成功实现远程控制汽车的视频曝出后&#xff0c;智能汽车安全便成为了一个热议话题。 汽车总线架构及原理比较复杂&#xff0c;日…

数据结构的两大要素

数据结构的两大要素 逻辑结构 描述数据元素之间的逻辑关系。主要分为以下几种&#xff1a; 集合结构&#xff1a;数据之间没有任何关系&#xff08;如集合&#xff09;。 线性结构&#xff1a;数据元素之间是一对一的关系&#xff08;如数组、链表&#xff09;。 树结构&#…

深挖`React`里程碑之作`AutoStore`与`helux`的渊源

自2023/11开始&#xff0c;经过超500commits的开发,以近日正式发布里程碑之作AutoStore AutoStore是一款设计精巧而优雅的现代化响应式状态管理库&#xff0c;提供了强大的状态管理能力&#xff0c;支持响应式、计算属性、异步计算、表单双向绑定、信号组件等功能,为您提供一站…

Python爬虫:获取1688关键词API接口数据

引言 在当今的电子商务领域&#xff0c;数据的价值不言而喻。对于商家来说&#xff0c;掌握行业关键词趋势是洞察市场动态、优化产品布局的重要手段。1688作为中国领先的B2B电商平台&#xff0c;提供了海量的商品数据。本文将介绍如何使用Python编写爬虫程序&#xff0c;通过A…