热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VisionTransformer(ViT)

目录IntroductionMethodVisionTransformer(ViT)Fine-tuningandHigherResolutionExperimentsSetupCo


目录

  • Introduction
  • Method
    • Vision Transformer (ViT)
    • Fine-tuning and Higher Resolution
  • Experiments
    • Setup
    • Comparison to SOTA
    • Pre-training data requirements
    • Scaling study
    • Inspecting ViT
    • Self-Supervision
  • References


Introduction


  • ViT 这篇论文提出,在图像分类任务中,CNN 并非必须的, pure Transformer 也能取得很好的效果。特别是在大量数据上预训练后再迁移到中小型数据集上时 (ImageNet, CIFAR-100, VTAB, etc.),相比 SOTA CNNs,ViT 仅需更少的训练资源就能取得更好的效果

Method


Vision Transformer (ViT)

在这里插入图片描述


  • 标准的 Transformer 接受 token embeddings 的序列,因此为了能直接将 Transformer Encoder 应用到图像上,我们需要将 2D 图像处理为 1D 向量。一个很直接的想法就是将图片像素经过 Embedding 层后送入 Transformer,但一张图片的像素很多,这样做会导致输入序列长度过长。为此,ViT 将一张图片划分为若干个 P×P=16×16P\times P=16\times 16P×P=16×16 的 patches,然后将每个 patch 拉伸为一个向量,送入线性层得到相应的 Embedding。例如,输入图像大小为 224×224×3224\times224\times3224×224×3,可以划分为 N=2242162=196N=\frac{224^2}{16^2}=196N=1622242=196 个 patches,每个 patch 又被拉伸为 16×16×3=76816\times16\times3=76816×16×3=768 维的向量,送入线性投影层 (i.e. D×DD\times DD×D 的全连接层) 得到 N×D=196×768N\times D=196\times768N×D=196×768 的 patch embeddings 序列。除了 patch embeddings,ViT 也加入了 position embeddings 来表示 patches 之间的位置信息 (learnable 1D position embeddings)
  • 为了对图片进行分类,类似于 BERT,ViT 也添加了 [class] token (输入序列长度为 196+1=197196+1=197196+1=197),它的最终输出就对应了图像表示 yyy,在经过一个 classification head 之后就得到了图片的最终类别 (classification head 在预训练时为一个带有一层隐藏层的 MLP,微调时为一个线性层,激活函数为 GELU)

在这里插入图片描述


GAP v.s. [CLS]
在 CV 领域,使用 CNN 进行图像分类时,常见的做法是对最后的特征图进行全局平均池化 (GAP),因此作者也进行了使用 GAP 和 [CLS] 进行分类的消融实验,当使用 GAP 时,ViT 只对最终的 image-patch embeddings 进行全局平均池化,然后使用线性层进行分类 (但注意这种方法需要的学习率与 [CLS] 完全不同)。实验结果表明这两种方法效果是差不多的,但为了使得 ViT 与标准 Transformer 更接近,作者最终采用了 [CLS] 进行分类
在这里插入图片描述




Inductive bias (归纳偏置)


  • ViT 比 CNN 少了很多针对图像的归纳偏置,例如在 CNN 中,locality (i.e. 局部性. 图片上相邻区域会有相近特征) 和 translation equivariance (i.e. 平移等变性. 设 fff 为平移操作,ggg 为卷积操作,则 f(g(x))=g(f(x))f(g(x))=g(f(x))f(g(x))=g(f(x))) 体现在了模型的每一层中,而 ViT 中只有 MLP 是局部且具有平移等变性的,自注意力层则是全局的。在整个 ViT 中,也只有 positional embedding 使用了针对图像的归纳偏置,除此之外,所有图像的位置信息都必须由模型从头学得
  • 因此由于缺少了归纳偏置,当直接在中等大小数据集 (ImageNet…) 上训练且不进行强正则化时,ViT 性能并没有同等大小的 ResNet 模型好。但如果让 ViT 在更大的数据集上预训练,就可以发现大规模训练胜过了归纳偏置 (88.55% on ImageNet, 90.72% on ImageNet-ReaL, 94.55% on CIFAR-100, and 77.63% on the VTAB suite of 19 tasks)


Hybrid Architecture


  • 除了上述直接将图像划分为若干个 16×1616\times1616×16 patches 的方法,ViT 也提出了一种混合结构,也就是先让图片经过一个 CNN 网络,然后对特征图划分 patches

Fine-tuning and Higher Resolution


  • 当把预训练的 ViT 模型在下游任务上微调时,我们需要重新训练 classification head。如果下游任务图像分辨率更高,模型往往会取得更好的效果,此时如果保持 patch size 不变,那么就会得到更大的序列长度,但此时就无法获取有意义的 positional embedding。为此,ViT 对预训练的 positional embedding 进行 2D 插值

Experiments


Setup

Datasets


  • ILSVRC-2012 ImageNet dataset (1k classes and 1.3M images)
  • ImageNet-21k (21k classes and 14M images)
  • JFT (18k classes and 303M high-resolution images)

预训练数据集中去除了与下游任务数据集重合的图片




Model Variants


  • “Base” 和 “Large” 模型与 BERT 一致,此外还添加了 “Huge” 模型. 在之后的模型命名中,我们使用简称,例如 ViT-L/16 表示 16×1616 × 1616×16 input patch size 的 “Large” 模型
    在这里插入图片描述


