TransFormer学习之VIT算法解析

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.mzph.cn/bicheng/13526.shtml

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

相关文章

详解ArcGIS 水文分析模型构建

目录 前言 项目环境、条件 Dem 数据预览 ArcGIS模型构建器 模型搭建 填洼 流向 流量 河流长度 栅格计算器 河流链接 河网分级 栅格河网矢量化 绘制倾泻点 栅格流域提取 集水区 盆域分析 栅格转面 模型应用 导出 py 文件 完善脚本 最终效果 结束语 前言 …

【时间复杂度和空间复杂度之间的故事】

【时间复杂度和空间复杂度之间的故事】 一.前言 二.时间复杂度定义时间复杂度的计算规则习题 三.空间复杂度定义计算方法习题空间复杂度 O(1)空间复杂度 O(n) 本文主要讲解关于时间复杂度与空间复杂度 😀😃😁😁😇&…

FastAPI单元测试:使用TestClient轻松测试你的API

当使用FastAPI进行单元测试时,一个重要的工具是TestClient类。TestClient类允许我们模拟对FastAPI应用程序的HTTP请求,并测试应用程序的响应。这使我们能够在不启动服务器的情况下对API进行全面的测试。 下面我将详细讲解TestClient的使用方法和常见操作…

10大桌面软件前端框架,那个是您的最爱呢?

桌面端前端框架是用于构建桌面应用程序的前端框架,以下是一些常用的桌面端前端框架: 1. Electron: Electron是一个开源的桌面应用程序开发框架,可以使用HTML、CSS和JavaScript构建跨平台的桌面应用程序,例如VS Code、…

2024 年第四届长三角高校数学建模竞赛赛题B题超详细解题思路+代码分享

B题 人工智能范式的物理化学家 问题一问题二问题三问题四问题五完整代码与文档获取 B题思路详细解析分享给大家,还会继续更新完成具体的求解过程,以及全部的代码与技术文档,都会直接给大家分享的哦~需要完整代码直接看到最后哦 问题一 针对问…

谈谈【软件测试的基础知识,基础模型】

关于软件测试的基本概念和基本模型 前言一个优秀的测试人员具备的素质关于需求测试用例软件错误(BUG)概念开发模型瀑布模型(Waterfall Model)螺旋模型(Spiral Model) 前言 首先,什么是软件测试? 通俗来讲:软件测试就是找BUG&…

【配置】雷池WAF社区版安装

官方文档点击跳转 什么是雷池 雷池(SafeLine)是长亭科技耗时近 10 年倾情打造的 WAF,核心检测能力由智能语义分析算法驱动。 什么是 WAF WAF 是 Web Application Firewall 的缩写,也被称为 Web 应用防火墙。 区别于传统防火墙…

记某src通过越权拿下高危漏洞

在挖掘某SRC时,遇到了一个社区网站,社区站点是我在挖掘SRC时比较愿意遇到的,因为它们可探索的内容是较多的,幸运地,通过两个接口构造参数可进行越权,从而获得整个网站用户的信息。 图片以进行脱敏处理。在…

单词可交互的弧形文本

在一个项目中,要求把少儿读本做成电子教材呈现出来,电子书的排版要求跟纸质书一致。其中,英语书有个需求:书中有些不规则排版的文本(如下图所示),当随书音频播放时,被读到的文本要求…

gin框架学习笔记(四) ——参数绑定与参数验证

参数绑定 前言 在Gin框架中我们可以利用bind来将前段传递过来的参数与结构体进行参数绑定与参数校验,而这bind的方式主要有以下两种: Mustbind:一般使用较少,因为参数校验失败会改变状态码Shouldbind:主要使用上的校验方法,校验…

Elasticsearch - HTTP

文章目录 安装基本语法索引创建索引查看索引删除索引 文档创建文档更新文档匹配查询多条件查询聚合查询映射 安装 https://www.elastic.co/downloads/past-releases/elasticsearch-7-17-0 下载完成启动bin/elasticsearch服务,可以在Postman调试各种请求。 基本语法…

高稳定LED驱动IC防干扰数显驱动控制器热水器LED驱动芯片VK1650 SOP16/DIP16 原厂FAE支持

产品型号:VK1650 产品品牌:永嘉微电/VINKA 封装形式:SOP16/DIP16 工程服务,技术支持! 概述 VK1650是一种带键盘扫描电路接口的 LED 驱动控制专用芯片,内部集成有数据锁存器、LED 驱动、键盘扫描等电路。…

2024年职称评审流程大揭秘,顺利拿下职称

上半年时间不急,中旬太忙,没有时间,下半年干着急。评职称一定要趁早,不然卡住一个流程,今年就不需要评职称了。中级副高级职称评职称就像挤公交你不努力挤一把,就只能等下一趟下一趟。所以评职称一定要看准…

[Cocos Creator 3.5赛车游戏] 第4节 创建汽车节点

在实现汽车节点之前,我们要先熟悉一下少量的基本概念,这样才能让您更快的实现第一个汽车节点。 一、基本概念 1.什么是节点: 在Cocos中,场景是由一系列节点组成的,每个节点下面又可以有子节点,而每个节点都…

Axure RP 9 for Mac:强大的原型设计利器

Axure RP 9 for Mac是一款功能强大的原型设计工具,专为Mac用户打造。它支持高保真度的应用程序和网站原型设计,帮助用户快速创建高质量的产品原型。软件内置丰富的交互效果和动画设计选项,设计师可以通过简单的操作,为原型添加各种…

记录计全支付切换到RabbitMQ时启动报错的问题

记录计全支付切换到RabbitMQ时启动报错的问题 首先在application.yml中切换到RabbitMQ配置安装RabbitMQ、Erlang、延时插件 rabbitmq_delayed_message_exchange,延迟插件必装 首先在application.yml中切换到RabbitMQ配置 # 第一处rabbitmq:addresses: 127.0.0.1:56…

Winform自定义控件 —— 开关

在开始阅读本文之前,如果您有学习创建自定义控件库并在其他项目中引用的需求,请参考:在Visual Studio中创建自定义Winform控件库并在其他解决方案中引用https://blog.csdn.net/YMGogre/article/details/126508042 0、引言 由于 Winform 框架并…

深入探索Jetpack Compose:大前端式客户端开发实战

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

(二)Jetpack Compose 布局模型

前文回顾 (一)Jetpack Compose 从入门到会写-CSDN博客 首先让我们回顾一下上一篇文章中里提到过几个问题: ComposeView的层级关系,互相嵌套存在的问题? 为什么Compose可以实现只测量一次? ComposeView和…

还拿B端设计经验,设计政务类系统,驴唇不对马嘴啦。

一、什么是政务类系统,涉及哪些领域 政务类系统是指用于政府机构或政府部门进行管理和运营的信息化系统。政务类系统的目的是提高政府工作效率、优化公共服务、加强政府与公民之间的互动和沟通。 政务类系统通常涵盖了各个方面的政府工作,包括但不限于以…