参考:

  • Vision Transformer详解: https://blog.csdn.net/qq_37541097/article/details/118242600

目录:

  • x.1 (论文中)模型理解
  • x.2 代码理解

建议阅读时间:10min


x.1 模型理解

ViT是发表在ICLR2021上的一篇文章,通过将图片分割成一个一个小patch而将Transformer引入了CV。这个ViT的模型可以用下面一张图表示,模型经历的步骤如下:

  • 将图片分成一个一个小的patch
  • 将patch通过Linear Projection of Flattened Patches展平成一个一个token
  • concat一个维度的类别的信息
  • add位置信息Position Embedding(这里面的参数是要训练的)
  • 将向量传入Transformer Encoder中进行训练
  • 将输出的向量中只取类别信息,将类别信息经过MLP Head处理(Linear层/或者Linear + tanh + Linear层)
  • 再传入softmax层,输出类型Class

根据上面的步骤,我们将整个ViT分为如下几个部分理解:

  • x.1.1 Embedding层结构理解
  • x.1.2 Transformer Encoder理解
  • x.1.3 MLP Head理解

x.1.1 Embedding层结构理解

以输入224x224的图片大小,ViT-B/16为例,我们将图片切割成16x16的大小,最终我们可以得到 224 ∗ 224 16 ∗ 16 = 196 p i e c e s \frac{224*224}{16*16}=196pieces 1616224224=196pieces的patches,即将1张[224, 224, 3]的图片 ->(切割成) 196张[16, 16, 3]的patches。

接着我们将196张[16, 16, 3]patches经过Linear Projection of Flattened Patches转成tokens,即将196个patches的Height,Width和Channel进行展平处理( H ∗ W ∗ c h a n n e l H*W*channel HWchannel)变成196个[768]的tokens。最终变成[196, 768]的tokens输入,其中196是num_query=num_token,768是query_dimension=token_dimension=词向量长度。

同时我们要增加一个类别信息,类别信息的shape为[1, 768],我们将类别信息和token进行(concat)拼接,Cat([1, 768], [196, 768]) -> [197, 768]Q:不是很理解为什么不是196个类别,768长度的词向量变成769的词向量,因为类别应该算是一个特征,而不是样本吧?猜测:可能是因为一整个图片才算一个类别,我们只是输入了一个值?

最后我们需要增加Position Embedding类别信息,这里直接进行(add)加操作,Add([197, 768], [197, 768]) -> [197, 768]这是一个需要训练的操作。通过增加增加Position Embedding,我们的准确率增加了3个点,如下图2。

至此我们得到了[197, 768]的词向量。

x.1.2 Transformer Encoder

单单使用摞了L层的Transformer Encoder。参考https://blog.csdn.net/qq_43369406/article/details/129306734

我们输入[197, 768]的词向量得到[197, 768]的词向量。

Q: L层是什么意思?A:是串行操作,如下图所示:

x.1.3 MLP Head理解

[197, 768]中取出添加的类别词向量[1, 768],以ViT-B/16为例,在MLP Head中经过一个Linear层,再经过一个softmax层得到最终的类别。

x.2 代码理解

代码实现的时候:

  • ∗ * 在Embedding时,我们使用的是Conv2d的卷积层将[224, 224, 3]的图片卷积成[14, 14, 768]的patch,再经过展平,变成[196, 768]的token。
  • 在传入Transformer Encoder前进行了dropout层
  • 在Transformer的Encoder Block层中进行了dropout;且在第二个sub-block中的MLP block中增加了GELU激活函数。
  • 在传出Transformer Encoder后还进行了一次LN处理。

最终在ViT中采用了3中不同的网络结构,得到的模型效果如下:

