第四章 视觉Transformer(ViT):图像分块、Patch Embedding、类别令牌、位置嵌入,以及ViT在自动驾驶视觉感知中的应用
在Transformer架构席卷自然语言处理领域之后,计算机视觉领域也迎来了里程碑式的变革。视觉Transformer(Vision Transformer, ViT)摒弃了传统卷积神经网络(CNN)依赖的卷积核与池化操作,直接将标准Transformer编码器应用于图像序列。对于自动驾驶而言,理解ViT的核心机制不仅是技术储备的需要,更是应对BEV(鸟瞰图)感知、多传感器融合等前沿算法的基石。本章将深入拆解ViT的四大核心组件,并结合自动驾驶场景剖析其应用价值与工程挑战。
4.1 核心原理:从图像到序列的化改造
ViT的核心思想是将图像视为一系列的集合,这与NLP中处理词向量的方式高度一致。其前向计算过程可拆解为四个关键步骤:图像分块(Patch)、Patch Embedding、类别令牌(Class )与位置嵌入(Position Embedding)。
图像分块(Patch):假设输入图像尺寸为 \( H \times W \times C \),ViT首先将其划分为固定大小的二维Patch,例如 \( 16 \times 16 \) 像素。若图像尺寸为 \( 224 \times 224 \),则划分后得到 \( (224/16)^2 = 196 \) 个Patch。每个Patch在通道维度上被展平为一个长度为 \( 16 \times 16 \times 3 = 768 \) 的一维向量。这一操作将空间信息转化为序列信息,序列长度 \( N = H \times W / P^2 \)。
Patch Embedding:展平后的向量维度通常较高,需要经过一个可学习的线性投影层(全连接层)映射到固定的嵌入维度 \( D \)(如768或1024)。该线性层的权重矩阵维度为 \( (P^2 \times C) \times D \),通过训练自动学习每个Patch的紧凑特征表示。这一过程等价于对每个Patch执行一次 \( 1 \times 1 \) 卷积,但在实现上通常采用卷积核大小等于Patch大小的标准卷积层完成。
类别令牌(Class ):为了利用Transformer编码器输出一个全局特征用于分类任务,ViT在序列前端拼接一个可学习的向量,称为类别令牌。该令牌不包含任何图像信息,其初始值随机初始化,在训练过程中通过自注意力机制不断聚合所有Patch的信息。最终,编码器输出的类别令牌对应的向量即作为整个图像的全局表征,送入分类头。
位置嵌入(Position Embedding):Transformer的自注意力机制本身不具备空间顺序感知能力,因此需要显式注入位置信息。ViT采用可学习的位置嵌入向量,其维度与Patch Embedding相同,形状为 \( (N+1) \times D \)。在输入编码器之前,将位置嵌入逐元素加到Patch Embedding和类别令牌上。位置嵌入在训练中自动学习,能够编码Patch之间的相对空间关系。
| 组件名称 | 输入维度 | 输出维度 | 可学习参数 | 作用 |
|---|---|---|---|---|
| 图像分块 | H×W×C | N×(P²·C) | 无 | 将图像转化为序列 |
| Patch Embedding | N×(P²·C) | N×D | (P²·C)×D | 特征降维与抽象 |
| 类别令牌 | 1×D | 1×D | D | 全局特征聚合 |
| 位置嵌入 | (N+1)×D | (N+1)×D | (N+1)×D | 注入空间位置信息 |
4.2 操作流程:ViT前向传播与工程实现要点
在工程实践中,ViT的前向传播流程可以归纳为以下标准步骤,该流程在PyTorch等深度学习框架中均有成熟实现。
- 输入预处理:将图像Resize到固定尺寸(如224×224或384×384),并进行归一化处理。对于自动驾驶场景,需考虑相机内参和畸变校正,确保输入图像质量。
- Patch划分与展平:使用
torch.nn.Unfold或自定义的Rearrange操作提取Patch,并展平为二维矩阵。 - 线性投影:通过一个全连接层将展平后的Patch映射到D维空间,得到Patch Embedding。
- 拼接类别令牌:在序列维度上,将可学习的类别令牌与Patch Embedding拼接,形成形状为 \( (N+1) \times D \) 的张量。
- 添加位置嵌入:将位置嵌入矩阵逐元素加到上述张量上。
- Transformer编码器前向:将带有位置信息的嵌入序列送入L层Transformer编码器,每层包含多头自注意力、MLP和LayerNorm,并带有残差连接。
- 输出提取:取编码器输出的第一个(即类别令牌对应的向量),用于分类任务;或取全部用于密集预测任务。
工程实现关键点:
- Patch大小选择:Patch越小,序列越长,计算量呈平方级增长。自动驾驶场景中,若需检测小目标(如远处的行人),建议使用较小的Patch(如8×8)或采用多尺度特征融合策略。
- 位置嵌入的插值:当输入图像分辨率与训练时不一致时,需要对位置嵌入进行双线性插值。在自动驾驶多相机系统中,不同相机的分辨率可能不同,需统一处理。
- 计算效率:ViT的自注意力复杂度为 \( O(N^2) \),对于高分辨率图像(如1080P)计算量巨大。实际部署时可采用窗口注意力(如Swin Transformer)或稀疏注意力进行优化。
4.3 案例拆解:ViT在自动驾驶视觉感知中的实战应用
在自动驾驶的视觉感知任务中,ViT及其变体已被广泛应用于3D目标检测、车道线识别和可行驶区域分割。以下以基于ViT的BEV感知模型为例,展示其应用闭环。
背景与约束:某L4级自动驾驶项目需要利用6个环视相机实现360°无死角的3D目标检测。传统基于CNN的BEV方法(如LSS)依赖深度估计的显式监督,在远距离和小目标上表现不佳。项目要求模型在NVIDIA Orin平台上达到实时推理(>30 FPS),且内存占用低于2GB。
初始现象与目标:基线模型(基于ResNet-50的LSS)在50米外的行人检测召回率仅为62%,且对遮挡目标的定位误差较大。目标是将50米外行人召回率提升至80%以上,同时保持实时性。
关键输入数据与参数:输入为6张1280×720的RGB图像,相机内参和外参已知。ViT模型采用Patch大小为16,嵌入维度D=256,Transformer层数L=6,注意力头数H=8。位置嵌入采用可学习的3D位置编码,将相机射线信息注入模型。
分析判断过程:团队分析认为,CNN的局部感受野限制了其对全局上下文的理解,而ViT的自注意力机制能够直接建模远距离像素间的依赖关系,这对于跨相机的目标关联至关重要。因此,决定采用ViT作为骨干网络,并在Transformer编码器后引入BEV查询模块,通过交叉注意力将图像特征投影到BEV空间。
实际操作步骤:
- 将6张图像分别进行Patch Embedding,并添加相机ID嵌入和3D位置嵌入。
- 将6个相机的序列拼接,送入共享的Transformer编码器,实现跨相机信息交互。
- 在编码器输出端,定义一组可学习的BEV查询(如200×200网格),通过交叉注意力机制从图像特征中检索信息,生成BEV特征图。
- 在BEV特征图上应用检测头(如CenterNet头),输出目标的中心点、尺寸和朝向。
结果对比与风险:经过训练,模型在50米外行人召回率提升至83%,定位误差降低18%。但模型参数量较基线增加40%,在Orin平台上的推理速度为28 FPS,略低于目标。通过量化(INT8)和TensorRT加速,最终达到32 FPS。风险在于,ViT对训练数据量的需求较大,在数据不足时容易过拟合,需配合大规模预训练或数据增强策略。
复盘经验:ViT在自动驾驶感知中的优势在于其全局建模能力,尤其适合多相机融合场景。但工程部署时需权衡计算开销,建议采用分层Transformer(如Swin)或蒸馏技术压缩模型。
经验提醒:在自动驾驶中应用ViT时,不要盲目追求大模型。建议先评估任务对感受野的需求。对于仅依赖单目前视相机的任务(如车道线检测),轻量级ViT或CNN-ViT混合架构往往更具性价比。
4.4 常见误区与总结复盘
在学习和应用ViT的过程中,工程师常陷入以下误区,需要特别警惕。
- 误区一:忽视位置嵌入的重要性。部分初学者认为位置嵌入只是“锦上添花”,但在自动驾驶中,物体的精确位置(如距离、方位)至关重要。若位置嵌入设计不当(如未考虑相机畸变),模型对空间位置的感知将严重退化。
- 误区二:将ViT视为黑盒。ViT的自注意力权重可以可视化,用于解释模型关注哪些区域。在自动驾驶安全攸关的场景中,可解释性至关重要。建议定期可视化注意力图,检查模型是否关注了路面、车辆等关键区域,而非背景噪声。
- 误区三:忽略计算复杂度。ViT的全局自注意力在分辨率升高时计算量呈平方级增长。在嵌入式平台上,需采用窗口注意力、稀疏注意力或降采样策略。例如,在BEV感知中,可先在2D图像空间使用轻量级ViT,再在BEV空间使用高分辨率Transformer。
- 误区四:类别令牌的误用。在分割或检测任务中,不应仅使用类别令牌,而应利用所有Patch的输出进行密集预测。类别令牌主要用于全局分类,若强行用于像素级任务,会丢失空间细节。
风险提示:在自动驾驶系统中部署ViT模型前,必须进行严格的鲁棒性测试。ViT对输入扰动(如光照变化、运动模糊)的敏感性高于CNN,建议在仿真环境中注入噪声数据,验证模型的稳定性。此外,位置嵌入的插值操作在分辨率变化时可能引入伪影,需在实车测试前充分验证。
总结复盘:ViT通过图像分块、Patch Embedding、类别令牌和位置嵌入四大组件,成功将Transformer的强大序列建模能力迁移至视觉领域。在自动驾驶中,ViT不仅提升了感知精度,更改变了我们对视觉特征提取的思考方式——从局部卷积到全局注意力。然而,工程落地仍需关注计算效率、数据需求与可解释性三大挑战。掌握ViT的核心原理,是理解BEV Transformer、Occupancy Network等前沿算法的基础,也是构建安全可靠自动驾驶感知系统的关键一步。