TransFormer学习之VIT算法解析

news2025/1/18 9:50:57

1.算法简介

本文主要对VIT算法原理进行简单梳理,下图是一个大佬整理的网络整体的流程图,清晰明了,其实再了解自注意力机制和多头自注意力机制后,再看VIT就很简单了

受到NLP领域中Transformer成功应用的启发,ViT算法尝试将标准的Transformer结构直接应用于图像,并对整个图像分类流程进行最少的修改。具体来讲,ViT算法将整幅图像拆分成小图像块,将图像块转换为类似于NLP中的Sequence后再执行TransFormer操作。
在这里插入图片描述
参考链接:一文带你掌(放)握(弃)ViT(Vision Transformer)(原理解读+实践代码)
参考链接:Vision Transformer (ViT):图像分块、图像块嵌入、类别标记、QKV矩阵与自注意力机制的解析
参考链接:ViT(vision transformer)原理快速入门
参考链接:逐步解析Vision Transformer各细节

2.图像分块和Embedding

这一步是为了后面的TransFormer操作对数据进行预处理,将图像转换为Sequence的形式。

2.1原理简介

(1)如图所示,输入图像为224*224*3的图像,将其分割为大小等于16*16的图像块,图像块数量为224*224/16*16=196
在这里插入图片描述

(2)图像分块后再将其展平为一个序列,序列的shape为:196*16*16*3
在这里插入图片描述
(3)为了实现最后的分类任务,需要添加一个Class Token的信息(图中橙色部分),则输入序列变为197*16*16*3
在这里插入图片描述
(4)生成特定通道的sequence
经过上述步骤处理后,每个图像块的维度是 16 ∗ 16 ∗ 3 16*16*3 16163,而我们实际需要的向量维度是D,因此我们还需要对图像块进行 Embedding。这里 Embedding的方式非常简单,只需要对每个 16 ∗ 16 ∗ 3 16*16*3 16163的图像块做一个线性变换,将维度压缩为 D 即可。

输入:196*(16*16*3)
输出:196*D,D表示最终需要的通道数

至此,通过patch embedding将一个视觉问题转化为了一个seq2seq问题。

2.2 代码实现

(1)图像分块:代码中采用大小 16 ∗ 16 16*16 1616、步长为16,数量为768的一组卷积核完成图像分块操作
在这里插入图片描述
(2)Patch Embedding14*14*768,表示图像分块后的patch长和宽为14*14,共768个通道,然后将其展平为196*768的特征序列,这里的196是指14*14个patch(图中的197为笔误),展平的过程即将2D展开为1维
在这里插入图片描述
(3)添加类别Token

在这里插入图片描述

3.TransFormer Encoder

在对图像进行图像分块patch embedding等预处理操作后得到一个197*768的特征序列,后面就是进入TransFormer Encoder操作。

网络中的TransFormer Encoder模块会执行12Encoder Block串联操作,每个Enconder Block都包括一个多头注意力机制模块和一次MLP操作

在每个 Transformer Block 的多头自注意力层和前馈神经网络中都会包含残差连接和层归一化操作,这有助于缓解梯度消失问题和加速训练过程。

在 ViT 模型中,多个 Transformer Block 会串联在一起,构成整个 Transformer Encoder。输入特征会经过多个 Transformer Block 的处理,每个块产生一系列更具语义信息的特征表示。通过反复堆叠和叠加多个 Transformer Block,ViT 模型能够有效地学习输入图像的复杂特征和结构信息。
在这里插入图片描述

3.1 Multi-Head Attention

详细见博客:《TransFormer学习之基础知识:STN、SENet、CBAM、Self-Attention》

