ViT(Vision Transformer)

        ViT是一种基于Transformer架构的视觉领域的深度学习模型。它的主要目标是将Transformer应用于图像识别任务。

ViT和Transformer区别如下:

        1. 输入数据结构:Transformer主要应用于自然语言处理领域,输入是一串序列数据,如单词序列。而ViT主要应用于计算机视觉领域,输入是二维图像数据。

        2. 输入编码:Transformer使用位置编码来捕捉输入序列中单词之间的相对位置关系。而ViT通过将图像划分为一系列的图像块,并将每个图像块展平为向量,然后通过位置编码和嵌入向量来表示图像块的位置信息和特征信息。

        3. 注意力机制:Transformer使用自注意力机制来建立单词之间的依赖关系。ViT在Transformer的基础上引入了多头自注意力机制,用于处理图像块之间的关系。

        4. 应用领域:Transformer广泛应用于自然语言处理任务,如机器翻译、文本生成等。ViT主要应用于图像分类任务,如目标识别、图像分割等。

        总的来说,ViT是一种将Transformer应用于图像领域的模型,它通过对图像块进行编码和注意力机制的处理,实现了对图像的表示和分类。而Transformer更广泛地应用于自然语言处理任务,它通过对序列数据的编码和注意力机制的处理,实现了对文本的建模和处理。

ViT的结构

        将图像分割成固定大小的块,ViT将输入图片分为多个patch(16x16),线性嵌入每个块,将每个patch投影为固定长度的向量送入Transformer,添加位置嵌入,后续encoder的操作和原始Transformer中完全相同。但是因为对图片分类,因此在输入序列中加入一个特殊的token,该token对应的输出即为最后的类别预测。

按照上面的流程图,一个ViT block可以分为以下几个步骤:

(1) patch embedding

        标准 Transformer 接收一维令牌嵌入序列作为输入。为了处理 2D 图像,将图像重塑为一系列展平的 2D 块。 补丁嵌入投影 E(公式1)应用于从 CNN 特征图提取的补丁。作为一种特殊情况,补丁可以具有 1x1 的空间大小,这意味着输入序列是通过简单地展平特征图的空间维度并投影到 Transformer 维度来获得的。如上所述添加分类输入嵌入和位置嵌入。Transformer 在其所有层中使用恒定的潜在向量大小 D,因此将补丁展平并使用可训练的线性投影映射到 D 维度(公式1),将该投影的输出称为补丁嵌入。

        例如:输入图片大小为224x224,将图片分为固定大小的patch,patch大小为16x16,则每张图像会生成224x224/16x16=196个patch,即输入序列长度为196,每个patch维度16x16x3=768,线性投射层的维度为768xN ,因此输入通过线性投射层之后的维度依然为196x768,即一共有196个token,每个token的维度是768。这里还需要加上一个特殊字符cls,因此最终的维度是197x768。到目前为止,已经通过patch embedding将一个视觉问题转化为了一个seq2seq问题。

(2) positional encoding(standard learnable 1D position embeddings)位置编码(标准可学习的一维位置嵌入)

        位置嵌入被添加到补丁嵌入中以保留位置信息。使用标准的可学习 1D 位置嵌入,生成的嵌入向量序列用作编码器的输入。ViT同样需要加入位置编码,位置编码可以理解为一张表,表一共有N行,N的大小和输入序列长度相同,每一行代表一个向量,向量的维度和输入序列embedding的维度相同(768)。注意位置编码的操作是sum,而不是concat。加入位置编码信息之后,维度依然是197x768。

(3) LN/multi-head attention/LN

        Transformer 编码器由多头自注意力和 MLP 块(公式2、3)的交替层组成。 Layernorm (LN) 应用在每个块之前,并在每个块之后应用残差连接。在 ViT 中,只有 MLP 层是局部和平移等变的,而自注意力层是全局的。LN输出维度依然是197x768。多头自注意力时,先将输入映射到q,k,v,如果只有一个头,qkv的维度都是197x768,如果有12个头(768/12=64),则qkv的维度是197x64,一共有12组qkv,最后再将12组qkv的输出拼接起来,输出维度是197x768,然后在过一层LN,维度依然是197x768。

(4) MLP

        MLP 包含两个具有 GELU 非线性的层。将维度放大再缩小回去,197x768放大为197x3072,再缩小变为197x768,一个block之后维度依然和输入相同,都是197x768,因此可以堆叠多个block。最后会将特殊字符cls对应的输出作为encoder的最终输出 ,代表最终的image presentation(另一种做法是不加cls字符,对所有的tokens的输出做一个平均),如下图公式(4),后面接一个MLP进行图片分类:

将可学习的嵌入添加到嵌入补丁序列 (z0:0 = xclass) 中,其 Transformer 编码器 (z0:L) 输出处的状态用作图像表示 y(等式 4) 。

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值