【计算机视觉】Vision Transformer (ViT)详细解析

这篇具有很好参考价值的文章主要介绍了【计算机视觉】Vision Transformer (ViT)详细解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【计算机视觉】Vision Transformer (ViT)详细解析

1. 介绍

论文地址:An Image Is Worth 16x16 Words: Transformers For Image Recognition At Scale
code地址:github.com/google-research/vision_transformer

Transformer 最早提出是针对NLP领域的,并且在NLP领域引起了强烈的轰动。

  • 提出ViT模型的这篇文章题名为 《An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale》,发表于2020年10月份;
  • 虽然相较于一些Transformer的视觉任务应用模型 (如DETR) 提出要晚了一些,但作为一个纯Transformer结构的视觉分类网络,其工作还是有较大的开创性意义的。
  • 关于Transformer的部分理论之前的博文中有讲 Transformer 结构细节理论解析。
  • 这篇文章实验中,给出的最佳 vit 模型(先在Google的JFT数据集上进行了预训练)然后在ImageNet1K(finetune)上能够达到88.55%的准确率,说明Transformer在CV领域确实是有效的,而且效果还挺惊人。
    vit模型,计算机视觉,深度学习(机器学习),计算机视觉,transformer,深度学习

2. VIT 模型

ViT的核心流程包括:

  • 图像分块处理 (make patches)
  • 图像块嵌入 (patch embedding)与位置编码、
  • Transformer编码器
  • MLP分类处理等4个主要部分。

下面分别从这四个流程部分来阐述ViT的基本设计。
vit模型,计算机视觉,深度学习(机器学习),计算机视觉,transformer,深度学习


2.1 图像分块处理 (make patches)

第一步可以看作是一个图像预处理步骤。

  • 在CNN中,直接对图像进行二维卷积处理即可,不需要特殊的预处理流程。
  • 但Transformer结构不能直接处理图像,在此之前需要对其进行分块处理。(序列化)

假设一个图像 I ∈ H × W × C I∈H×W×C IH×W×C

  • 现在将其分成大小为 P × P × C 的 p a t c h e s P×P×C 的patches P×P×Cpatches,那么就会有 N = H W P 2 N= \frac{HW}{P^2} N=P2HW 个patches,全部patches的维度就可以写为 N × P × P × C N×P×P×C N×P×P×C
  • 然后将每个patch进行展平,相应的数据维度就可以写为 N × ( P 2 × C ) N×(P^2×C) N×(P2×C),也就是shape变成了( N , P 2 × C N, P^2×C N,P2×C)。

这里 N N N 可以理解为输入到Transformer的序列长度, C C C 为输入图像的通道数, P P P 为图像patch的大小。(这样也就符合了transformer的输入)


2.2 图像块嵌入与位置编码

2.2.1 图像块嵌入 (patch embedding)

2.1 中的图像分块仅仅是一道预处理流程,要将 N × ( P 2 × C ) N×(P^2×C) N×(P2×C) 的向量维度,转化为N×D大小的二维输入,还需要做一个图像块嵌入的操作。

  • 类似NLP中的词嵌入,块嵌入也是一种将高维向量转化为低维向量的方式。

所谓图像块嵌入,其实就是对每一个展平后的 patch 向量做一个线性变换,即全连接层,降维后的维度为D。
vit模型,计算机视觉,深度学习(机器学习),计算机视觉,transformer,深度学习
上式中的 E E E 即为块嵌入的全连接层,其输入大小为 P 2 × C P^2×C P2×C(一维),输出大小为D(也是一维)。

  • 值得注意的是,上式中给长度为 N N N 的向量还追加了一个分类向量,用于Transformer训练过程中的类别信息学习。
  • 假设将图像分为 9个patch,即 N=9,输入到Transformer编码器中就有9个向量,但对于这9个向量而言,该取哪一个向量做分类预测呢?取哪一个都不合适。
  • 一个合理的做法就是人为添加一个类别向量,该向量是可学习的嵌入向量,与其他9个patch嵌入向量一起输入到Transformer编码器中,最后取第一个向量作为类别预测结果。
  • 所以,这个追加的向量可以理解为其他9个图像patch寻找的类别信息。
2.2.2 位置编码 (position encoding)

为了保持输入图像patch之间的空间位置信息,还需要对图像块嵌入中添加一个位置编码向量,如上式中的 E p o s E_{pos} Epos 所示。

  • ViT的位置编码没有使用更新的2D位置嵌入方法,而是直接用的一维可学习的位置嵌入变量,
  • 原因是论文作者发现实际使用时2D并没有展现出比1D更好的效果。
    vit模型,计算机视觉,深度学习(机器学习),计算机视觉,transformer,深度学习

