精华内容
下载资源
问答
  • Vision Transformer详解 万次阅读 多人点赞
    2021-06-26 10:20:11

    论文名称: An Image Is Worth 16x16 Words: Transformers For Image Recognition At Scale
    论文下载链接:https://arxiv.org/abs/2010.11929
    原论文对应源码:https://github.com/google-research/vision_transformer

    Pytorch实现代码: pytorch_classification/vision_transformer
    Tensorflow2实现代码:tensorflow_classification/vision_transformer
    在bilibili上的视频讲解:https://www.bilibili.com/video/BV1Jh411Y7WQ



    前言

    Transformer最初提出是针对NLP领域的,并且在NLP领域大获成功。这篇论文也是受到其启发,尝试将Transformer应用到CV领域。关于Transformer的部分理论之前的博文中有讲,链接,这里不在赘述。通过这篇文章的实验,给出的最佳模型在ImageNet1K上能够达到88.55%的准确率(先在Google自家的JFT数据集上进行了预训练),说明Transformer在CV领域确实是有效的,而且效果还挺惊人。

    vit


    模型详解

    在这篇文章中,作者主要拿ResNet、ViT(纯Transformer模型)以及Hybrid(卷积和Transformer混合模型)三个模型进行比较,所以本博文除了讲ViT模型外还会简单聊聊Hybrid模型。

    Vision Transformer模型详解

    下图是原论文中给出的关于Vision Transformer(ViT)的模型框架。简单而言,模型由三个模块组成:

    • Linear Projection of Flattened Patches(Embedding层)
    • Transformer Encoder(图右侧有给出更加详细的结构)
    • MLP Head(最终用于分类的层结构)
      vit

    Embedding层结构详解

    对于标准的Transformer模块,要求输入的是token(向量)序列,即二维矩阵[num_token, token_dim],如下图,token0-9对应的都是向量,以ViT-B/16为例,每个token向量长度为768。

    encoder
    对于图像数据而言,其数据格式为[H, W, C]是三维矩阵明显不是Transformer想要的。所以需要先通过一个Embedding层来对数据做个变换。如下图所示,首先将一张图片按给定大小分成一堆Patches。以ViT-B/16为例,将输入图片(224x224)按照16x16大小的Patch进行划分,划分后会得到 ( 224 / 16 ) 2 = 196 (224/16)^2=196 (224/16)2=196个Patches。接着通过线性映射将每个Patch映射到一维向量中,以ViT-B/16为例,每个Patche数据shape为[16, 16, 3]通过映射得到一个长度为768的向量(后面都直接称为token)。[16, 16, 3] -> [768]

    在代码实现中,直接通过一个卷积层来实现。 以ViT-B/16为例,直接使用一个卷积核大小为16x16,步距为16,卷积核个数为768的卷积来实现。通过卷积[224, 224, 3] -> [14, 14, 768],然后把H以及W两个维度展平即可[14, 14, 768] -> [196, 768],此时正好变成了一个二维矩阵,正是Transformer想要的。

    在输入Transformer Encoder之前注意需要加上[class]token以及Position Embedding。 在原论文中,作者说参考BERT,在刚刚得到的一堆tokens中插入一个专门用于分类的[class]token,这个[class]token是一个可训练的参数,数据格式和其他token一样都是一个向量,以ViT-B/16为例,就是一个长度为768的向量,与之前从图片中生成的tokens拼接在一起,Cat([1, 768], [196, 768]) -> [197, 768]。然后关于Position Embedding就是之前Transformer中讲到的Positional Encoding,这里的Position Embedding采用的是一个可训练的参数(1D Pos. Emb.),是直接叠加在tokens上的(add),所以shape要一样。以ViT-B/16为例,刚刚拼接[class]token后shape是[197, 768],那么这里的Position Embedding的shape也是[197, 768]

    embedding

    对于Position Embedding作者也有做一系列对比试验,在源码中默认使用的是1D Pos. Emb.,对比不使用Position Embedding准确率提升了大概3个点,和2D Pos. Emb.比起来没太大差别。
    Position Embedding


    Transformer Encoder详解

    Transformer Encoder其实就是重复堆叠Encoder Block L次,下图是我自己绘制的Encoder Block,主要由以下几部分组成:

    • Layer Norm,这种Normalization方法主要是针对NLP领域提出的,这里是对每个token进行Norm处理,之前也有讲过Layer Norm不懂的可以参考链接
    • Multi-Head Attention,这个结构之前在讲Transformer中很详细的讲过,不在赘述,不了解的可以参考链接
    • Dropout/DropPath,在原论文的代码中是直接使用的Dropout层,在但rwightman实现的代码中使用的是DropPath(stochastic depth),可能后者会更好一点。
    • MLP Block,如图右侧所示,就是全连接+GELU激活函数+Dropout组成也非常简单,需要注意的是第一个全连接层会把输入节点个数翻4倍[197, 768] -> [197, 3072],第二个全连接层会还原回原节点个数[197, 3072] -> [197, 768]

    encoder


    MLP Head详解

    上面通过Transformer Encoder后输出的shape和输入的shape是保持不变的,以ViT-B/16为例,输入的是[197, 768]输出的还是[197, 768]。注意,在Transformer Encoder后其实还有一个Layer Norm没有画出来,后面有我自己画的ViT的模型可以看到详细结构。这里我们只是需要分类的信息,所以我们只需要提取出[class]token生成的对应结果就行,即[197, 768]中抽取出[class]token对应的[1, 768]。接着我们通过MLP Head得到我们最终的分类结果。MLP Head原论文中说在训练ImageNet21K时是由Linear+tanh激活函数+Linear组成。但是迁移到ImageNet1K上或者你自己的数据上时,只用一个Linear即可。

    mlp head


    自己绘制的Vision Transformer网络结构

    为了方便大家理解,我自己根据源代码画了张更详细的图(以ViT-B/16为例):

    vit-b/16


    Hybrid模型详解

    在论文4.1章节的Model Variants中有比较详细的讲到Hybrid混合模型,就是将传统CNN特征提取和Transformer进行结合。下图绘制的是以ResNet50作为特征提取器的混合模型,但这里的Resnet与之前讲的Resnet有些不同。首先这里的R50的卷积层采用的StdConv2d不是传统的Conv2d,然后将所有的BatchNorm层替换成GroupNorm层。在原Resnet50网络中,stage1重复堆叠3次,stage2重复堆叠4次,stage3重复堆叠6次,stage4重复堆叠3次,但在这里的R50中,把stage4中的3个Block移至stage3中,所以stage3中共重复堆叠9次。

    通过R50 Backbone进行特征提取后,得到的特征矩阵shape是[14, 14, 1024],接着再输入Patch Embedding层,注意Patch Embedding中卷积层Conv2d的kernel_size和stride都变成了1,只是用来调整channel。后面的部分和前面ViT中讲的完全一样,就不在赘述。

    r50+vit-b/16

    下表是论文用来对比ViT,Resnet(和刚刚讲的一样,使用的卷积层和Norm层都进行了修改)以及Hybrid模型的效果。通过对比发现,在训练epoch较少时Hybrid优于ViT,但当epoch增大后ViT优于Hybrid。

    vit vs hybrid


    ViT模型搭建参数

    在论文的Table1中有给出三个模型(Base/ Large/ Huge)的参数,在源码中除了有Patch Size为16x16的外还有32x32的。其中的Layers就是Transformer Encoder中重复堆叠Encoder Block的次数,Hidden Size就是对应通过Embedding层后每个token的dim(向量的长度),MLP size是Transformer Encoder中MLP Block第一个全连接的节点个数(是Hidden Size的四倍),Heads代表Transformer中Multi-Head Attention的heads数。

    ModelPatch SizeLayersHidden Size DMLP sizeHeadsParams
    ViT-Base16x161276830721286M
    ViT-Large16x16241024409616307M
    ViT-Huge14x14321280512016632M
    更多相关内容
  • ANSYS Workbench 有限元分析实例详解教程,分析动力学,模态分析,拓扑优化,谱分析和随机振动,多体动力学
  • 5G信令流程详解.zip

    2020-10-10 15:21:49
    5G信令流程详解.zip5G信令流程详解.zip5G信令流程详解.zip5G信令流程详解.zip5G信令流程详解.zip5G信令流程详解.zip5G信令流程详解.zip5G信令流程详解.zip5G信令流程详解.zip5G信令流程详解.zip5G信令流程详解.zip5G...
  • Openlayers实例详解

    千人学习 2019-08-09 14:33:56
    本课程选取了OpenLayers一些具有典型代表性的实例进行详解。讲解实例过程中对涉及到的相关知识点进行穿插分析介绍,适合初学者对OpenLayers形成整体认识、树立学习信心。 课程涉及到map、view、projection、layer、...
  • 三菱FX2NPLC功能指令应用详解完整版。 内容详尽,PLC学习者必备的好教程
  • 《Xilinx系列FPGA芯片IP核详解》完整版。550页PDF格式。刘东华。FPGA的IP 核详解书籍。。FIFO使用,
  • Kettle (Spoon) 教程 中文详解 pdf,Kettle (Spoon) 教程 中文详解 pdf,Kettle (Spoon) 教程 中文详解 pdf,Kettle (Spoon) 教程 中文详解 pdf
  • 视频编码全角度详解.pdf 文档,清晰度一般,不介意的请下载。
  • inux设备驱动开发详解:基于最新的Linux4.0内核配套光盘
  • ANSYS Workbench 工程实例详解 许京荆 优化完整版 ANSYS Workbench 工程实例详解 许京荆 优化完整版
  • FreeRTOS源码详解与应用开发 基于STM32,高清带书签。。
  • abaqus岩土工程实例详解-费康(完整版)
  • Nginx高性能Web服务器详解(完整版)pdf下载,深入了解Nginx
  • USB PD3.0协议详解

    2017-11-07 14:39:47
    USB PD3.0协议详解,USB IF最新发布的usb power delivery资料
  • QValueAxis详解

    2022-04-06 20:36:37
    QValueAxis详解QValueAxis详解QValueAxis详解QValueAxis详解QValueAxis详解QValueAxis详解QValueAxis详解QValueAxis详解QValueAxis详解QValueAxis详解QValueAxis详解QValueAxis详解QValueAxis详解QValueAxis详解...
  • TCP/IP协议详解三卷套高清PDF
  • TCPIP详解 卷1 高清晰完整版
  • 《TCP-IP详解卷一:协议》pdf版,学习计算机网络的优先书籍。
  • ANSYS ICEM CFD网格划分技术实例详解[扫描版PDF电子书]

    千次下载 热门讨论 2015-05-10 11:00:40
    这本《ANSYS ICEM CFD网格划分技术实例详解(附光盘)》由纪兵兵、陈金瓶编著,通过大量实例系统地介绍了ANSYSICEM CFD建模和生成网格的详细过程,其工程背景深厚、内容丰富、讲解详尽,内容安排深入浅出。  本书共...
  • tcpip详解三卷全 完整清晰pdf

    热门讨论 2015-07-06 16:19:19
    完整pdf文件 tcpip协议详解pdf中文版为大家提供卷一、卷二和卷三3个版本, 本书完整而详细地介绍了TCP/IP协议是如何实现的,描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。
  • 《MATLAB图像与视频处理实用案例详解》书籍的全套源码 以及测试图片
  • HTTP协议详解.pdf

    2017-11-18 00:59:24
    HTTP协议详解 HTTP协议详解HTTP协议详解HTTP协议详解HTTP协议详解HTTP协议详解.pdf小巧,清晰,全面的PDF,值得收藏
  • 最为详细的操作系统详解,目前流行广泛的嵌入式操作系统,简单,方便。
  • Android中Canvas绘图基础详解

    千次下载 热门讨论 2015-11-11 00:34:59
    该代码是一个完整的Android工程,详细演示如了如何使用Android中的各种drawXXX方法,以及画笔Paint如何影响绘制的效果。 具体参见博文: http://blog.csdn.net/iispring/article/details/49770651
  • tcpip详解 卷1 高清晰完整版pdf

    万次下载 热门讨论 2013-03-11 09:38:26
    目 录 译者序 前言 第1章 概述 1 1.1 引言 1 1.2 分层 1 1.3 TCP/IP的分层 4 1.4 互联网的地址 5 1.5 域名系统 6 1.6 封装 6 1.7 分用 8 1.8 客户-服务器模型 8 1.9 端口号 9 1.10 标准化过程 10 ...27.3.1 连接管理...
  • Servlet JSP深入详解 基于Tomcat的Web开发

    千次下载 热门讨论 2015-07-17 09:22:25
    Servlet JSP深入详解 基于Tomcat的Web开发
  • 博客《 PopUpWindow使用详解(一)——基本使用》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/49272285
  • STM32 HAL库官方详解

    2017-11-07 16:00:27
    很难得的Hal库驱动文件详解 可以查询Hal库函数 方便STM32 HAL开发
  • [TCP/IP] TCP/IP 详解 卷1 协议 第2版 (英文版)

    千次下载 热门讨论 2013-12-28 09:00:19
    [Addison-Wesley Professional] TCP/IP 详解 卷1 协议 第2版 (英文版) [Addison-Wesley Professional] TCP/IP Illustrated Volume 1 The Protocols 2nd Edition (E-Book) ☆ 图书概要:☆ TCP/IP Illustrated, ...
  • Android项目开发详解,完整扫描版

    千次下载 热门讨论 2014-04-16 07:54:46
    《移动平台开发书库:Android项目开发详解》从实战的角度出发,介绍了基于Android环境的Mobile/Server应用系统开发,涉及移动客户端和服务器端的开发环节,以满足智能手机在线应用的需求。全书以一个Android应用程序...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,010,205
精华内容 804,082
关键字:

详解