跳转至

Vision Transformer

Abstract

  • Basics of Vision Transformer (ViT)
  • Efficient ViT & acceleration techniques
    • Window attention
    • Linear attention
    • Sparse attention
  • Self-supervised learning for ViT
    • Contrastive learning
    • Masked image modeling
  • ViT & Autoregressive Image Generation
    • Hybrid Autoregressive Transformer (HART)

Basics of Vision Transformer (ViT)

  • Idea: Convert 2D Images to a Sequence of Patches

    • Transformer 的输入是 token,因此对于 image 来说需要将 image 转成 token。
    • ViT 的做法是将 image 分成多个 patch,然后将每个 patch 转成一个 token。
    • 随后将 patch embeddings 送到 transformer encoder 里。
    • 最后输出是第一个 token 的输出通过一个 MLP Head 得到分类结果。
  • Architecture

    • 这里的图像被切为了 9 个 32*32 的 patch,因此每个 patch 对应的 token 维度为 3(通道)*32*32=3072,共 9 个 tokens。而 ViT 的 hidden size 是 768。
    • 为了将 2D 的图像转为 1D 的 token,这里使用一个卷积层来实现,kernel 大小为 32*32,stride 为 32,padding 为 0,\(c_in\) 为 3,\(c_out\) 为 768。从而将 3072 维的 patch embedding 转为 768 维的 token embedding。
  • 实验结果显示,在 dataset 较小时性能不如 CNNs,当数据集变大时,ViT 的性能超过 CNNs。

Efficient ViT & acceleration techniques

  • High-Resolution Dense Prediciton 很重要,但是 ViT 不能很好地处理高分辨率的图像。
    • 因为 Attention 的时间复杂度是 O(n^2),这里的 n 是 token 的数量,那么对于高分辨率的图像,对应的 n 也会增大,从而导致计算量增大。

Window Attention

  • Idea: 限制 attention 的计算只在 local window 内进行。

    • 窗口大小是固定的,因此计算复杂度是线性的。
    • 会逐渐 downsample 特征图的大小(多尺度)。

    • 问题是没用窗口间的信息,因此使用了 shift 操作。将窗口 shift 之后再计算就可以获得窗口间的信息。

  • Sparse Window Attention

    • Idea: 并不是 windows 内所有元素都很重要,我们考虑保留一部分。同时为了兼顾硬件效率,这里采用 equal-size grouping。

Linear attention

  • Idea: 使用线性注意力代替原来的 Softmax 注意力。这样可以把注意力的复杂度下降到 \(O(n)\)

    • 但是 ReLU 线性注意力会导致无法产生 sharp distribution,只适合捕捉全局信息,不适合捕捉局部信息。同时也缺少多尺度学习的能力。
    • 于是 EfficnetViT 采用了 multi-scale aggregation 并在 FFN 中添加了 depthwise 卷积来捕捉局部信息。

Sparse attention

  • Motivation: Sparse, High-Resolution or Dense, Low-Resolution?

    • 通常的 resizing 会降低 resolution,保持 dense pixels。但实际上像素并没有必要那么密集,因此可以采用 sparse pixels。
  • SparseViT — Sparse Vision Transformer

    • Window Activation Pruning (with Non-Uniform Sparsity)

      根据 L2 激活值的大小进行排序,选出 windows 中重要的 pixels,并聚在一起,在计算 attention 时只更新这部分,其他部分不更新。

    • Sparsity-Aware Adaptation

      • Goal: 评估模型在不同的 activation sparsity 的设置下的性能(效率和准确度)。
      • 最开始的模型是只在 dense activations 上训练,为了提高 sparsity awareness,我们进行微调,每轮迭代随机采样每层的 activation sparsity configuration。
    • Resource-Constrained Search

      • Goal: 对于给定的 latency budget,找到最优的每层的 sparsity configuration。
      • 因此这里采用了 rejection sampling,即每次采样出一个配置后,进行评估,如果超过了 latency budget,则拒绝这个配置,重新采样。

Self-supervised learning for ViT

  • Motvation: ViT 需要大量的数据集才能取得好的效果,但是标注大数据集很昂贵。
    • 因此可以在 unlabeled dataset 上训练。

Contrastive Learning

  • Idea: positive sample 表示同一张图的不同视角;negative sample 表示不同的图。

    • 训练目标是让 pull together 正样本,push apart 负样本。
  • 实验结果发现,直接在小的数据集上训练 ViT 不能取得好的效果,而且随着模型越大性能下降越多。但是 self-supervised ViT 可以在小的数据集上取得更好的效果,而且随着模型增大性能提升。

Multi-Modal Contrastive Learning

  • CLIP: Contrastive Language-Image Pre-Training

    • 具体可见 CLIP
  • MAE: Masked Autoencoders

    • Idea: 和 BERT 类似,随机 mask 一部分 patch,然后预测他们。

    • 这里的 heavy encoder 只用处理 unmasked tokens,lite decoder 处理所有 tokens。

    • 实验发现 MAE 可以在很高的的 mask ratio(75%)上取得良好的效果,相比之下 BERT 只能达到 15% 的 mask ratio。
      • 这说明图像数据相比语言数据有更低的信息密度。

ViT & Autoregressive Image Generation

  • 能否生成 visual tokens,采用自回归的方式生成。二者区别如下:

  • AR image generation

    • 有三种生成方式,一次生成一个 token(按顺序/随机顺序),一次生成多个(Maksed AR)。
  • VQ: Vector Quantization

    • 问题:语言的 token 来自固定的词表,里面的元素是有限的、离散的。但是图像 token 是连续的。
    • Idea: 将 image patch 映射到离散的 codebook indices,随后用自回归的 transformer 生成 token。

    • 这里映射的方法是 Vector Quantization,与之前 quanzation 类似,但是区别在于这里的对象是 vector 而不是 scalar。

  • VAR:

    • Idea: 经验上说一次生成更多的 tokens 可以有更好的效率,因此这里采用了 multi-scale encoding 的方法。可以看到我们每次生成的 patch 是越来越大的。

    • 对应的 mask 也不再是上三角,变成 block-wise 的。

  • HART: Hybrid Image Tokenization

    • Motivation: 如果使用离散的 decoding 会导致图像生成质量下降(因为 token 是离散的,在细微处无法表达)。

    • Idea: 同时处理 decoding & discrete tokens。其中 continuous tokens = \(\sum\) discrete tokens + residual tokens,这里的 residual tokens 我们可以用 diffusion 来生成,这样使用的模型小,但可以生成细节。

评论