4. 深度学习基础

在激光雷达点云语义分割与跟踪任务中,深度学习模型是核心引擎。理解神经网络的基本结构、卷积与点云网络的差异、损失函数的设计以及优化器与训练技巧,是构建高性能模型的前提。本章将围绕这四个方面展开,帮助读者建立从理论到工程落地的完整认知。

一、神经网络基础:从感知机到多层特征提取

神经网络的基本单元是神经元,它接收输入向量 x,通过权重 W 和偏置 b 进行线性变换,再经过非线性激活函数 σ 得到输出:y = σ(Wx + b)。多个神经元组成全连接层,多层堆叠形成深度网络。在点云任务中,常用的激活函数包括 ReLU、LeakyReLU 和 GELU,其中 ReLU 因计算简单、缓解梯度消失而被广泛使用。

前向传播计算预测值,反向传播利用链式法则计算梯度,再通过优化器更新参数。这一过程构成了深度学习的训练闭环。对于点云语义分割,网络需要同时输出每个点的类别概率,因此输出层通常采用 Softmax 或 Sigmoid 激活。

核心公式:反向传播中,第 l 层的梯度为 δl = (Wl+1)T δl+1 ⊙ σ'(zl),其中 ⊙ 表示逐元素相乘。理解该公式有助于诊断梯度消失或爆炸问题。

二、卷积与点云网络:从规则网格到无序点集

二维卷积在图像上通过滑动窗口提取局部特征,具有平移不变性和参数共享的优势。然而,激光雷达点云是无序、稀疏且非均匀分布的三维点集,直接套用二维卷积并不合适。为此,研究者提出了多种点云网络架构:

  • PointNet:通过共享多层感知机(MLP)和对称函数(最大池化)处理无序点集,实现置换不变性。
  • PointNet++:引入分层采样与分组,逐步提取局部几何特征,增强对复杂场景的适应能力。
  • 稀疏卷积网络:如 MinkowskiNet、SPVCNN,将点云体素化后仅在非空体素上计算卷积,大幅提升效率。
  • Transformer 类方法:利用自注意力机制捕捉长距离依赖,适用于大场景语义分割。

下图展示了从二维卷积到点云网络的典型结构对比,帮助读者直观理解不同网络对数据组织方式的依赖。

二维卷积 vs 点云网络结构对比 二维卷积(规则网格) 3×3 滑动窗口 · 参数共享 · 平移不变性 适用于图像、体素化点云 缺点:稀疏区域计算浪费 PointNet / PointNet++(无序点集) 共享 MLP · 最大池化 · 置换不变性 直接处理原始点云,保留几何细节 缺点:局部特征提取能力有限 稀疏卷积网络(体素化) 非空 非空 非空 仅在非空体素上卷积 · 高效利用稀疏性 适合大规模自动驾驶场景 缺点:体素化损失精度 Transformer 类方法(自注意力) 全局自注意力 · 长距离依赖建模 适合大场景语义理解 缺点:计算复杂度高,需优化

三、损失函数:语义分割与跟踪的优化目标

损失函数衡量模型预测与真实标签之间的差异。在点云语义分割中,常用的损失函数包括:

损失函数适用场景特点
交叉熵损失(CE)多分类语义分割计算简单,但对类别不平衡敏感
加权交叉熵类别不平衡点云通过权重调节稀有类别贡献
Focal Loss极端不平衡场景降低易分类样本权重,聚焦难样本
Dice Loss分割重叠度优化直接优化 IoU,适合小目标
Lovász-SoftmaxIoU 直接优化凸 surrogate,训练稳定

在跟踪任务中,损失函数通常结合分类损失和回归损失。例如,CenterPoint 使用高斯热图焦点损失进行中心点检测,再通过 L1 损失回归尺寸和朝向。多任务学习时,需平衡各损失项的权重,避免某一任务主导训练。

工程建议:对于激光雷达点云,建议先使用加权交叉熵或 Focal Loss 处理类别不平衡,再在验证集上观察 IoU 变化。若小目标(如行人、自行车)分割效果差,可引入 Dice Loss 或 Lovász-Softmax 进行联合优化。

四、优化器与训练技巧:从 SGD 到 AdamW

优化器决定参数更新策略。随机梯度下降(SGD)及其动量版本是经典选择,而 Adam 系列因自适应学习率在点云任务中表现优异。AdamW 通过解耦权重衰减,进一步提升了泛化能力。以下是一个典型的训练配置示例:

optimizer = AdamW(model.parameters(), lr=1e-3, weight_decay=1e-4)
scheduler = CosineAnnealingLR(optimizer, T_max=50, eta_min=1e-6)
criterion = nn.CrossEntropyLoss(weight=class_weights)

for epoch in range(50):
    model.train()
    for points, labels in train_loader:
        optimizer.zero_grad()
        pred = model(points)
        loss = criterion(pred, labels)
        loss.backward()
        torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
        optimizer.step()
    scheduler.step()

训练技巧方面,以下几点尤为关键:

  • 学习率预热:前几个 epoch 从极小学习率线性增长,避免初期梯度震荡。
  • 梯度裁剪:限制梯度范数,防止点云稀疏区域梯度爆炸。
  • 数据增强:随机旋转、缩放、抖动、混合采样,提升模型鲁棒性。
  • 类别平衡采样:对稀有类别过采样,或使用加权损失。
  • 混合精度训练:使用 AMP 减少显存占用,加速训练。
  • 模型集成与 EMA:指数移动平均平滑参数,提升验证集表现。

常见误区:盲目增大 batch size 而不调整学习率,可能导致收敛变慢;忽略点云密度差异,直接使用统一体素尺寸,会丢失小目标细节;在验证集上过早停止训练,可能错过最佳泛化点。建议结合学习率调度和早停策略,并监控 mIoU 与每类 IoU。

五、案例复盘:城市道路点云语义分割训练

以 SemanticKITTI 数据集为例,使用 SPVCNN 作为骨干网络,输入为 64 线激光雷达点云。训练配置:AdamW 优化器,初始学习率 1e-3,余弦退火至 1e-6,权重衰减 1e-4,batch size 为 8,训练 50 个 epoch。损失函数采用加权交叉熵与 Lovász-Softmax 联合,权重分别为 0.7 和 0.3。数据增强包括随机旋转(±180°)、缩放(0.95~1.05)和点抖动(σ=0.01)。

训练过程中,前 5 个 epoch 使用线性预热,梯度裁剪阈值设为 1.0。最终在验证集上达到 mIoU 68.5%,其中道路、建筑物、车辆类别 IoU 均超过 85%,但行人和自行车类别 IoU 仅为 52% 和 48%。复盘发现,行人和自行车点云稀疏且样本少,后续通过增加过采样和引入 Focal Loss 后,两类 IoU 分别提升至 61% 和 57%。

关键结论:点云语义分割的训练效果不仅取决于网络结构,更依赖于损失函数与优化器的匹配、数据增强策略以及类别不平衡处理。工程中应建立“训练-验证-分析-调参”的闭环,持续迭代。