Vision Transformer - VIT

文章目录

    • 1. Embedding层
    • 2. Encoder层
    • 3. MLP Head层
    • 4. Hybrid混合模型

论文:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
网址:https://arxiv.org/abs/2010.11929

Hybrid - 传统CNN和Transformer混合模型

模型架构

image-20240220120819808

输入一张图片,首先会将其分为一个一个patches,然后将每个patches输入到embedding层(Linear Projection of Flattened Patches)。通过Embedding层后,我们就会得到一个个向量,这里我们通常将向量称为Token。我们会在这一系列Token到最前面增加一个新的Token,专门用于分类的class token。这里的class token的维度和我们刚才得到的token的维度相同。此外,我们还需要加上关于位置的信息,position embedding,对应于上图中的0,1,2,3,….

将这一系列token加上class token以及位置参数输入到Transformer Encoder之中,Transformer Encoder对应的又是右图中的Encoder Block重复堆叠L次。然后将class token所对应的进行输出。

VIT

1. Embedding层

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

在代码实现中,直接通过一个卷积层来实现以VIT-B/16为例,使用卷积核大小为 16 × 16 16\times16 16×16,stride为16,卷积核个数为768。

[224,224,3]->[14,14,768]->[796,768]

在输入Transformer Encoder之前需要加上class token以及position embedding,都是可训练参数

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

叠加position embedding:[197,768]->[197,768]

对于位置编码:

image-20240220125047435

使用位置编码后提升很大,但是各种位置编码之间的差异并不是很大,所以在源码中,默认使用的是1-D Position Embedding

关于训练得到的位置编码,它的每个位置上与其他位置上的余弦相似度:

image-20240220125524382


2. Encoder层

image-20240220125741622

需要注意:在MLP Block中,第一个全连接层,它的节点个数是我们输入节点个数的4倍,第二个全连接层又回将节点个数还原回原来的大小。


3. MLP Head层

在Transformer Encoder前有个Dropout层,后有一个LayerNorm。

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

但是迁移到ImageNet1k上或者自己的数据集上时,只有一个Linear

image-20240220130536622

论文中所给出的三种模型

image-20240220131707696

  • Layers是Transformer Encoder中重复堆叠Encoder Block的次数
  • Hidden Size是通过Embedding层后每个token的dim(向量的长度)
  • MLP size是Transformer Encoder中MLP Block第一个全连接的节点个数(是hidden size的四倍)
  • heads代表Transformer中Multi-head Attention的heads数

4. Hybrid混合模型

首先用传统的卷积神经网络去提取特征,再通过VIT模型得到最终的结果,特征提取部分采用ResNet50,但是不是采用传统的卷积层,而是使用StdConv2d,另外将所有的BatchNorm层替换成GroupNorm层,把stage4中的3个Block移至stage3中。

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

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

相关文章

一次有趣的nginx Tcp4层代理转发的试验

