当前位置: 首页 > news >正文

ViT:视觉 Transformer

ViT:视觉 Transformer

    • 网络结构
    • Transformer 编码器
    • MLP 头
    • CNN 和 Transformer

 


网络结构

Transformer 的优势:注意力机制相当于一个多标签检索系统,位置嵌入能知道每个单词的位置,而且适合并行。

尝试把 Transformer 迁移到视觉领域。

ViT 在 Transformer 基础上:

  • 输入:为了把图像空间序列化,引入了图片切分预处理、patch+位置嵌入
  • 主干:Transformer
  • 输出:MLP头及分类器

图片切分预处理:如输入图片大小为 224x224,将图片分为固定大小的patch(16x16),则每张图像会生成 224 ∗ 224 16 ∗ 16 = 196 个 p a t c h \frac{224 * 224}{16*16}=196个patch 1616224224=196patch ,把这些图像块摆成一行,即输入序列长度为196。


在图片块和 Transformer 之间,还有一个全连接层,对维度进行缩放。


patch+位置嵌入:给每个图像块,添加位置。


数学公式:

  • z 0 = [ x c l a s s ; x p 1 E ; x p 2 E ; ⋯ ; x p N E ] + E p o s , E ∈ R ( P 2 ⋅ C ) × D , E p o s ∈ R ( N + 1 ) × D (1) \begin{gathered} z_0 =[\mathbf{x}_{\mathrm{class}};\mathbf{x}_{p}^{1}\mathbf{E};\mathbf{x}_{p}^{2}\mathbf{E};\cdots;\mathbf{x}_{p}^{N}\mathbf{E}]+\mathbf{E}_{pos}, \mathbf{E}\in\mathbb{R}^{(P^{2}\cdot C)\times D},\mathbf{E}_{pos}\in\mathbb{R}^{(N+1)\times D} \text{(1)} \end{gathered} z0=[xclass;xp1E;xp2E;;xpNE]+Epos,ER(P2C)×D,EposR(N+1)×D(1)

z 0 z_0 z0输入图像进行编码 z 0 z_0 z0表示输入图像的嵌入向量。

x p ( 1 ) \mathbf{x}_{p}^{(1)} xp(1) 表示第一个图像块的嵌入向量, E \mathbf{E} E 是位置嵌入矩阵,用于将图像块的位置信息编码到嵌入向量中。

E pos \mathbf{E}_{\text{pos}} Epos 是位置编码矩阵,用于将位置信息添加到输入数据中。

x c l a s s \mathbf{x}_{\mathrm{class}} xclass向量用于解决图像分类问题,将整个图像的类别信息引入Transformer模型。

Transformer 编码器

计算出 z 0 z_0 z0 后,输入到 Transformer 编码器(没有用解码器):

输入部分:

  • Layer Norm:把 z 0 z_{0} z0 归一化,再 Q、K、V 分离。

  • 残差连接,减轻梯度消失、爆炸。

MSA:多头注意力,每个注意力头负责捕捉图像的不同局部信息,把图像中多个差异拿出来进行学习。

MLP 头

多层感知机(Multilayer Perceptron,MLP)是一种前馈神经网络:

MLP 分类头就是一个全连接层。

TA 的工作流程:

  • 接受编码器的输出
  • 先把 x c l a s s \mathbf{x}_{\mathrm{class}} xclass 提取出来
  • 再分类

ViT编码器的输出将是一个形状为(4, 16, 512)的张量。

  • 第一个维度4表示批次大小,即有4张输入图像。
  • 第二个维度16表示每张图像被分割为16个图像块。
  • 第三个维度512表示每个图像块的表示维度,即隐藏层的维度。

这个编码器输出可以包含输入图像的全局信息和局部信息的组合。

每个图像块的表示捕捉了该图像块的局部特征,而整个编码器输出则综合了所有图像块的信息,包括它们之间的关系,从而提供了更全局的图像信息。

CNN 和 Transformer

CNN擅长处理图像的局部特征,而ViT模型擅长处理图像的全局特征和整体类别信息。

选择CNN模型的情况:

  • 当任务关注图像的局部特征,比如纹理、形状、边缘等。
  • 当处理的图像较大,且局部特征在整体中仍然具有较大的重要性。
  • 当数据集较小,而且已经有了一些经典的CNN模型在类似任务上表现良好。

选择ViT模型的情况:

  • 当任务需要关注图像的全局特征和整体类别信息。
  • 当处理的图像相对较小,且全局结构和上下文信息对于任务很重要。
  • 当数据集较大,可以利用更强大的模型来提取全局信息和学习更复杂的特征。

相关文章:

  • VS Code 上已达250万 Java 开发者!微软和红帽一起公布 VS Code Java 未来六个月路线图
  • 机器学习实验三:支持向量机模型
  • 连锁零售企业如何优化网络性能?
  • 【开源】基于Vue+SpringBoot的教学资源共享平台
  • Redis研学-三种特殊类型的常用命令
  • blender 数字键盘上的快捷键
  • el-tree搜索的使用
  • svn使用步骤
  • Qt开发 之 记一次安装 Qt5.12.12 安卓环境的失败案例
  • IntelliJ插件开发-Code Vision Hints
  • 菜鸟学习日记(python)——循环语句
  • 酶联免疫抗体试剂——博迈伦生物
  • codeblocks代码提示导致延迟的问题
  • OpenGL学习(二)绘制三维图形 固定管线
  • HTML5 基础总结
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Akka系列(七):Actor持久化之Akka persistence
  • Android开源项目规范总结
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  •  D - 粉碎叛乱F - 其他起义
  • LeetCode29.两数相除 JavaScript
  • PHP 小技巧
  • python 装饰器(一)
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Redash本地开发环境搭建
  • select2 取值 遍历 设置默认值
  • webpack+react项目初体验——记录我的webpack环境配置
  • 飞驰在Mesos的涡轮引擎上
  • 简单基于spring的redis配置(单机和集群模式)
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 无服务器化是企业 IT 架构的未来吗?
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • # include “ “ 和 # include < >两者的区别
  • #DBA杂记1
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2)(2.10) LTM telemetry
  • (二)正点原子I.MX6ULL u-boot移植
  • (二十三)Flask之高频面试点
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (利用IDEA+Maven)定制属于自己的jar包
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)平衡树
  • .aanva
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET4.0并行计算技术基础(1)
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • .sh 的运行
  • [AIGC 大数据基础]hive浅谈