3. 视觉感知基础:相机模型、标定、图像预处理、目标检测与语义分割的经典方法(YOLO、DeepLab等)

视觉感知是无人车理解物理世界的核心入口。在激光雷达、毫米波雷达与摄像头构成的传感器套件中,摄像头提供的稠密纹理信息(颜色、边缘、语义轮廓)是其他传感器无法替代的。本章聚焦于视觉感知链路中的四个关键环节:相机几何模型与标定、图像预处理、基于YOLO系列的目标检测、基于DeepLab系列的语义分割。我们将从数学原理出发,结合工程落地中的标定流程、数据增强策略与模型部署要点,帮助读者建立从像素到语义的完整认知闭环。

视觉感知链路:从像素到语义 相机模型与标定 内参/外参/畸变 棋盘格标定法 重投影误差 < 0.3px 图像预处理 去畸变/裁剪/归一化 数据增强(Mosaic等) 分辨率640×480 目标检测(YOLO) Anchor-free + CSP mAP@0.5 > 85% NMS后处理 语义分割(DeepLab) ASPP空洞卷积 mIoU > 75% 车道线/可行驶区域 下游融合与决策 3D框投影 / 可行驶区域栅格化 / 红绿灯状态识别 与激光雷达点云、毫米波雷达目标做时间/空间对齐 关键工程指标: 单目测距误差 < 5% (30m内) | 检测延迟 < 33ms | 分割帧率 > 15FPS 标定板角点数量 9×6 | 畸变系数 k1,k2,p1,p2,k3 注:虚线表示数据流,实线表示处理链路

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\)。标定的本质是求解这些参数,使得重投影误差最小化。

操作流程:棋盘格标定法

  1. 采集图像:使用 9×6 棋盘格(格边长 30mm),在不同距离、角度下采集 15~20 张图像,确保棋盘格覆盖画面各区域。
  2. 角点检测:使用 OpenCV 的 findChessboardCorners 提取亚像素级角点。
  3. 参数求解:调用 calibrateCamera 计算内参、畸变系数及每张图像的外参。
  4. 质量验证:计算平均重投影误差,要求小于 0.3 像素;若误差过大,剔除异常图像重新标定。
工程要点:标定板必须平整,避免弯曲;采集时保持光照均匀,避免反光。对于车载相机,建议在车辆静止状态下标定,并固定镜头焦距(手动对焦或锁焦)。

案例拆解:标定结果异常排查

某无人车团队在标定后重投影误差达 0.8px,导致 30m 处测距偏差超过 2m。排查发现:标定板打印后边缘卷曲,且部分图像中棋盘格占比过小(<20%)。处理措施:重新使用铝板覆膜标定板,并增加近距离(1m~2m)图像数量。重新标定后误差降至 0.21px,测距精度提升至 1.5% 以内。

参数标定前标定后说明
重投影误差0.82px0.21px目标 < 0.3px
焦距 fx612.3618.7偏差 1%
主点 cx315.2320.1接近图像中心
30m 测距误差2.1m0.45m满足感知需求

3.2 图像预处理:去畸变、归一化与数据增强

核心原理

原始图像包含镜头畸变和传感器噪声,直接输入神经网络会降低模型泛化能力。预处理链路包括:去畸变(使用标定参数重映射)、裁剪与缩放(统一到模型输入尺寸,如 640×480)、归一化(像素值除以 255 并减去均值)。此外,训练阶段需采用数据增强策略提升鲁棒性。

判断方法与操作流程

  • 去畸变:使用 cv2.undistort 或 initUndistortRectifyMap + remap,注意保持图像中心区域不变。
  • 归一化:YOLO 系列通常采用 /255.0 缩放,DeepLab 使用 ImageNet 均值和标准差。
  • 数据增强:Mosaic(四图拼接)、随机仿射变换、HSV 扰动、随机遮挡。增强时需避免改变语义标签(如翻转时需同步翻转标注框)。
经验提醒:在夜间或逆光场景,可加入亮度/对比度自适应增强(如 CLAHE),但需在离线评估中验证对 mAP 的影响,避免过度增强导致信息丢失。

实战场景:雨天图像预处理调优

在雨天测试中,原始图像存在雨丝反光和模糊。团队在预处理阶段加入去雨算法(基于暗通道先验),但发现检测 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 平衡速度与精度。

操作流程:训练与部署

  1. 数据准备:标注格式为 YOLO txt(类别、中心点坐标、宽高,归一化)。
  2. 模型训练:输入尺寸 640×640,batch size 16,初始学习率 0.01,使用 SGD 优化器训练 300 epoch。
  3. 后处理:NMS(IoU 阈值 0.45,置信度阈值 0.25)去除冗余框。
  4. 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.587.0%86.5%-0.5%
误报率12%3%-75%
推理延迟18ms18ms不变

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),减少计算冗余。
总结复盘:视觉感知的工程落地需遵循“标定-预处理-模型-后处理”的完整链路。标定精度直接影响测距可靠性;预处理需针对场景定制;YOLO 与 DeepLab 的选择取决于任务需求——检测适合离散目标(车辆、行人),分割适合连续区域(道路、车道线)。实际系统中,两者常并行运行,并通过时间同步与空间对齐将结果送入融合模块。