ViT(Vison Transformer)学习

Paper:An image is worth 16×16 words: transformers for image recognition at scale. In ICLR, 2021.

Transformer 在 NLP领域大放异彩,并且随着模型和数据集的不断增长,仍然没有表现出饱和的迹象。这使得使用更大规模的数据对Transformer结构进行训练得到表现更优的模型成为了一种解决问题的方案。受 NLP 中 Transformer 成功的启发,作者尝试将标准 Transformer 直接应用于图像,并进行尽可能少的修改。为此,作者将图像拆分为补丁,并提供这些补丁的线性嵌入序列作为 Transformer 的输入。 在 NLP 应用程序中,图像补丁的处理方式与标记(单词)相同。 并以监督方式训练图像分类模型。

模型概述

ViT(Vision Transformer)学习_计算机视觉

主要流程如下:

  • 将图像分割成固定大小的块,作为三维张量
  • 将三维张量向量化为一维序列
  • 对一维序列采用共享参数的Dense层进行嵌入
  • 将线形层输出结果进行位置嵌入编码,输入给多层Transformer叠加的 Transformer Encoder 进行编码
  • 对编码结果进行 Softmax,以输出作为分类矩阵

张量向量化

ViT(Vision Transformer)学习_向量化_02

将分割的图像块张量扁平化为向量

对向量进行嵌入

采用Dense层对向量进行嵌入

ViT(Vision Transformer)学习_数据集_03

同时,所有的 Dense 层共享参数信息

ViT(Vision Transformer)学习_向量化_04

对 embedding 进行位置编码

ViT(Vision Transformer)学习_深度学习_05

即对位置信息进行编码并与 embedding 进行加和

使用Transformer Encoder 进行处理

ViT(Vision Transformer)学习_数据集_06

将编码结果输入多层堆叠的 Transformer,并最终使用 [CLS] 的输出作为分类结果

大数据集预训练

ViT(Vision Transformer)学习_向量化_07

模型在大规模数据集上进行预训练,在目标数据集上进行 finetuning ,并最终在目标数据集的测试集上进行测试