3. 视觉感知基础
视觉感知是无人车理解物理世界的核心入口。在激光雷达、毫米波雷达与摄像头构成的传感器套件中,摄像头提供的稠密纹理信息(颜色、边缘、语义轮廓)是其他传感器无法替代的。本章聚焦于视觉感知链路中的四个关键环节:相机几何模型与标定、图像预处理、基于YOLO系列的目标检测、基于DeepLab系列的语义分割。我们将从数学原理出发,结合工程落地中的标定流程、数据增强策略与模型部署要点,帮助读者建立从像素到语义的完整认知闭环。
3.1 相机模型与标定:从三维世界到像素坐标
核心原理
无人车视觉系统通常采用针孔相机模型。该模型将三维世界点 \(P(X,Y,Z)\) 通过刚体变换(外参矩阵 \(R|t\))映射到相机坐标系,再经透视投影(内参矩阵 \(K\))映射到图像平面,最后加入镜头畸变修正。内参矩阵 \(K\) 包含焦距 \(f_x, f_y\)、主点 \(c_x, c_y\),而畸变参数包括径向畸变 \(k_1, k_2, k_3\) 和切向畸变 \(p_1, p_2\)。标定的本质是求解这些参数,使得重投影误差最小化。
操作流程:棋盘格标定法
- 采集图像:使用 9×6 棋盘格(格边长 30mm),在不同距离、角度下采集 15~20 张图像,确保棋盘格覆盖画面各区域。
- 角点检测:使用 OpenCV 的
findChessboardCorners提取亚像素级角点。 - 参数求解:调用
calibrateCamera计算内参、畸变系数及每张图像的外参。 - 质量验证:计算平均重投影误差,要求小于 0.3 像素;若误差过大,剔除异常图像重新标定。
案例拆解:标定结果异常排查
某无人车团队在标定后重投影误差达 0.8px,导致 30m 处测距偏差超过 2m。排查发现:标定板打印后边缘卷曲,且部分图像中棋盘格占比过小(<20%)。处理措施:重新使用铝板覆膜标定板,并增加近距离(1m~2m)图像数量。重新标定后误差降至 0.21px,测距精度提升至 1.5% 以内。
| 参数 | 标定前 | 标定后 | 说明 |
|---|---|---|---|
| 重投影误差 | 0.82px | 0.21px | 目标 < 0.3px |
| 焦距 fx | 612.3 | 618.7 | 偏差 1% |
| 主点 cx | 315.2 | 320.1 | 接近图像中心 |
| 30m 测距误差 | 2.1m | 0.45m | 满足感知需求 |
3.2 图像预处理:去畸变、归一化与数据增强
核心原理
原始图像包含镜头畸变和传感器噪声,直接输入神经网络会降低模型泛化能力。预处理链路包括:去畸变(使用标定参数重映射)、裁剪与缩放(统一到模型输入尺寸,如 640×480)、归一化(像素值除以 255 并减去均值)。此外,训练阶段需采用数据增强策略提升鲁棒性。
判断方法与操作流程
- 去畸变:使用
cv2.undistort或initUndistortRectifyMap+remap,注意保持图像中心区域不变。 - 归一化:YOLO 系列通常采用 /255.0 缩放,DeepLab 使用 ImageNet 均值和标准差。
- 数据增强:Mosaic(四图拼接)、随机仿射变换、HSV 扰动、随机遮挡。增强时需避免改变语义标签(如翻转时需同步翻转标注框)。
实战场景:雨天图像预处理调优
在雨天测试中,原始图像存在雨丝反光和模糊。团队在预处理阶段加入去雨算法(基于暗通道先验),但发现检测 mAP 反而下降 2%。分析原因:去雨算法引入了伪影,且 YOLO 模型已通过训练数据学习到雨纹特征。最终方案:仅对输入做轻度高斯模糊(σ=1.0)抑制高频噪声,mAP 恢复至晴天水平的 95%。
3.3 目标检测经典方法:YOLO 系列
核心原理
YOLO(You Only Look Once)将检测视为回归问题,单次前向传播即可输出边界框和类别概率。YOLOv5~v8 采用 CSPDarknet 骨干网络、PANet 特征金字塔和 Anchor-Free 解耦头。关键改进包括:Mosaic 增强、自适应锚框、CIoU 损失。在无人车场景,通常使用 YOLOv8s 或 YOLOv5s 平衡速度与精度。
操作流程:训练与部署
- 数据准备:标注格式为 YOLO txt(类别、中心点坐标、宽高,归一化)。
- 模型训练:输入尺寸 640×640,batch size 16,初始学习率 0.01,使用 SGD 优化器训练 300 epoch。
- 后处理:NMS(IoU 阈值 0.45,置信度阈值 0.25)去除冗余框。
- TensorRT 加速:FP16 量化后推理延迟可降至 15ms(Jetson Orin)。
案例拆解:行人检测误报优化
某园区无人车在黄昏时段频繁误检路灯杆为行人。初始模型 mAP@0.5 为 87%,但误报率高达 12%。分析发现:训练集中行人样本多为直立姿态,而路灯杆与行人轮廓相似。优化措施:① 增加 2000 张包含路灯杆、树木的负样本;② 在损失函数中提高分类损失的权重(cls_loss=0.7);③ 将置信度阈值从 0.25 提升至 0.35。优化后误报率降至 3%,mAP 保持 86.5%。
| 指标 | 优化前 | 优化后 | 变化 |
|---|---|---|---|
| mAP@0.5 | 87.0% | 86.5% | -0.5% |
| 误报率 | 12% | 3% | -75% |
| 推理延迟 | 18ms | 18ms | 不变 |
3.4 语义分割经典方法:DeepLab 系列
核心原理
DeepLab 系列以空洞卷积(Atrous Convolution)为核心,在保持特征图分辨率的同时扩大感受野。DeepLabV3+ 引入 ASPP(空洞空间金字塔池化) 模块,并行采样多尺度上下文信息,并采用 Encoder-Decoder 结构恢复边界细节。在无人车中,语义分割用于识别可行驶区域、车道线、路沿等,输出像素级类别标签。
判断方法与操作流程
- 模型选择:DeepLabV3+ 配合 MobileNetV2 骨干(轻量)或 ResNet101(高精度)。
- 训练配置:输入尺寸 512×512,损失函数为交叉熵 + Dice Loss(缓解类别不平衡)。
- 后处理:条件随机场(CRF)可选,但会增加延迟;工程中常用中值滤波平滑边缘。
实战场景:可行驶区域分割的边界抖动
在高速场景中,DeepLabV3+ 输出的可行驶区域边界出现帧间抖动,导致规划模块频繁调整路径。分析发现:分割结果在路面与路沿交界处置信度低(0.4~0.6)。解决方案:① 对分割概率图做时序指数平滑(α=0.6);② 将低置信度像素(<0.5)标记为“未知”,由融合模块结合高精地图先验决定。处理后边界抖动幅度从 ±15cm 降至 ±3cm。
3.5 常见误区与总结复盘
- 误区一:标定一次永久使用。相机镜头松动、温度变化会导致内参漂移,建议每 3 个月或 2 万公里重新标定。
- 误区二:盲目追求高分辨率输入。640×480 在 Jetson 平台上已足够,提升到 1280×720 会使延迟翻倍,而 mAP 提升不足 1%。
- 误区三:忽略类别不平衡。在分割任务中,背景像素占比超 90%,需使用加权损失或 OHEM 策略。
- 误区四:检测与分割独立部署。可共享骨干网络(如 YOLOv8-seg),减少计算冗余。