3. 视觉Transformer(ViT):图像分块嵌入、全局注意力、与CNN的对比,以及在自动驾驶视觉感知中的适用性
视觉Transformer(Vision Transformer, ViT)自2020年提出以来,彻底改变了计算机视觉领域对特征提取范式的认知。与卷积神经网络(CNN)依赖局部感受野和权值共享不同,ViT将图像视为一系列“视觉词元”(Patch Tokens),通过自注意力机制(Self-Attention)在全局范围内建模像素或块之间的长距离依赖关系。在自动驾驶场景中,摄像头采集的图像往往包含复杂的空间结构——如远处的交通标志、被遮挡的行人、车道线的长程连续性——这些信息既需要局部纹理细节,又需要全局上下文理解。本章将深入拆解ViT的核心机制,并通过与CNN的系统对比,明确其在自动驾驶视觉感知任务中的适用边界与工程落地要点。
上图展示了ViT从图像输入到感知输出的完整数据流。与CNN逐层扩大感受野不同,ViT在编码器第一层即可获得全局视野。这种特性对自动驾驶中“远小目标检测”和“全局语义理解”具有天然优势,但也带来了计算复杂度和数据效率方面的挑战。下面我们从核心原理开始逐一剖析。
3.1 核心原理:从图像到词元序列的映射
ViT的第一步是将图像分割为固定大小的Patch(例如16×16像素),每个Patch展平后通过线性投影(Linear Projection)映射为一个低维向量,即Patch Embedding。这一过程可以理解为将图像从像素空间转换到语义嵌入空间。以一张1280×720的输入图像为例,若Patch大小为16,则序列长度为 (1280/16) × (720/16) = 80×45 = 3600个词元。每个词元的维度通常设为768或1024。
为了保留空间位置信息,ViT为每个Patch添加了可学习的位置编码(Positional Encoding)。位置编码可以是位置(如正弦函数)或可学习的参数。在自动驾驶场景中,位置编码的语义至关重要——模型需要知道“这个Patch在图像的左上角还是右下角”,才能正确理解空间关系。此外,ViT还会在序列开头添加一个特殊的[CLS]词元,用于聚合全局信息,供分类头使用。
在自动驾驶中,分块大小的选择直接影响感知精度与计算量。较小的Patch(如8×8)能保留更多细节,适合小目标检测,但序列长度增加4倍,注意力计算量呈平方增长。较大的Patch(如32×32)计算效率高,但可能丢失车道线等细长结构的纹理信息。工程上常采用多尺度分块或混合架构(如Swin Transformer)来平衡。
3.2 全局注意力机制:建模长距离依赖
Transformer编码器由多头自注意力(Multi-Head Self-Attention, MSA)和多层感知机(MLP)交替堆叠而成。自注意力的核心是计算Query(Q)、Key(K)、Value(V)三个矩阵,通过Q与K的点积得到注意力权重,再对V进行加权求和。这一机制允许每个Patch直接与序列中所有其他Patch交互,无论它们在图像中的距离有多远。
在自动驾驶视觉感知中,这种全局交互能力具有独特价值。例如,检测被树木部分遮挡的行人时,模型需要同时关注行人的可见部分、周围车辆的运动轨迹以及道路边界信息。CNN需要通过多层堆叠才能将远距离信息融合,而ViT在单层内即可完成。对于车道线检测,全局注意力能够捕捉数百米长的车道线连续性,即使中间存在磨损或阴影遮挡。
| 特性 | CNN(如ResNet) | ViT(标准) | 自动驾驶需求匹配度 |
|---|---|---|---|
| 感受野 | 局部,逐层扩大 | 全局,第一层即全图 | ViT更优(远距离目标) |
| 归纳偏置 | 强(局部性、平移等变) | 弱(依赖数据学习) | CNN在小数据集更稳 |
| 计算复杂度 | O(N·K²·C)(K为核大小) | O(N²·D)(N为序列长度) | CNN在低算力平台更优 |
| 长距离依赖 | 需深层堆叠 | 直接建模 | ViT更优(车道线/交叉口) |
| 数据效率 | 高(先验强) | 低(需大数据预训练) | CNN在中小数据集更实用 |
| 多模态扩展 | 需额外设计融合层 | 天然支持跨模态注意力 | ViT更优(相机+LiDAR融合) |
3.3 与CNN的对比:从特征提取范式到工程落地
CNN通过卷积核在空间上滑动,利用局部连接和权值共享提取特征。这种设计天然适合图像数据,因为自然图像具有强烈的局部相关性——相邻像素往往属于同一物体或同一纹理区域。CNN的层次化结构(浅层提取边缘、中层提取纹理、深层提取语义)与人类视觉系统的处理方式高度相似。
ViT则完全摒弃了卷积操作,将图像视为词元序列。这种设计的优势在于:第一,全局注意力能够捕捉非局部特征,例如车辆与远处交通信号灯的关联;第二,注意力权重是动态计算的,不同输入图像会得到不同的特征聚合方式,而CNN的卷积核是静态的;第三,ViT的架构更加统一,可以方便地与NLP中的预训练模型(如BERT)共享技术,便于多模态融合。
然而,ViT的劣势同样明显。首先,它缺乏CNN的归纳偏置,导致在中小规模数据集上训练时容易过拟合。自动驾驶数据集虽然规模庞大(如nuScenes、Waymo Open Dataset),但标注成本极高,实际可用数据往往有限。其次,自注意力的计算复杂度为O(N²),当输入分辨率较高时(如自动驾驶常用的1280×720),序列长度N=3600,注意力矩阵大小为3600×3600,单层计算量约为12.96M次乘法,多层堆叠后计算开销巨大,难以在车载嵌入式平台(如NVIDIA Orin、地平线征程5)上实时运行。
3.4 在自动驾驶视觉感知中的适用性分析
自动驾驶视觉感知任务主要包括2D/3D目标检测、语义分割、车道线检测、深度估计和BEV(鸟瞰图)感知。不同任务对特征的需求差异显著,ViT的适用性也各不相同。
- 2D目标检测: 对于远距离小目标(如50米外的行人),ViT的全局注意力能有效利用上下文信息,提升召回率。但计算开销大,通常采用ViT作为骨干网络(Backbone)配合检测头,或使用DETR类端到端架构。
- 3D目标检测: 单目3D检测需要从2D图像中恢复深度信息,这本质上是一个全局推理问题。ViT能够更好地利用物体大小、遮挡关系、地面平面等全局线索,但需要大量标注数据训练。
- 语义分割: 分割任务需要像素级精度,ViT的Patch化处理会损失边界细节。解决方案是使用重叠Patch或与CNN解码器结合(如SegFormer)。
- 车道线检测: 车道线是典型的细长结构,CNN的局部感受野容易断裂。ViT的全局注意力能保持车道线的连续性,但需要高分辨率输入,计算成本高。
- BEV感知: 这是当前自动驾驶感知的热点方向。ViT天然适合将多目相机特征从透视视图转换到BEV视图,因为注意力机制可以学习视图之间的空间对应关系。
3.5 案例拆解:基于ViT的BEV感知在复杂城市路口中的应用
某自动驾驶公司在其L4级Robotaxi项目中,需要解决城市复杂路口的感知问题。该路口存在多个方向的车流、行人、非机动车以及临时施工区域,传统基于CNN的感知方案在以下场景中表现不佳:1)对向车道左转车辆被直行大货车遮挡,CNN无法关联两车的运动轨迹;2)路口中央的行人过街时,被路边电线杆部分遮挡,检测框不稳定;3)多相机拼接处出现目标丢失。
项目团队决定采用基于ViT的BEV感知方案,具体实施步骤如下:
- 输入处理: 使用6个环视相机(分辨率1920×1080),每个相机图像裁剪为1280×720,分块大小16×16,序列长度3600。
- 特征提取: 采用Swin Transformer作为骨干网络(窗口注意力降低计算量),输出多尺度特征图。
- BEV转换: 使用Cross-Attention机制,将透视视图特征投影到BEV网格(200×200,分辨率0.5m),每个BEV网格通过注意力聚合所有相机中对应位置的特征。
- 任务头: 在BEV特征上同时进行3D目标检测、车道线分割和可行驶区域分割。
经过优化后,模型在NVIDIA Orin平台上推理延迟为45ms,满足实时性要求。相比之前的CNN方案(ResNet-50 + FPN),在遮挡目标检测的召回率上提升了12%,车道线连续性评分提升了8%。但训练时间增加了3倍,需要约2000张高精度标注的BEV真值图。
3.6 常见误区与总结复盘
误区一:认为ViT完全取代CNN。 实际上,在自动驾驶的嵌入式平台上,CNN仍是主流选择。ViT更适合作为云端训练模型或高算力平台(如Robotaxi)的骨干网络。
误区二:忽视数据量要求。 ViT需要大规模预训练数据(如ImageNet-21k、JFT-300M)才能发挥优势。如果仅使用自动驾驶数据集从头训练,性能往往不如CNN。
误区三:忽略计算复杂度。 直接使用标准ViT处理高分辨率图像会导致显存溢出或延迟超标。必须采用窗口注意力、稀疏注意力或剪枝等优化。
误区四:位置编码的忽视。 在自动驾驶中,位置编码不仅包含2D空间位置,还应考虑相机内参、外参等信息,否则模型难以理解透视畸变。
总结而言,ViT在自动驾驶视觉感知中的适用性取决于三个维度:任务类型(全局推理型任务优先)、算力平台(高算力优先)、数据规模(大数据优先)。工程实践中,建议采用CNN与ViT的混合架构,利用CNN提取底层纹理特征,利用ViT建模全局依赖,同时通过知识蒸馏将ViT的能力迁移到轻量级CNN模型中,实现精度与效率的平衡。