二、数据采集策略:传感器选型与标定、场景覆盖度分析、长尾场景挖掘方法论

数据采集这件事,说起来好像很简单——装几个传感器,开车出去转一圈,数据不就来了吗?

嗯,我刚入行时也是这么想的。直到第一次做量产项目,发现采集回来的数据90%都是无效的,才意识到这里面的门道有多深。

说白了,数据采集不是「堆数据」,而是「设计数据」。你采集什么、怎么采、采多少,直接决定了你算法的上限。

2.1 传感器选型与标定

传感器选型,我个人的习惯是「先定任务,再定传感器」。别上来就盯着激光雷达的线数、相机的分辨率看,先问问自己:我的车要解决什么问题?

2.1.1 主流传感器对比

传感器类型 优势 劣势 典型场景
摄像头 纹理丰富、成本低、可识别语义 受光照影响大、无深度信息 车道线、交通标志、障碍物分类
激光雷达 精确深度、全天候、不受光照影响 成本高、点云稀疏、无法识别纹理 障碍物检测、SLAM、高精地图
毫米波雷达 测速精准、穿透雨雾、成本适中 角度分辨率低、无法识别静止物体 ACC、AEB、盲区检测
超声波雷达 近距离探测、成本极低 探测距离短、精度一般 泊车辅助、近距离障碍物检测

我的经验:量产项目里,摄像头+毫米波雷达是「黄金组合」。激光雷达目前还是偏贵,除非你做L4级以上的Robotaxi,否则别轻易上。我在一个项目里见过团队为了「炫技」上了128线激光雷达,结果数据量太大,算法根本跑不动,最后又换回了16线。

2.1.2 传感器标定——避坑指南

传感器装好了,标定就是第一道坎。标定不准,后面所有算法都是空中楼阁。

我曾经踩过的坑:有一次做多传感器融合,激光雷达和相机的标定参数差了2个像素。你猜怎么着?障碍物检测的mAP直接掉了5个点。后来花了整整一周排查,才发现是标定板上的角点检测出了问题。

标定主要分两类:

  • 内参标定:确定传感器自身的参数,比如相机的焦距、畸变系数,激光雷达的旋转轴偏移等。相机标定推荐用棋盘格,激光雷达标定可以用V字型靶标。
  • 外参标定:确定传感器之间的相对位姿。常用的方法有:基于标定板的联合标定、基于自然场景的在线标定。

我个人建议,量产车一定要做「在线标定」。为什么?因为车开久了,传感器会因为振动、温度变化而发生微小的位移。你想想看,出厂时标定得再好,开半年后参数可能就变了。

标定流程(以相机-激光雷达联合标定为例):

1. 准备标定板(棋盘格或圆点阵列)
2. 采集多组不同位姿的数据
3. 提取相机图像中的角点
4. 提取激光雷达点云中的标定板平面
5. 构建重投影误差函数
6. 使用非线性优化求解外参矩阵
7. 验证:将激光点投影到图像上,检查对齐精度

2.2 场景覆盖度分析

数据采集最怕什么?最怕「数据偏置」。你采集的数据全是晴天、白天、高速路,那模型到了雨天、夜晚、城市道路就崩了。

为什么会这样?因为深度学习模型本质上是在「记忆」训练数据的分布。你给它的数据分布窄,它的泛化能力就弱。

2.2.1 场景覆盖度评估维度

我一般从三个维度来评估场景覆盖度:

  1. 环境维度:光照(白天/夜晚/黄昏/黎明)、天气(晴/雨/雪/雾/霾)、季节(春/夏/秋/冬)
  2. 道路维度:道路类型(高速/城市/乡村/隧道/桥梁)、车道数(单车道/多车道)、路面状况(干燥/湿滑/积雪/施工)
  3. 交通维度:交通密度(稀疏/正常/拥堵)、交通参与者类型(行人/自行车/摩托车/汽车/卡车)、交通规则(有信号灯/无信号灯/环岛/人行横道)

