Vision Transformer (ViT)介绍

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

paper:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

摘要

  • 把transformer直接应用于图像块序列,也可以在图像分类任务上表现很好。
  • 通过在大数据集上预训练,然后迁移到中等规模和小规模数据集上,ViT可以取得和SOTA的卷积网络同样出色(甚至更好)的结果,同时需要更少的训练资源。

介绍

1、将标准transformer直接应用于图像,只做最小可能修改

将一幅图像分割成多个图像块,然后将这些图像块的embedding序列作为输入,送到transformer。这里的图像块类似于NLP中的token。

2、在中等规模数据集(如ImageNet)上训练ViT,模型结果会比resnet结构的模型低一点。

和CNN相比,transformer缺乏一些归纳偏置(inductive bias),比如平移不变性和局部性。但是在大规模数据集上,直接从数据中学习,更加有效。

方法

网络结构

Vision Transformer (ViT)介绍,CV,深度学习,transformer,深度学习,人工智能

图片来源:https://zhuanlan.zhihu.com/p/342261872

输入图像维度为$$H×W×C$$,分割成N个$$P×P$$大小的图像块,N为$$HW/P^2$$,图像块通过线性映射得到D维的向量,D在transformer的所有层中保持不变。

不同层的操作计算过程如下:

Vision Transformer (ViT)介绍,CV,深度学习,transformer,深度学习,人工智能

公式1是将图像块映射成embedding,这里加了一个可学习的class token $$x_{class}$$(类似BERT),与其他图像块嵌入向量一起输入到 Transformer 编码器中,其在网络最后的输出,作为整个图像的表示y,就是公式4中的结果。Transformer 编码器中的具体过程这里不作展开,可参考Transformer原理理解_qiumokucao的博客-CSDN博客。

公式2是multiheaded self-attention的计算过程,公式3是MLP的计算过程。

实际实现过程中,图像块映射成embedding可以通过卷积实现:

# 其中fh,fw是patch的高和宽,让卷积核的大小和stride与patch大小相等
self.patch_embedding = nn.Conv2d(in_channels, dim, kernel_size=(fh, fw), stride=(fh, fw))

 另外,网络最后接MLP head的时候,可以只使用class token对应的结果(如公式4中描述),也可以对所有结果进行pooling,然后接MLP head。参考https://github.com/lucidrains/vit-pytorch.git中实现:

    def forward(self, img):
        x = self.to_patch_embedding(img) #图像转成embedding
        b, n, _ = x.shape

        cls_tokens = repeat(self.cls_token, '1 1 d -> b 1 d', b = b)
        x = torch.cat((cls_tokens, x), dim=1) #引入cls_tokens
        x += self.pos_embedding[:, :(n + 1)]  #加入位置embedding
        x = self.dropout(x)

        x = self.transformer(x)
        # 根据设置选择cls_tokens对应的输出或者进行pooling
        x = x.mean(dim = 1) if self.pool == 'mean' else x[:, 0]

        x = self.to_latent(x)
        return self.mlp_head(x)

Hybrid Architecture

可以将ViT应用于CNN的特征之上,区别就是这里把CNN的特征映射为embedding,其余部分跟ViT的处理过程一样

模型微调(fine-tune)

在大规模数据集上进行预训练,然后在下游任务中进行微调。微调时,把预训练的预测头去掉,添加一个$$D×K$$的全连接层,K为预测类别数。

微调时可以采用更大的输入分辨率,保持patch size不变,这样输入到transformer的序列长度会变长,事实上ViT可以处理任意长的序列,不过预训练的position embedding就失去意义了,这时作者对position embedding进行了2D插值处理。

实验结果

数据集

ImageNet:1.3M images,1k classes

ImageNet-21k:14M images,21k classes

JFT:303M high-resolution images,18k classes

模型参数

Vision Transformer (ViT)介绍,CV,深度学习,transformer,深度学习,人工智能

Layers:Encoder Block 数量

Hidden Size D:隐藏层特征大小,其在各 Encoder Block 保持一致

MLP Size:MLP 特征大小,通常设为 4D

