4、数学基础:三维空间变换、坐标系、点云与体素化、神经网络基础(MLP、卷积)
Occupancy Network 的核心任务是在三维空间中判断任意查询点被障碍物占据的概率。要完成这一任务,必须将传感器采集到的原始数据(如激光雷达点云、相机图像)转换到统一的三维坐标系中,并通过体素化将连续空间离散化,最后借助神经网络(尤其是 MLP 与 3D 卷积)进行特征提取与占据概率预测。本章将系统梳理这四块数学与工程基础,为后续网络结构设计与训练策略打下坚实根基。
4.1 三维空间变换与坐标系
4.1.1 核心原理:刚体变换与坐标系定义
在自动驾驶感知系统中,激光雷达、相机、毫米波雷达等传感器各自拥有独立的局部坐标系。为了融合多源数据,必须将所有点云或图像特征统一到车体坐标系(通常以车辆后轴中心为原点,x 轴向前,y 轴向左,z 轴向上)或世界坐标系(如 UTM 坐标系)中。这一过程在数学上对应刚体变换(Rigid Transformation),属于特殊欧氏群 SE(3):
P_world = R · P_sensor + t
其中 R 为 3×3 旋转矩阵(满足 R^T R = I,det(R)=1),t 为 3×1 平移向量。实际工程中,旋转矩阵常用欧拉角(roll/pitch/yaw)、旋转向量或四元数表示,但最终参与计算时需转换为矩阵形式。外参标定即求解 R 和 t 的过程,通常使用棋盘格标定板或 N 点透视(PnP)算法完成。
4.1.2 判断方法与操作流程
在构建 Occupancy Network 训练数据时,坐标系变换的正确性直接决定标注质量。推荐以下操作流程:
- 确认各传感器内参和外参:内参(如相机焦距、主点)用于 2D-3D 投影;外参描述传感器与车体坐标系的相对位姿。
- 统一时间戳:运动中的车辆会导致点云畸变,需使用 IMU 数据进行运动补偿。
- 逐点变换:对每个激光雷达点执行 P_world = R·P_sensor + t,并检查变换后点云是否落在合理范围内(如 x ∈ [-50m, 50m])。
- 验证精度:将变换后的点云投影到相机图像上,观察边缘对齐误差是否小于 2 像素。
| 坐标系 | 原点位置 | 典型用途 | 变换关系 |
|---|---|---|---|
| 传感器坐标系 | 传感器光心/几何中心 | 原始数据采集 | 外参标定 |
| 车体坐标系 | 后轴中心/IMU 位置 | 多传感器融合、控制 | 车辆运动学 |
| 世界坐标系 | 地图原点/UTM 原点 | 全局定位、路径规划 | GPS/IMU 组合导航 |
4.1.3 案例拆解:多雷达外参标定误差导致体素错位
某园区无人车搭载 3 个激光雷达(前向、左向、右向),初始外参由 CAD 模型提供。在实车测试中发现,前方 20m 处的行人点云在鸟瞰图中出现 0.3m 的横向偏移,导致 Occupancy Network 预测的障碍物边界与真实位置偏差超过一个体素(体素尺寸 0.2m)。
分析过程:首先检查各雷达的安装位置是否与 CAD 一致,发现左向雷达因支架变形产生了约 1.5° 的 yaw 角偏差。在 20m 距离处,1.5° 对应的横向偏移为 20×tan(1.5°)≈0.52m,与观测到的 0.3m 偏移量级吻合。
解决步骤:
- 使用标定板在 5m、10m、15m 三个距离采集数据,手动选取对应点对。
- 使用 Umeyama 算法(基于 SVD 的最小二乘刚体变换求解)重新计算外参。
- 将新外参写入配置文件,重启感知进程。
- 重新采集点云并投影验证,横向偏移降至 0.05m 以内。
复盘经验:外参标定不是一次性工作。车辆运行中的振动、碰撞都可能导致外参漂移,建议每次发车前运行快速标定程序(如使用地面平面约束),并监控点云投影误差的长期趋势。
4.2 点云与体素化
4.2.1 核心原理:从连续点到离散栅格
激光雷达点云是稀疏、无序、密度不均匀的三维点集合。Occupancy Network 需要判断空间中任意位置是否被占据,而原始点云只提供了离散采样点的信息。体素化(Voxelization)将三维空间划分为规则的立方体网格(体素),每个体素记录是否有点云落入、点云数量、反射强度统计等特征。体素分辨率的选择至关重要:分辨率过高(如 0.05m)会导致计算量爆炸;分辨率过低(如 0.5m)会丢失细节,无法检测小物体。
4.2.2 判断方法与操作流程
体素化的工程实现通常采用哈希表或稀疏张量结构,避免存储大量空体素。具体流程如下:
- 确定感知范围:例如 x ∈ [-50m, 50m],y ∈ [-50m, 50m],z ∈ [-3m, 3m]。
- 计算体素索引:对于点 (x,y,z),索引为 (floor((x - x_min)/r), floor((y - y_min)/r), floor((z - z_min)/r))。
- 特征聚合:对落入同一体素的多个点,计算平均坐标、最大反射强度、点数量等。
- 稀疏存储:仅存储非空体素及其特征,使用 COO 格式或哈希表。
4.2.3 案例拆解:体素分辨率对内存与精度的影响
某项目使用 64 线激光雷达,感知范围 100m×100m×6m。若采用 0.1m 分辨率,理论体素数量为 1000×1000×60 = 6000 万。即使稀疏存储,非空体素通常占 1%-5%,即 60-300 万个体素,每个体素存储 4 字节特征(如占据标志),内存占用约 12-24MB,尚可接受。但若分辨率提升至 0.05m,体素数量变为 8 倍,非空体素数量也近似增加 8 倍,内存和计算量均不可接受。
权衡策略:采用多分辨率体素金字塔——近处(0-30m)使用 0.1m 分辨率,远处(30-100m)使用 0.2m 分辨率。这样既保证了近距离的检测精度,又控制了总体计算量。实际测试中,该方案使模型推理速度从 8 FPS 提升至 15 FPS,而 mIoU 仅下降 0.8%。
4.3 神经网络基础:MLP 与卷积
4.3.1 核心原理:MLP 的万能逼近与卷积的局部连接
多层感知机(MLP)由全连接层堆叠而成,每层执行 y = W·x + b 后接非线性激活函数(如 ReLU)。理论上,包含一个隐藏层的 MLP 可以逼近任意连续函数,这为 Occupancy Network 用 MLP 拟合占据概率场提供了理论支撑。然而,MLP 对输入维度敏感,且不具备空间局部性——每个输出神经元都与所有输入相连,参数冗余且难以捕捉三维空间中的局部结构。
三维卷积(3D Conv)通过共享权重的卷积核在体素网格上滑动,天然适合处理规则化的三维数据。卷积核尺寸通常为 3×3×3 或 5×5×5,感受野随层数加深而扩大。但标准 3D 卷积的计算量随体素数量线性增长,因此工程中常使用稀疏卷积(Sparse Convolution),仅对非空体素及其邻域进行计算。
4.3.2 判断方法与操作流程
在 Occupancy Network 中,MLP 与卷积的分工通常如下:
- 特征提取阶段:使用 3D 稀疏卷积(如 SparseConvNet、MinkowskiEngine)处理体素化点云,输出多尺度特征图。
- 隐式场预测阶段:对于任意查询点 q,通过三线性插值从特征图中采样特征向量,再输入 MLP 预测占据概率。
- 位置编码:将查询点坐标映射到高频空间(如傅里叶特征 γ(q) = [sin(2^k π q), cos(2^k π q)]),帮助 MLP 拟合高频细节。
| 网络类型 | 输入格式 | 优势 | 劣势 | 典型应用 |
|---|---|---|---|---|
| MLP | 点坐标 + 特征向量 | 连续、任意分辨率查询 | 缺乏局部结构先验 | 隐式场解码器 |
| 3D 卷积 | 规则体素网格 | 局部特征共享、高效 | 分辨率受内存限制 | 特征编码器 |
| 稀疏卷积 | 稀疏体素索引 | 计算量仅与非空体素相关 | 实现复杂度高 | 大规模点云处理 |
4.3.3 案例拆解:MLP 深度与位置编码对精度的影响
在 nuScenes 数据集上训练 Occupancy Network 时,基线模型使用 8 层 MLP(隐藏维度 256),输入为查询点坐标 (x,y,z) 和 32 维特征向量。实验发现:
- 不添加位置编码时,模型对 5m 以内的小物体(如锥桶)召回率仅为 62%。
- 添加 10 个频率的傅里叶特征后,召回率提升至 81%,但训练时间增加 15%。
- 将 MLP 层数从 8 层减至 4 层,mIoU 下降 2.3%,但推理速度提升 40%。
结论:位置编码对细节恢复至关重要,而 MLP 深度并非越深越好。建议在资源受限的嵌入式平台上使用 4-6 层 MLP + 高频位置编码,在服务器端使用 8 层 MLP 追求极致精度。
4.4 常见误区与总结复盘
4.4.1 坐标系变换中的精度陷阱
许多初学者在编写坐标变换代码时,容易混淆旋转矩阵的转置与逆。对于正交矩阵 R,R^T = R^{-1},但若 R 因数值误差不再严格正交,则必须使用 R^{-1} 而非 R^T。此外,平移向量的变换顺序错误会导致厘米级偏差,在近距离(<5m)时可能被忽略,但在远距离(>50m)时会造成显著误差。
4.4.2 体素化中的信息丢失
体素化本质上是有损压缩。当多个物体(如树枝与电线)落入同一体素时,体素只能记录一个占据状态,导致细长物体被“抹平”。缓解方法包括:使用多帧累积点云、提高局部分辨率、或采用八叉树结构自适应细分。
4.4.3 神经网络训练中的过拟合与欠拟合
Occupancy Network 的训练数据通常来自有限场景,容易过拟合到特定传感器配置。建议使用数据增强(随机旋转、缩放、裁剪点云),并在验证集上监控不同距离区间的 IoU。若近处精度高而远处精度低,可能是体素分辨率不足或 MLP 容量不够;若所有距离精度均低,则需检查特征编码器是否有效提取了局部几何信息。