首先通过之前了解到的内容回顾一下self-attention的内容:

  1. 输入序列I乘以权重矩阵后分别得到对应的QKV
  2. 通过将序列各自的query和key值相乘并进行归一化,可以得到向量之间的相关性 A ′ A^{'} A
  3. 将权重矩阵 A ′ A^{'} A和value相乘可以得到输出向量O
    在这里插入图片描述
    因为相关性有很多种不同的形式,有很多种不同的定义,所以有时不能只有一个q,要有多个q,不同的q负责不同种类的相关性。

3.1.1 计算单个输入a:

在这里插入图片描述
首先,和上面一样,用a乘权重矩阵 W q W_q Wq得到q,然后q再乘两个不同的 W q , i W^{q,i} Wq,i,得到两个不同的 q i , j q^{i,j} qi,j,i代表的是位置,1和2代表的是这个位置的第几个q。
在这里插入图片描述

3.1.2 计算多个head

这上面这个图中,有两个head,代表这个问题有两种不同的相关性。

同样,k和v也需要有多个,两个k、v的计算方式和q相同,都是先算出来ki和vi,然后再乘两个不同的权重矩阵。
在这里插入图片描述
对于多个输入向量也一样,每个向量都有多个head:
在这里插入图片描述

3.1.3 计算self-attention

和上面讲的过程一样,只不过是1那类的一起做,2那类的一起做,两个独立的过程,算出来两个b。
对于1:
在这里插入图片描述
对于2:
在这里插入图片描述
在这里插入图片描述

3.2 MLP Block

MLP Head 是指位于模型顶部的全连接前馈神经网络模块,用于将提取的图像特征表示转换为最终的分类结果或其他预测任务输出。MLP Head 通常跟在 Transformer Encoder 的输出之后,作为整个模型的最后一层。
在这里插入图片描述
具体来说,当我们只需要分类信息时,只需要提取出class token生成的对应结果就行,即[197, 768]中抽取出class token对应的[1, 768]。接着我们通过MLP Head得到我们最终的分类结果。

MLP Head原论文中说在训练ImageNet21K时是由Linear+tanh激活函数+Linear组成。但是迁移到ImageNet1K上或者你自己的数据上时,只用一个Linear即可。

4.其他细节

4.1归纳偏置与混合架构

(1)归纳偏置: Vision Transformer 的图像特定归纳偏置比 CNN 少得多。在 CNN 中,局部性、二维邻域结构和平移等效性存在于整个模型的每一层中。而在ViT中,只有MLP层是局部和平移等变的,因为自注意力层都是全局的。
(2)混合架构: Hybrid 模型是一种结合传统卷积神经网络(CNN)和Transformer的方法,旨在兼顾两种模型的优势,从而更好地处理图像数据。论文通过对比发现,在训练epoch较少时Hybrid优于ViT,但当epoch增大后ViT优于Hybrid

4.2Vision Transformer维度变换

[图片]

  1. 输入图像的input shape=[1,3,224,224],1是batch_size,3是通道数,224是高和宽
  2. 输入图像经过patch Embedding,其中Patch大小是14,卷积核是768,则经过分块后,获得的块数量是 224 × 224 / 14 × 14 = 196 224 \times224/14 \times 14 = 196 224×224/14×14=196,每个块的维度被转换为768,即得到的patch embedding的shape=[1,196,768]
  3. 将可学习的**[class] token embedding拼接到patch embedding**前,得到shape=[1,197,768]
  4. position embedding加入到拼接后的embedding中,组成最终的输入嵌入,最终的输入shape=[1,197,768]
  5. 输入嵌入送入到Transformer encoder中,shape并不发生变化
  6. 最后transformer的输出被送入到MLP或FC中执行分类预测,选取**[class] token**作为分类器的输入,以表示整个图像的全局信息,假设分类的类目为K,最终的shape=[1,768]*[768,K]=[1,K]

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

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

相关文章

Linux远程登录方式ssh与vnc的区别

ssh登录 ssh是基于非对称密钥加密登录服务器 vnc登录 vnc登录相当于Linux图形界面的方式登录 为什么需要多种登录方式 在ssh无法远程登录时,可以使用vnc登录。新安装的虚拟机不一定会安装或启用ssh服务,并且要实现ssh的远程登录,linux防…

字符串的定义和操作 继续!

字符串的定义和操作 1)定义 与列表、元组一样,字符串也可以通过下标进行访问 从前向后,下标从0开始 从后向前,下标从-1开始 my_str "green" # 通过下标索引取值 value my_str[0] value2 my_str[-5] print(f&quo…

k8s pv 一直是release状态

如下图所示,pv 一直是release状态 这个时候大家可能就会想到现在我的 PVC 被删除了,PV 也变成了 Released 状态,那么我重建之前的 PVC 他们不就可以重新绑定了,事实并不会,PVC 只能和 Available 状态的 PV 进行绑定。…

什么是谷歌爬虫?

其实就是谷歌用来浏览网络信息的一个自动化程序,他们会在你的网站爬取,寻找和搜集信息,谷歌爬虫可以说决定着一个网站在谷歌的生死 谷歌爬虫的作用机制就在于发现新网站以及新网页,然后他会把网页的内容带回去,更新到…

嵌入式科普(18)Ubuntu在移动硬盘的安装和启动

目录 一、概述 二、应用场景 三、移动硬盘安装Ubuntu 3.1 移动硬盘格式化 3.2 VMware安装Ubuntu到移动硬盘 四、电脑BIOS启动移动硬盘Ubuntu 五、从VMware启动移动硬盘Ubuntu 六、问题解决(坑)和思考提问 嵌入式科普(18)Ubuntu在移动硬盘的安装和启动 一、概述 在移动硬…

Thingsboard规则链:Entity Type Filter节点详解

在物联网(IoT)的世界里,数据的多样性与复杂性要求处理架构具备高度的灵活性和针对性。ThingsBoard作为一款强大的物联网平台,通过其规则链(Rule Chains)机制,让数据的自动化处理变得既强大又灵活…

设计模式7——建造者模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 建造者模式(Builde…

C++下的内存管理

文章目录 内存分布C语言中动态内存管理方法C内存管理new/delete操作内置类型new和delete操作自定义类型operator new 和 operator deletenew和delete的实现原理定位new表达式 malloc/free和new/delete的区别内存泄漏 内存分布 栈:又叫做堆栈–非静态局部变量/函数参…

Sketch v100 for Mac 安装教程【支持M芯片】

Sketch v100 for Mac 安装教程【支持M芯片】 原文地址:https://blog.csdn.net/weixin_48311847/article/details/139104315

秀某动预约抢票脚本

秀某动预约抢票脚本 小白操作-仅供学习参考 主要流程和功能 初始化和配置变量: confirm_url 和 login_url: 分别存储登录和确认订单的URL。 wait_time: 用户输入的提前多少秒开始执行。 start_time: 开售时间。 DEBUG: 调试标志,用于控制脚本的行为。 浏览…

4. C++入门:内联函数、auto关键字、范围for及nullptr

内联函数 概念 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率 对比C的宏 C语言不足:宏 #define ADD(x, y) ((x)(y))int main() {int ret…

Spring框架中获取方法参数名称:DefaultParameterNameDiscoverer

DefaultParameterNameDiscoverer 是Spring框架中用于获取方法参数名称的一个类。在Java中,方法的参数名称通常在编译时会丢失,因为Java字节码并不强制要求保留这些信息。Spring提供了一种机制来恢复这些参数名称,这就是通过DefaultParameterN…

工厂模式(简单工厂模式+工厂模式)

工厂模式的目的就是将对象的创建过程隐藏起来,从而达到很高的灵活性,工厂模式分为三类: 简单工厂模式工厂方法模式抽象工厂模式 在没有工厂模式的时候就是,客户需要一辆马车,需要客户亲自去创建一辆马车,…

javaSwing仓库商品管理系统(文档+视频+源码)

摘要 Java swing实现的一款简单的仓库商品管理系统,数据库采用的是mysql,本系统实现了两个角色层面的功能,管理员可以管理用户、仓库、商品信息等。普通用户登录后可以查看商品、仓库信息及个人信息。 系统实现 登录界面: 我们…

MySQL中锁的几种类型

MySQL根据加锁的范围,可以分为全局锁、表级锁、行级锁三类。 2.5.1. 锁定读 2.5.1.1. 共享锁和独占锁 事务的 读-读 情况并不会引起什么问题,对于 写-写、读-写 或 写-读 这些情况可能会引起一些问题,需要使用MVCC或者加锁的方式来解决。在…

ubuntu server 22.04 使用docker安装 onlyoffice 8.0同时添加中文字体、字号

本文主要介绍在ubuntu server 22.04 系统上使用docker安装onlyoffice 8.0同时添加中文字体、字号方法。 1、硬件要求 CPU:双核2 GHz或更高 内存:最少4GB 硬盘:至少40 GB可用空间 Swap file:至少4 GB,但取决于主机操作…

vmware 17pro17.5 bug 严重,建议升级17.52

近日vmware发布17.52 更新,修复了一个重大BUG. 也就是莫名其妙的CPU跟GPU占用问题。 我的系统是WIN11 跟VMWARE17.5..近日莫名其妙的发现即使什么都没运行,GPU占用也高达20%。开始以为中毒了被拿去挖矿了,后面看到VMWARE的这个更新&#xf…

最大连续1的个数(滑动窗口)

算法原理: 这道题大眼一看是关于翻转多少个0的问题,但是,如果你按照这种思维去做题,肯定不容易。所以我们要换一种思维去做,这种思维不是一下就能想到的,所以想不到也情有可原。 题目是:给定一…

中间件是什么?信创中间件有哪些牌子?哪家好用?

当今社会,中间件的重要性日益凸显,尤其是在信创背景下,选择适合的中间件产品对于推动企业数字化转型和升级具有重要意义。今天我们就来聊聊中间件是什么?信创中间件有哪些牌子?哪家好用?仅供参考哈&#xf…

15:00面试,15:08出来,面试问的有点变态。。。。

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天…