3、感知算法误检与漏检:目标检测、语义分割、多传感器融合中的典型错误模式
各位同行,咱们今天聊点扎心的。
做ADAS感知这么多年,我见过最多的bug,不是硬件坏了,而是算法“看错了”。要么是路上明明没人,它给你来个急刹;要么是前面有辆卡车,它愣是没看见。说白了,这就是误检和漏检。
我个人习惯把这两类问题分开看。误检是“虚惊一场”,漏检是“致命疏忽”。今天咱们就掰开揉碎了,讲讲目标检测、语义分割、多传感器融合里那些典型的错误模式。
3.1 目标检测中的误检与漏检
目标检测是感知的“眼睛”。但这双眼睛,经常老花。
3.1.1 误检:它到底看见了什么?
误检最常见的原因,就是特征混淆。你想想看,一个路边的垃圾桶,在某些角度下,它的轮廓和一辆静止的SUV有多像?
我在项目中遇到过最离谱的一次,是系统把路面上一个巨大的“减速让行”标志牌,识别成了行人。为什么?因为那个标志牌上画着一个人形图案,算法直接把它当成了真实的人。嗯,这里要注意,语义信息对检测器的干扰,比我们想象中严重得多。
典型误检场景:
- 光影干扰: 隧道出口的强光,容易把阴影边缘检测成车辆。
- 纹理重复: 高速公路护栏的规律性竖条,有时会被误认为自行车或行人。
- 小物体误判: 远处的塑料袋飘过,被当成飞鸟或障碍物。
为什么会这样?说白了,深度学习模型学的是“统计特征”,而不是“物理本质”。它看到一堆像素排列成某个形状,就认为概率够了。但它不懂“这个东西是纸做的,撞上去没事”。
3.1.2 漏检:它为什么看不见?
漏检比误检更可怕。误检最多是吓一跳,漏检是真要命。
漏检的核心原因,往往是特征不显著。我建议大家在分析漏检时,先问三个问题:
- 目标太小? 比如远处横穿马路的行人,在图像里只有几十个像素。
- 目标被遮挡? 比如前车后面突然钻出来的摩托车。
- 目标与背景对比度低? 比如夜间穿深色衣服的行人。
我记得有一次路测,系统连续漏检了三辆停在路边的黑色轿车。后来一查,是因为那天下雨,路面反光严重,黑色车身的边缘和路面阴影完全融在了一起。模型直接把它们当成了“路面的一部分”。
避坑指南: 我曾经在某个项目中,为了提升召回率,把检测阈值调得很低。结果误检率飙升,系统在高速上频繁误触发AEB。后来我学乖了——永远不要单独看召回率,要结合精确率一起调。这是一个平衡游戏。
3.2 语义分割中的错误模式
语义分割比目标检测更精细,它要回答“这个像素属于什么”。但精细,也意味着更容易出错。
3.2.1 边界模糊与粘连
这是语义分割最头疼的问题。两个紧挨着的物体,比如一辆自行车靠在墙上,分割结果经常把自行车和墙“粘”在一起。
为什么会这样?因为分割网络在解码阶段,为了恢复分辨率,会丢失一些边缘细节。我个人习惯在分割网络后面加一个条件随机场(CRF)作为后处理,能有效改善边界。但代价是推理速度变慢,嗯,这里要权衡。
3.2.2 小物体被“吞噬”
在远距离场景中,行人、锥桶这些小物体,经常被分割网络直接忽略。模型倾向于把大片的、连续的背景区域(比如路面、天空)分割得很准,但小物体就像“孤岛”,很容易被背景“吃掉”。
我建议在训练时,对包含小物体的样本进行过采样,或者使用多尺度特征融合(比如FPN结构)。我在一个项目中试过,把FPN的顶层特征和底层特征做拼接,小物体的分割准确率直接提升了12%。
典型错误模式总结:
| 错误类型 | 表现 | 常见原因 |
|---|---|---|
| 类别混淆 | 把路面标线识别成车道线 | 训练数据中两者外观相似 |
| 空洞/断裂 | 车道线中间出现缺口 | 光照不均或阴影遮挡 |
| 过度分割 | 一辆车被分成多个碎片 | 特征响应不连续 |
3.3 多传感器融合中的典型错误
很多人觉得,多传感器融合是“万能药”。一个传感器漏了,另一个补上。但现实是,融合本身也会引入新的错误模式。
3.3.1 时空不同步
这是最基础,也是最容易被忽视的问题。摄像头是30fps,激光雷达是10fps,毫米波雷达是20fps。如果时间戳对齐不精确,融合出来的结果就是“鬼影”。
我记得有一次,车辆明明已经停住了,但融合后的目标位置还在往前飘。查了半天,发现是激光雷达的点云时间戳和摄像头图像时间戳差了50毫秒。50毫秒,在高速上就是1.4米的误差。
我的习惯: 在融合模块里,强制要求所有传感器数据都带上硬件时间戳,并且在预处理阶段做线性插值对齐。不要相信软件层的“近似同步”。
3.3.2 目标关联错误
当两个目标距离很近时,融合算法经常会把它们“串”在一起。比如,一辆摩托车紧贴着一辆大卡车行驶,融合结果可能认为“只有一个大目标”。
为什么会这样?因为关联算法(比如匈牙利算法)依赖距离和形状的相似度。当两个目标在空间上重叠时,算法就“懵了”。
我建议在关联时,除了位置,还要加入速度矢量和类别置信度作为关联依据。如果两个目标的速度方向相反,即使位置很近,也不应该关联在一起。
3.3.3 置信度传递失真
每个传感器都有自己的置信度。摄像头说“90%是行人”,毫米波雷达说“60%是目标”。融合后,系统应该输出一个综合置信度。
但很多融合算法只是简单加权平均。结果就是,一个高置信度的误检(比如摄像头把广告牌认成车),经过融合后,依然保持了高置信度。说白了,融合不能纠正传感器的固有错误,只能放大或缩小。
避坑指南: 我曾经在融合策略里,给激光雷达的检测结果赋予了过高的权重。结果激光雷达在雨天出现了大量噪点,融合系统直接把这些噪点当成了真实障碍物,导致车辆频繁误减速。后来我改成了动态权重——根据天气、光照、车速等条件,实时调整各传感器的信任度。
3.4 小结:如何系统性降低误检与漏检?
说了这么多问题,总得给点解决方案。我个人总结了三步走:
- 数据层面: 针对长尾场景(夜间、雨天、遮挡)做针对性数据增强。不要只依赖公开数据集。
- 算法层面: 引入注意力机制,让模型更关注关键区域。同时,使用不确定性估计,让模型知道“它什么时候没把握”。
- 系统层面: 建立完善的误检/漏检监控机制。比如,在实车测试中,如果连续N帧检测到同一个目标,但融合结果却消失了,就要触发告警。
嗯,今天就先聊到这儿。下一章咱们会深入讲讲功能安全视角下的感知冗余设计,那才是真正考验系统架构能力的地方。