热门标签 | 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架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
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社区 版权所有