资讯动态

BEV融合实战:自动驾驶多传感器感知的统一坐标与工程排坑

发布时间:2026/10/20 3:18:57 来源:尧图企业网站定制
BEV 融合这个题目我在实际的自动驾驶感知项目里摸爬滚打了两三年踩过不少坑也写崩过不少网络。今天把经验完整捋一遍从 BEV 表示到底解决什么问题到多传感器特征怎么融再到网格怎么设、时间戳怎么对齐、夜间雨天怎么保住下限都会聊到位。这篇文章的核心适用对象是刚接触多传感器感知的中级工程师以及想在量产项目里落地 BEV 融合的团队成员。理解它你就能明白现代自动驾驶感知的主流技术路线是怎么搭起来的也能避开我在项目中踩过的大部分坑。1. 为什么感知系统最终都往 BEV 上靠1.1 多传感器“各说各话”缺一个统一的坐标系先说一个最原始的痛点一辆车上有好几个传感器摄像头看到的是透视图像激光雷达得到的是三维点云毫米波雷达给的是稀疏目标。这三个东西既不在一个坐标系里也不是同一种数据结构。如果直接硬拼在一起神经网络没法统一处理。传统做法是先让每个传感器分别出检测框再在目标层做匹配最后得到融合结果。但这套流程的问题很致命每个传感器独立输出已经丢失了大量原始特征后融合阶段就算想利用全局信息也补不回来。BEV 把这个问题从根本上解决了。不管传感器原始视角长什么样我们都能映射到车体正上方的俯视图网格上。这个网格的每个格子都对应车周围的真实物理坐标所有传感器信息都被搬到一张统一的“世界地图”上。有了这个统一表示下游不管是目标检测、车道线识别还是可行驶区域分割都能在同一个坐标系里做不需要再搞一堆几何变换。我在实际项目中体会最深的并不是 BEV 的精度而是它的扩展性。以前写一个前视相机目标检测想融合旁边激光雷达的数据得写一堆自定义算子代码又长又脆。但换了 BEV 框架之后新增一个传感器只意味着在 BEV 特征层多加一个输入分支整个后台逻辑基本不用动。这个优势在快速迭代的项目里接近救命级别因为需求经常变今天加个相机明天换一个雷达型号底层结构稳得住才不会每次都被拖垮。1.2 BEV 给下游任务留出了统一接口另一个容易被忽略的细节是BEV 不只是感知模型自己的中间表示它也是一个非常好的“跨模块接口”。轨迹预测模块想要的不是图像上的像素坐标而是地面的物理坐标。规划控制模块需要的也是地图坐标系下的障碍物信息。如果感知模块输出的是规范化的 BEV 网格那么下游模块可以直接无缝衔接省掉大量坐标转换逻辑。我们团队做过一个对比测试目标检测流程从透视视角切换到 BEV 视角以后下游轨迹预测模块去掉了大量历史遗留的坐标转换代码预测准确率反而提升了几个点。根本原因就是跨模块传递时的坐标转换和误差累积被大幅削减了。这种结构性优势是单纯的模型参数调优很难替代的。所以BEV 融合在纯视觉方案里被重视在多传感器方案里更是核心因为它天然把感知、预测、规划拉到了同一个语言体系里。理解了这一点你就明白为什么业界会花那么大力气把特征统一到 BEV 空间而不是继续在各自视角下各干各的。1.3 BEV 融合是系统工程不是单点算法需要提醒一点BEV 融合是一个系统不是只跑通一个开源模型就完事。我眼里它可以拆成六个环节传感器标定、时间同步、数据增强、模型结构、损失函数、推理优化。任何一个环节掉了链子整体效果都会崩。很多刚入门的同学以为把开源仓库跑通就等于完成了 BEV 融合实际上距离能用差得很远。我记得有一段时间团队把大量精力都花在网络结构上换了各种主流结构效果提升却非常小。后来才发现症结在空间对齐环节某个相机的标定结果有偏差导致图像特征在 BEV 上整体偏移模型结构再强也救不回来。这个故事后面详细讲这里先记住一句话BEV 融合的第一原则是数据对了才谈得上效果数据错了后面全是白忙。2. 融合层次怎么选输入级、特征级、目标级2.1 输入级融合理想丰满现实骨感所谓输入级融合就是把所有传感器原始数据提前对齐拼接然后一起送入网络。听起来最干净实际操作却最难。原因很简单图像是一个密集的二维网格激光雷达是稀疏的无序点集要把这两者原生地拼在一起网络结构上需要做非常复杂的映射计算量也直线上升。输入级融合在量产项目里基本很少有人走到底。它更适合传感器本身已经高度统一的情况比如纯激光雷达的体素化表示加上前视相机的小范围补盲。而且输入级融合对时间同步的要求极为苛刻毫秒级的偏差就会让点云和图像对不上位置导致网络学到错误的对应关系。在实验室做研究可以用量产还是谨慎评估后再做决定。2.2 特征级融合当前的主流共识特征级融合是 BEV 范式的主要战场也是几乎所有主流开源框架采用的做法。思路是每个传感器先单独提取特征再把特征转换到同一个 BEV 空间最后在网络中间某一层互相融合。这样做既保留了原始信息的丰富度又让计算量控制在可接受范围。我在项目里的标准流程大概是这样相机分支做一个透视到 BEV 的特征转换激光雷达分支把点云提取成 BEV 特征图毫米波雷达分支生成稀疏的 BEV 热图然后三个分支的特征图在同一尺寸网格上做拼接或注意力融合再经过一个 BEV 编码器得到最终感知结果。整个过程特征图尺寸保持一致融合实施成本低也很好调试。特征级融合还有一个隐藏好处对传感器数据缺失更鲁棒。比如某个相机被遮挡它的特征图自然就少了对应区域的信息但激光雷达和毫米波雷达还能把这个区域补上。而在目标级融合里如果某个传感器一旦没检测出目标那这个目标可能直接丢失没有任何挽救空间。这个差距在真实路况下非常致命尤其是被大车遮挡的行人场景。2.3 目标级融合快但丢信息目标级融合也叫后融合就是每个传感器独立完成检测输出目标框或目标点然后通过匹配算法融合。这个路线最大的优点是简单每个传感器的检测链路完全独立工程上容易维护出了问题也好定位。在早期自动驾驶感知中非常普及现在很多简单预警系统仍然在用。但它的缺点同样明显每个传感器的检测器都是独立训练的它没有机会利用其他传感器的互补特征。比如激光雷达在夜间能精确测距但点云稀疏时对远距离小目标很弱相机像素密集但夜间很容易失效。各自检测完再融合时信息已经丢失了一大块融合算法再聪明也拼不回那些已经丢掉的信号。我的经验是如果你的目标只是快速验证逻辑后融合完全够用但对精度和复杂交通场景有硬要求尽量选特征级融合。后融合适合做辅助预警不太适合做高精度感知主链路。2.4 三种路线怎么选一张表看懂融合层次输入对象优点缺点适用场景输入级原始传感数据信息最完整结构复杂、算力高、标定要求极高传感器高度同步的特定研究场景特征级中间特征图信息保留好、灵活度高、鲁棒性好结构相对复杂、仍需严格标定量产感知主链路目标级检测结果实现简单、维护容易信息丢失严重、难以互补预警功能、快速验证我建议第一次做 BEV 多传感器融合的团队别贪多先走特征级融合。虽然工程量比后融合大但它能让你把注意力集中在数据和模型本身优先把正确方向跑通。之后再回头优化效率而不是一上来就在融合层次上反复纠结浪费时间。3. 传感器到 BEV 的转换过程拆解3.1 相机到 BEV深度估计是最大的门槛相机图像是透视投影像素坐标天然不带深度信息。要把图像转换到 BEV最核心的一步是估计每个像素的深度。早期做法是 IPM逆透视映射直接假设地面是平面把图像坐标投影到地面坐标系。这个做法在平直马路上效果不错但一到上下坡或者有坡度变化的路口就翻车因为地面不是平面投影结果直接错位。现在的主流做法走的是深度分布估计路线典型代表是 LSS 思路。网络为每个像素预测一个离散深度分布再把图像特征沿着深度维度铺开通过相机内外参数映射到 BEV 网格上。这样一来模型不需要假设地面是平的网络可以自己学到场景里的深度结构。LSS 全称是 Lift-Splat-Shoot在项目里我用的版本会把图像特征先提升到三维空间再投射到 BEV 网格上核心就是深度分布估计和特征重投影两步。深度估计这条线有一个天然难点视觉对深度的估计在远距离和中低纹理区域不可靠。所以纯视觉 BEV 在近处效果可以到了 60 米开外深度误差会迅速放大。这也是为什么现在纯视觉方案往往要通过时序融合来弥补用前后多帧图像去拟合深度而不是只依赖单帧。实际操练里相机的内参和畸变系数绝不能省事直接用出厂值。我们项目里重新做过一次全车标定同等模型结构下近处检测精度变化不大但边角区域和远端的表现提升非常明显。很多人模型效果不好就急着换结构我的建议是先检查标定再谈模型。3.2 激光雷达到 BEV点云投影和体素化激光雷达的数据本身就是三维点云转换到 BEV 相对直白核心是把点云按高度、强度等信息压到一个二维网格里。但这里有一个关键选择体素分辨率取多少以及每个体素里用什么特征表示。不同的取值会直接影响检测效果和计算量。我做过一组对比实验体素大小从 0.1 米调到 0.2 米计算量能减少一半以上但近距离小目标比如锥桶、轮胎的召回率下降非常明显。最终在项目里我们采用多分辨率策略近场用细网格远场用粗网格。这个设计在工程上多了一点麻烦但效果收益非常值。除了体素大小点云特征也需要精心设计。只存高度或者反射强度是不够的通常会把点个数、最大高度、平均高度、强度均值、强度方差都放进去这样 BEV 网格里每个格子都携带了对应柱体内的统计信息。这个做法在开源框架里已经相当成熟参数直接照抄通常也能得到不错的结果适合作为基线。激光雷达最大的问题是稀疏性。60 米以外一帧点云可能只有几十个有效点覆盖一个行人区域根本无法形成足够强的特征。所以融合相机如此重要相机提供稠密纹理激光雷达提供精确距离两者特点是天然互补的。3.3 毫米波雷达稀疏到让人又爱又恨毫米波雷达在 BEV 里的表示比激光雷达更简单因为它输出的通常是稀疏的目标点带距离、速度和角度信息。在 BEV 融合里雷达分支一般生成一个稀疏热图每个点附带径向速度可能还有目标类型。由于数据本身很稀疏很多融合框架里雷达分支的权重并不高但它的速度信息是相机和激光雷达都很难提供的。我在实际项目里的体会是雷达的优势集中在恶劣天气。雨雾天里相机和激光雷达的性能都会衰减但雷达基本不受影响。即使雷达点非常稀疏也能在大范围搜索时稳住某些目标的存在性给整个感知系统一个兜底。在多模态 BEV 融合中雷达分支的角色更像一个“保守派”检测位置可能不准但漏检最少当其他传感器失效时它能保证系统不会完全瞎掉。怎么把雷达稀疏点变成 BEV 特征也有讲究。直接把点画到网格上大部分格子是空的融合时很容易被其他传感器淹没。我们惯用的做法是高斯核扩散把每个雷达点膨胀到周围若干网格这样在特征层面不会出现明显的“孤岛”问题融合时雷达信息也不容易被卷积直接抹掉。3.4 在 BEV 里怎么做多模态融合当多个传感器都已经生成各自的 BEV 特征图之后接下来就是具体的融合操作。目前最常见的是通道维度拼接也就是 Concat开源框架里大量使用。Concat 简单高效但缺点也明显不同传感器特征的地位被默认设为平等网络必须自己学出哪些特征更可信学习负担较重。另一种做法是注意力融合让网络根据特征和场景上下文动态调整融合权重。比如在白天图像特征权重高一些在夜间雷达和激光雷达的特征权重自动加强。这个思想业界已有多种实现叫法各异核心都是通过注意力机制让模型自适应地决定信谁。我们在项目上最终采用了 Concat 加注意力加权的组合方式。先用 Concat 把特征拼起来喂进一个小型卷积生成逐通道权重再对各分支做加权求和。这个改进相比纯 Concat在高噪声场景下的稳定性提升明显额外算力开销几乎可以忽略。如果你的场景光照变化不大纯 Concat 也够用不必一上来就上复杂结构。这里有一个非常重要的经验不要一开始就上花哨的跨模态注意力结构。先把 Concat 基线跑通再逐步增加复杂度这样才能清楚知道每个模块到底贡献了多少效果。直接堆一个复杂模型效果差的时候你根本分不清是数据问题还是模型问题排查成本极高。4. 实操中的关键参数与部署细节4.1 BEV 网格分辨率的账怎么算BEV 网格的设置决定了整个感知系统的有效范围、精度和算力是个牵一发动全身的参数。假设一个前视摄像头能看到前方 100 米、横向 25 米如果把网格分辨率设为 0.1 米那么单方向网格数就是 1000×250再考虑前后左右多个方向整体网格规模直接爆表算力根本吃不消。实际项目里我们常用动态 ROI 方案近场 30 米内用 0.1 米分辨率30 米到 80 米用 0.2 米80 米以外用 0.4 米。这种多分辨率网格在推理时可以用多个尺度的 BEV 特征图叠加工程实现比单一分辨率麻烦但效果和算力的平衡最好。如果你只需要一个起步参考配置可以用 0.2 米分辨率、前视 100 米、后视 50 米、左右 35 米跑起来然后再根据实际算力逐步调。网格分辨率还跟标定精度强耦合。网格设得再细如果标定误差有 10 厘米这些细腻度也都是白费。所以我的经验是先保证标定精度优于网格分辨率的一半再去调分辨率不然只会白白增加算力。4.2 空间标定和时间同步翻车最多的环节空间标定就是把所有传感器的外参统一到车体坐标系。这个话题很多教程一句话带过但在真实项目里它是最容易翻车的环节。外参只要偏差 0.5 度在 50 米外就会产生接近半米的横向偏移BEV 特征图对齐直接失真多传感器融合全部白搭。别小看这 0.5 度很多相机安装支架在车辆运行震动后都会产生微小位移忘了重新标定就会中招。我们当时的排查经历值得说一下。用某个开源框架跑了很长时间性能始终达不到官方 demo 的水平各种网络调优都无效。后来把摄像头实时图像和激光雷达点云同时叠加显示发现车头左前方一个物体在相机 BEV 特征里和点云 BEV 特征里的位置偏差很明显。检查标定文件后才发现某个相机的旋转矩阵写错了。改完之后效果立刻恢复整个问题排查花了两周教训极其深刻。时间同步是另一大难题。不同传感器帧率不同相机通常 30 FPS激光雷达 10 FPS毫米波雷达 15 FPS时间戳还来自不同时钟域。如果不做精确对齐传感器之间的特征会出现几帧级别的错位。在高速场景下几十毫秒的错位就可能让目标在 BEV 上错开好几个像素最终影响融合精度。我们工程上用的流程是这样的每个传感器数据都保留硬件时间戳在管线入口统一转成系统时间激光雷达和毫米波雷达按时间戳插值到相机帧时刻对无法插值的传感器就选时间最接近的一帧并把这个时间差作为额外特征输入网络让网络学会时间差的影响。这种方式比完全同步采集灵活得多也更容易落地。4.3 冷启动训练预训练、数据增强、迁移BEV 融合模型的训练开销非常大特别是同时吃相机和激光雷达的模型数据量动辄上百万帧。从零开始训练不仅收敛慢还容易过拟合到特定场景。我们在项目中采用分阶段训练的方法一步步把模型引到目标状态。第一阶段用大规模公开数据集预训练相机分支和激光雷达分支的骨干网络让特征提取器具备一般性的视觉和点云理解能力。第二阶段把预训练权重加载进完整 BEV 模型在较小数据集上冻结骨干只训练融合模块和检测头。第三阶段再解冻全部参数做联合微调。这样整个训练周期可以压缩到原来的三分之一左右最终效果也更稳定。数据增强方面BEV 坐标下的增强逻辑跟普通图像不一样。地面坐标系里的翻转、平移、旋转是很好理解的增强手段但要特别小心一点如果外参已经固定增强操作应该在 BEV 网格层面做而不是在图像层面做否则会引入标定不一致的伪影训练出来的模型反而变差。天气和光照增强对多模态融合尤其重要。我们会在图像上模拟雨滴、雾气、亮度扰动在点云上模拟降采样和噪点在雷达上模拟目标散射和漏检。这种多传感器组合增强训练出来的模型在真实恶劣天气下的表现比单纯堆数据的模型好得多。因为恶劣天气本身收集困难靠仿真增强补足才是量产可行的路线。4.4 算力与延迟端侧部署的硬约束自动驾驶系统对延迟要求非常紧从传感器输入到感知输出一般只有几十毫秒的预算。BEV 模型动辄包含三个分支、一个大的 BEV 编码器和多个检测头部署时计算量非常大。如果直接把 GPU 训练那套模型上边缘设备延迟铁定超标。我们当时做部署优化做了几件事把相机分支的卷积替换为可融合算子减少内存搬运把 BEV 编码器的特征通道数剪枝到原来的三分之一对深度估计部分做 INT8 量化把非关键帧的后处理逻辑放到 CPU 线程并行。优化完之后整体延迟降到了原来的 40% 左右精度损失控制在 2% 以内这在量产项目里属于可以接受的范围。还有一点容易被忽略模型训练时和部署时的输入分布有差异。训练阶段数据增强里常做随机翻转、随机裁剪如果这些增强没有在部署前合理裁剪模型会在边缘区域产生不可预测的输出。所以部署之前一定要把数据增强关闭再对边缘情况做专门的回归测试。这类问题看起来小上线后一旦爆发排查成本非常高。5. 常见问题与排坑经验实录5.1 远端目标漏检怎么排查远端小目标漏检是 BEV 融合最常见的问题也是最难定位的问题之一。我的排查顺序是先确认是不是深度估计的问题。把相机 BEV 特征的深度维度可视化看看目标附近的深度分布是否集中且准确。如果深度分布发散大概率是深度估计网络能力不足或者训练样本里远距离样本太少。如果深度分布看起来没问题再看 BEV 特征在目标位置处的响应强度。可以把某一帧的标注框和 BEV 特征热图叠加肉眼观察目标区域是否存在有效特征。特征存在但检测不到那就是检测头或后处理策略的问题特征本身很弱就要回到深度估计和数据采样去优化。我还遇到过一种比较隐蔽的情况网格分辨率太粗两个距离较近的目标在 BEV 特征上合成一个峰值后处理的非极大值抑制直接删掉了一个框。这种情况下把近场网格改细或者把检测头的输出改成细粒度目标定义问题就能解决。这种问题如果你没有可视化特征热图可能耗上很久都找不到原因。5.2 夜间、雨雾场景的表现断崖多传感器融合在恶劣天气下容易崩盘并不一定是融合不行而是各个传感器都在恶化融合后的提升被抵消了。最典型的场景是夜间图像噪声增大激光雷达点云在雨滴中产生大量虚警点毫米波雷达的多径干扰增强。这时候如果融合权重还是白天训练出来的分布效果必然变差。我们应对的办法是引入天气先验在模型输入里加入光照亮度和天气类型特征让融合模块根据环境信息动态调整各分支权重。夜间阶段模型会自然降低图像分支的信任度增加雷达分支的贡献。这个改进让夜间目标漏检率相对下降了不少而且实现成本不高强烈推荐尝试。如果你不想改模型结构那就从数据侧入手。在训练集里刻意增加夜间雨雾场景的比例并保留恶劣天气下的真实传感器噪声而不是简单做亮度调整。真实噪声和人工增强的分布差异很大只调亮度会让模型在真实场景下产生“仿真感”过拟合看起来训练 loss 很低实际泛化却很差。5.3 激光雷达与相机的时间不对齐时间不同步的典型特征是目标在 BEV 上出现“拖影”或者“双轮廓”。尤其是高速运动的目标相机帧落后激光雷达十几毫秒目标在 BEV 上就会错开一大截。如果不处理融合后的定位精度明显变差甚至会影响到规划控制。我们早期项目没有硬件同步能力只能在软件层面做插值。具体做法是保留激光雷达的原始时间戳在融合之前根据车辆速度和角速度把点云预测到目标时刻的位姿再执行投影。这个修正不一定完全准确但在常规车速下误差可以控制在可接受范围内。如果后续有条件入手硬件尽量用带统一时间基准的采集系统会从源头把问题消灭掉。时间对齐之后分辨率对齐也同样重要。不同传感器在不同时间点观测特征图本身会带有各自的运动偏差。我们在训练时特意对激光雷达分支施加随机平移扰动模拟时间不同步带来的错位让模型学会容忍这种误差。推理时的稳定性比不做这个增强的版本明显更好。5.4 模型不收敛或精度迟迟上不去如果你的 BEV 融合模型训练了几万步损失一直居高不下首先要看的是数据问题而不是模型问题。先检查标注和外参是否匹配再去统计训练样本的目标尺寸分布和距离分布最后看是否出现大量空标签帧。空标签比例太高时模型会学会偷懒直接输出背景损失虽然很低但检测效果一塌糊涂。一个常见陷阱是不同传感器输入的量纲差距巨大。图像特征一般在 0 到 1 之间点云高度可能达到几十米雷达速度可能有上百公里。如果不做合适的归一化低量纲的小数值特征很容易被高量纲特征压制。我们在项目里给每个分支都加了独立的批归一化层并在进入融合层之前做特征缩放这一步看似简单但对收敛帮助极大。如果数据和预处理都正常模型还是上不去那就回到最基本的过拟合测试。取训练集里 100 帧强行让模型拟合看看损失能不能降下去。如果连这部分都做不到基本就是模型结构或者代码 bug。如果很容易过拟合说明模型有潜力问题出在数据和训练策略上按前面几步排查即可。6. 一点个人总结BEV 融合这件事如果只看论文会觉得思路很简单视角变换、特征拼接、编解码器一套下来好像谁都能做。但真正把它做到量产可用级别需要处理的细节极其繁杂从标定精度到时间同步从网格分辨率到各分支的输入范围归一化每一环都像木桶上的一块板缺一块就漏水。我个人做了几个 BEV 融合相关项目之后最大的体会不是哪个模型结构更香而是工程落地的优先级永远高于算法炫技。先把数据基础工作做到极致再考虑模型结构升级先保证标定和时间同步可靠再去调融合权重。顺序反了再先进的模型也救不了你。最后分享一个非常实用的小技巧每次调试 BEV 模型前一定先做一个多传感器特征图的离线可视化脚本。把相机特征、点云特征、雷达特征、融合特征和最终检测输出全部画在同一张图上。我调试模型的效率有一半都靠这个脚本因为很多问题一眼就能定位到是哪个环节出了问题。希望这篇文章也能成为你调试路上的一张地图。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