2.3 Transformer Encoder(编码器)

Vit中所使用的Transformer 编码器结构和原文《Attention is all you need》中的一致,理论细节可以参考Transformer 详解。

  • 主要还是使用了多头注意力机制;
  • 另外,不像nlp领域中的翻译任务,vit 没有利用解码器的结构。

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

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

vit模型,计算机视觉,深度学习(机器学习),计算机视觉,transformer,深度学习


2.4 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即可。
    vit模型,计算机视觉,深度学习(机器学习),计算机视觉,transformer,深度学习

2.5 全过程维度变化

为了更加清晰的展示ViT模型结构和训练过程中的向量变化,下图给出了ViT的向量维度变化图(图来自于极市平台)。
vit模型,计算机视觉,深度学习(机器学习),计算机视觉,transformer,深度学习


3. ViT 模型结构细节图

3.1 ViT-B/16

为了方便大家理解,太阳花的小绿豆 根据源代码画了张更详细的图 (以ViT-B/16为例):
vit模型,计算机视觉,深度学习(机器学习),计算机视觉,transformer,深度学习


3.2 ViT–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中讲的完全一样,就不在赘述。

vit模型,计算机视觉,深度学习(机器学习),计算机视觉,transformer,深度学习


4. 实验

4.1 ViT 训练

1)ViT的基本训练策略是:

  • 在大数据集上先做预训练,
  • 然后在小数据集上做迁移使用。

2)ViT做预训练使用到的大数据集包括:

  • ILSVRC-2012 ImageNet dataset:1000 classes
  • ImageNet-21k:21k classes
  • JFT:18k High Resolution Images

其中JFT是一个谷歌的内部大规模图像数据集,约有300M图像18291个类别标注。

3)ViT预训练迁移到的数据集包括:

  • CIFAR-10/100
  • Oxford-IIIT Pets
  • Oxford Flowers-102
  • VTAB
  • ImageNet

4)论文共设计了Base、Large和Huge三款不同大小的ViT模型,分别表示基础模型、大模型和超大模型,三款模型的各参数如下表所示。在源码中除了有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数。
    vit模型,计算机视觉,深度学习(机器学习),计算机视觉,transformer,深度学习
    注:若为ViT-B/16 就表示patch size为16的 ViT-Base模型。

4.2 ViT 实验 1—预训练数据集 和 大模型

ViT最核心的实验就是将前述的训练方法进行实现,

  • 即在大规模数据集上预训练后迁移到小数据集上看模型效果。

为了比对CNN模型,

  • 论文特地用了Big Transfer (BiT),该模型使用大的ResNet进行监督迁移学习,是2020 ECCV上提出的一个大CNN模型。
  • 另外一个比对CNN模型是2020年CVPR上的Noisy Student模型,是一个半监督的大型CNN模型。

ViT、BiT 和 Nosiy Student 模型经三大数据集预训练后在各小数据集上的准确率如下表所示。
vit模型,计算机视觉,深度学习(机器学习),计算机视觉,transformer,深度学习
从表中可以看到,ViT经过大数据集的预训练后,

  • 在各小数据集上的迁移后准确率超过了一些SOTA CNN模型的结果。
  • 但要取得这种超越CNN的性能效果,需要大的预训练数据集和大模型的结合

问题:所以接下来的问题就是 ViT 对预训练数据集规模到底有怎样的要求

论文针对此问题做了一个对比实验。分别在ImageNet、ImageNet-21k和JFT-300M进行预训练,三个数据集规模分别为小数据集、中等规模数据集和超大数据集,预训练效果如下图所示。
vit模型,计算机视觉,深度学习(机器学习),计算机视觉,transformer,深度学习

从图中可以看到,

  • 在最小的数据集ImageNet上进行预训练时,尽管作者加了大量的正则化操作,ViT-Large模型性能不如ViT-base模型,更远不如BiT的性能。
  • 在中等规模的ImageNet-21k数据集上,大家的表现都差不多,
  • 只有到了JFT-30M这样的超大数据集上,ViT模型才能发挥出它的优势和效果。

总之,大的预训练数据集加上大模型,是ViT取得SOTA性能的关键因素


4.3 ViT 实验 2—Hybrid 和 纯 ViT

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


参考

【1】https://blog.csdn.net/weixin_37737254/article/details/117639395
【2】https://blog.csdn.net/qq_37541097/article/details/118242600文章来源地址https://www.toymoban.com/news/detail-766273.html

