2. 自动驾驶感知系统概述:传感器配置与感知任务分解
好,咱们直接进入正题。
自动驾驶感知系统,说白了就是给车装上「眼睛」和「大脑」。眼睛负责看,大脑负责理解。我做了这么多年感知算法,最深的体会就是:传感器选型决定了系统的上限,而算法决定了你能多接近这个上限。
2.1 传感器配置:三种核心传感器
目前主流的自动驾驶方案,基本都围绕三种传感器展开:摄像头、激光雷达、毫米波雷达。它们各有各的脾气,也各有各的绝活。
2.1.1 摄像头
摄像头是最像人眼的传感器。它提供丰富的纹理和颜色信息,能识别车道线、交通标志、行人、车辆。但它的短板也很明显——对光照敏感,晚上或者逆光时性能会下降。
我个人习惯把摄像头分为三类:
- 前视摄像头:通常装在后视镜附近,负责主视野。一般用120°左右的广角镜头。
- 环视摄像头:装在车身四周,用于近距离感知,比如泊车场景。
- 侧视/后视摄像头:用于变道辅助和盲区监测。
我在项目中遇到过一个问题:某款摄像头在黄昏时分,由于自动白平衡调整不及时,导致输出的图像偏蓝,结果车道线检测模型直接崩了。嗯,后来我们加了一个图像预处理模块,强制在低光照条件下固定白平衡参数,才算解决。
2.1.2 激光雷达
激光雷达(LiDAR)是很多高阶自动驾驶方案的「定海神针」。它直接输出三维点云,精度可以达到厘米级。你想想看,有了它,你不需要靠算法去「猜」物体的距离,它直接告诉你。
激光雷达按线束分:
- 16线/32线:主要用于低速场景或作为辅助传感器。
- 64线/128线:主流的高线束方案,能提供足够密集的点云。
- 固态激光雷达:成本低、体积小,但视场角有限,正在快速普及。
不过激光雷达也有坑。我记得有一次,测试车在雨天行驶,激光雷达的点云里出现了大量「雨滴噪点」。这些噪点如果不处理,会被误识别为障碍物,导致车辆频繁急刹。后来我们加了一个基于强度的滤波算法,才把这个问题压下去。
2.1.3 毫米波雷达
毫米波雷达是「老实人」。它不提供丰富的细节,但它的测距和测速非常可靠,而且几乎不受天气影响。它的工作频率通常在24GHz、77GHz或79GHz。
毫米波雷达的核心优势:
- 全天候工作:雨、雪、雾、强光都不怕。
- 直接测速:利用多普勒效应,可以直接输出目标的速度。
- 远距离探测:长距雷达可以探测到200米甚至更远。
但它的缺点也很明显:角分辨率低,无法区分并排的两个行人,也无法识别物体的具体类别。说白了,它知道「前面有东西」,但不知道「那是什么」。
我曾经在一个项目中,毫米波雷达把路边的金属护栏误报为静止车辆,导致系统频繁报警。后来我们通过雷达和摄像头的融合,用视觉信息来「否决」雷达的误报,才算搞定。
2.2 感知任务分解
传感器拿到原始数据后,接下来就是算法的事了。感知任务可以拆解为三个核心子任务:目标检测、语义分割、跟踪。
2.2.1 目标检测
目标检测,就是回答「什么东西在哪里」。它输出的是物体的边界框(Bounding Box)和类别标签。
在自动驾驶中,目标检测主要针对:
- 车辆:轿车、卡车、公交车、自行车等。
- 行人:成人、儿童、骑行者。
- 障碍物:锥桶、路障、施工区域。
- 交通标志和信号灯:红绿灯、限速牌、停止标志。
常用的检测算法有两类:
- 两阶段检测器(如Faster R-CNN):先提候选区域,再分类和回归。精度高,但速度慢。
- 单阶段检测器(如YOLO、SSD):一步到位,速度快,适合实时场景。
我个人更倾向于在自动驾驶中使用单阶段检测器。为什么?因为延迟是关键。你想想看,车辆以60km/h行驶,每延迟100ms,刹车距离就多出1.67米。这个距离可能就是生与死的差别。
2.2.2 语义分割
语义分割比目标检测更「细」。它给图像中的每个像素都分配一个类别标签。比如,这个像素属于「道路」,那个像素属于「天空」,另一个像素属于「行人」。
语义分割在自动驾驶中的典型应用:
- 可行驶区域检测:区分道路、人行道、路肩。
- 车道线检测:虽然也有专门的算法,但语义分割也能做。
- 自由空间估计:判断哪些区域是车辆可以安全通过的。
常用的语义分割网络包括:
- FCN:全卷积网络,开山之作。
- U-Net:编码器-解码器结构,对小目标友好。
- DeepLab系列:使用空洞卷积,能捕获多尺度信息。
我记得有一次,我们在高速场景下测试语义分割模型。模型把远处的卡车误识别为「道路」,因为卡车侧面是灰色的,和路面颜色太像了。后来我们引入了时序信息,利用前后帧的一致性来修正这种误判,效果好了很多。
2.2.3 跟踪
跟踪,就是给检测到的物体「续命」。它回答的是「这个物体从哪来,到哪去」。
跟踪的核心任务:
- 多目标跟踪(MOT):同时跟踪多个物体,并为每个物体分配唯一的ID。
- 单目标跟踪(SOT):只跟踪一个特定的目标,常用于视觉锁定。
在自动驾驶中,多目标跟踪更常见。典型的流程是:
- 每一帧做目标检测,得到一组边界框。
- 将当前帧的检测结果与上一帧的跟踪轨迹进行关联(数据关联)。
- 更新轨迹的状态(位置、速度、加速度等)。
常用的跟踪算法:
- SORT:简单在线实时跟踪,基于卡尔曼滤波和匈牙利算法。速度快,但容易丢ID。
- Deep SORT:在SORT基础上加入外观特征(ReID),ID切换更少。
- ByteTrack:利用低置信度检测框,能更好地处理遮挡场景。
我曾经在项目中踩过一个坑:跟踪算法在车辆转弯时,由于目标的外观变化太大,导致ID频繁切换。后来我们在卡尔曼滤波中加入了运动模型,用车辆的转向角来预测轨迹,ID切换率降低了60%。
2.3 小结
好了,这一章的内容就到这里。我们聊了三种核心传感器——摄像头、激光雷达、毫米波雷达——各自的优缺点和我在项目中踩过的坑。然后拆解了感知的三个核心任务:目标检测、语义分割、跟踪。
下一章,我们会深入GPU的硬件架构,看看它到底是怎么加速这些感知算法的。你想想看,一个YOLO模型在CPU上跑可能要几百毫秒,在GPU上只要十几毫秒。这背后的原理是什么?我们下回分解。
公众号:蓝海资料掘金营,微信deep3321