1. ViT模型架构全解析
视觉Transformer(ViT)的核心思想是将标准Transformer架构直接应用于图像数据。与CNN不同,ViT完全摒弃了卷积操作,采用纯注意力机制处理图像。这种设计带来了几个显著特点:
首先,ViT将输入图像分割为固定大小的patch(通常为16×16像素),每个patch经过线性投影后成为类似NLP中的token。这种处理方式彻底改变了传统计算机视觉的范式——不再通过滑动窗口提取局部特征,而是将图像视为一个token序列。
具体实现时,假设输入图像大小为224×224×3(高×宽×通道),使用16×16的patch大小,则会得到196个patch(224/16=14,14×14=196)。每个patch被展平为16×16×3=768维向量,这正是ViT-Base模型采用的维度。
模型的关键组件包括:
- Patch Embedding层:将图像块映射到固定维度
- Position Embedding:为patch添加位置信息
- Transformer Encoder:多层自注意力机制处理序列
- Classification Head:最终用于分类的全连接层
python复制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_chans, embed_dim,
kernel_size=patch_size,
stride=patch_size)
def forward(self, x):
x = self.proj(x) # [B, C, H, W] -> [B, D, H/P, W/P]
x = x.flatten(2).transpose(1, 2) # [B, D, N] -> [B, N, D]
