4. 感知算法开发流程

感知算法从想法到量产上车,并不是“选个网络、跑个训练”这么简单。它更像一条闭环流水线:需求定义目标,数据决定上限,标注提供监督,训练拟合规律,测试暴露问题,迭代再把问题转化为下一轮需求。任何一环断裂,都会在实车表现中以漏检、误检、抖动或延迟的形式暴露出来。本节围绕这条闭环,讲清每个阶段的输入、输出与工程要点。

一、核心原理:以需求为锚的闭环迭代

感知算法的本质是把传感器原始信号映射为对自车周围环境的结构化描述:目标类别、位置、尺寸、朝向、速度、可行驶区域、车道线等。这个映射的精度与鲁棒性,取决于三个约束:需求边界、数据分布、算力预算。需求边界决定“要检测什么、在什么场景下、达到什么指标”;数据分布决定模型见过多少真实世界的长尾;算力预算决定模型规模与推理时延的上限。

因此开发流程不是单向瀑布,而是“需求→数据→标注→训练→测试→迭代”的螺旋上升。每一轮迭代都应回答一个问题:当前模型在哪个场景、哪类目标、哪个指标上不达标?这个问题的答案,来自测试环节的量化评估,而不是主观感觉。

感知算法开发闭环流程 需求分析 ODD / 指标 / 算力 类别清单 数据采集 多传感器 / 场景库 时间同步 / 标定 数据标注 3D框 / 语义 / 跟踪 质检 / 一致性 模型训练 损失 / 增强 量化 / 蒸馏 测试验证 离线 / 回放 / 实车 指标 / 场景切片 问题迭代 失败场景挖掘 数据回流 / 重训 需求修正 / 场景补充 关键工程约束 • 需求:明确 ODD、目标类别、指标阈值(mAP / 召回 / 时延 / 误报率) • 数据:覆盖长尾场景,保证时间同步、标定精度与标注一致性 • 测试:离线指标达标 ≠ 实车达标,必须做场景切片与回归验证

二、方法流程:六个阶段的输入与输出

把闭环拆开看,每个阶段都有明确的交付物。下表给出量产项目中常见的阶段定义与验收标准。

阶段 核心输入 关键输出 验收要点
需求分析 ODD 定义、法规、竞品指标 类别清单、指标阈值、算力预算 指标可量化、可复现
数据采集 场景库、传感器配置、标定参数 原始数据包、时间戳、标定文件 同步误差 < 10ms,标定可追溯
数据标注 原始数据、标注规范 3D 框、语义掩码、跟踪 ID 抽检一致性 > 95%
模型训练 标注数据、网络结构、损失函数 权重文件、训练日志、评估曲线 验证集指标达标、无过拟合
测试验证 权重、测试集、回放工具链 指标报告、失败场景清单 场景切片全覆盖、回归通过
问题迭代 失败场景、badcase 数据 新增数据、重训模型、版本记录 问题闭环、指标提升可量化

三、案例场景:一次“夜间逆光漏检”的闭环迭代

某量产项目在实车测试中发现:夜间逆光条件下,对向车辆进入隧道口的漏检率明显偏高。团队按闭环流程处理:

  1. 需求侧:确认该场景属于 ODD 范围,漏检率指标要求 < 1%,当前实测 4.2%,判定为不达标。
  2. 数据侧:从回放数据中挖掘出 320 个逆光片段,发现训练集中此类样本占比不足 0.3%。
  3. 标注侧:对新增片段补充 3D 框标注,重点标注被强光淹没的车辆轮廓,并做交叉质检。
  4. 训练侧:加入逆光增强(gamma 调整、眩光模拟),并提高该类样本采样权重。
  5. 测试侧:在离线测试集上漏检率降至 0.8%,但实车仍有抖动,进一步定位为跟踪模块阈值问题。
  6. 迭代侧:将跟踪阈值调整纳入需求修正,形成新版本并回归验证。
这个案例说明:感知问题往往不是单一模块造成的。漏检可能来自数据分布,抖动可能来自后处理。闭环迭代的价值在于用数据定位问题,而不是靠猜测调参。

四、常见误区与复盘

在量产验证中,以下误区最容易导致项目延期或指标虚高:

  • 只盯 mAP,不看场景切片:整体 mAP 达标,但夜间、雨雾、遮挡等关键场景可能仍然很差。必须按场景维度拆分指标。
  • 训练集与测试集同源:同一段连续视频切分后分别放入训练和测试,会造成指标虚高。应按采集批次或时间段划分。
  • 标注规范不统一:不同标注员对“截断目标”“远处小目标”的处理不一致,直接污染监督信号。
  • 忽略时间同步与标定:多传感器融合中,几毫秒的同步误差就可能导致 3D 框偏移,训练时学到错误关联。
  • 迭代没有版本管理:数据、标注、模型、配置必须绑定版本,否则无法复现问题,也无法回溯指标变化。
量产验证的核心不是“一次训练出好模型”,而是建立可复现、可追溯、可回归的工程闭环。没有版本管理和场景切片,迭代就会变成反复试错。

五、工程落地建议

为了让闭环真正跑起来,建议在项目早期就建立以下基础设施:

# 数据版本管理示例(伪代码)
dataset:
  name: perception_night_v3
  scenes: [night, backlight, tunnel]
  sync_tolerance_ms: 10
  calibration: calib_2024_06_01.yaml
  annotation_version: anno_v2.1
  split:
    train: 0.7
    val: 0.15
    test: 0.15

# 训练配置示例
train:
  backbone: resnet50
  input_size: [640, 640]
  batch_size: 16
  lr: 0.001
  epochs: 120
  augment: [flip, gamma, glare, crop]
  class_weights: {car: 1.0, pedestrian: 2.0, cyclist: 2.5}

同时,测试环节应至少覆盖三类验证:离线指标验证、数据回放验证、实车道路验证。三者缺一不可,因为离线指标高不代表回放稳定,回放稳定也不代表实车鲁棒。只有把需求、数据、标注、训练、测试、迭代串成一条可度量的链路,感知算法才能从“实验室可用”走向“量产可信”。