Vision Transformer

目录

1. Vision Transformer网络结构(Vit-B16为例)

1.1 Patch Embeddings 

1.2 class token 

1.3 Position Embeddings 

2. Transformer Encoder 

3. MLP Head


 

1. Vision Transformer网络结构(Vit-B16为例)

                                                            原论文网络结构图

                                                           自己画的网络结构图

1.1 Patch Embeddings 

         (1)输入图像被送入一个卷积层进行特征提取,得到shape为 (B, C, H, W) 的特征图。其中,B表示batch sizeC表示通道数,HW分别表示特征图的高和宽。

        (2)特征图被拆成大小为 patch_size x patch_size 的若干个patch,每个patch对应着一个形状为 (C, patch_size, patch_size) 的三维张量(在Vit-B16中,patch_size=16)。

        (3) 每个patch的三维张量被展平成形状为 (C * patch_size * patch_size,) 的一维向量,并输入到一个线性变换层中,将其映射为一个低维度的嵌入向量,即所谓的补丁嵌入Patch Embedding)。

         以Vit-B16为例,将一张H*W*C(224*224*3)大小的图片切分成一堆patch,patch大小为P*P(16*16),得到图像patch数N=H*W/P*P=224*224/16*16=196个patch。接着通过线性映射(FC)将每个patch映射到一维向量中,每个patch大小为16*16*3,通过线性映射(FC)得到长度为768的一维向量(也叫token),原始图像可展平为2D的序列[196,768],这一过程通过一个kernel=16*16,stride=16的卷积层实现,Transformer的各层输入就是需要二维的矩阵。

1.2 class token 

        class token插入到输入序列的开头作为第一个元素,并将其与其他patch嵌入一起输入到Transformer编码器中进行处理。由于class token经过学习可以捕捉到整张图像的全局信息和类别特征,因此它对于识别图像属于哪个类别具有关键作用。

        上面将图像分成了N=196个patch,输入到Transformer Encoder 中就有N=196个向量,无论取哪一个用于分类预测都不合适,所以添加一个可学习的cls_token作为分类的类别向量,与patch一起输入到Transformer Encoder 中,即N+1个向量输入到transformer编码器中。添加的cls_token类别向量可以理解为其它N个patch图像块寻找的类别信息,cls_token在训练时随机初始化,大小为[1,768]。

1.3 Position Embeddings 

        就是给patch图像块添加位置信息,关于位置编码有以下几种:

         (1)  无位置嵌入

         (2)  1-D位置嵌入(1D-Pos.Emb.):把2D图像块视为1D序列

         (3)  2-D位置嵌入(2D-Pos.Emb.):2D图像块视位置(x,y)

         (4) 相对位置嵌入RPE(Rel.Pos.Emb),图形块的相对位置

在论文源码中默认使用1D位置嵌入,用于为图像的不同区域引入位置信息。由于Transformer编码器只能处理序列数据,因此我们需要将图像的空间结构转换为序列结构,以便能够输入Transformer编码器进行处理。在这种情况下,我们需要一种方法来为每个(patch)的位置指定独特的标识符。这就是位置嵌入派上用场的地方。这样,在经过Transformer编码器处理后,网络就能够根据位置信息来推断不同区域之间的关系,从而更好地理解图像的语义内容。

2. Transformer Encoder 

        重复堆叠L=12次的Transformer Encoder模块,由层归一化(Layer Norm)、多头注意力机制(MSA)、多层感知块(MLP)组成。在Vision Transformer模型中,Transformer编码器是用于处理图像序列的核心组件。它通过多层注意力机制和前馈神经网络,对输入的patch特征序列进行编码和建模,以最终生成具有语义信息的特征表示。

具体来说,Transformer编码器由多个Encoder层组成,每个Encoder层都包含两个子层:一个是Multi-Head Attention层,另一个是Feed-Forward神经网络层(实质就是MLP)。其中:

Multi-Head Attention层:用于对输入的patch序列进行全局性的交互和关联,捕捉不同patch之间的依赖关系。它利用多头自注意力机制,首先将序列中每个patch与所有其他patch进行相似度计算,然后根据相似度分配权重并对其求加权平均值,从而得到每个patch的新的上下文向量表示。

Feed-Forward神经网络层(实质就是MLP):用于对每个patch的特征向量进行非线性变换,引入更多的表达能力。它由两个线性变换层和激活函数GELU组成,其中第一层将输入特征向量映射到更高维度的空间,第二层将其缩放回原来的维度。

最终,Transformer编码器将经过多个Encoder层处理的patch序列映射到一个全局特征向量中,其中每个元素都捕获了输入图像的不同属性和语义信息。这个全局特征向量可以作为输入到输出层(Head)中进行分类、目标检测等任务。

3. MLP Head

        经过上面的Transformer Encoder前后shape是保持不变的,输入输出都是[197,768]。在视觉Transformer模型中,MLP Head是用于将Transformer编码器的输出转换为最终预测结果的部分。它通常由两个全连接层和一个激活函数组成。

        具体而言,经过前面的Encoder处理后,我们得到了一个全局特征向量,其中每个元素都表示输入图像的不同属性和语义信息。接着,我们通过MLP Head对这个全局特征向量进行非线性变换,从而获得最终的输出结果。这个输出结果可以用于目标检测、图像分类、语义分割等多种计算机视觉任务。MLP Head通常会引入一些正则化方法来防止过拟合,例如Dropout等技术。此外,我们还可以添加额外的损失函数,例如交叉熵损失函数等,对模型进行监督训练,提高模型的泛化能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值