ViT/vit/VIT详解相关推荐

  1. Vision Transformer(ViT) 1: 理论详解

    Vison Transformer 介绍 Vison Transformer论文- An Image is Worth 16x16 Words: Transformers for Image Reco ...

  2. ViT:视觉Transformer backbone网络ViT论文与代码详解

    Visual Transformer Author:louwill Machine Learning Lab 今天开始Visual Transformer系列的第一篇文章,主题是Vision Tran ...

  3. ViT( Vision Transformer)详解

    文章目录 (一)参考博客和PPT原文件下载连接 (二)VIT原理详解 2.1.self-attention 2.2.sequence序列之间相关性 α \boldsymbol{\alpha} α的求解 ...

  4. 神经网络学习小记录68——Tensorflow2版 Vision Transformer(VIT)模型的复现详解

    神经网络学习小记录68--Tensorflow2版 Vision Transformer(VIT)模型的复现详解 学习前言 什么是Vision Transformer(VIT) 代码下载 Vision ...

  5. 深度学习网络模型——Vision Transformer详解 VIT详解

    深度学习网络模型--Vision Transformer详解 VIT详解 通用深度学习网络效果改进调参训练公司自己的数据集,训练步骤记录: 代码实现version-Transformer网络各个流程, ...

  6. ViT结构详解(附pytorch代码)

    参考这篇文章,本文会加一些注解. 源自paper: AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE ...

  7. ORB-SLAM2代码/流程详解

    ORB-SLAM2代码详解 文章目录 ORB-SLAM2代码详解 1. ORB-SLAM2代码详解01_ORB-SLAM2代码运行流程 1 运行官方Demo 1.2. 阅读代码之前你应该知道的事情 1 ...

  8. PyTorch中的torch.nn.Parameter() 详解

    PyTorch中的torch.nn.Parameter() 详解 今天来聊一下PyTorch中的torch.nn.Parameter()这个函数,笔者第一次见的时候也是大概能理解函数的用途,但是具体实 ...

  9. timm 视觉库中的 create_model 函数详解

    timm 视觉库中的 create_model 函数详解 最近一年 Vision Transformer 及其相关改进的工作层出不穷,在他们开源的代码中,大部分都用到了这样一个库:timm.各位炼丹师 ...

最新文章

  1. 2 Redis基本知识
  2. 《银河英雄传说》杨威利经典语录1(田中芳树最经典的作品,我顶级拥护!有志同道合的一定要来给我留言!)...
  3. C# 正则表达式编写及验证方法
  4. cv2 imshow窗口大小_cv2.imshow()图片无法显示
  5. linux 内核宏container_of剖析
  6. Eclipse直接运行算法第4版例子(重定向和读取指定路径文件)
  7. 数值计算方法(七)——两种消去法求解线性方程组
  8. python二值化特征_OpenCV-Python系列之轮廓特征高阶
  9. svn 迁移到git下全过程
  10. 数据挖掘导论完整版pdf中文
  11. iNet Network Scanner Mac(网络扫描工具)
  12. Solidworks教程:solidworks常用的十个技巧
  13. CSS小游戏2048—简单小游戏编程有手就行~会玩?你会写吗?
  14. 【时间管理】柳比歇夫之奇特的一生
  15. 容联云发送手机短信验证码
  16. 编程语言培训学哪个?
  17. 没有微信和QQ,用记事本也能在线聊天
  18. uni-app - H5 网站项目接入集成 51LA 网站统计详细教程(提供 51LA.js 官方插件与引入教程)
  19. html中视频代码字段,Html5通过数据流方式播放视频的实现
  20. Android通知栏微技巧,8.0系统中通知栏的适配

热门文章

  1. jbpm创建流程图_jbpm - 工作流的基本操作
  2. html标签的默认样式及去除
  3. 黄山的正宗徽菜和新鲜景区
  4. mac pro m1:安装dump文件内存分析工具——MAT
  5. php网页增加音乐代码,js给网页加上背景音乐及选择音效的方法
  6. 机器学习作业-交通流量预测综述
  7. 自动查找优惠券机器人(收藏)
  8. 又一优雅的 K8s 开源桌面管理工具 - Monokle
  9. java毕业设计员工绩效考核系统分析与设计Mybatis+系统+数据库+调试部署
  10. 终于搞懂红黑树!--红黑树的原理及操作