原创性声明
本文为作者原创,在个人Blog首次发布,如需转载请注明引用出处。(yanzhang.cg@gmail.com 或 https://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应用于更多复杂的视觉任务,如人体姿态估计、医学影像分析等,推动其在实际应用中的落地。