Heads:MSA 中的 heads 数量

Patch Size:模型输入的 Patch size,ViT 中共有两个设置:14x14 和 16x16,该参数仅影响计算量,patch size越小,序列长度越长,计算量越大。

实验结果

 Vision Transformer (ViT)介绍,CV,深度学习,transformer,深度学习,人工智能

JFT+TPU的钞能力! 文章来源地址https://www.toymoban.com/news/detail-544622.html

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

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

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

相关文章

  • Vision Transformer(VIT)调研

    综述参考:https://zhuanlan.zhihu.com/p/598785102 2020 VIT 代码库 https://github.com/lucidrains/vit-pytorch 只有分类任务,有训练的测试。有各种各样的vit模型结构。 原文 https://arxiv.org/abs/2010.11929 2021 Swim Transformer https://arxiv.org/abs/2103.14030 v2 https://arxiv.org/pdf/2111.09883.pdf code and pretrain_model https:/

    2023年04月11日
    浏览(55)
  • 论文阅读 Vision Transformer - VIT

    通过将图像切成patch线形层编码成token特征编码的方法,用transformer的encoder来做图像分类 解决问题: transformer输入限制: 由于自注意力+backbone,算法复杂度为o(n²),token长度一般要512才足够运算 解决:a) 将图片转为token输入 b) 将特征图转为token输入 c)√ 切patch转为token输入 tra

    2024年02月01日
    浏览(43)
  • ViT-vision transformer

    介绍 Transformer最早是在NLP领域提出的,受此启发,Google将其用于图像,并对分类流程作尽量少的修改。 起源 :从机器翻译的角度来看,一个句子想要翻译好,必须考虑上下文的信息! 如:The animal didn’t cross the street because it was too tired将其翻译成中文,这里面就涉及了it这个

    2024年02月15日
    浏览(41)
  • 图解Vit 3:Vision Transformer——ViT模型全流程拆解

    先把上一篇中的遗留问题解释清楚:上图中,代码中的all_head_dim就是有多少head。把他们拼接起来。 Encoder在Multi-Head Self-Attention之后,维度一直是BND`,一直没有变。 不论是BN(Batch Normalization)还是LN(Layer Normalization),都是对batch来做的。只是他们的归一化方式不同。我们在求mea

    2024年02月16日
    浏览(39)
  • 深度学习应用篇-计算机视觉-图像分类[3]:ResNeXt、Res2Net、Swin Transformer、Vision Transformer等模型结构、实现、模型特点详细介绍

    【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、

    2024年02月14日
    浏览(54)
  • 【计算机视觉】Vision Transformer (ViT)详细解析

    论文地址: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》

    2024年02月04日
    浏览(46)
  • ViT: Vision transformer的cls token作用?

    知乎:Vision Transformer 超详细解读 (原理分析+代码解读)  CSDN:vit 中的 cls_token 与 position_embed 理解 CSDN:ViT为何引入cls_token CSDN:ViT中特殊class token的一些问题 Vision Transformer在一些任务上超越了CNN,得益于全局信息的聚合。在ViT论文中,作者引入了一个class token作为分类特征。

    2024年02月01日
    浏览(44)
  • 《Vision Transformer (ViT)》论文精度,并解析ViT模型结构以及代码实现

    《AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE》 论文共有22页,表格和图像很多,网络模型结构解释的很清楚,并且用四个公式展示了模型的计算过程;本文章对其进行精度,并对源码进行剖析,希望读者可以耐心读下去。 论文地址:https://arxiv.org/abs/2010.11929 源

    2024年02月05日
    浏览(40)
  • Vision Transformer(ViT)论文解读与代码实践(Pytorch)

    Vision Transformer(ViT)是一种基于Transformer架构的神经网络模型,用于处理计算机视觉任务。传统的计算机视觉模型如卷积神经网络(CNN)在处理图像任务时取得了很大的成功,但CNN存在一些局限,例如对于长距离依赖的建模能力较弱。ViT通过引入Transformer的注意力机制来解决这

    2024年02月07日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包