Yan's World.

Vision Transformer (ViT) 详细技术文档

Word count: 1.4kReading time: 5 min
2024/06/08
loading

原创性声明

本文为作者原创,在个人Blog首次发布,如需转载请注明引用出处。(yanzhang.cg@gmail.comhttps://graphicyan.github.io/)


1. 引言

Vision Transformer(ViT)是由Google的研究团队在2020年提出的一种基于Transformer架构的图像处理模型。它首次将原本用于自然语言处理领域的Transformer架构成功应用于计算机视觉任务,如图像分类、目标检测和语义分割等。ViT通过将输入图像分割成固定大小的块(patches),并将其视为序列数据进行处理,从而实现了对图像特征的有效提取。


2. ViT架构概述

输入预处理

  • Patch Partition: 将输入图像分割为固定大小的小块(例如16x16像素),每个小块被视为一个“token”。
  • Patch Embedding: 使用线性投影层将每个patch映射到高维空间中,形成嵌入向量。
  • Positional Encoding: 为了保留位置信息,在嵌入向量中添加了位置编码。

主干网络

  • Transformer Encoder: 包含多个相同的层堆叠而成,每一层由多头自注意力机制(Multi-Head Self-Attention, MHSA)和前馈神经网络(Feed-Forward Network, FFN)组成。
  • Layer Normalization & Residual Connections: 每个子层后都接有层归一化(Layer Normalization)和残差连接(Residual Connection),以稳定训练过程。

输出处理

  • Classification Token: 在输入序列的最前面添加了一个特殊的分类token,最终通过该token的输出进行分类预测。
  • MLP Head: 经过若干全连接层得到最终的分类结果。

3. 核心组件详解

Patch Embedding

  • 功能: 将输入图像划分为非重叠的小块,并将这些小块转换为嵌入向量。
  • 实现: 假设输入图像是(H \times W)大小,且每个patch大小为(P \times P),则整个图像可以被划分为(\frac{HW}{P^2})个patch。每个patch通过线性变换映射到(D)维的空间中。

Positional Encoding

  • 功能: 由于Transformer本身不具备感知位置的能力,因此需要额外的位置编码来保留原始图像中的位置信息。
  • 实现: 可以使用正弦/余弦函数或可学习参数作为位置编码。

Multi-Head Self-Attention (MHSA)

  • 功能: 允许模型同时关注来自不同表示子空间的信息,增强模型对长距离依赖关系的理解能力。
  • 公式:
    [
    \text{Attention}(Q,K,V)=\text{softmax}(\frac{QK^T}{\sqrt{d_k}})V
    ]
    其中(Q)、(K)、(V)分别代表查询(Query)、键(Key)和值(Value)矩阵,(d_k)是键的维度。

Feed-Forward Network (FFN)

  • 功能: 对注意力层的输出进行非线性变换,增加模型的表达能力。
  • 结构: 通常由两层全连接层构成,中间插入ReLU激活函数。

4. 训练策略与技巧

数据增强

  • 随机裁剪(Random Crop): 随机裁剪输入图像以生成不同的视角。
  • 水平翻转(Horizontal Flip): 随机水平翻转图像以增加数据多样性。
  • 颜色抖动(Color Jittering): 改变图像的颜色属性,如亮度、对比度等。

自监督预训练

  • MAE (Masked Autoencoder): 使用掩码图像重建作为自监督任务,帮助模型更好地理解图像结构。
  • BEiT (Bidirectional Encoder Representations from Transformers): 类似于BERT,利用masked patch prediction进行预训练。

分布式训练

  • 混合精度训练(Auto Mixed Precision): 利用半精度浮点数加速计算,减少内存占用。
  • 分布式训练(Distributed Training): 在多个GPU上并行训练模型,缩短训练时间。

5. 应用场景与案例分析

图像分类

  • ImageNet: ViT在ImageNet数据集上取得了与传统卷积神经网络(CNN)相当甚至更好的性能。
  • 细粒度分类: 通过对特定领域数据集的微调,ViT能够有效识别细微差异的对象类别。

目标检测与实例分割

  • DETR (Detection Transformer): 结合ViT与Transformer Decoder实现端到端的目标检测框架。
  • MaskFormer: 基于ViT的实例分割方法,简化了传统的两阶段检测流程。

视频理解

  • Video Swin Transformer: 扩展ViT至视频领域,通过时空注意力机制捕捉动态信息。

6. 缺点与挑战

计算资源需求大

  • ViT相较于CNN需要更多的计算资源和内存,尤其是在处理高分辨率图像时。

对大规模数据集依赖性强

  • ViT的性能高度依赖于大规模高质量标注数据集的可用性,对于缺乏此类数据的新应用场景,泛化能力可能受限。

处理局部细节能力不足

  • ViT虽然擅长捕捉全局信息,但在处理局部细节方面不如传统CNN,特别是在边缘检测和纹理识别等任务中表现不佳。

7. 未来发展方向

融合CNN与ViT优势

  • 开发结合CNN局部感受野特性和ViT全局建模能力的混合模型,提升整体性能。

提升效率与可扩展性

  • 探索更高效的ViT变种,如MobileViT,使其能够在资源受限设备上高效运行。

推广至更多视觉任务

  • 将ViT应用于更多复杂的视觉任务,如人体姿态估计、医学影像分析等,推动其在实际应用中的落地。
CATALOG
  1. 1. 原创性声明
  2. 2. 1. 引言
  3. 3. 2. ViT架构概述
    1. 3.1. 输入预处理
    2. 3.2. 主干网络
    3. 3.3. 输出处理
  4. 4. 3. 核心组件详解
    1. 4.1. Patch Embedding
    2. 4.2. Positional Encoding
    3. 4.3. Multi-Head Self-Attention (MHSA)
    4. 4.4. Feed-Forward Network (FFN)
  5. 5. 4. 训练策略与技巧
    1. 5.1. 数据增强
    2. 5.2. 自监督预训练
    3. 5.3. 分布式训练
  6. 6. 5. 应用场景与案例分析
    1. 6.1. 图像分类
    2. 6.2. 目标检测与实例分割
    3. 6.3. 视频理解
  7. 7. 6. 缺点与挑战
    1. 7.1. 计算资源需求大
    2. 7.2. 对大规模数据集依赖性强
    3. 7.3. 处理局部细节能力不足
  8. 8. 7. 未来发展方向
    1. 8.1. 融合CNN与ViT优势
    2. 8.2. 提升效率与可扩展性
    3. 8.3. 推广至更多视觉任务