简介:本文系统梳理了Transformer在计算机视觉领域的经典模型,从基础架构创新到多模态融合应用,解析了ViT、Swin Transformer等里程碑式模型的核心机制,并提供了模型选型与优化实践建议。
2020年Google提出的Vision Transformer(ViT)标志着Transformer架构正式进入计算机视觉领域。与传统CNN依赖局部感受野和层级抽象不同,ViT通过将图像分割为16x16的patch序列,直接应用NLP领域的自注意力机制进行全局建模。其核心创新体现在:
实验表明,在JFT-300M预训练后,ViT-L/16在ImageNet上达到85.3%的top-1准确率,证明纯注意力架构在大规模数据下的优越性。但ViT存在两个主要局限:计算复杂度随图像尺寸平方增长,且缺乏CNN的归纳偏置导致小数据集表现不佳。
针对ViT的效率问题,后续研究通过引入层级结构实现计算优化:
采用特征金字塔设计,包含四个阶段的Transformer块:
# PVT阶段结构示例class PVTStage(nn.Module):def __init__(self, dim, num_heads, mlp_ratio=4.):super().__init__()self.norm1 = nn.LayerNorm(dim)self.attn = SpatialReductionAttention(dim, num_heads) # 空间降维注意力self.norm2 = nn.LayerNorm(dim)self.mlp = MLP(dim, int(dim*mlp_ratio))def forward(self, x):x = x + self.attn(self.norm1(x))x = x + self.mlp(self.norm2(x))return x
通过空间降维注意力(SRA)将计算复杂度从O(N²)降至O(N²/R²),其中R为缩减比例。PVTv2进一步引入重叠patch嵌入和卷积位置编码,在目标检测任务上AP达到49.5%。
微软提出的Swin Transformer通过滑动窗口机制实现高效计算:
其核心优势在于线性计算复杂度:对于HxW图像和窗口大小M,复杂度为O(HW/M²·M⁴)=O(HWM²)。在COCO数据集上,Swin-B模型达到58.7 box AP,显著优于ResNet-101的50.3 AP。
随着CLIP等模型的出现,视觉Transformer开始向多模态方向演进:
OpenAI的CLIP模型通过4亿图文对训练,实现零样本图像分类:
在ImageNet零样本分类任务上,CLIP-ViT-L/14达到76.2%的top-1准确率,接近全监督ResNet-50的表现。
# CLIP对比损失伪代码def contrastive_loss(img_emb, text_emb, temperature=0.07):logits = img_emb @ text_emb.T / temperature # 计算相似度矩阵labels = torch.arange(len(img_emb), device=img_emb.device)loss_i = F.cross_entropy(logits, labels)loss_t = F.cross_entropy(logits.T, labels)return (loss_i + loss_t) / 2
微软提出的BEiT采用BERT式的预训练方式:
在ImageNet-1K上,BEiT-Base通过300epoch预训练达到83.2%的准确率,证明自监督学习在视觉Transformer中的有效性。
当前研究正朝着三个方向演进:
典型案例包括MaxViT通过块状注意力实现全局-局部建模,以及Video Swin Transformer将时空注意力解耦为空间注意力和时间注意力。这些进展表明,Transformer架构正在重塑整个计算机视觉领域的研究范式。
(全文约1800字,涵盖12个核心模型架构、8个关键技术点、5类实践建议)