nginx主配置文件添加配置: stream {log_format proxy $remote_addr [$time_local] $protocol status:$status bytes_sent:$bytes_sent bytes_received:$bytes_received $session_time upstream_addr:"$upstream_addr" "$upstream_bytes_sent" …

C#,入门教程(05)——Visual Studio 2022源程序(源代码)自动排版的功能动画图示

上一篇: C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合https://blog.csdn.net/beijinghorn/article/details/123533838 新来的徒弟们交上来的C#代码,可读性往往很差。 今天一问才知道,他们居然不…

2种方法,教你使用Python实现接口自动化中的参数关联

通常在接口自动化中,经常会参数关联的问题,那么什么是参数关联? 参数关联就是上一个接口的返回值会被下一个接口当做参数运用,其中Python中可以实现参数关联的方法有很多种,今天小编给大家介绍下,如何通过…

静态初始化数组-数组的遍历

目录 什么是遍历? 为什么要遍历数组? 案例 需求: 分析: 代码实现 什么是遍历? 遍历:就是一个一个数据的访问。 为什么要遍历数组? 比如:数据的求和、元素的搜索、找最大值和…

2024 CKS 题库 | 10、Trivy 扫描镜像安全漏洞

不等更新题库 CKS 题库 10、Trivy 扫描镜像安全漏洞 Task: 使用 Trivy 开源容器扫描器检测 namespace kamino 中 具有严重漏洞的镜像 的 Pod。 查找具有 High 或 Critical 严重性漏洞的镜像,并删除使用这些镜像的 Pod 。 注意:Trivy 仅安装在 cluste…

Kubernetes Prometheus 系列|Prometheus介绍和使用|Prometheus+Grafana集成

目录 第1章Prometheus 入门1.1 Prometheus 的特点1.1.1 易于管理1.1.2 监控服务的内部运行状态1.1.3 强大的数据模型1.1.4 强大的查询语言 PromQL1.1.5 高效1.1.6 可扩展1.1.7 易于集成1.1.8 可视化1.1.9 开放性 1.2 Prometheus 的架构1.2.1 Prometheus 生态圈组件1.2.2 架构理…

这才开工没几天收到Offer了,简历改的好,找工作没烦恼。

喜报喜报 这才开工没几天,就收到了喜报! 就像上面截图中所说的一样:简历改了真的有用。 我也和大家分享一下优化简历的技巧,希望对大家有帮助,把握住金三银四的机会,都能顺利上岸,升职加薪&am…

如何申请代码签名证书?

代码签名证书是一种关键的数字证书,它的功能在于为软件代码提供安全签名和验证服务,从而提升软件整体的安全性和用户信任度。获取代码签名证书的过程通常涉及多个严谨步骤,确保通过正式流程获得的证书能有效加强软件完整性和真实性保护。以下…

数据库管理和设计工具Navicat 介绍

Navicat:一款强大的数据库管理和设计工具 Navicat 是一款广受欢迎的数据库管理和设计工具,它支持多种数据库系统,如 MySQL、MariaDB、SQL Server、Oracle、PostgreSQL 以及 SQLite。凭借其直观的用户界面和强大的管理功能&#xff0c…

R语言空间分析、模拟预测与可视化

随着地理信息系统(GIS)和大尺度研究的发展,空间数据的管理、统计与制图变得越来越重要。R语言在数据分析、挖掘和可视化中发挥着重要的作用,其中在空间分析方面扮演着重要角色,与空间相关的包的数量也达到130多个。在本…

尾矿库安全监测系统的主要内容和平台

一、背景 尾矿库安全监测系统是保障尾矿库安全运行的重要手段,通过对尾矿库进行实时监测,可以及时发现潜在的安全隐患,为采取相应的措施提供科学依据。通过对变形因素、相关因素及诱因因素信息的相关分析处理,对灾变体的稳定状态…

Pytorch学习(杂知识)

Mini-batch Mii-batch是一种在机器学习中常用的训练算法。它是将大的数据集分成一些小的数据集,每次只用一个小的数据集来训练模型。通常情况下,训练数据集中的数据越多,训练出的模型越准确,但是如果数据集太大,就会导…

试用nebulagraph

按照手册的快速入门&#xff0c;本地部署操作&#xff0c;基本没什么问题。有一些注意事项NebulaGraph Database 手册 (nebula-graph.com.cn) 默认安装路径在/usr/local/nebula ip的问题 在步骤3的时候 $ ./nebula-console -addr <ip> -port <port> -u <use…

android studio模拟器不能打开

Andriod:The selected AVD is currently running in the Emulator. Please exit the emulator instance… 1.点击 2.删除下面文件 3.重新打开即可 参考

springcloud:2.OpenFeign 详细讲解

OpenFeign 是一个基于 Netflix 的 Feign 库进行扩展的工具,它简化了开发人员在微服务架构中进行服务间通信的流程,使得编写和维护 RESTful API 客户端变得更加简单和高效。作为一种声明式的 HTTP 客户端,OpenFeign 提供了直观的注解驱动方式,使得开发人员可以轻松定义和调用…

【前端素材】推荐优质后台管理系统Xoric平台模板(附源码)

一、需求分析 当我们从多个层次来详细分析后台管理系统时&#xff0c;可以将其功能和定义进一步细分&#xff0c;以便更好地理解其在不同方面的作用和实际运作。 1. 功能层次 a. 用户管理功能&#xff1a; 用户注册和登录&#xff1a;管理用户账户的注册和登录过程。权限管…

简单了解USB通信协议

目录 一、拓扑结构 二、逻辑部件 三、电气特性 四、插入检测机制 五、描述符 六、枚举过程 七、传输数据的层次结构 八、包 1.包的类型&#xff1a; 2.包的组成&#xff1a; 3.数据包类型的pid切换机制&#xff08; data pid toggle &#xff09; 九、事务 十、传输…

统计图玫瑰图绘制方法

统计图玫瑰图绘制方法 常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。 前几类图比较容易绘制&#xff0c;饼图环形图绘制较难。 还有一种玫瑰图的绘制也较难&#xff0c;今提供玫瑰图的绘制方法供参考。 本方法采用C语言的最基本功能&#xff1a; &am…

C++ 学习之Set容器

C++ Set容器构造和赋值 在C++中,std::set是一个用于存储唯一元素的有序集合容器。下面介绍一下std::set容器的构造和赋值操作: 构造 std::set 默认构造函数: std::set<int> mySet; // 创建一个空的set使用初始化列表构造: std::set<int> mySet

测试开源C#人脸识别模块DlibDotNet

百度“C# 换脸”找到参考文献4&#xff0c;发现其中使用DlibDotNet检测并识别人脸&#xff08;之前主要用的是ViewFaceCore&#xff09;&#xff0c;DlibDotNet是Dlib的.net封装版本&#xff0c;后者为开源C工具包&#xff0c;支持机器学习算法、图像处理等算法以支撑各类高级应…