2. 自动驾驶感知模型概览
自动驾驶感知系统要在车端实时回答三个问题:有什么(目标检测与分类)、在哪里(定位与测距)、空间是否可通行(占据与语义)。不同代际的模型结构正是围绕这三个问题演进的。理解它们的结构差异、计算特性和部署约束,是后续做中间表示(IR)转换与跨平台部署的前提。
一、四类主流结构的核心原理
CNN 系列是感知的基石。以 ResNet、RegNet 为骨干,通过卷积核在局部感受野上提取特征,配合 FPN 做多尺度融合,再接入检测头(如 CenterPoint、YOLO 系列)或分割头。其核心优势是局部性、平移等变性、权重共享,计算规整、算子成熟,对量化与定点化友好,是当前量产部署的主力。
Transformer 系列引入自注意力机制,用 Query-Key-Value 计算全局依赖。在感知中常见两种用法:一是作为骨干(如 ViT、Swin)替代 CNN;二是作为检测头(DETR、DINO),用可学习 Query 直接输出目标集合,省去 NMS 后处理。其优势是全局建模能力强、输出端到端;代价是注意力矩阵随 token 数呈平方增长,且包含 Softmax、LayerNorm、GELU 等对量化不友好的算子。
BEV(Bird's Eye View)系列解决的是多相机到统一俯视空间的转换。典型流程是:多路环视图像经骨干提特征,通过 LSS(Lift-Splat-Shoot)或 BEVFormer 的时空注意力,将图像特征投影到自车坐标系下的 BEV 网格,再在 BEV 特征上做检测、分割与预测。BEV 让多传感器在统一空间对齐,是规划控制模块可直接消费的表示。
Occupancy 系列进一步把空间离散为三维体素,预测每个体素的占据概率与语义类别(如 Occupancy Network、TPVFormer)。它不依赖预定义的目标框,能表达任意形状的障碍物与可通行区域,特别适合处理异形车辆、施工区域、散落物等长尾场景。代价是三维体素分辨率与显存、算力直接挂钩。
二、模型规模与计算特性的量化对比
把结构差异落到数字上,才能判断部署可行性。下表给出典型配置的量级参考(具体数值随版本与输入分辨率变化):
| 结构类型 | 典型代表 | 参数量级 | 单帧计算量 | 主要瓶颈 | 量化友好度 |
|---|---|---|---|---|---|
| CNN | ResNet-50 + FPN | 20M~40M | 50~150 GFLOPs | 卷积算力 | 高 |
| Transformer | ViT-L / DETR | 100M~300M | 200~600 GFLOPs | 注意力访存 | 中低 |
| BEV | BEVFormer / LSS | 50M~200M | 300~800 GFLOPs | 投影与采样 | 中 |
| Occupancy | OccNet / TPVFormer | 80M~250M | 500~1500 GFLOPs | 3D 体素显存 | 中低 |
三、部署约束分析:从模型到车端的四道关卡
- 算力关卡:车端 SoC 的 TOPS 是峰值,实际有效算力受内存带宽、调度效率影响,通常只能发挥 30%~60%。BEV 与 Occupancy 的采样、投影算子往往无法打满算力。
- 精度关卡:INT8 量化对卷积友好,但 Softmax、LayerNorm、GELU、Sigmoid 等非线性算子量化误差大,常需保留 FP16 分支,形成混合精度图。
- 算子关卡:自定义算子(如可变形注意力、体素池化)在部分推理引擎中缺失,需要算子拆分或自定义实现,是跨平台部署最常见的失败点。
- 动态形状关卡:多相机输入数量、BEV 网格尺寸、体素分辨率若为动态,会导致编译期无法确定内存,需在 IR 阶段固化或分档。
四、案例场景:城市 NOA 的感知栈组合
一个典型的城市 NOA 感知栈会组合多种结构:环视相机经 CNN 骨干提特征,用 BEV 模块投影到统一俯视空间,在 BEV 特征上跑检测与车道线分割,同时用 Occupancy 分支输出三维占据栅格,供规划模块判断可通行区域。此时部署约束体现为:
输入:6~11 路相机,分辨率 1920x1080 或 1280x720
骨干:CNN(INT8)→ 特征图 1/8、1/16、1/32
BEV:网格 200x200,通道 256,需 FP16 投影
Occupancy:体素 200x200x16,语义 16 类
时延预算:感知总时延 < 80ms
显存预算:< 4GB(含多帧缓存)
量化策略:卷积 INT8,注意力与 Softmax FP16
可以看到,模型结构的选择直接决定了 IR 需要表达什么:CNN 需要表达卷积、BN、激活的融合;Transformer 需要表达注意力与归一化;BEV 需要表达投影与网格采样;Occupancy 需要表达三维体素与稀疏操作。这正是后续中间表示设计要覆盖的算子集合。
综上,CNN、Transformer、BEV、Occupancy 并非互相替代,而是按任务层次组合使用。理解它们的结构本质与计算特性,才能在中间表示与跨平台部署中做出正确的取舍:哪些算子必须原生支持,哪些可以融合,哪些需要降精度或拆分。这是第 2 章要建立的核心判断力。