一个实用的方法:用「场景覆盖矩阵」来可视化。横轴是环境维度,纵轴是道路维度,每个格子代表一个场景组合。比如「白天+雨天+城市道路」就是一个格子。你采集的数据填满了多少格子?填得越满,覆盖度越高。

2.2.2 覆盖度量化指标

光定性分析不够,还得定量。我常用的指标有两个:

  • 场景覆盖率:已采集的场景组合数 / 总场景组合数。比如你定义了100个场景组合,采集到了80个,覆盖率就是80%。
  • 场景均衡度:用信息熵来衡量。如果所有场景的数据量差不多,均衡度就高;如果某个场景占了90%的数据,均衡度就低。

注意:覆盖率不是越高越好。有些场景组合在实际中根本不存在(比如「雪天+沙漠公路」),强行追求100%覆盖率反而浪费资源。我一般建议覆盖率达到70%-80%就够用了,剩下的用数据增强和仿真来补。

2.3 长尾场景挖掘方法论

长尾场景,说白了就是那些「很少出现,但一旦出现就很要命」的场景。比如:

  • 一个行人突然从路边停着的卡车后面冲出来
  • 路上掉了一个轮胎
  • 施工区域临时改道,车道线被覆盖了

这些场景在真实路测中可能几万公里才遇到一次,但自动驾驶系统必须能处理。否则,一次事故就足以毁掉整个项目。

2.3.1 长尾场景挖掘的三种方法

我总结了三类方法,按成本从低到高排列:

  1. 基于规则的方法:设定一些「异常检测规则」,比如检测到急刹车、突然变道、障碍物突然出现等事件时,自动触发数据采集。这个方法成本最低,但只能挖到「已知的未知」。
  2. 基于模型的方法:用已有的感知模型去跑数据,把模型「不确定」或「犯错」的场景挑出来。比如检测框的置信度低于某个阈值,或者模型输出的结果与真值差异很大。这个方法能挖到「未知的未知」。
  3. 基于仿真的方法:在仿真环境中构造长尾场景。比如随机生成各种形状的障碍物、各种光照条件、各种交通参与者的行为。这个方法最灵活,但仿真和真实世界之间还有「sim-to-real gap」。

我的建议:三种方法结合使用。先用规则方法做「广撒网」,再用模型方法做「精准捕捞」,最后用仿真方法做「补全」。我在一个项目中用这套组合拳,把长尾场景的发现效率提升了3倍。

2.3.2 长尾场景的优先级排序

挖到了长尾场景,不可能全部处理。资源有限,得排优先级。我一般用「风险矩阵」来排序:

风险等级 发生频率 后果严重度 处理优先级
立即处理
尽快处理
持续监控
忽略 暂不处理

我曾经犯过的错:一开始我把所有长尾场景都当成「高优先级」,结果团队疲于奔命,一个场景都没处理好。后来才明白,有些场景虽然后果严重,但发生频率极低(比如「陨石砸中车」),你花大量资源去处理它,性价比太低了。

2.3.3 长尾场景的数据增强

挖到了长尾场景,数据量往往很少。怎么办?数据增强。

我常用的增强方法:

  • 几何增强:旋转、缩放、裁剪、翻转。适合所有传感器数据。
  • 光度增强:调整亮度、对比度、饱和度、添加噪声。适合图像数据。
  • 点云增强:随机丢弃点、添加高斯噪声、局部变形。适合激光雷达数据。
  • 混合增强:把不同场景的背景和前景拼接在一起。比如把「雨天」的背景和「行人横穿马路」的前景合成。

一个实用的技巧:不要盲目增强。先分析长尾场景的「关键特征」是什么,然后针对性地增强。比如「夜间行人」场景,关键特征是低光照和行人轮廓模糊,那你就重点做亮度降低和边缘模糊的增强。我试过,针对性增强比通用增强的效果好2倍以上。

好了,数据采集策略这部分就讲到这里。下一章我们聊聊数据标注——嗯,这又是一个大坑,到时候我给你们讲讲我踩过的那些坑。