4、数学基础:三维空间变换、坐标系、点云与体素化、神经网络基础(MLP、卷积)

Occupancy Network 的核心任务是在三维空间中判断任意查询点被障碍物占据的概率。要完成这一任务,必须将传感器采集到的原始数据(如激光雷达点云、相机图像)转换到统一的三维坐标系中,并通过体素化将连续空间离散化,最后借助神经网络(尤其是 MLP 与 3D 卷积)进行特征提取与占据概率预测。本章将系统梳理这四块数学与工程基础,为后续网络结构设计与训练策略打下坚实根基。

Occupancy Network 数学基础链路 传感器坐标系 LiDAR / Camera / Radar 局部笛卡尔坐标 (x,y,z) 外参标定与变换 旋转矩阵 R (3×3) 平移向量 t (3×1) 车体/世界坐标系 统一基准(右手系) 刚体变换 T ∈ SE(3) 体素化 空间离散化 (L×W×H) 分辨率 r = 0.1m 等 特征编码 3D 稀疏卷积 / MLP 多尺度特征提取 查询点 q 连续坐标 (x,y,z) 位置编码 γ(q) Occupancy MLP 隐式神经场 输出占据概率 p ∈ [0,1] 损失与输出 BCE Loss / IoU 3D 占用栅格 / 表面提取 核心链路:传感器数据 → 坐标系变换 → 体素化/特征编码 → 隐式场查询 → 占据概率输出 数学工具:SE(3) 刚体变换、三线性插值、稀疏张量、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 训练数据时,坐标系变换的正确性直接决定标注质量。推荐以下操作流程:

  1. 确认各传感器内参和外参:内参(如相机焦距、主点)用于 2D-3D 投影;外参描述传感器与车体坐标系的相对位姿。
  2. 统一时间戳:运动中的车辆会导致点云畸变,需使用 IMU 数据进行运动补偿。
  3. 逐点变换:对每个激光雷达点执行 P_world = R·P_sensor + t,并检查变换后点云是否落在合理范围内(如 x ∈ [-50m, 50m])。
  4. 验证精度:将变换后的点云投影到相机图像上,观察边缘对齐误差是否小于 2 像素。
坐标系原点位置典型用途变换关系
传感器坐标系传感器光心/几何中心原始数据采集外参标定
车体坐标系后轴中心/IMU 位置多传感器融合、控制车辆运动学
世界坐标系地图原点/UTM 原点全局定位、路径规划GPS/IMU 组合导航
常见误区:旋转矩阵与平移向量的顺序不可颠倒。先旋转后平移(P' = R·P + t)是标准形式;若先平移后旋转,则需将平移向量变换到旋转后的坐标系中,即 P' = R·(P + R^T·t)。此外,欧拉角存在万向锁问题,建议在内部计算中使用四元数或旋转矩阵。

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 偏移量级吻合。

解决步骤:

  1. 使用标定板在 5m、10m、15m 三个距离采集数据,手动选取对应点对。
  2. 使用 Umeyama 算法(基于 SVD 的最小二乘刚体变换求解)重新计算外参。
  3. 将新外参写入配置文件,重启感知进程。
  4. 重新采集点云并投影验证,横向偏移降至 0.05m 以内。

复盘经验:外参标定不是一次性工作。车辆运行中的振动、碰撞都可能导致外参漂移,建议每次发车前运行快速标定程序(如使用地面平面约束),并监控点云投影误差的长期趋势。

4.2 点云与体素化

4.2.1 核心原理:从连续点到离散栅格

激光雷达点云是稀疏、无序、密度不均匀的三维点集合。Occupancy Network 需要判断空间中任意位置是否被占据,而原始点云只提供了离散采样点的信息。体素化(Voxelization)将三维空间划分为规则的立方体网格(体素),每个体素记录是否有点云落入、点云数量、反射强度统计等特征。体素分辨率的选择至关重要:分辨率过高(如 0.05m)会导致计算量爆炸;分辨率过低(如 0.5m)会丢失细节,无法检测小物体。

4.2.2 判断方法与操作流程

体素化的工程实现通常采用哈希表或稀疏张量结构,避免存储大量空体素。具体流程如下:

  1. 确定感知范围:例如 x ∈ [-50m, 50m],y ∈ [-50m, 50m],z ∈ [-3m, 3m]。
  2. 计算体素索引:对于点 (x,y,z),索引为 (floor((x - x_min)/r), floor((y - y_min)/r), floor((z - z_min)/r))。
  3. 特征聚合:对落入同一体素的多个点,计算平均坐标、最大反射强度、点数量等。
  4. 稀疏存储:仅存储非空体素及其特征,使用 COO 格式或哈希表。
经验提示:对于 Occupancy Network 训练,体素化后的真值(Ground Truth)通常来自高精度地图或人工标注的 3D 包围盒。将包围盒内部的所有体素标记为 occupied,边界处的体素可做三线性插值平滑,避免二值化带来的梯度不连续。

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 卷积规则体素网格局部特征共享、高效分辨率受内存限制特征编码器
稀疏卷积稀疏体素索引计算量仅与非空体素相关实现复杂度高大规模点云处理
实战建议:当查询点数量较大(如 10 万+)时,MLP 的逐点推理会成为瓶颈。可将查询点组织为 batch,利用 GPU 并行计算;或使用多分辨率哈希编码(如 Instant-NGP)减少 MLP 层数,将推理速度提升 5-10 倍。

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 容量不够;若所有距离精度均低,则需检查特征编码器是否有效提取了局部几何信息。

总结复盘:本章的四个数学基础模块环环相扣——坐标系变换保证数据对齐,体素化将连续空间离散化,MLP 提供连续函数逼近能力,卷积提供局部特征提取能力。在实际项目中,建议先使用小规模数据验证坐标变换正确性,再逐步增加网络复杂度。一个实用的调试技巧是:将 Occupancy Network 的预测结果与原始点云叠加显示,若预测边界与点云边缘偏差超过 1 个体素,优先检查坐标变换和体素化参数,而非网络结构。