ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

自动驾驶三维物体检测全解析:激光雷达、相机与多模态融合技术路线综述

自动驾驶三维物体检测全解析:激光雷达、相机与多模态融合技术路线综述 自动驾驶三维物体检测这个方向过去几年我从激光雷达点云处理一路做到多模态融合落地踩过的坑不算少。最近港中文那篇32页、覆盖367篇文献的综述论文在圈子里传得挺开我花了两天时间通读了一遍结合自己之前做过的几个感知项目把里面真正有价值的东西拆出来聊聊。这篇综述的核心价值在于它把基于激光雷达、基于相机以及多模态融合这三条技术路线做了系统性的梳理从传感器原理、数据表示、检测头设计到数据集和评估指标基本把2017年PointNet问世以来到2024年的关键进展都覆盖了。如果你正在做自动驾驶感知相关的课题或者准备入门三维检测但不知道从哪条路线切入这篇内容应该能帮你省下不少翻论文的时间。我会尽量把论文里的技术脉络和我自己的实操经验揉在一起讲不搞纯翻译式的复述重点说清楚每条路线为什么这么设计、实际落地时会遇到什么问题。1. 为什么三维检测不是把二维检测直接升一维那么简单很多人刚接触三维物体检测时会有个直觉二维检测已经这么成熟了YOLO、Faster R-CNN一堆现成框架三维无非就是多预测一个深度值和一个高度能难到哪去我当初也是这么想的直到第一次把KITTI数据集里的点云可视化出来才发现事情完全不是这个逻辑。1.1 数据表示的底层差异决定了方法论的分野二维图像是规则排列的像素网格每个像素有固定的邻居卷积操作天然适配这种结构。但激光雷达点云是一组无序的三维坐标点数量从几万到几十万不等而且点的排列顺序不影响语义——同一片点云你打乱顺序它描述的还是同一个场景。这个特性叫置换不变性直接导致标准卷积没法直接用。综述里把点云的处理方式归为几大类体素化、柱体化、点直接处理、距离图像投影。体素化是把三维空间切成小格子每个格子里的点用统计量表示然后跑三维卷积。这个方法直观但分辨率一高显存就爆炸分辨率一低小物体就丢了。柱体化是PointPillars那套思路只在俯视图平面上分柱高度方向不做切分计算效率高很多当年在nuScenes上跑实时推理基本都靠它。点直接处理以PointNet系列为代表用对称函数解决置换不变性但局部特征提取能力早期偏弱后来PointNet加了分层采样才补上。我自己的经验是如果项目对实时性要求高、算力有限PointPillars这类柱体化方案是性价比最高的起点如果追求精度且能接受离线处理体素化加稀疏卷积的组合更稳。综述里有个统计2022年之后纯点直接处理的方法在KITTI上的占比明显下降稀疏卷积成了主流这个趋势和工业界的实际选择是一致的。1.2 三维检测要预测的参数比二维多了一个量级二维检测框是四个参数中心x、中心y、宽、高。三维检测框呢中心xyz三个、长宽高三个、朝向角一个如果是完整参数化还要加上速度直接翻倍。朝向角这个参数尤其麻烦因为它在边界处有周期性0度和360度是同一个方向但数值上差很远直接回归会导致训练不稳定。综述里专门讨论了朝向角的回归策略常见做法有两种一种是直接回归角度值配合正弦余弦编码把角度映射到单位圆上避免边界跳变另一种是分类加回归的混合方式先把360度分成若干个bin做粗分类再在bin内做残差回归。我在实际项目里两种都用过正弦余弦编码实现简单但在极端角度下精度会掉bin分类的方式精度更稳但调参麻烦bin的数量和重叠度都需要根据数据集分布来定。还有一个容易被忽略的点三维检测的评估指标和二维完全不同。二维用IoU三维在KITTI上用的是3D IoU和BEV IoU两套而且不同难度等级Easy/Moderate/Hard对应不同的最小框高、遮挡程度和截断比例。很多论文报的是Easy级别的结果实际部署时Moderate和Hard才是真实场景的反映看论文时一定要盯住它报的是哪个难度。2. 激光雷达路线的技术演进从手工特征到稀疏卷积激光雷达路线的核心优势是深度信息直接可得不受光照影响测距精度高。但点云的稀疏性和不规则性让特征提取变得棘手。综述里把这条路线的发展分成三个阶段我觉得这个划分挺准确下面结合每个阶段的代表方法说说实际使用感受。2.1 第一阶段体素化加三维卷积的暴力美学早期方法基本是VoxelNet那套思路把点云体素化每个体素内的点用PointNet提取局部特征然后跑三维卷积做特征融合最后接检测头。这个框架逻辑清晰但计算量惊人。VoxelNet在KITTI上推理一帧要好几秒完全没法上车。后来SECOND做了关键改进用稀疏卷积替代稠密卷积。稀疏卷积的核心思想是只对非空体素做计算空体素直接跳过。这个改动让推理速度提升了一个数量级SECOND在KITTI上能跑到20FPS以上。我在一个园区低速无人车项目里用过SECOND单帧延迟在30ms左右对于低速场景完全够用。但稀疏卷积有个坑体素大小这个参数极其敏感。体素设大了小物体比如远处的行人可能只占一两个体素特征根本提不出来体素设小了非空体素数量暴增显存和计算量都扛不住。综述里提到一个经验值KITTI上常用的体素大小是0.05米到0.1米nuScenes因为场景更大通常用0.1米到0.2米。我自己的做法是先按这个范围设一个初值然后看验证集上小物体的召回率如果召回明显偏低就减小体素如果显存不够就适当增大。2.2 第二阶段PointPillars带来的效率革命PointPillars是2019年的工作思路很巧妙不做三维体素只在俯视图平面上划分网格每个网格内的点用简化版PointNet提特征得到一个伪图像然后直接用二维卷积做检测。这个设计把三维问题降维成二维问题计算效率极高当年在nuScenes上推理速度能到60FPS以上。我在一个高速场景的预研项目里对比过PointPillars和SECONDPointPillars的速度优势非常明显但精度上尤其是朝向角的估计要差一些。原因也不难理解柱体化在高度方向不做区分同一根柱子里可能同时包含地面点和物体点特征混在一起对朝向判断不利。综述里也提到了这个问题后续有不少工作尝试在柱体化基础上加高度信息或者做多尺度柱体来缓解。实际用PointPillars时有个细节要注意柱体数量上限这个参数。点云在俯视图上投影后非空柱体的数量是不固定的但网络输入需要固定尺寸所以通常会设一个最大柱体数超出的部分随机采样。如果这个值设得太小远处的小物体可能被采样掉设得太大显存占用高。KITTI上常用12000nuScenes上常用16000到20000具体要根据点云密度和检测距离来调。2.3 第三阶段稀疏卷积的精细化与Transformer的引入2021年之后激光雷达路线的主流变成了稀疏卷积加更精细的特征提取。代表工作像CenterPoint用无锚框的方式做检测先预测物体中心的热力图再回归其他参数。这个思路在遮挡场景下表现比锚框方法好因为不需要预设锚框的尺寸和朝向。再往后就是Transformer的引入。点云Transformer的核心挑战是注意力机制的计算复杂度随点数平方增长直接对几万个点做全局注意力不现实。综述里提到几类解决方案一类是做局部注意力只在邻域内计算一类是先下采样再做大范围注意力还有一类是用稀疏卷积提取特征后再接Transformer做全局建模。我在一个多传感器融合项目里试过基于稀疏卷积加局部注意力的方案精度确实比纯卷积有提升但训练时间也明显增加对数据量的要求更高。这里分享一个实操教训Transformer类方法在小数据集上很容易过拟合。KITTI只有七千多帧训练数据直接上大模型效果往往不如精心调过的卷积网络。如果数据量不够建议先用卷积方法打好baseline再考虑是否引入注意力机制。3. 相机路线的困境与突破从单目到多视角相机路线的优势是成本低、分辨率高、纹理信息丰富但致命伤是缺少直接的深度信息。单目图像做三维检测本质上是一个病态问题因为同一个二维投影可能对应无数个三维场景。综述里把相机路线的方法分成单目、双目和多视角几类我重点说说单目和多视角这两条实际项目中用得最多的路线。3.1 单目三维检测用几何先验和结构信息弥补深度缺失单目方法的核心思路是通过各种方式引入深度线索。早期工作像M3D-RPN用预设的锚框在三维空间中撒点然后投影到图像上做匹配。这个方法的假设是物体尺寸和朝向的分布有一定规律通过学习这些规律来推断深度。更主流的做法是预测深度图或者伪点云。比如Pseudo-LiDAR系列先用深度估计网络生成稠密深度图再反投影成点云然后用激光雷达的方法做检测。这个思路听起来很合理但实际效果受深度估计精度影响极大。我在一个低成本感知方案里试过Pseudo-LiDAR深度估计在近处还行超过30米误差就很大了导致远处物体的检测精度远不如真实激光雷达。综述里还提到一类基于Transformer的方法像DETR3D用查询向量在三维空间中采样图像特征。这个思路避免了显式的深度估计而是让网络自己学习二维到三维的映射关系。DETR3D在nuScenes上的表现不错但训练收敛慢对数据增强策略很敏感。3.2 多视角方法环视图像的三维感知多视角方法用多个相机覆盖360度视野通过跨视角的特征融合来推断三维结构。代表工作是BEVFormer它把环视图像的特征投影到统一的鸟瞰图空间然后在BEV空间做检测。这个思路的好处是不同视角的信息可以互补遮挡问题也能缓解。BEVFormer的核心是空间交叉注意力模块它定义了BEV空间中的一组查询点每个查询点通过投影关系去各个相机视角采样特征。这个设计很优雅但实现起来有几个坑。第一个是相机标定的精度要求极高外参有一点偏差投影就会错位特征融合反而引入噪声。我在一个项目里因为相机外参标定误差超过0.5度BEV空间的特征明显模糊检测精度掉了好几个点。第二个是时序融合的处理BEVFormer用了历史帧的BEV特征做时序对齐这对车辆运动估计的精度有要求如果自车运动估计不准历史特征反而会干扰当前帧。综述里有个数据挺有意思在nuScenes数据集上纯相机方法的最好结果和激光雷达方法的最好结果差距在逐渐缩小但相机方法对数据增强和训练策略的依赖明显更强。换句话说相机方法的上限可能不低但达到这个上限的难度更大。4. 多模态融合不是简单拼接就能解决问题多模态融合是综述里篇幅最大的部分也是工业界最关注的路线。逻辑很简单激光雷达有精确的深度但分辨率低相机有丰富的纹理但缺深度两者互补理论上能得到更好的结果。但实际做起来融合的时机、方式和数据处理策略都会显著影响最终效果。4.1 融合时机的选择前融合、中融合还是后融合综述里把融合策略分成三类前融合数据级、中融合特征级和后融合结果级。前融合是把点云和图像在数据层面做对齐比如给每个点云点附上对应的图像颜色或特征。这个方法实现简单但受标定精度影响大而且点云和图像的分辨率差异大直接对齐会丢失信息。我在一个项目里试过给点云点附RGB值近处效果还行远处因为图像分辨率不够颜色信息基本没用。中融合是在特征层面做交互比如用图像特征增强点云特征或者反过来。这是目前最主流的方向代表工作像MVX-Net、DeepFusion等。中融合的关键是设计好跨模态的注意力机制让网络自己学习哪些信息该融合、哪些该保留。我自己的经验是中融合的效果最依赖网络结构设计调好了提升明显调不好反而不如单模态。后融合是各自独立检测再合并结果比如用NMS或者贝叶斯融合。这个方法实现最简单鲁棒性也最好因为单个模态失效时另一个还能工作。但它的上限最低因为模态间的互补信息在检测阶段已经丢失了。实际量产项目里后融合用得反而多因为可解释性强、调试方便、功能安全容易做。4.2 多模态融合中的对齐问题时间同步和空间标定这是实操中最容易出问题的地方也是综述里反复强调的。时间同步方面激光雷达和相机的采集频率不同激光雷达通常10Hz相机可以到30Hz甚至更高。如果直接拿同一时刻的帧做融合运动物体会有错位。常见的做法是做运动补偿用自车运动估计把不同时刻的数据对齐到同一时间戳。我在一个高速场景项目里因为时间同步没做好对向行驶的车辆在融合特征里出现了重影检测框位置偏差超过1米。空间标定方面相机内参、激光雷达到相机的外参、以及可能的畸变校正每一个环节的误差都会累积。综述里提到一个经验外参标定误差控制在0.2度以内融合效果才有明显收益。实际标定中我建议用多帧联合优化的方式不要依赖单帧标定结果。另外标定完成后一定要做验证比如把点云投影到图像上看看边缘对齐情况这个步骤不能省。4.3 多模态融合的评估不要只看mAP多模态融合的评估比单模态复杂。除了常规的mAP还要看不同模态的贡献度、融合后的鲁棒性、以及单模态失效时的降级表现。综述里提到几个评估维度值得关注一是模态缺失实验比如故意遮挡相机或者模拟激光雷达失效看性能下降多少二是不同距离段的性能分布融合方法在近处通常提升明显远处因为点云稀疏和图像分辨率限制提升有限三是不同天气和光照条件下的表现这对实际部署至关重要。我在项目里做过一个简单的模态贡献度分析分别用纯激光雷达、纯相机和融合模型在验证集上跑然后看融合模型相比单模态的提升幅度。如果提升很小说明融合策略可能没起到作用需要检查特征对齐或者融合模块的设计。这个分析花不了多少时间但能避免很多无效的调参。5. 数据集和评估指标论文里不会告诉你的使用细节综述里用了不少篇幅梳理数据集这部分对实际做项目的人特别重要因为数据集的选择直接决定了方法能不能落地。我结合自己的使用经验把几个主流数据集的特点和坑说一下。5.1 KITTI经典但已显老态KITTI是三维检测领域最经典的数据集七千多帧训练数据标注了汽车、行人、自行车三类。它的优点是标注质量高、评估协议成熟、论文结果可比性强。但缺点也很明显数据量小、场景单一主要是城市道路、只标注了正前方视角。实际用KITTI时有个坑它的标注只覆盖图像视野内的物体激光雷达点云中超出图像范围的物体没有标注。如果你用纯激光雷达方法这些未标注物体在训练时会被当成背景导致模型在图像视野外出现漏检。我在一个项目里就遇到过这个问题后来通过限制检测范围到图像视野内才解决。5.2 nuScenes多模态研究的主流选择nuScenes是当前多模态研究最常用的数据集1000个场景每个场景20秒配备了6个相机、1个激光雷达、5个毫米波雷达。它的优势是传感器配置接近量产车、场景多样、标注类别丰富23类。但它的标注频率只有2Hz而传感器数据是10Hz到30Hz中间帧需要做插值或者忽略。nuScenes的评估指标是mAP加NDSnuScenes Detection ScoreNDS综合了mAP和几个True Positive指标包括平移、尺度、朝向、速度、属性的误差。这个综合指标比单纯看mAP更全面但也更复杂。我在对比方法时发现有些方法mAP高但NDS低说明它在某些属性估计上偏差大实际部署时这些问题可能比漏检更麻烦。5.3 Waymo Open Dataset规模最大但获取门槛高Waymo的数据集规模最大标注质量也很高但获取需要申请而且使用条款比较严格。它的传感器配置和nuScenes类似但激光雷达的线束更多点云更稠密。如果你的方法对点云密度敏感在Waymo上调好的参数搬到nuScenes上可能需要重新调。综述里还提到了一些新兴数据集比如专门针对恶劣天气的、针对高速公路场景的、以及一些合成数据集。合成数据集的好处是可以自动生成标注、可以控制场景变量但域差距问题始终存在。我在一个仿真项目里用过合成数据做预训练然后在真实数据上微调确实能减少对真实标注的依赖但仿真环境的传感器模型和真实传感器差异越大迁移效果越差。6. 从论文到落地那些综述不会展开的工程问题综述论文的重点是梳理学术进展但实际做项目时遇到的很多问题它不会展开讲。这部分我结合自己的经验说几个从论文复现到实际部署之间最容易卡住的环节。6.1 推理速度与精度的权衡不是线性的论文里报的FPS通常是在高端GPU上的理想值实际部署时还要考虑预处理、后处理、以及和其他模块的调度。我做过一个统计一个在论文里报30FPS的模型加上点云预处理、非极大值抑制、以及跟踪模块后端到端可能只有15FPS。如果目标平台是嵌入式设备还要考虑模型量化带来的精度损失。实际项目中我通常会把模型分成两档一档是高精度但速度慢的用于离线标注或者数据回灌一档是轻量化的用于实时推理。两档模型共享大部分结构只是骨干网络的宽度和深度不同。这样可以在不同场景下灵活切换。6.2 长尾类别和罕见场景的处理公开数据集里的类别分布相对均衡但实际场景中长尾问题很严重。比如施工区域的锥桶、事故现场的三角警示牌、异形车辆等这些在训练数据里可能只有几帧模型很难学好。综述里提到一些少样本学习和开集检测的思路但实际落地时更务实的做法是先用通用模型做基础检测再针对特定类别收集数据做微调或者用规则方法做补充。我在一个园区项目里遇到过电动滑板车的检测问题公开数据集里几乎没有这个类别最后是通过收集园区内的实际数据标注了几百帧在预训练模型上微调才解决的。这个过程说明数据闭环能力有时候比模型结构更重要。6.3 多传感器标定的在线维护车辆在运行过程中传感器支架可能因为振动、温度变化产生微小形变导致标定参数漂移。离线标定一次管终身是不现实的。综述里没有展开讲在线标定但这是量产必须解决的问题。常见的做法是用自然场景中的特征做在线校准比如用车道线、路牌、地面标志等作为参照。我在一个项目里试过用地面平面约束做激光雷达外参的在线校准效果还可以但需要场景中有足够的地面点。在线标定的难点是判断什么时候需要校准、校准结果是否可信。我的经验是设置一个保守的触发条件比如连续多帧的标定残差超过阈值才触发校准校准后还要做一致性检查避免引入错误标定。7. 几条值得关注的开放问题和我的个人判断综述的最后部分列了一些开放问题我挑几个自己觉得最有实际价值的说说看法。第一个是多模态融合的最优架构还没有定论。目前中融合是主流但具体怎么融合、在哪个层级融合、用什么注意力机制方案非常多缺乏统一的设计原则。我的判断是未来可能会出现一些通用的融合模块设计范式就像卷积网络里的残差连接那样成为标准组件。第二个是时序信息的利用还不够充分。大多数方法还是单帧检测少数用了时序融合的也主要是简单堆叠或者RNN。实际上时序信息对遮挡恢复、速度估计、以及减少抖动都非常有价值。我在项目里试过用简单的时序对齐加特征聚合对遮挡场景的召回提升很明显但时序建模的计算和存储开销需要仔细设计。第三个是评估体系需要更贴近实际部署。当前的mAP和NDS主要衡量检测精度但对功能安全、不确定性估计、以及失效模式的分析不够。实际部署时一个能给出置信度且置信度可靠的模型比一个精度高但不知道自己什么时候会错的模型更有价值。第四个是仿真和真实数据的域适应。仿真数据可以低成本生成大量标注但域差距问题始终存在。综述里提到的一些域适应方法在特定场景下有效但通用性还不够。我的经验是仿真数据适合做预训练和极端场景补充但不能完全替代真实数据。最后说一个我自己的体会这个领域发展太快综述论文的价值在于帮你建立知识框架但具体的技术细节和最新进展还需要持续跟进。我通常的做法是读完综述后挑几个和自己项目最相关的方法精读代码然后在自己的数据上跑一遍看看实际效果和论文报告的差距在哪里。这个差距往往就是工程落地的关键所在。
返回列表