[首发于智驾最前沿微信公众号]自动驾驶自商用化以来,是否加装激光雷达一直是大家争议的热点,作为众多车企选择的主要感知硬件,激光雷达只能获得点云图,那自动驾驶系统是如何通过点云图来进行障碍物识别的?
依托点云的“障碍物识别”方法
其实激光雷达给出的是三维点云——也就是一堆带坐标(通常为x,y,z,有时带强度/intensity、回波数/echo等额外通道)的离散点。每个点代表从传感器到某个表面反射回来的激光脉冲的测距结果。点云最大优点在于可以直接、精确地测得三维几何信息,利于判断物体的形状与距离,但它并不是整齐的像素网格,而是稀疏、不规则、受视角和距离影响显著的点集。
使用点云进行“障碍物识别”其实可以分成几个阶段,即预处理(滤噪、裁剪、下采样等)、地面/背景分离、点云分割与聚类、为每个聚类拟合包围框并分类、后处理与跟踪等。有很多技术方案是使用经典几何/统计方法做快速分割和聚类,再把得到的候选体送入学习器做分类;近年来端到端学习的3D点云目标检测也越来越主流。
预处理作为障碍物识别的第一步,看似只是对点云数据进行基本处理,但其实非常重要。激光雷达的一次扫描会包含噪声点(由反射弱或多路径造成)、不感兴趣区域(例如车顶、侧边远处的建筑)以及测距分布极不均匀的情况(近处点密、远处点稀)。常见的预处理工作包括用盒体/视野裁剪(把z、x、y范围限制到我们关心的区域),用统计离群点移除(例如统计每点距离邻居的平均距离,剔除显著异常值),以及体素网格(voxel grid)或均匀下采样来降低点数、保证处理速率。下采样一定要避免过度,过度下采样会让远处或小目标消失,尤其是在高速场景下远距目标本来就只有少点,因此要根据传感器点密度与后端算法的需求调整体素大小或采用分层下采样策略(近距高密度、远距低密度)。这一阶段往往决定了系统能否在实时约束下保持较高的检测召回。
地面分离是道路简而言之就是把“地面/路面”点剔除,有利于突出真正的障碍物(车辆、行人、立柱等)。常用的方法有基于模型拟合的RANSAC平面拟合、基于栅格/高度图的地面提取、以及按扫描线(laser ring)做逐环地面分类。RANSAC优点是概念简单且对噪声有鲁棒性,但在复杂路面(坡度、路基起伏、障碍物覆盖)或点云稀疏时容易失败,需要调整内点阈值与迭代次数;基于高度图的方法更适合移动平台,把点云投影到水平栅格上,统计每格的最低点并应用地形滤波(例如形态学滤波或坡度阈值),对非平坦路面更友好,但需要选好栅格分辨率以平衡细节和噪声。
把地面点去掉后,下一步是把剩余点按“连通性”或“密度”分成若干个簇(cluster),每个簇通常对应一个物体候选体。常用欧氏距离聚类(Euclidean Cluster Extraction)或密度基聚类算法(DBSCAN)来完成这一操作。欧氏距离聚类即对每个点找一定半径内的“邻居”,把相互可达的一组点归为一类;这个方法速度快、实现简单,是PCL中的标准实现,但对参数(邻域半径与簇的最小点数)敏感,且在目标近距离相互接触或在高密度背景中容易把多个物体合并。DBSCAN更能处理非球形簇和噪声,但计算量通常更大些且参数选择也不容易自动化。工程上常会结合基于扫描线的分割(对激光雷达的每个水平环做断点检测,适合车道场景)与欧氏距离聚类,以兼顾速度与分离能力。PCL在这方面有成熟模块可直接调用。
对每个聚类,需要拟合一个三维包围框并做分类。包围框可以是轴对齐的(AABB),也可以是朝向框(oriented bounding box),后者在车道场景下更实用,因为车辆通常朝某一方向排列。用最小二乘法或PCA(主成分分析)可以快速估计簇的主方向并生成朝向框。传统方法会为每个簇提取如尺寸、点密度、形状直方图(例如基于表面法线的特征)、高度分布等若干几何特征,然后用简单分类器(SVM、随机森林)判断是车、人、还是其它障碍物。这样的方案在样本较少、计算资源受限时仍然有优势,且对解释性好(你能看到每个特征为什么分错)。不过,手工设计特征往往难以覆盖如遮挡、变形或车内空隙反射导致的点云断裂等复杂的现实变化。
技术难点及解决方案
近几年深度学习直接作用于点云的技术迅猛发展,带来了更高的准确率与更少的手工工程量,但也引入了对标注数据与算力的高需求。点云深度方法大致分为三类体系,即点级方法(point-based)、体素方法(voxel-based)和柱/鸟瞰融合方法(pillar/BEV)。PointNet是点级方法的开山作,它直接接受原始点集作为输入,通过对点做共享MLP(即对每点同样的多层感知器)然后做全局池化来获得不受点排列影响的全局描述,这使得网络能直接处理不规则点集并完成分类/分割任务。PointNet的思想后来被扩展为PointNet++以处理局部结构,成为点云处理的重要基石。
但是在自动驾驶场景的“实时检测”任务上,把原始点云直接送进点级网络在计算上不够高效,因此有方案提出把点云先转为规则张量的做法。VoxelNet把点云分成体素(3D voxel),在每个体素内部用一个小网络(VFE)把点集合编码成固定维表示,再把体素化的特征用卷积网络去做检测;这种方法兼顾了点的细节与网络的并行计算。SECOND在VoxelNet的基础上引入了稀疏卷积(sparse convolution),大幅加速了稀疏体素的卷积计算,使得体素方法在速度与精度之间达到更好平衡。PointPillars则提出先把点云投影到竖直的“柱”(pillar)上,生成二维栅格上的每格特征图,然后用常规的二维卷积做后续处理,这种设计把三维问题变成了二维卷积问题,极大提高了速度且在基准上表现良好,成为了广泛采用的折中方案。上述这些端到端深度检测方法在公开基准(例如KITTI)上推动了性能的显著提升,但也带来了对大量带标注点云的依赖以及对推理算力的要求。
模型训练与部署带来的一系列工程问题同样需要解决。首先是数据标注与数据增广,点云标注成本高(需要对3D包围框进行精确标注),而且不同激光雷达型号的点密度、视场不同,训练的模型在不同传感器或场景间迁移性差。因此常用的做法包括仿真数据增强、把点云投影到BEV(鸟瞰)或结合相机图像做多模态训练,以及对训练样本做尺度/旋转/点丢弃等仿真噪声增强。其次是类不平衡问题,道路场景中车辆远多于行人或骑行者,训练时容易偏向多数类,需要用采样、损失加权或在线难例挖掘(hardnegativemining)来缓解。再有就是实时性问题,在车规级平台上,算力受限时必须在模型精度与延迟间做折中,常见策略是先用轻量级的点云前处理快速生成高召回候选,再用较重的二次分类器精判,或者把检测模型做蒸馏、量化以降低延迟。
环境与天气条件对激光雷达影响也要认真对待。雨、雪、雾会降低回波强度并引入虚假散斑,导致点云噪声增多与远距目标丢失。激光雷达也会受到表面材料(高反射或吸光材料)与玻璃的影响,造成点云孔洞或反射假点。在这些情况下,简单的几何阈值往往不再可靠,使用多时刻融合(temporal smoothing)、运动补偿(因为旋转式激光雷达在扫描期间平台可能已移动,需做去畸变)、以及与相机/毫米波雷达的传感器级融合变得必要。运动补偿通常依赖IMU/里程计信息,将点云从逐点时间戳还原到同一参考时刻,减少由于车辆运动带来的形变,这在高速行驶或旋转扫描器(VLP/Velodyne)场景下尤其重要。
在检测以外,跟踪(tracking)是保障系统稳定感知的关键环节,把逐帧检测到的包围框做数据关联,维持目标ID与轨迹,用卡尔曼滤波(标准卡尔曼、扩展卡尔曼或无迹卡尔曼)、匈牙利算法做帧间匹配,或使用基于轨迹的ReID特征做关联,都能显著降低错检/漏检带来的瞬时决策风险。对速度估计和轨迹预测的精度将直接影响规划与决策模块,因而有方案中会把跟踪作为检测后必要且轻量的模块来部署。
那如何评估检测效果?
常见指标有基于交并比(IoU)计算的平均精度(mAP)、不同距离下的召回率与误报率、以及延迟(从点云到检测结果的时间)。公认的公开基准如KITTI提供了标准化的测试集与评价方法,很多算法都以KITTI上的3D检测成绩作为对比参考,但要注意KITTI的采样和标注有其偏向(比如以车辆为主、场景集中在城市道路),在其它场景(高架、高速、乡村)模型表现会有所不同,因此工程验证要覆盖目标部署环境。
在工程实践中,有些组合策略往往更稳妥,如先用快速的经典方法做高召回候选(比如基于体素栅格+Euclidean clustering得到一批候选簇),再把这些候选与相机的二维检测或深度模型的分类头做融合判断;或者在计算资源允许时直接部署端到端的深度检测模型(例如PointPillars、SECOND),并配合轻量级后处理(非极大值抑制NMS、跟踪)以保证稳定输出。若项目面向量产或车规级应用,还需要考虑模型的压缩、定点化,以及在不同硬件(CPU、GPU、DSP、NPU)上的推理性能测试。
再来说一说细节与容易出错的地方,第一,地面分离阈值与栅格分辨率是两个最常被调坏的参数,若设置不当会把低矮障碍误判为地面或把地面碎点误判为障碍;第二,聚类半径和最小簇大小直接决定了是否能分清相邻车辆或保留行人这样的小目标;第三,点云的畸变补偿若忽视,会在转弯或不均速行驶时导致连续帧匹配失败;第四,强度(intensity)通道往往被低估,实际上对区分玻璃/反光物体与真实实体非常有用,应在特征或网络输入中加以利用;第五,远距离目标常常只有极少点,深度学习模型容易忽视,这时需要在训练时做专门的难例增强或在感知系统层面上把远近分成不同的处理通道以提高远距召回。
如果你在团队内做点云检测,需要尽可能构建多样化的标注集,覆盖不同传感器、不同视距、昼夜、雨雪等天气,并利用半自动标注工具(例如基于轨迹传播的批量标注)来减低人工成本。数据增强也非常重要,随机旋转(绕竖轴)、尺度变换、随机删除点(模拟点丢失)、以及把labeled objects插入不同场景(拼接增强)都是常用技巧,能显著提升模型的鲁棒性。
再谈深度学习的一些工程取舍,点级网络(PointNet/PointNet++)对小目标与细节敏感,但在大范围场景上计算成本高;体素/稀疏卷积方法在速度上更易优化(稀疏卷积可以在稀疏体素上高效运算),且更容易与现有的卷积加速库对接;pillar/BEV方法在速度和工程化上最容易落地,因为BEV表示可以直接利用二维卷积网络的成熟生态并与相机BEV或高清地图数据对齐。实际产品中常把这些方法做成多级架构,即轻量级快速检测作为预判,严格检测作为确认,跟踪模块串联保证输出稳定。
未来发展方向
未来,有几个方向值得关注。传感器融合会越来越普遍,相机能提供丰富的语义信息和颜色,对识别类别很有帮助;毫米波雷达对恶劣天气更稳健,能弥补激光雷达在雨雪的不足。在模型相关的技术中,半监督学习、弱监督和仿真数据(合成点云)将缓解标注瓶颈;同时,Transformer与大模型思路正在向点云领域扩展,尝试用更通用的表示去整合多模态信息。工程上则会更多地把鲁棒性(对天气、对传感器变化的稳定性)作为首要考量,而不仅仅是单一基准分数。
最后给出一段落式的实践建议,如果你正在起步做点云障碍物识别,建议先实现一个稳定的经典流水线,即点云去噪→地面分离(栅格或RANSAC)→欧氏距离聚类→几何特征分类→跟踪。用这套流程你可以在很短时间内得到稳定可用的检测结果,便于和规划/控制联调。同时并行开展基于PointPillars或VoxelNet的深度模型开发,把深度模型当成第二阶提升手段;在数据方面优先建设多场景标注集并做强数据增强策略;在部署时重视延迟测试与模型压缩(量化、蒸馏)。对于复杂环境(隧道、雪天、高速)尽量引入多传感器融合和时间域信息以提升鲁棒性。
-
激光雷达
+关注
关注
975文章
4283浏览量
193808 -
自动驾驶
+关注
关注
790文章
14473浏览量
172405
发布评论请先 登录
自动驾驶激光雷达可以安装在哪些位置?
自动驾驶中超声波雷达、激光雷达、毫米波雷达有何区别?

决定自动驾驶激光雷达感知质量的因素有哪些?

自动驾驶只用激光雷达进行感知会有哪些问题?
自动驾驶激光雷达之间会相互干扰吗?
激光雷达在自动驾驶领域中的优势

爱普生高精度车规晶振助力激光雷达自动驾驶

激光雷达技术:自动驾驶的应用与发展趋势

禾赛激光雷达助力宝马智能工厂自动驾驶
激光雷达光电组件的AEC-Q102认证:保障自动驾驶硬件的可靠性与品质

激光雷达在自动驾驶中的应用
激光雷达与纯视觉方案,哪个才是自动驾驶最优选?
物联网系统中的自动驾驶的“眼睛”_纯固态激光雷达

评论