尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

概率性3D多模态多目标跟踪:从传感器到轨迹的工程实践

概率性3D多模态多目标跟踪:从传感器到轨迹的工程实践 1. 从传感器到轨迹概率性3D多模态多目标跟踪到底在解决什么问题自动驾驶系统里感知模块的输出从来不是终点它只是给下游的规划控制模块递上了一张“当前时刻的环境快照”。但车是在连续运动的规划模块真正需要的是“每个目标从哪来、到哪去、接下来可能出现在哪”。把逐帧的检测结果串成带身份标识的连续轨迹这就是多目标跟踪要干的活。我第一次接触3D多目标跟踪是在一个园区低速物流车的项目上。当时用的是纯激光雷达方案检测器输出的是3D包围框跟踪器用最简单的卡尔曼滤波加匈牙利匹配。在空旷路段跑得挺好但一进到有遮挡的交叉路口轨迹ID就开始疯狂跳变——一个目标被遮挡几帧后重新出现跟踪器就把它当成了新目标。更麻烦的是当激光雷达点云稀疏的时候检测框的尺寸和朝向估计本身就有很大方差卡尔曼滤波的观测更新直接把这种噪声吃进去导致轨迹抖动严重。这个问题的根源在于传统跟踪方法把检测结果当作确定性观测来处理但实际上3D检测器输出的包围框是有不确定性的。点云稀疏区域、远距离目标、部分遮挡场景下检测框的位置、尺寸、朝向都可能存在较大误差。如果跟踪器不感知这种不确定性就会把噪声当成真实运动轨迹质量自然好不了。概率性3D多模态多目标跟踪的核心思路就是让跟踪器显式地建模和传播不确定性。这里的“概率性”体现在几个层面检测框本身带有协方差估计运动模型预测也带有过程噪声数据关联时考虑概率分布之间的相似度而不是简单的欧氏距离。“多模态”则有两层含义一是传感器模态的多样性激光雷达点云、相机图像、毫米波雷达各自提供不同视角的观测二是运动模式的多模态性一个目标可能匀速直行也可能突然变道或刹车跟踪器需要维护多个运动假设。适合读这篇内容的人应该是对自动驾驶感知链路有一定了解写过或者调过至少一个跟踪器但可能在遮挡处理、传感器融合、轨迹管理这些环节踩过坑的工程师。如果你正在用ROS2搭感知系统或者在做多传感器融合的课题这里面的很多细节可以直接参考。2. 整体架构设计为什么这样搭比纯滤波方案更稳2.1 从检测到跟踪的数据流拆解一个完整的概率性3D多模态多目标跟踪系统数据流大致是这样的原始传感器数据经过预处理和时间同步后分别送入各模态的3D检测器。激光雷达检测器输出带协方差的3D包围框相机检测器输出2D框加深度估计毫米波雷达输出距离和速度测量。这些异构的检测结果进入一个统一的空间进行关联和融合。这里有个关键设计决策是在检测层面融合还是在跟踪层面融合。检测层面融合比如把点云和图像特征拼在一起送进一个网络理论上能利用互补信息但实际工程中面临标注困难、模态缺失时系统降级等问题。跟踪层面融合则更灵活每个模态独立检测在跟踪器里做概率关联。我倾向于跟踪层面融合原因是第一各模态检测器可以独立迭代升级不会互相拖累第二某个模态失效时系统可以优雅降级第三跟踪器里做融合可以显式建模各模态的不确定性数学上更清晰。时间同步这块必须单独拎出来说。激光雷达通常10Hz相机30Hz毫米波雷达20Hz而且各传感器的时间戳来自不同的时钟源。如果不做硬件触发同步至少要在软件层面做时间对齐。我的做法是维护一个滑动时间窗口把各模态的检测结果按时间戳插值到统一的时间基准上。对于运动补偿用上一帧的跟踪结果做短时预测把检测框对齐到同一时刻。2.2 概率性建模的三个层次概率性建模不是一句空话它需要落实到具体的数学表达上。第一个层次是检测不确定性建模。3D检测器输出的包围框通常有7个自由度中心点xyz、尺寸lwh、偏航角。每个自由度都有估计误差而且误差之间可能存在相关性。工程上常见的简化是假设各维度独立用对角协方差矩阵表示。更精细的做法是从检测网络里直接回归协方差或者用蒙特卡洛 dropout 采样来估计。第二个层次是运动模型的不确定性。匀速模型和匀加速模型是最常用的但真实交通场景中目标的运动模式会切换。我通常用交互式多模型IMM来维护多个运动假设每个模型有自己的过程噪声协方差。模型概率根据观测似然在线更新这样目标从匀速切换到转弯时跟踪器能自动调整权重。第三个层次是数据关联的不确定性。匈牙利算法做二分图匹配时代价矩阵的元素是检测框和预测框之间的距离。概率性方法用马氏距离代替欧氏距离考虑协方差的影响。更进一步的用概率数据关联PDA或者联合概率数据关联JPDA来处理一个检测框可能对应多个跟踪目标的情况。JPDA的计算量随目标数指数增长实际工程中常用近似算法或者门限技术来剪枝。2.3 多模态融合的工程取舍多模态融合听起来很美但工程落地时要面对几个现实问题。第一个是标定误差。激光雷达和相机之间的外参标定如果有0.5度的偏差在50米距离上就会产生约0.4米的投影误差足以让关联失败。我的经验是外参标定后一定要用实际场景做验证比如在已知距离放置标定板检查投影对齐情况。第二个是模态缺失的处理。相机在夜间或者强光下可能失效激光雷达在雨雾天性能下降。跟踪器需要能够感知各模态的置信度并在融合时动态调整权重。一个实用的做法是维护各模态的检测置信度历史当某个模态连续多帧置信度低于阈值时自动降低其融合权重。第三个是计算资源分配。多模态融合的计算量不是简单相加关联和融合步骤的复杂度随目标数增长。在嵌入式平台上我通常把激光雷达作为主模态相机和毫米波雷达作为辅助。辅助模态只在主模态检测置信度低或者目标处于遮挡区域时才激活融合这样既保证了精度又控制了算力。3. 核心细节解析从包围框协方差到轨迹管理3.1 3D检测框的不确定性从哪来要建模检测框的不确定性首先得知道它从哪来。激光雷达点云检测的不确定性主要来自三个方面点云稀疏性、遮挡和量化误差。远距离目标反射回来的点少包围框的尺寸和朝向估计方差大。部分遮挡时可见点只覆盖目标的一部分中心点估计会有偏移。激光雷达的角分辨率是固定的距离越远相邻激光束之间的间距越大点云越稀疏。相机检测的不确定性则主要来自深度估计误差。单目深度估计本身就不准双目或者多目在远距离上误差也会放大。毫米波雷达的角度分辨率较低但径向速度测量很准。这些特性决定了不同模态在不同距离和场景下的可靠性不同。工程上估计协方差的实用方法有几种。一种是从检测网络的输出直接回归比如在检测头加一个分支预测每个维度的方差。另一种是用采样方法对检测框做多次扰动统计扰动后的分布。还有一种是用历史跟踪结果反推如果某个目标连续多帧的检测框波动大就增大其协方差估计。我通常组合使用网络回归提供先验历史统计做在线修正。3.2 马氏距离与关联门限的实操计算数据关联是跟踪器的核心而关联的核心是距离度量和门限。欧氏距离不考虑不确定性马氏距离则把协方差矩阵纳入计算。公式是 d² (z - Hx)ᵀ S⁻¹ (z - Hx)其中S是创新协方差等于H P Hᵀ RP是状态协方差R是观测协方差。这个公式看起来简单但实操中有几个坑。第一个是S矩阵可能接近奇异直接求逆数值不稳定。我的做法是加一个小的对角正则项或者用Cholesky分解来求解。第二个是门限的选取。理论上卡方分布可以给出置信区间对应的门限值但实际数据往往不满足高斯假设。我通常先用理论值做初筛然后根据实际场景的关联正确率做调整。城区场景目标密集门限要收紧高速场景目标稀疏门限可以放宽。关联门限的另一个作用是控制计算量。只对门限内的检测-跟踪对计算代价门限外的直接设为无穷大。这样可以把关联矩阵的稀疏度提上去匈牙利算法的实际运行时间会大幅下降。3.3 轨迹生命周期管理的经验参数轨迹管理看起来简单但参数调不好直接影响跟踪质量。一条轨迹从诞生到消亡要经历初始化、确认、维护、丢失、删除几个阶段。每个阶段的转换条件都需要仔细设计。初始化阶段新检测如果不在任何现有轨迹的门限内就创建一个 tentative 轨迹。这个轨迹需要连续几帧被关联上才能确认。确认帧数我通常设2到3帧。设1帧的话虚警太多设5帧的话真实目标出现后要等半秒才确认对自动驾驶来说太慢。维护阶段如果某一帧没有检测关联上轨迹进入丢失状态用预测值继续维持。丢失帧数的上限取决于场景。高速场景目标运动快丢失3帧后预测位置可能已经偏出很远我通常设2到3帧。城区低速场景可以放宽到5帧。删除阶段丢失超过上限的轨迹直接删除。但这里有个细节如果轨迹在删除前最后一帧的置信度很高可以把它标记为“休眠”而不是彻底删除后续如果同一位置出现检测优先尝试重新关联。这个技巧在遮挡场景下特别有用能显著减少ID跳变。4. 实操过程从零搭建一个概率性跟踪器4.1 环境准备与依赖安装我假设你已经在Ubuntu 22.04上装好了ROS2 Humble这是目前自动驾驶感知开发比较稳定的组合。核心依赖包括Eigen做矩阵运算、PCL做点云处理、OpenCV做图像处理。如果要用GPU加速关联计算还需要CUDA和cuBLAS。sudo apt install ros-humble-pcl-ros ros-humble-cv-bridge ros-humble-tf2-ros sudo apt install libeigen3-dev libpcl-dev libopencv-dev如果要做多模态融合还需要标定工具。我常用的是Autoware的标定包或者自己写一个基于棋盘格的标定脚本。标定质量直接决定融合效果这一步不能省。4.2 检测框协方差的在线估计检测器输出的包围框通常不带协方差需要自己估计。我的做法是在检测器后面加一个协方差估计模块。对于激光雷达检测用包围框内的点数、点云到框表面的距离、以及历史帧的检测波动来估计协方差。具体来说中心点位置的方差与点数和距离相关。点数越多中心点估计越准。距离越远点云越稀疏方差越大。我用一个经验公式σ² α / (N * ρ) β * d²其中N是点数ρ是点密度d是距离α和β是拟合参数。这个公式不是理论推导出来的是我在实际数据上拟合的但泛化性还不错。朝向角的方差与目标的对称性有关。车辆目标有明确的朝向点云分布能提供较强的约束。但行人或者骑行者对称性高朝向估计方差大。对于这类目标我通常把朝向角的方差设得大一些让跟踪器更多地依赖运动方向来推断朝向。4.3 多模态关联的代价矩阵构建多模态关联的代价矩阵构建是融合的核心。假设有M个跟踪目标、N个检测框、K个模态代价矩阵的维度是M×N每个元素是各模态代价的加权和。激光雷达模态的代价用3D马氏距离。相机模态的代价用2D框的IoU加上深度一致性检验。毫米波雷达的代价用径向距离和速度的差异。每个模态的代价都要归一化到0到1之间然后加权求和。权重的设定有两种方式静态权重和动态权重。静态权重根据经验设定比如激光雷达0.6、相机0.3、毫米波雷达0.1。动态权重根据各模态的置信度和目标距离调整。远距离目标激光雷达点云稀疏降低激光雷达权重提高相机权重。近距离目标则相反。这里有个实操技巧在计算代价之前先用各模态的关联门限做一次粗筛。只有至少一个模态的门限通过的检测-跟踪对才进入精细代价计算。这样可以把代价矩阵的稀疏度提上去计算量大幅下降。4.4 状态更新与协方差传播状态更新用扩展卡尔曼滤波EKF或者无迹卡尔曼滤波UKF。EKF计算量小但在强非线性场景下精度不够。UKF精度高但计算量大。我的选择是对于车辆目标用EKF因为运动模型接近线性对于行人和骑行者用UKF因为他们的运动模式更复杂。协方差传播要注意数值稳定性。P矩阵在多次迭代后可能失去正定性导致滤波发散。我的做法是每次更新后做一次对称化P (P Pᵀ) / 2然后检查特征值如果有负特征值就做修正。这个操作计算量不大但能显著提升长期运行的稳定性。过程噪声Q的设定也很关键。Q太大跟踪器对检测的信任度低轨迹滞后Q太小跟踪器对检测噪声敏感轨迹抖动。我通常根据目标类型和运动状态自适应调整Q。匀速运动时Q小机动时Q大。IMM框架下每个模型有自己的Q模型概率更新会自动调节。5. 常见问题与排查技巧实录5.1 轨迹ID跳变频繁怎么查ID跳变是最常见的跟踪问题。排查思路是从关联环节入手。首先检查关联门限是否过紧导致正确关联被拒绝。可以把门限放宽一倍看ID跳变是否减少。如果减少说明门限设置有问题需要根据实际数据的马氏距离分布重新标定。如果门限没问题检查检测框的协方差估计是否合理。协方差估计过大马氏距离被压缩不同目标的区分度下降协方差估计过小正确关联被拒绝。我的做法是统计关联成功和失败案例的马氏距离分布看是否有重叠区域。还有一个容易被忽略的原因是轨迹管理参数。确认帧数设得过高目标出现后要等好几帧才确认期间可能被其他轨迹抢走关联。丢失帧数设得过低遮挡几帧后轨迹就被删除重新出现时只能新建轨迹。这两个参数需要根据场景的遮挡频率和目标运动速度来调。5.2 多模态融合后精度反而下降这个问题我踩过坑。融合后精度下降通常是因为某个模态的标定有偏差或者权重设置不合理。排查方法是先单独跑每个模态的跟踪确认各模态独立工作时精度正常。然后逐步加入融合观察精度变化。如果加入某个模态后精度下降检查该模态的标定参数。用实际场景中的已知目标做验证比如在50米处放置一个标定物检查各模态检测框的投影是否对齐。标定误差超过阈值就需要重新标定。权重设置方面不要迷信静态权重。不同场景下各模态的可靠性不同。我的做法是维护一个在线评估模块用跟踪轨迹的平滑度和检测关联的连续性来评估各模态的贡献动态调整权重。5.3 计算资源不够用的优化策略概率性跟踪的计算量主要花在关联和滤波更新上。优化策略有几个方向。第一是降低关联矩阵的维度用门限做粗筛只对可能关联的检测-跟踪对计算代价。第二是用近似算法替代精确算法比如用贪心匹配替代匈牙利算法精度损失不大但速度提升明显。第三是并行化把不同目标的滤波更新分配到不同线程。如果是在嵌入式平台上还要考虑内存带宽的限制。协方差矩阵的存储和访问是内存密集型操作。我的做法是把状态向量和协方差矩阵用连续内存存储提高缓存命中率。另外对于远距离或者低置信度的目标可以降低更新频率比如每两帧更新一次中间帧只用预测。5.4 常见问题速查表问题现象可能原因排查方法解决思路ID跳变频繁关联门限过紧放宽门限观察变化重新标定马氏距离分布轨迹抖动严重过程噪声Q过小增大Q观察平滑度自适应调整Q遮挡后轨迹丢失丢失帧数上限过低增大上限观察根据场景调整融合后精度下降标定偏差或权重不当单独跑各模态对比重新标定、动态权重计算超时关联矩阵过大统计关联对数量门限粗筛、并行化远距离目标跟踪差检测协方差估计不准检查点云密度距离自适应协方差6. 从工程落地反推设计决策6.1 为什么不用端到端跟踪端到端跟踪是近年来的研究热点用一个网络直接输出轨迹。但在工程落地中我暂时没有采用。原因有几个第一端到端模型的训练需要大量带轨迹标注的数据标注成本极高第二模型的泛化性难以保证换一个城市或者换一个传感器配置模型可能就失效了第三出问题时难以排查你不知道是检测环节的问题还是关联环节的问题。概率性跟踪器的优势在于可解释性和可调试性。每个环节的输入输出都是明确的出问题时可以逐环节排查。参数可以针对场景调整不需要重新训练。对于量产项目来说这种可控性比理论上的最优性能更重要。6.2 传感器配置对跟踪策略的影响不同的传感器配置需要不同的跟踪策略。纯激光雷达方案下跟踪器主要依赖点云检测协方差估计从点云特性推导。激光雷达加相机的方案下相机可以提供类别和纹理信息帮助区分外观相似的目标。激光雷达加毫米波雷达的方案下毫米波雷达的速度测量可以直接用于运动模型初始化加快收敛速度。我做过一个对比实验在同一个场景下纯激光雷达方案的跟踪精度用MOTA衡量大约是0.75加上相机后提升到0.82再加上毫米波雷达后提升到0.86。但计算量也相应增加纯激光雷达方案在嵌入式平台上能跑30帧三模态融合只能跑15帧。工程上需要在精度和算力之间找平衡。6.3 仿真与实车的差异处理仿真环境下的跟踪器往往表现很好因为检测框干净、没有噪声。但实车环境下检测噪声、标定误差、时间同步误差都会影响跟踪性能。我的做法是在仿真中注入噪声来模拟实车条件。具体来说给检测框加上高斯噪声噪声方差根据实车数据统计得到。给时间戳加上随机抖动模拟同步误差。这样训练和调试出来的跟踪器迁移到实车时性能下降会小很多。实车调试时一定要记录原始数据和跟踪结果方便离线复现问题。我通常用rosbag记录所有传感器数据和跟踪输出然后用离线工具做回放和分析。这样可以在不占用实车资源的情况下反复调试参数。6.4 参数调优的优先级排序跟踪器参数很多全部调一遍不现实。我的经验是按影响程度排序关联门限 过程噪声Q 观测噪声R 轨迹管理参数 融合权重。关联门限直接影响数据关联的正确率是最敏感的参数。过程噪声Q影响轨迹的平滑度和滞后程度。观测噪声R影响滤波增益。轨迹管理参数影响ID切换和轨迹连续性。融合权重在多模态方案中才需要调。调参时用网格搜索加人工微调。先粗调确定大致范围再细调。每次只调一个参数观察指标变化。指标方面MOTA和MOTP是常用的但我更关注ID切换次数和轨迹碎片化程度这两个指标对下游规划模块的影响更直接。7. 一些踩坑之后的个人体会概率性3D多模态多目标跟踪这个方向理论文章很多但工程落地的细节往往藏在论文的缝隙里。我最大的体会是不要追求数学上的最优要追求工程上的鲁棒。一个理论上很漂亮的关联算法如果对参数敏感、对异常值不鲁棒在实际场景中可能还不如一个简单的贪心匹配。另一个体会是多模态融合的收益不是线性的。第一个模态通常是激光雷达贡献了大部分性能第二个模态相机带来显著提升第三个模态毫米波雷达的边际收益就小很多了。如果算力有限优先保证激光雷达模态的跟踪质量再考虑加相机。最后跟踪器的输出是给规划控制用的不是给评测指标用的。规划模块更关心轨迹的连续性和预测的准确性而不是MOTA高了几个点。所以在调参时我经常让规划同事来坐副驾实际跑几圈看他们觉得哪些场景下跟踪结果“不舒服”。这种主观反馈往往比离线指标更能发现真问题。
返回列表