诞生背景
传统的卷积神经网络(CNN)在计算机视觉任务中长期占据主导地位,通过卷积、池化等操作逐步提取图像特征。然而,随着自然语言处理领域 Transformer 的成功,其基于自注意力机制的架构展现出强大的全局建模能力,促使研究者思考能否将其应用于视觉领域。ViT 由此诞生,它打破了 CNN 在视觉领域的长期统治,开启了 Transformer 在视觉任务广泛应用的新时代。
模型结构
图像分块(Patch Embedding):
ViT 将输入图像分割成一系列大小相同的图像块(patch)。例如,对于一张 224×224 像素的图像,若每个 patch 大小为 16×16 像素,则会得到 (224/16)×(224/16)=196 个 patch。这些 patch 被看作是 “单词”,从而将图像数据转化为序列数据,以便 Transformer 处理。每个 patch 会被线性投影到一个低维向量空间,得到 patch embedding,其维度通常设为固定值,如 768 维。
位置编码(Position Embedding):
由于 Transformer 架构本身不具备对序列中元素位置信息的感知能力,ViT 引入位置编码。位置编码向量与 patch embedding 相加,使得模型能够区分不同位置的 patch。常见的位置编码方式与 Transformer 在自然语言处理中使用的正弦余弦位置编码类似,也可以通过学习得到位置编码参数。
Transformer 编码器:
这是 ViT 的核心部分,由多个 Transformer 编码器层堆叠而成。每个编码器层包含两个主要子层:多头自注意力机制(Multi-Head Attention)和多层感知机(MLP)。多头自注意力机制允许模型同时关注输入序列不同部分的信息,通过多个不同的注意力头并行计算,然后将结果拼接并线性投影,得到融合后的特征表示。MLP 则对自注意力输出进一步处理,通常包含两个全连接层,中间使用 ReLU 等激活函数。在每个子层前后还会添加归一化(LayerNorm)和残差连接(Residual Connection),以加速模型训练和提高稳定性。
分类头(Classification Head):
在 Transformer 编码器输出后,通常会取第一个位置(即 [CLS] 标记对应的输出)的特征向量,通过一个或多个全连接层进行分类,得到图像属于不同类别的概率。在预训练阶段,分类头可能相对简单;在微调阶段,可根据具体任务调整分类头结构。
训练特点
大规模预训练:
ViT 在大规模图像数据集(如 ImageNet-21K,包含 2.1 万类、1400 万张图像)上进行预训练,学习到通用的图像特征表示。大规模数据有助于模型捕捉丰富的视觉模式,提升泛化能力。
微调:
预训练后的 ViT 模型可在各种下游视觉任务(如特定数据集的图像分类、目标检测、语义分割等)上进行微调。在微调时,通常固定模型大部分层的参数,仅对分类头等少数层进行参数更新,或者根据任务需求解冻部分层进行联合训练,以适应具体任务的数据分布和需求。
优势
全局建模能力:
自注意力机制使 ViT 能够直接捕捉图像中任意两个位置之间的关系,相比 CNN 通过局部卷积逐步扩大感受野来获取全局信息的方式,ViT 在处理长距离依赖和复杂场景时更具优势,能够更好地理解图像的整体结构和语义信息。
可扩展性:
Transformer 架构的模块化设计使得 ViT 易于扩展,通过增加编码器层数、注意力头数量或调整模型参数规模,可以在不改变整体架构的基础上提升模型性能,以适应不同复杂度的任务和数据集规模。
数据效率:
在大规模数据训练下,ViT 能够展现出较高的数据效率,通过学习到的通用特征表示,在较少的微调数据上也能取得不错的性能,尤其适用于标注数据稀缺的场景。
局限性
计算资源需求大:
ViT 的自注意力计算复杂度与序列长度的平方成正比,对于高分辨率图像,分块后的序列长度较长,导致计算量和内存消耗大幅增加,在资源受限的设备上部署存在挑战。
对小数据集适应性差:在小数据集上,ViT 由于缺乏足够数据学习到稳健的特征,容易出现过拟合现象,相比在小数据集上表现良好的 CNN,其性能优势难以体现。
应用领域
图像分类:
在各类图像分类任务中广泛应用,如对自然场景图像进行类别判断、对医学影像进行疾病分类等。
目标检测:
通过与检测框架结合,利用 ViT 提取的图像特征定位和识别目标物体,能够更好地处理复杂背景下的目标检测。
语义分割:
将图像中每个像素分类到相应语义类别,ViT 有助于捕捉图像中不同物体和区域之间的长距离依赖关系,提高分割精度。