4. 深度学习基础

点云语义分割的现代方法几乎都建立在深度学习之上。要理解 PointNet、PointNet++、RandLA-Net、KPConv 等网络为何这样设计,必须先掌握神经网络的基本计算单元、卷积与池化的作用、反向传播如何驱动参数更新,以及点云任务中损失函数为何与二维图像不同。本章从计算图视角出发,把这些基础概念串联成一条可操作的认知链路。

一、神经网络基础:从线性变换到非线性表达

单个神经元完成的是“加权求和 + 偏置 + 激活”三步操作。若输入特征为 x,权重为 W,偏置为 b,则输出为 y = f(Wx + b),其中 f 是非线性激活函数。没有非线性,多层网络等价于一次线性变换,无法拟合复杂的三维几何边界。常用激活函数包括 ReLU、LeakyReLU、GELU,点云网络中 ReLU 因计算简单、梯度稳定而最常见。

多层感知机(MLP)由若干全连接层堆叠而成。在点云任务中,MLP 常被逐点共享使用:对每个点独立地做相同的特征变换,从而把原始坐标或颜色映射到高维嵌入空间。这种“共享权重”思想是点云网络能够处理无序点集的关键前提之一。

核心理解:神经网络不是“记住点”,而是学习一组可复用的特征变换参数。点云中的共享 MLP 让同一组参数作用于所有点,天然具备置换不变性。

二、卷积与池化:局部感受野与空间聚合

卷积在图像中通过滑动窗口提取局部模式,其三大特性是局部连接、权重共享和平移等变性。对于规则网格,卷积核可以整齐地覆盖邻域;但点云是无序、不规则、稀疏的,无法直接套用二维卷积。因此点云领域发展出两类替代方案:一类是 PointNet 式的逐点 MLP + 对称函数,另一类是 PointNet++、KPConv 式的局部邻域卷积或连续卷积核。

池化用于降维和聚合信息。最大池化(max pooling)在点云中尤为重要,因为它对输入顺序不敏感,能够把一组点的特征压缩成一个全局或局部描述子。PointNet 正是用最大池化实现全局特征提取,使网络对点的排列顺序保持不变。

点云语义分割网络:前向传播与反向传播 输入点云 N×3 坐标 共享 MLP 逐点特征升维 局部邻域聚合 KNN / 球查询 最大池化 置换不变聚合 分割头 逐点类别 损失函数 交叉熵 + Dice + 边界损失 反向传播与参数更新 链式法则 → 梯度 → 优化器 梯度回传,更新共享 MLP 权重 前向:特征逐层抽象 坐标 → 局部几何 → 语义 反向:误差逐层归因 梯度决定参数调整方向

三、反向传播:链式法则驱动的参数更新

前向传播得到预测后,损失函数衡量预测与真值的差距。反向传播利用链式法则,从损失出发逐层计算每个参数对损失的偏导数,即梯度。以单层为例,若 z = Wx + b,a = ReLU(z),则反向时先得到 da,再经激活函数导数得到 dz,最后得到 dW = dz · x^T 与 db = dz。优化器(SGD、Adam、AdamW)根据梯度更新权重:W ← W - lr · dW。

点云网络的反向传播有两个特殊点:其一,最大池化只把梯度回传给取得最大值的那个点,其余点梯度为零,这使网络自动关注显著点;其二,共享 MLP 的梯度是所有点梯度的累加,因此 batch 内点数越多,梯度估计越稳定,但显存占用也越高。

# 伪代码:一次训练迭代
for points, labels in dataloader:
    logits = model(points)          # 前向:N×C
    loss = criterion(logits, labels) # 损失计算
    optimizer.zero_grad()            # 清空历史梯度
    loss.backward()                  # 反向传播,累积梯度
    optimizer.step()                 # 更新共享 MLP 权重

四、点云任务中的损失函数

点云语义分割通常面临类别极不平衡:地面、墙面点数量远多于行人、交通标志。若只用交叉熵,网络会偏向多数类。因此实践中常组合多种损失:交叉熵提供稳定分类梯度,Dice Loss 关注前景重叠度,Focal Loss 降低易分样本权重,边界损失则强化类别交界处的分割精度。

损失函数 核心形式 适用场景 注意事项
交叉熵 -Σ y log(p) 多分类基线 类别不平衡时需加权
加权交叉熵 -Σ w·y log(p) 小目标、稀有类 权重需按频率调参
Dice Loss 1 - 2|A∩B|/(|A|+|B|) 前景分割、边界敏感 训练初期不稳定
Focal Loss -Σ (1-p)^γ log(p) 难例挖掘 γ 过大易过拟合
边界损失 边界点距离惩罚 精细分割 需额外边界标注

五、案例:城市道路点云中的类别不平衡处理

假设一份车载激光点云中,道路点占 72%,建筑点占 18%,植被点占 8%,行人与车辆合计不足 2%。若直接使用交叉熵,模型可能把行人误判为道路。实践中可采用“加权交叉熵 + Dice”组合:对行人类别设置较高权重,同时用 Dice 约束前景区域完整性。训练日志中应重点观察每类 IoU,而不是只看总体准确率。

常见误区:只关注总体 loss 下降,忽略小类别 IoU。点云分割中总体准确率很容易被多数类“刷高”,必须按类别评估。

六、复盘:从基础到点云网络设计

理解本章内容后,再看 PointNet 的对称函数、PointNet++ 的层次化邻域、RandLA-Net 的随机采样与局部特征聚合,就能明白它们分别解决了置换不变性、局部结构提取和大规模点云效率问题。损失函数的选择则直接决定网络是否关注稀有类别和边界区域。建议在复现任意点云分割网络时,先固定损失函数与评估指标,再调整网络结构,这样才能把“基础”真正转化为可复用的工程能力。

学习建议:手写一遍单层 MLP 的前向与反向传播,再用 PyTorch 验证梯度,是理解点云网络训练过程最有效的方式。