到了这里,关于【计算机视觉】Vision Transformer (ViT)详细解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉 – Computer Vision | CV

    人的大脑皮层, 有差不多 70% 都是在处理视觉信息。 是人类获取信息最主要的渠道,没有之一。 在网络世界,照片和视频(图像的集合)也正在发生爆炸式的增长! 下图是网络上新增数据的占比趋势图。灰色是结构化数据,蓝色是非结构化数据(大部分都是图像和视频)。

    2024年02月11日
    浏览(41)
  • 计算机视觉 (Computer Vision) 领域顶级会议归纳

    🤵 Author :Horizon Max ✨ 编程技巧篇 :各种操作小结 🎇 机器视觉篇 :会变魔术 OpenCV 💥 深度学习篇 :简单入门 PyTorch 🏆 神经网络篇 :经典网络模型 💻 算法篇 :再忙也别忘了 LeetCode 机器视觉 领域三大顶尖国际会议 : CVPR、ICCV、ECCV ; 其他一些 著名 会议: WACV、NIPS、

    2024年02月01日
    浏览(40)
  • 图解Vit 2:Vision Transformer——视觉问题中的注意力机制

    上节回顾 在Transformer之前的RNN,其实已经用到了注意力机制。Seq2Seq。 对于Original RNN,每个RNN的输入,都是对应一个输出。对于original RNN,他的输入和输出必须是一样的。 在处理不是一对一的问题时,提出了RNN Seq2Seq。也就是在前面先输入整体,然后再依次把对应的输出出来

    2024年02月17日
    浏览(46)
  • 使用Google Vision API进行计算机视觉图像创意分析

    介绍 计算机视觉可以用来从图像、视频和音频中提取有用的信息。它允许计算机看到并理解从视觉输入中可以收集到什么信息。在接收到视觉输入后,它可以在图像中收集有价值的信息,并确定必须采取的下一步。 Google Vision API是一种Google云服务,它允许使用计算机视觉从图

    2024年02月06日
    浏览(55)
  • 计算机视觉中的Transformer

    几十年来,理论物理学家一直在努力提出一个宏大的统一理论。通过统一,指的是将被认为是完全不同的两个或多个想法结合起来,将它们的不同方面证明为同一基础现象。一个例子是在19世纪之前,电和磁被看作是无关的现象,但电磁学理论成功地解释了它们,或以某种方

    2024年02月13日
    浏览(43)
  • 【Computer Vision Foundation】全球计算机视觉基金会论文网

    计算机视觉基金会(Computer Vision Foundation,简称CVF)是一个致力于推动计算机视觉领域研究和发展的组织。以下是关于计算机视觉基金会的一些基本信息: 成立目的: CVF成立的目的是促进计算机视觉领域的学术研究、技术发展和知识交流。该基金会的工作旨在推动计算机视觉

    2024年02月03日
    浏览(52)
  • 将Apple Vision Pro和visionOS与计算机视觉结合使用

    在2023年6月5日的WWDC大会上,苹果宣布推出多年来最大规模的硬件和软件组合产品。今年的“One more thing”(“还有一件事”)发布是苹果视觉专业版(Apple Vision Pro),这是一款集成了苹果生态系统的新型空间计算头戴式设备。 苹果视觉专业版是一个垂直整合的硬件和软件平

    2024年02月08日
    浏览(47)
  • 【计算机视觉 | 目标检测】术语理解6:ViT 变种( ViT-H、ViT-L & ViT-B)、bbox(边界框)、边界框的绘制(含源代码)

    ViT,全称为Vision Transformer,是一种基于Transformer架构的视觉处理模型。传统的计算机视觉任务通常使用卷积神经网络(CNN)来提取图像的特征。而ViT的目标是将Transformer模型应用于计算机视觉任务,通过全局性的注意力机制来捕捉图像中的长程依赖关系。 传统的Transformer模型在

    2024年02月12日
    浏览(37)
  • 深度学习与计算机视觉:从CNN到Transformer

    计算机视觉是人工智能领域的一个重要分支,它涉及到计算机自动识别和理解人类视觉中的图像和视频。深度学习是计算机视觉的核心技术之一,它借鉴了人类的思维和学习过程,通过神经网络模拟人类大脑中的神经元活动,实现了对图像和视频的自动处理和理解。 深度学习

    2024年02月02日
    浏览(49)
  • 从计算机视觉(Computer Vision)的角度出发,从传统机器学习的特征工程、分类器设计和优化,到深度学习的CNN架构设计、训练优化、模型压缩与推理部署,详细阐述了图像识别领域最新的技术发展方向

    作者:禅与计算机程序设计艺术 在现代信息技术的快速发展过程中,图像识别技术越来越重要。早期的人工智能算法主要侧重于特征提取、分类或回归任务。近几年,随着神经网络(Neural Networks)在图像识别领域的不断突破,很多研究人员将目光投向了深度学习(Deep Learni

    2024年02月10日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包