论文阅读之AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

原文链接

AN IMAGE IS WORTH 16X16 WORDS:
TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

主要内容

这篇文章的主要内容是介绍了一种新的计算机视觉模型——Vision Transformer(ViT),这是一种将自然语言处理中广泛使用的Transformer架构直接应用于图像识别任务的尝试。文章通过大量实验验证了ViT在多个图像识别基准上的有效性,并与当时的最先进卷积神经网络(CNN)模型进行了比较。

以下是文章的主要内容概述:

引言:介绍了Transformer架构在自然语言处理(NLP)任务中的成功,并探讨了其在计算机视觉领域的潜在应用。指出以往的工作尝试将注意力机制与卷积网络结合,或者用注意力机制替换卷积网络的某些部分,但整体结构保持不变。

方法:提出了Vision Transformer(ViT),它将图像分割成一系列小块(patches),然后将这些块作为序列输入到标准的Transformer编码器中。这种方法避免了依赖于CNN,并且通过在大量数据上进行预训练,ViT在多个中等规模或小规模的图像识别基准上取得了与最先进CNN相比肩甚至更好的结果,同时训练所需的计算资源更少。

相关工作:回顾了Transformer在NLP中的应用,以及在图像处理中的一些尝试,包括局部自注意力和稀疏变换器等。

实验:详细描述了ViT在不同数据集上的预训练和微调过程,包括ImageNet、CIFAR-100和VTAB等,以及与其他模型的比较结果。

结论:文章总结了ViT的主要发现,并讨论了未来的研究方向,包括将ViT应用于其他计算机视觉任务、探索自监督预训练方法以及进一步扩展ViT的规模。

文章的主要贡献在于展示了Transformer架构在没有CNN特有的归纳偏差(如平移不变性和局部性)的情况下,通过大规模预训练,仍然能够有效地处理图像识别任务。这一发现为未来的图像处理模型提供了新的设计思路。

模型图

在这里插入图片描述
ViT将图像分割成固定大小的块,线性嵌入每个块,添加位置嵌入,并将生成的矢量序列提供给标准Transformer编码器。为了执行分类,使用向序列添加额外可学习的“分类标记”的标准方法。
在这里插入图片描述

技术细节

在这里插入图片描述
模型输入就是把图像切成小块,然后排列整齐输入,就像文本一样,可以简单将一块图片当作一个单词。

但是由于transformer输入是1D的,但是图像是2D的,所以需要reshape维度

例如原始图片高x宽x颜色数

在这里插入图片描述
reshape成:
在这里插入图片描述
其中N就是多少个小块,P就是一个小块的边长,C是颜色通道数
在这里插入图片描述
那么此时一个小块xp的维度就是P*P*C

此时再进行线性变换,就得到了小块的embedding了
在这里插入图片描述

在这里插入图片描述
E就是进行线性变换,Epos就是添加位置编码。

在这里插入图片描述
上标表示第几个小块的编码信息,下标表示经过了几层encoder(0表示输入,L就表示输出)

因为BERT中有[CLS]用来标记分类,这里多加了个xclass也用来分类
在这里插入图片描述
LN就是layer normalization

在这里插入图片描述
然后这就是对应编码部分,MSA就是multiheaded self-attention,L表示有L层来编码

实验结果

在这里插入图片描述‘训练时间少、效果好。
在这里插入图片描述

左图:预训练数据集越大,模型越大效果越好
右图:预训练数据集越大,ViT模型效果越好,并实现反超。

先这样吧。

相关推荐

  1. gitlab-ee 13.x->14.x->15.x->16.x升级踩坑记

    2024-03-20 16:06:04       54 阅读
  2. React@16.x15)PureComponent 和 memo

    2024-03-20 16:06:04       34 阅读
  3. React@16.x19)事件的处理

    2024-03-20 16:06:04       31 阅读
  4. React@16.x18)错误边界

    2024-03-20 16:06:04       31 阅读
  5. React@16.x16)Render Props

    2024-03-20 16:06:04       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-20 16:06:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-20 16:06:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-20 16:06:04       82 阅读
  4. Python语言-面向对象

    2024-03-20 16:06:04       91 阅读

热门阅读

  1. Python实战:机器学习算法

    2024-03-20 16:06:04       36 阅读
  2. Redis RDB持久化与AOF 持久化详解

    2024-03-20 16:06:04       36 阅读
  3. Checked Exception和Unchecked Exception 有什么区别?

    2024-03-20 16:06:04       38 阅读
  4. 69: 偷菜时间表(python)

    2024-03-20 16:06:04       36 阅读
  5. c++学习笔记(8)

    2024-03-20 16:06:04       30 阅读
  6. 动手学深度学习|notebook教程

    2024-03-20 16:06:04       47 阅读
  7. 从零学算法148

    2024-03-20 16:06:04       42 阅读
  8. channel 和 session 简介

    2024-03-20 16:06:04       33 阅读