Vision Transformer模型入门

Vision Transformer模型入门

  • 一、Vision Transformer 模型
    • 1,Embedding 层结构详解
    • 2,Transformer Encoder 详解
    • 3,MLP Head 详解
  • 二、ViT-B/16 网络结构
  • 三、Hybrid 模型详解
  • 四、ViT 模型搭建参数

一、Vision Transformer 模型

总体三个模块:Embedding层、Transformer Encoder、MLP Head(分类层)
Vision Transformer模型入门_第1张图片
:以下层结构讲解均以ViT-B/16为例

1,Embedding 层结构详解

Transformer 要求 token 向量,需要 Embedding 层做数据转换。将一张图根据给定大小分为一堆 patches。
例如 224 x 224 的图片按照 16 x 16 的 patch 划分,得到(224 / 16)² = 196 个 patches。接着将每个 patch 映射到一维向量,即每个 patch 的 shape [16,16,3] 通过映射得到一个长度为 768 的向量(即为Transformer 所需的 token 向量)。

代码实现:通过一个 16 x 16 的卷积核,步距 16,卷积个数 768 实现。shape [224,224,3] -> [14,14,768],再把 H 和 W 两个维度展平,[14,14,768] -> [196,768]

在输入Transformer Encoder之前注意需要加上[class]token以及Position Embedding。
在刚刚得到的一堆 tokens 中插入一个专门用于分类的 [class]token,这个 [class]token 是一个可训练的参数,数据格式和其他 token 一样都是一个向量。以 ViT-B/16 为例,就是一个长度为768的向量,与之前从图片中生成的 tokens 拼接在一起,Cat([1, 768], [196, 768]) -> [197, 768]。
关于 Position Embedding 就是 Transformer 中的 Positional Encoding,采用的是一个可训练的参数(1D Pos. Emb.),是直接叠加在 tokens 上的(add),所以 shape 要一样。以 ViT-B/16 为例,刚刚拼接 [class]token 后 shape 是 [197, 768],那么这里的 Position Embedding 的 shape 也是 [197, 768]。
Vision Transformer模型入门_第2张图片

2,Transformer Encoder 详解

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

  • Layer Norm:对每个 token 进行 Norm 处理(层归一化)
  • Multi-Head Attention
  • Dropout/DropPath
  • MLP Block:全连接 + GELU 激活函数 + Dropout 组成,需要注意第一个全连接层会把输入节点个数翻 4 倍 [197, 768] -> [197, 3072],第二个全连接层会还原回原节点个数 [197, 3072] -> [197, 768]
    Vision Transformer模型入门_第3张图片
    注意:Transformer Encoder后还有一个 Layer Norm 没有画出来

3,MLP Head 详解

上面通过 Transformer Encoder 后输出的 shape 和输入的 shape 是保持不变的,以 ViT-B/16 为例,输入的是 [197, 768] 输出的还是 [197, 768]。
这里我们只需要分类信息,所以只需提取出 [class]token 生成的对应结果就行,即 [197, 768] 中抽取出 [class]token 对应的 [1, 768]。接着通过 MLP Head 得到最终的分类结果。
Vision Transformer模型入门_第4张图片

二、ViT-B/16 网络结构

Vision Transformer模型入门_第5张图片

三、Hybrid 模型详解

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中讲的完全一样。
Vision Transformer模型入门_第6张图片

四、ViT 模型搭建参数

下面给出三个模型(Base/ Large/ Huge)的参数,其中,

  • Layers 就是 Transformer Encoder 中重复堆叠 Encoder Block 的次数
  • Hidden Size 就是对应通过 Embedding 层后每个 token 的 dim(向量的长度)
  • MLP size 是 Transformer Encoder 中 MLP Block 第一个全连接的节点个数(是 Hidden Size 的四倍)
  • Heads 代表 Transformer 中 Multi-Head Attention 的 heads 数
Model Patch Size Layers Hidden Size D MLP size Heads Params
ViT-Base 16x16 12 768 3072 12 86M
ViT-Large 16x16 24 1024 4096 16 307M
ViT-Huge 14x14 32 1280 5120 16 632M

你可能感兴趣的:(深度学习,transformer,深度学习,人工智能)