端到端单网络实现3D检测、跟踪与运动预测:Fast and Furious方案解析
做自动驾驶感知的朋友对“检测、跟踪、预测”这三个词应该再熟悉不过了。过去几年大家习惯的做法是把它拆成三个独立模块先做3D目标检测再按帧关联做多目标跟踪最后在轨迹基础上预测未来运动。这套流程本身没问题问题在于每一级都在增加延迟和误差传感器数据从输入到出结果可能要经过三四个网络的串行处理。而“Fast and Furious: 单个卷积网络进行实时端到端3D检测、跟踪和运动预测”这个项目思路直接砍掉中间环节——用单个卷积网络同时输出检测框、跟踪关联信息和未来运动轨迹端到端一次搞定。这套方案解决的核心痛点很明确实时性、一致性和工程复杂度。它对传感器原始数据进行单次前向推理直接得到“当前有哪些目标、上一个时刻的同目标是谁、未来1到3秒会运动到哪里”整套流程跑在一块消费级GPU上也能达到实时的帧率。适合正在做自动驾驶感知系统架构、多任务模型设计或者想了解端到端感知方案的技术人员参考尤其适合那些受够了模块级联带来的延迟累积和数据对齐头疼问题的朋友。1. 为什么敢把检测、跟踪、预测压进一个网络1.1 级联管线延迟和误差的放大器先回顾传统方案的问题。典型的三级架构是3D检测网络输出当前帧所有目标的三维框跟踪模块无论是基于检测结果的匈牙利匹配还是卡尔曼滤波将框关联到历史轨迹然后预测模块基于轨迹历史预测未来位置。每一级都有独立的输入输出和独立的数据表示。我实际调试过这样的系统最让人头疼的不是单个模块的效果而是模块之间的“接口协议”。跟踪模块必须知道检测框的置信度怎么过滤预测模块要等跟踪模块确认轨迹ID才敢开工一个环节抖动后面全跟着抖。更关键的是整个pipeline推理时间是可加的检测V100上跑12ms跟踪加预测再跑8ms看起来20ms还好但加上前后处理、数据拷贝、多帧缓存实际端到端轻松超过30ms。对于高速场景下需要5Hz到10Hz输出频率的规控模块这套东西经常成为瓶颈。1.2 单网络结构从“接力赛”到“团体赛”“Fast and Furious”这个项目选择用单个网络完成全局任务本质上就是把接力赛变成团体赛。团队里的每个成员任务头共享同一个骨干网络的感知特征。检测、跟踪、预测看到的是同一份特征图而不是各自处理一份中间结果。这么做带来两个直接好处。第一特征复用极大降低了计算开销一个骨干网加三个轻量级任务头单帧前向推理时间可以控制在10ms到15ms量级。第二任务之间天然共享语义信息——网络在提取特征时就知道“这个位置有一个正在运动的目标”检测分支和预测分支不再需要从零开始协同效率远高于级联。选择卷积网络而不是时下流行的Transformer是这个项目一个很有意的权衡。Transformer结构在长距离特征建模上有优势但计算复杂度高、部署门槛高在追求实时性的场景里卷积网络配合恰当的局部感受野设计能在精度和速度之间拿到一个更好的平衡点。2. 核心设计思路一个网络如何同时干三件事2.1 中间表示把3D世界压进鸟瞰图要让单个网络同时处理3D检测、跟踪和预测首先要解决“用哪种中间表示”的问题。在这个项目里选择的是鸟瞰图BEVBirds Eye View特征——把3D空间的点云数据投射到地平面上用2D的网格特征图表达3D世界。为什么选BEV而不直接处理原始点云主要是效率和感受野的平衡。点云本身是无序的稀疏数据直接上3D卷积计算量极大而BEV把它二维化之后可以用非常成熟的2D卷积骨干网络做特征提取。同时BEV是“站在上帝视角”看场景目标和目标之间的几何关系清晰道路边界、车道线这些结构化信息也能自然融合进来——这对后续的跟踪关联和运动预测非常有帮助。具体做法上网络会对每一帧输入的稀疏点云做体素化通过一个轻量级的稀疏卷积编码器把稀疏的3D体素逐步聚合成稠密的BEV特征图。这一步输出的BEV特征图分辨率一般取0.1米到0.2米每像素感知范围覆盖前方100米、左右各25米左右相当于把物理空间规整成一张“可学习的矢量地图”后续所有任务头都在这张图上工作。这里有个实操细节BEV图不是随便投影的。如果只做简单的Z轴压缩小目标和垂直方向上的重叠信息会丢失。我建议在构建BEV时保留高度方向上的多通道特征堆叠让网络自己学会“哪个高度的特征对当前任务更重要”实测下来对远处行人和卡车边缘的检测准确率有明显改善。2.2 3D检测头回归框的同时做目标中心提取检测头的设计遵循了主流中心点检测的思路要在BEV特征图上为每个可能的目标位置预测热度图heatmap、目标尺寸和朝向角。热度图的作用是回答“哪里大概率有目标”网络在空间维度上做softmax分类每个像素的输出值表示该位置是目标中心的概率。这个过程很像语义分割但目标是区分前景物体和背景而不是逐像素分类。检测头最终会在热度图上做局部极大值提取这一步相当于NMS非极大值抑制但因为是在特征图上直接做省去了传统检测方案中大量的候选框后处理推理速度明显更快。3D框回归包含三个核心分量中心点坐标x y z其中z代表目标距离地面的高度可帮助区分目标类型和遮挡关系尺寸长、宽、高直接用L1损失回归相对预定义类别先验的偏差朝向角使用多模态角度分类加回归的方式避免角度突变带来的损失不收敛问题这几个量在训练时都做了残差回归处理降低网络的学习难度。实际训练中大量实验证明把朝向角做2维嵌入编码sin、cos比直接回归一个角度值要稳定得多这是实操中容易被忽略但特别影响最终精度的一个点。2.3 跟踪与预测时间维度的“捆绑销售”单帧网络好做难的是把时间维度融合进去。这个项目处理跟踪的思路不是像传统方法那样单独建立运动模型做关联而是把历史信息直接作为输入注入网络让网络“看到”目标是怎么过来的。做法是这样的不是只输入当前帧的点云而是把最近10帧的感知结果按时间顺序拼接成一个时间维度上的点云序列然后通过3D稀疏卷积在“空间时间”维度上同时做特征提取。这样一来BEV特征图的每一个位置都携带了这个小区域在过去一秒里的动态信息。目标当前帧在哪里、上一帧在哪里、运动方向是什么全部被编码在特征里。跟踪分支基于这些时序特征直接预测每个目标的ID嵌入向量。实际关联时不需要像传统方法那样新建卡尔曼滤波器而是在特征空间做最近邻匹配用余弦相似度判断两帧目标是否属于同一个对象速度和稳定性都更好。运动预测分支则基于同样的时序特征直接输出目标在未来1到3秒内的多条候选轨迹。每条轨迹包含若干个连续的航点用于描述时间序上的运动趋势。轨迹不只输出一条而是同时预测多条轨迹及其对应概率让下游规控模块能够对多种驾驶策略进行预期判断。因为是端到端训练预测分支能够自然地理解“运动片段是由什么驾驶行为产生的”训练时不会出现类似“车辆急刹车”这种物理上不合理的预测结果。3. 从训练到部署实操层面的关键环节3.1 训练数据组织单帧标注怎样变成时序目标训练这样的端到端模型首要难题是数据。传统3D检测数据集通常只有单帧的3D框标注而“Fast and Furious”的跟踪和预测分支要求知道跨帧的ID对应关系和未来轨迹。所以训练数据的组织策略就成了项目的关键竞争点。我的经验是两步走。第一步在原始数据集中跟踪已知的帧间ID来生成时序片段按时间窗口截取10帧左右为一个训练样本。第二步对每一个目标使用最后几帧的真实位移来拟合运动趋势作为预测分支的监督目标。这样操作下来原本只有检测框的数据集也能训练出靠谱的跟踪和预测能力不需要额外大规模标注成本。训练时对每个样本要做统一的坐标系对齐把历史帧的点云数据全部变换到当前帧的坐标系下。这一步看似不起眼实际上很关键——如果坐标系没对齐网络从历史帧学到的是“目标在漂移”而不是“目标在移动”跟踪和预测效果都会崩。3.2 损失函数组合三类任务如何平衡这是整个项目里我认为最值得展开的部分。多任务网络最怕的不是单个任务训不好而是任务之间互相打架。检测、跟踪、预测三个分支的损失量级和收敛速度差异非常大直接相加求和模型一定会变成“只顾预测、不顾检测”的偏科状态。我用的损失组合方式是这样检测分支分类用Focal Loss抑制背景样本回归用Smooth L1 Loss跟踪分支用三元组损失拉近同一ID的嵌入、推远不同ID的嵌入辅助用分类式ID预测做兜底预测分支对每条预测轨迹先计算和真实轨迹的终点误差选择最接近的一条作为监督对象其他轨迹不参与梯度更新只做概率监督任务权重上检测分类和回归的总权重要占到六成以上跟踪和预测压到三到四成。这个比例根据我的调参经验训练初期检测任务收敛速度最快随着训练推进再逐步提高跟踪和预测分支的权重让网络精修细化的空间更多。训练中另外一个非常重要的小技巧是“分阶段调整学习率”。我建议把训练过程分成两段前段用正常学习率训练整个网络末端把跟踪分支和预测分支的学习率降到全局的十分之一防止后面阶段大步长再次打乱前面收敛好的特征空间。做过几次对比实验这个策略能稳定提升最终跟踪准确率3到5个百分点。3.3 实时性优化在GPU上跑满帧率的落地策略这个项目名叫“Fast and Furious”实时性是它的核心标签。单网络架构在计算量上已经占了便宜但要把理论上的实时性能真正落到处GPU上还有几个关键的工程优化要做。第一稀疏卷积是不可跳过的选项。点云数据天然稀疏如果把它当作密集数据做传统卷积90%以上的计算都在处理空体素浪费极大。子流形稀疏卷积submanifold sparse convolution能只对有效的体素位置做计算可以在保持特征质量的同时把FLOPs下降一个数量级。第二任务头的参数要轻量化。3D检测头只有几十个通道的卷积跟踪和预测头更是全连接加少量卷积层总参数占比不到整个网络的十分之一。这样前向推理的绝大部分时间都花在骨干网络上梯度计算和推理任务也更聚焦。第三工程部署阶段建议采用TensorRT做FP16推理实测下来在我的测试平台上单帧推理时间能从15ms降到9ms左右。如果想进一步压榨性能可以做INT8量化但要仔细校准因为量化对检测的回归精度影响比较敏感如果没有足够样本不建议直接上。4. 踩坑记录一些看似不起眼却很致命的细节4.1 多任务头之间的梯度冲突项目中遇到过的最大坑是检测分支和预测分支在训练一定阶段后开始在空间特征上产生冲突。检测分支关注目标边缘的锐利特征而预测分支则需要更加平滑和全局的运动特征。两者共享骨干网络的底层卷积时一定程度会存在梯度方向不一致的情况导致网络反复震荡。解决思路有两个层面。第一层网络结构上给不同任务头引入一定的“独立性”共享Block和专用Block分离让跟踪和预测分支在骨干网络的中后段开始有自己的支路减少梯度传播的相互干扰。第二层训练策略上采用“交替优化”的思路——每个batch训练时只让一个任务头反传梯度其余任务头保持不动这样每轮迭代的梯度目标单一且明确收敛更稳定。我后来干脆直接用梯度裁剪加局部梯度反向更新实测在多种数据集上都有明显的稳定性和精度提升。4.2 小目标与远距离目标的漏检BEV图上每个像素映射到物理空间有一个固定的分辨率目标太小或者距离太远时在BEV特征图上可能只占据一两个像素检测头很难抓到有效特征。这个缺陷在纯点云方案的车型上有一定普遍性。我针对这个项目总结的优化路数有这么几条在BEV编码器侧做一个轻量级的多尺度融合模块把高层语义信息回灌到低层空间分辨率特征上增强小目标特征表达。增加点云原始高分辨率特征的旁路连接让检测头除了BEV特征外还直接感知目标的原始几何结构。训练策略上用数据增强时刻意多生成一些远距离目标样本平衡网络对不同距离段的注意力。几招组合下来50米以上的目标召回率能维持在一个很高的水平这在纯视觉方案里很难做到。4.3 运动预测“静态魔怔”问题训练运动预测分支时会遇到一个特有的现象网络学“滑水”。因为训练数据里大部分目标在绝大部分时间都是静止的停着的车、静止的行人预测几条轨迹全部输出“原地不动”也能在平均误差上拿到比较低的损失值。最后得到的是一个只会预测静止、一到复杂场景就抓瞎的模型。要破这个局我的经验是两个方向并重。第一训练时对样本做运动类型平衡确保包含足够多的直行、转弯、起步和刹停片段按运动幅度过采样。第二损失函数给运动目标的误差更高权重让“该动却预测不动”的代价远大于“不该动却多动了”的代价。模型在持续调整后才能逐步形成基于目标运动意图进行真实轨迹预测的能力。除了训练策略推理阶段我也会加一个轻量级的运动合理性校验如果预测轨迹分布和目标历史运动趋势差异过大自动回退到一个基于历史位移的简单外推结果。这个兜底逻辑在处理场景切换或点云丢失时效果非常好。5. 传感器配置适配与后续扩展方向5.1 不同的传感器不同的特征入口这套端到端方案在设计时以点云为主要输入但架构本身对传感器配置有比较好的兼容性。如果车内只有摄像头可以把图像输入改造成伪点云或者直接用2D卷积做BEV投影跟踪和预测分支的流程不需要大改只是检测精度会受深度估计精度的影响整体性能会有一个档位下降。如果传感器配置是激光雷达加摄像头融合策略我建议在BEV特征层面做早融合图像通过一个透视到BEV的变换模块变成图像BEV特征再和点云BEV特征逐元素相加或做通道拼接送入同一个骨干网络。这个做法能利用图像的语义信息补全远处稀疏区域的感知同时不影响前面介绍的实时性设计。需要留意的是多传感器融合意味着系统的标定误差门槛更高——几个毫弧度的位姿偏差在50米外就会被放大成明显的几何错位。端到端训练对这样的错位具备一定的容错性但校准工作仍然不可跳过。5.2 从Demo到产品补哪些课才能上车单一网络跑通容易真正上车的难点在于系统的可解释性和安全冗余。项目目前的输出是目标框、ID和一组未来的轨迹点信号固然丰富但对于自动驾驶的规控模块来说还需要有置信度、遮挡状态、目标的运动意图属性甚至目标分类的细分轿车、卡车、骑行者、行人这些属于产品化必须补充的数据维度。另外一个从Demo到产品的关键问题是鲁棒验证。端到端网络虽然部署简单但训练数据覆盖不到的长尾场景——比如浓雾天气、极端逆光和异形车辆——处理起来比模块级联更棘手。模块化系统可以单独替换检测模块做针对性优化单网络方案里一个参数动全身所以必须要建立体系化的场景库测试和持续数据回流机制用真实路采的罕见场景数据定期微调模型。即便如此我认为单网络端到端仍然是未来感知架构的趋势。它让系统更简单、延迟更低、时序一致性更好工程维护的点也更少——这些在实际量产项目里的价值非常大。6. 实际使用的补充心得最后补一些个人使用过程中的小经验。用这套架构做项目不要一上来就追求最强的精度指标先搭通pipeline、跑通实时性验证再逐步替换模块和调整训练策略更容易稳步推进。多任务权重、特征尺寸这类超参数建议每次只改一个维度方便定位性能变化的真实来源。对于刚接触这个项目的朋友我建议先在已有的检测数据集上把检测分支跑稳再引入跟踪和预测分支。一上来直接训练三任务网络的设计和调参难度会翻很多倍很难定位问题到底出在哪一个环节。先单任务、后多任务、再联合调优这个顺序能帮你少走不少弯路。这个方向后续值得探索的扩展点也不少。比如把高精地图或者车道线信息作为先验输入注入BEV特征让预测分支能“看懂”道路结构对运动的影响比如在时间序列建模上引入更高效的时序注意力模块替代目前简单的点云序列拼接操作再比如把端到端的检测-跟踪-预测结果直接连接到规划模块做联合优化训练让感知和规控的边界也进一步模糊。这些探索都有很好的工程和应用价值值得持续投入时间。