Baseline - ResNet (BiT)


  • 网络使用 ResNet,但将 Batch Normalization 替换为了 Group Normalization,并且使用了 standardized convolutions,这些修改提高了迁移学习的性能。我们将修改后的模型称为 “ResNet (BiT)”.

Comparison to SOTA

在这里插入图片描述


  • 可以看到,在 JFT-300M 上预训练的 ViT 在所有 benchmarks 上性能都超越了 ResNet-based baselines,并且相比 CNN,ViT 需要的训练资源更少

Pre-training data requirements


  • 下面的实验研究了数据集大小对 ViT 性能的影响


在不同大小的数据集上预训练后,在 ImageNet 上微调

在这里插入图片描述


灰色阴影区域代表 BiT 的性能范围 (分别使用了两个不同大小的 BiT 网络)



为了提高模型在小数据集上的性能,实验时使用了 3 种正则化方法 - weight decay, dropout, 和 label smoothing 并对相应的参数进行了优化




使用 JFT 数据集的不同大小的子集进行预训练,在 ImageNet 上微调

在这里插入图片描述


实验时不再进行额外的正则化来排除正则化带来的影响



Scaling study

在 JFT-300M 上预训练,迁移到其他数据集上

在这里插入图片描述


  • (1) ViT 在 performance/compute trade-off 上碾压了 ResNet,仅需更少的训练资源就可以达到与 ResNet 相同的性能 (假设在足够大的数据集上预训练)
  • (2) 在训练资源较少时,hybrids 模型性能略微优于 ViT,但差距随着模型参数量的增加而逐渐减小
  • (3) 随着模型参数量的增大,ViT 性能并没有饱和的迹象,这表明继续增大模型大小可以进一步提高模型性能

Inspecting ViT

Patch embedding 层


  • ViT 的 patch embedding 层将 flattened patches 进行了线性投影,下图显示了学得的 embedding filters 的主成分。这些主成分似乎形成了一组能表示 patch 纹理结构的基函数
    在这里插入图片描述


Position embeddings


  • 下图展示了每个 patch 与其余 patch 的余弦相似度。可以看到,空间上更相近的 patches 对应的 position embeddings 也更相似,除此之外,在同一行或同一列的 patches 对应的 position embeddings 也更相似 (a row-column structure)
    在这里插入图片描述


Self-attention


  • Self-attention 使得 ViT 能从最底层开始就整合图片的全局信息,下面的实验探索了 ViT 在多大程度上利用了这种能力。为此,我们计算了每个 Transformer 块的不同 heads 的 mean attention distance (根据每个 head 中不同 patches 之间的空间距离和 attention weight 计算,类似于 CNN 中的感受野),可以发现,有一些 heads 在最底层就已经开始整合图像的全局信息,而另一些 heads 在最底层只负责整合局部信息 (这种局部性在 hybrids 模型中表现得更少,这表明它们的功能可能与 CNN 的较低层相近),并且总体而言,attention distances 随着网络深度的增加而增加,表明随着层数的增加,ViT 逐渐关注更高层次的信息
    在这里插入图片描述


Attention map

在这里插入图片描述


  • 这里使用 Attention Rollout 进行可视化。简单地说,就是对 ViT-L/16 的所有 heads 中的 attention weights 计算平均值,然后对于所有层,递归地乘上权重矩阵

Self-Supervision


  • Transformers 在 NLP 领域的成功不仅来源于它强大的可扩展性,更在于它大规模自监督的预训练方式。因此,类似 BERT,我们也尝试了 masked patch prediction,最终的 ViT-B/16 模型在 ImageNet 上取得了 79.9% 的精度,这比从头训练得到的精度高了 2%,但也比有监督学习精度低了 4%。这表明 ViT 的自监督学习仍是一个值得探索的方向

References


  • paper: An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
  • Fine-tuning code and pre-trained models: https://github.com/google-research/vision_transformer
  • ViT 论文逐段精读【论文精读】
  • Intriguing Properties of Vision Transformers

推荐阅读
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 实现一个通讯录系统,可添加、删除、修改、查找、显示、清空、排序通讯录信息
    本文介绍了如何实现一个通讯录系统,该系统可以实现添加、删除、修改、查找、显示、清空、排序通讯录信息的功能。通过定义结构体LINK和PEOPLE来存储通讯录信息,使用相关函数来实现各项功能。详细介绍了每个功能的实现方法。 ... [详细]
  • 本文介绍了Python函数的定义与调用的方法,以及函数的作用,包括增强代码的可读性和重用性。文章详细解释了函数的定义与调用的语法和规则,以及函数的参数和返回值的用法。同时,还介绍了函数返回值的多种情况和多个值的返回方式。通过学习本文,读者可以更好地理解和使用Python函数,提高代码的可读性和重用性。 ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • 设计模式——模板方法模式的应用和优缺点
    本文介绍了设计模式中的模板方法模式,包括其定义、应用、优点、缺点和使用场景。模板方法模式是一种基于继承的代码复用技术,通过将复杂流程的实现步骤封装在基本方法中,并在抽象父类中定义模板方法的执行次序,子类可以覆盖某些步骤,实现相同的算法框架的不同功能。该模式在软件开发中具有广泛的应用价值。 ... [详细]
author-avatar
mobiledu2502909027
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有