ViT(vision transformer)原理快速入门

本专题需要具备的基础:

  • 了解深度学习分类网络原理。
  • 了解2017年的transformer。

Transformer 技术里程碑:

ViT简介

时间:2020年CVPR

论文全称:《An Image is Worth 16*16 Words: Transformers for Image Recognition at Scale》

发明人:谷歌团队

简介:论文中提出了 Vision Transformer (ViT),能直接利用 Transformer 对图像进行分类,而不需要卷积网络。(论文中也提到CNN+transformer,但效果差不多)

基本原理:将图像划分为16x16的小切片,转成序列,输入ViT中,得到分类。

ViT算法全貌

 ViT算法结构图

 备注:上图14*14*768卷积的结果拉平后是196*768,图中(197*768)写错了。

有了基础,理解上图不是很复杂,代码也不是很长,记录几个要点:

  1. 图像是怎么输入transformer中的:用一个16x16尺度,步长为16,通道数为768的卷积,对图像进行特征提取,这种卷积,相当于把图片信息,分割为独立的14*14的小切片。14x14后续会拉平,就成为NLP中序列一样。
  2. 类别编码(class token):假设你9个向量经过编码器之后,你该选择哪一个向量进入到最后的分类头呢?因此这里作者给了额外的一个用于分类的向量,与输入进行拼接。同样这是一个可学习的变量。这东西刚开始会随机初始化,作为图像的类别编码信息,然后会和图像切片信息做通道拼接。
  3. 位置编码:位置编码有两种方式,一种以固定算法生成,另一种是自动学习,ViT中用的自动学习。
  4. 怎么得到分类结果:经过transformer encoder后,数据维度为197 x 768,其中,1x768是网络预测的类别信息,196x768是图像每个‘切片’的信息。后续只要单独提取出类别信息这一维度,通过全连接层(1 x 768转成 1 x class_num)、softmax等,就能让网络学会给出类别索引序号。

问题:为什么刚开始要将224*224的图像通过16*16的卷积核(步长为16)把图形处理成14*14然后拉成一维,而不是直接先把图形拉成一维然后接个全连接层将图形变形为196?

1. 保留空间信息

  • 分块操作:通过将图像切分为多个16x16的块,每个块可以保留一部分图像的空间信息。这对于理解图像的局部结构很重要,因为这些局部结构(如物体的一部分或特定的纹理)对于图像分类、物体检测等任务是有意义的。

  • 直接拉平:如果直接将整个图像拉平成一维向量,那么所有的空间信息都会丢失。虽然可以通过一个全连接层尝试学习这些信息,但这通常是不高效的,因为全连接层没有设计来特别处理空间结构,且参数量会非常大,增加了模型的复杂度和过拟合的风险。

2. 减少计算复杂度

  • 分块减少序列长度:通过将图像分割成小块,可以显著减少Transformer模型处理的序列长度。例如,将224x224图像分割成16x16的块,得到的序列长度为224/16∗224/16=196224/16∗224/16=196。这比直接处理整个图像的像素要少得多,从而减少了计算复杂度。

  • 全连接层复杂度高:相比之下,如果先将图像拉平成一维向量,再通过一个全连接层变换到所需维度,不仅会丢失空间信息,而且全连接层的参数数量会非常庞大,因为每个输入节点都要与每个输出节点连接。这会导致计算量大大增加,并增加过拟合的风险。

3. 对齐与自然语言处理模型

  • 模仿NLP处理方式:Vision Transformer的设计灵感部分来自于NLP领域的Transformer模型,其中文本通常被分割成词或子词单元。通过将图像分割成块,每个块就类似于文本中的一个“词”,这样的处理方式使得ViT可以借鉴NLP中的一些高效技术,例如注意力机制,来处理图像数据。

结论

综上所述,ViT通过分块处理图像而非直接拉平,旨在保留图像的空间信息,减少计算复杂度,并借鉴NLP中成功的处理方式。这种方法使得模型能够更有效地处理大规模图像数据,并利用Transformer的优点来学习图像的全局和局部特征。

较好的参考资料

Vision Transformer详解_霹雳吧啦Wz-CSDN博客

  • 31
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
Vision Transformer (ViT) 是一种基于 Transformer 模型的图像处理模型,它将图像分割成一个个固定大小的图块,并将这些图块转换为序列,然后通过 Transformer 模型进行处理。 下面是 Vision Transformer原理图解: 1. 输入图像:首先,将输入图像分割成固定大小的图块。每个图块都是一个二维的小图像块。 2. 图块转换为序列:每个图块通过一个线性变换和一个位置编码器转换为一个向量。这个向量包含了该图块的特征信息和位置信息。 3. 序列编码:将这些向量输入到 Transformer 编码器中。Transformer 编码器由多个自注意力层和前馈神经网络层组成,用于对输入序列进行编码。自注意力层可以学习到不同位置之间的依赖关系,从而更好地捕捉图像中的上下文信息。 4. 分类任务:在编码器的输出序列中,取出一个特定位置的向量,通常是第一个位置的向量,作为整个图像的特征表示。然后,将这个特征向量输入到一个全连接层进行分类任务。 5. 训练过程:在训练过程中,通过反向传播和梯度下降优化算法,不断调整线性变换的权重、位置编码器的参数和 Transformer 编码器的参数,使得模型能够更好地学习图像特征和分类任务。 总结来说,Vision Transformer 将图像分割成图块,并通过线性变换和位置编码器将图块转换为序列。然后,通过 Transformer 编码器对序列进行编码,最后通过全连接层进行分类任务。这种方法能够利用 Transformer 模型强大的建模能力,有效地处理图像任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值