Vision Transformer 简介

Paper: Dosovitskiy A, Beyer L, Kolesnikov A, et al. An image is worth 16x16 words: Transformers for image recognition at scale[J]. arXiv preprint arXiv:2010.11929, 2020.
Introduction:
Code: https://github.com/google-research/vision_transformer, https://github.com/lucidrains/vit-pytorch

Vision Transformer (ViT) 是 2020 年 Google 团队提出的将 Transformer 应用于图像的模型,虽然不是第一篇将 Transformer 应用在视觉任务的论文,但是因为其模型简单且效果好,可扩展性强,成为了 Transformer 在 CV 领域的里程碑著作,引爆了后续相关研究。

ViT 将 Transformer 直接应用于图像块序列,通过 patch embedding 将视觉问题转化为一个 seq2seq 问题,可以很好地完成图像分类任务。当拥有足够多的数据进行预训练的时候,ViT 的表现就会超过 CNN,突破 Transformer 缺少归纳偏置的限制,可以在下游任务中获得较好的迁移效果。

Vision Transformer 简介_第1张图片

目录

  • 一. 研究思路
  • 二. ViT 模型
  • 三. 实验过程
  • 四. 实验结果
  • 四. 总结

一. 研究思路

Transformer 架构在 NLP 领域中举足轻重,但在 CV 中的应用相当有限,且都是将 Attention 嵌入 CNN 或 RNN。为了消除对 CNN 等的依赖,Google 研究人员想要将 Transformer 直接应用于图像任务。然而,如果将图像展开为像素点作为一个个 token,Transformer 模型的算力和内存会随图像长度的增加呈平方规模消耗,参数规模是 BERT、GPT 等大模型的平方数量级。1

为了缓解 Transformer 模型的复杂度呈平方级增加,ViT 将输入图像切分为多个块 (patch),每个 patch 视为一个 token。然后将切分出的图像块序列 (sequences of image patches) 当作 token 处理后,就可以传入原始 Transformer,来完成图像分类任务。

二. ViT 模型

ViT 模型迁移 Transformer 流程如下:

  1. 将输入图像分为多个 16x16 的 patch,每个 patch 视为一个 token;

  2. 使用线性映射层 将每个 patch 展开并投影为固定长度的向量

  3. 将 patch 的映射向量 TokenEMB 和位置编码相加;

  4. 图片分类任务需要在输入序列中加入一个特殊的 token —— CLS,该 token 最终的输出即为最后的类别预测;

    这里加入 CLS 是借鉴了 BERT,用于表示 token 序列的语义信息,常用于分类任务。这里当然也可以不加 CLS,使用 global average pooling (GAP) 进行分类,文中进行了效果对比:
    Vision Transformer 简介_第2张图片

  5. 将上述 embedding 传入 Transformer,后续 Encoder 操作和原始 Transformer 中完全相同;

Vision Transformer 简介_第3张图片

ViT 中每一层维度变化过程见 ViT(Vision Transformer)解析。

三. 实验过程

为了理解 Self-Attention 是如何聚合信息的,基于 attention weight 可视化计算不同层多头注意力的 average attention distance 如下:

代码解读见 【深度学习】详解 Vision Transformer (ViT)、全网最强ViT (Vision Transformer)原理及代码解析。

四. 实验结果

对比实验和消融实验见 ViT:Vision Transformer。

达摩院 modelscope 模型开源平台提供了快速体验 ViT 模型的 demo,可以在线进行图像分类任务:
Vision Transformer 简介_第4张图片

四. 总结

ViT 通过 patch embedding 将图像转化为图像块序列,然后对每个图像块展开,就可以完全复用原始 BERT 的 Transformer 结构,来完成图像分类的任务。

实验表明,使用大量数据对 ViT 进行预训练后迁移到多个中小型图像识别基准时(ImageNet、CIFAR-100、VTAB 等),ViT 比 SOTA 的 CNN 可获得更优异的结果,并且需要的训练资源更少。但是当预训练数据集不够大的时候,ViT 的表现通常比同等大小的 ResNets 要差一些,因为 Transformer 和 CNN 相比缺少归纳偏置 2


  1. VIT (Vision Transformer) 模型论文+代码(源码)从零详细解读,看不懂来打我 ↩︎

  2. ViT(Vision Transformer)解析 ↩︎

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