1. Vision Transformer(ViT)概述
在计算机视觉领域,卷积神经网络(CNN)长期占据主导地位。从AlexNet到ResNet,CNN架构通过局部感受野和权值共享机制,在图像分类、目标检测等任务中取得了显著成就。然而,随着Transformer架构在自然语言处理领域的突破性进展,研究者开始思考:能否将这种基于自注意力机制的强大建模能力引入视觉领域?
2017年,Google Brain团队首次提出Transformer架构,用于机器翻译任务。2020年,Vision Transformer(ViT)论文《An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale》正式将这一思想引入计算机视觉领域。ViT的核心创新在于完全摒弃了传统的卷积操作,直接将图像视为一系列patch的序列,通过标准的Transformer编码器进行处理。
关键突破:ViT证明了在足够大规模的数据集(如JFT-300M)上预训练后,纯Transformer架构在图像分类任务上可以超越当时最先进的CNN模型。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. ViT核心架构详解
2.1 图像分块与Patch Embedding
ViT处理图像的第一步是将2D图像转换为1D序列。对于尺寸为H×W×C的输入图像:
-
分块处理:将图像划分为N个P×P大小的patch
- 计算公式:N = (H×W)/P²
- 典型配置:224×224图像,P=16 → N=196个patch
-
线性投影:每个patch展平后通过可学习的线性层映射到D维空间
- 数学表示:z_p = x_pE,其中E∈ℝ^(P²C)×D
- 典型维度:P=16, C=3 → 输入维度768,D通常取768
python复制# PyTorch实现示例
class PatchEmbed(nn.Module):
def __init__(self, img_size=224, patch_size=16, in_chans=3, embed_dim=768):
super().__init__()
self.proj = nn.Conv2d(in
