激光雷达点云的路面目标分割一直是自动驾驶和机器人领域绕不开的基础问题。标题里藏着两个关键动作一是对分割模型的网络结构做针对性改良二是在没有目标域标注的前提下用无监督域适应把模型从“源域”搬到“目标域”。这两件事分开做都有人试过但真正把它们合到一个任务里并且让模型在换场景后依然能稳住分割精度才是这篇内容想要解决的问题。适合正在做LiDAR感知、点云语义分割算法落地或者被跨场景数据折磨过的研究者和工程师看。这类项目最反直觉的一点是很多时候模型在训练集上mIoU已经不错了可一旦换到新的路口、新的传感器配置分割结果立刻变得一塌糊涂。真正难的不是把源域拟合好而是让模型学会“适应未知环境”。所以下面我按解决思路、模型结构改动、域适配策略、训练细节到问题排查的顺序把这套方案的所有核心环节都拆开来讲。1. 先拆标题三个关键词里藏着什么需求1.1 道路目标分割到底难在哪LiDAR点云分割和图像分割有一个本质区别图像里每个像素都有颜色和纹理上下文而点云是稀疏的、无序的只有三维坐标和反射强度。道路、车辆、行人、骑行者在点云里的形态差异极大——道路是连续的地面流形车辆是具有明显平面结构的刚体行人则是一小簇离散点。这种数据特性决定了通用图像分割模型不能直接拿来用。你需要处理的数据量很大一帧通常有数万到十几万个点同时每个点能用的特征维度却很少可能只有x, y, z, intensity四个通道。而且类别极不平衡道路上绝大多数点属于“地面”和“道路”这两个背景类真正的前景目标只占了很小比例。如果直接用交叉熵训练模型很容易被背景类带偏小目标的召回率会非常难看。1.2 “无监督域适应”解决的是什么痛点域适应可以理解成你在A城收集了带标注的点云数据把模型训好了现在要部署到B城但B城没有标注数据传感器安装高度、激光束数目、路面植被风格、车辆外形都不同模型直接跑过去精度会大幅掉点。所谓无监督指的是目标域只提供原始点云不提供任何人工标注。这时候模型要想办法从源域带出来的经验中“自学”适应目标域的地貌和物体形态。对比有监督微调无监督域适应成本更低也更接近真实量产落地的场景——毕竟你不能要求每个新项目都先人工标注上万个点云帧。1.3 改进模型结构在这条链路里的地位如果没有一个足够稳健的分割基座后面做域适应全是空中楼阁。结构改进的目标不是堆参数而是让模型对目标的尺度变化更敏感、对边界细节更友好、对目标域的分布偏移有一定鲁棒性。实际工程中我们发现光改模型结构不加域适应跨场景掉点可能超过15个mIoU光加域适应不改结构源域精度又会被结构瓶颈卡住。所以标题里两件事是互为杠杆的关系。2. 模型结构设计怎么把点云分割网络改得更“抗造”2.1 主干选型稀疏卷积是绕不开的地基处理大场景LiDAR点云最稳的做法是先做体素化再用稀疏卷积Sparse Convolution做特征提取。把点云按比如0.05米的分辨率划分到体素格子中空白区域就不参与计算这样几十万个点在实际计算时依然可控。我见过不少团队一开始用PointNet这类基于点的方法但说实话在道路场景这种动辄上百米范围的点云上基于点的方法做全局上下文聚合效率偏低。稀疏卷积配合U型编码器-解码器结构是公认的性价比方案。关键点是编码器部分用标准稀疏卷积快速扩大感受野解码器部分用转置稀疏卷积上采样同时把编码器中间层的特征通过跳跃连接拼回来恢复边界细节。2.2 结构化改动一多尺度空洞稀疏卷积模块单纯堆层数能提升精度但计算量会急剧上升。实际效果更好的做法是在编码器的后两个stage引入多尺度空洞稀疏卷积。具体来说对同一份特征图分别用空洞率1、2、4的稀疏卷积分支提取特征然后拼接融合。这样模型能同时看到短距离的精细结构和长距离的上下文关系专门针对“远处的小行人和近处的大货车”这种尺度跨度极大的道路场景。空洞卷积的核心好处是不增加参数量却让感受野成倍扩大。有人会问为什么不直接用更大的卷积核因为在稀疏卷积体系里大卷积核会把邻近体素都激活导致稀疏程度下降内存和耗时同步上涨。空洞卷积则能在保持计算开销可控的前提下换取更大的感知范围。2.3 结构化改动二轻量级3D注意力模块常规做法是在解码器输出后直接接一个softmax分类头。这种方式对每个点的特征独立处理忽略了通道之间的相关性。我在这套结构里加了两个轻量级注意力一个是通道注意力让网络自动去强调对当前目标更关键的feature map另一个是空间注意力在BEV投影后的特征上学习一个权重图帮模型把注意力放到车辆和行人聚集的区域。这两个模块加起来增加的参数量不到整体模型的5%但在小目标类别上的mIoU能涨2到3个点。原因不复杂注意力机制给解码器提供了自适应的“软选择”让上下文信息有选择性地流向边界恢复阶段。2.4 为什么针对结构改进本身也是个研究点很多复现工作喜欢把结构改进和域适应分成两个独立模块来调但从训练行为看两者是一体的。结构改进会影响伪标签的质量而域适应训练中反传的梯度又会反过来影响编码器的特征分布。如果编码器结构太浅、感受野不够生成的伪标签会带着系统性偏置比如把远处的行人错误地标成杆状物后用再复杂的域对齐手段也纠正不回来。所以我的建议是先不加域适应把源域mIoU练到满足预期的水平再检查特定困难类别行人、骑行者、围墙的精度是否被结构瓶颈卡住。如果卡住了优先调整结构而不是调域适应参数。这个顺序能大幅减少调试时的变量。3. 无监督域适应方案在没有标注的前提下让模型“入乡随俗”3.1 域差异的主要来源域差异不只是传感器型号不同这么简单它体现在三个层面几何分布差异不同城市道路宽度、建筑高度不一样、强度分布差异不同激光雷达对同一物体的反射强度记录不同、类别分布差异某个地区自行车特别多另一个地区货车比例高。三者叠加起来直接导致源域模型对目标域特征空间产生错位。3.2 整体方案伪标签自训练加对抗对齐成熟的做法是把伪标签自训练和对抗特征对齐两套机制放在一个框架里优势互补。伪标签方法能提供类别级别的直接监督信号但容易受噪声影响对抗对齐方法能隐式拉近两个域的特征分布但不提供明确的类别边界信息。结合起来既能利用目标域的具体结构又能遏制伪标签噪声的传播。训练分两个阶段推进。第一阶段用源域数据训练一个初始分割模型得到基础特征提取能力。第二阶段冻结网络参数用初始模型在目标域数据上做预测按置信度筛选得到伪标签。随后用源域标签加目标域伪标签一起继续训练同时加入对抗判别器做域对齐。这样的流程跑两轮效果一般比单轮自训练高出5到8个百分点。3.3 伪标签生成置信度阈值是成败的关键伪标签质量直接决定自训练的上限。我的做法是把主干网络预测出的softmax概率作为置信度按类别分别设置阈值。比如地面和道路这类易分类别阈值可以设低一些0.6即可因为它们的特征非常稳定而行人和骑行者这类易混淆类别阈值要提到0.9以上宁可丢失一部分监督信号也不要让错误的硬标签把模型带坏。为什么按类别区分阈值因为不同类别的分类难度差异巨大统一设0.8会导致简单类别召回不足、困难类别噪声过大。按类别自适应设置阈值本质上是给每个类别一个“选伪标签的准入标准”非常有效。3.4 对抗对齐梯度翻转层加域判别器对抗对齐的工程实现比较成熟在编码器末端特征上接一个域判别器多层感知机目标是把特征区分成“来自源域”还是“来自目标域”。同时在编码器的梯度回传路径中插入一个梯度翻转层让编码器朝着“骗过判别器”的方向更新。这样编码器学习到的特征就会尽量排除域私有信息保留域不变信息。这里有个工程细节值得注意梯度翻转的权重不能一直保持恒定。训练初期用较小的翻转系数避免源域分割精度被对抗训练冲击训练中期逐步加大让域对齐在模型已经稳定的基础上进行后期适度衰减防止模型在目标域上过拟合到某些伪标签错误上。这个系数曲线需要用两三个实验才能确定但对最终精度影响非常大。3.5 损失函数设计谁该占据主导地位整体损失由三部分构成源域的有监督分割损失目标域伪标签上的分割损失以及域判别器的对抗损失。分割损失我推荐使用带类别权重的交叉熵加上Lovász Softmax损失。前者提供全局的梯度信号后者针对mIoU指标做直接优化两者配合在类不平衡时非常实用。对抗损失权重一般控制在0.01到0.1之间太高会干扰分割分支的收敛太低又起不到域对齐效果。伪标签损失和源域损失的权重配比需要动态调整。训练刚开始时伪标签噪声大源域损失权重应该更高随着训练进行模型在目标域上的预测越来越自信再逐步增加伪标签损失的权重。我习惯用简单的线性升温策略从0.1升到0.5实测下来比固定0.5更稳。4. 训练落地从数据预处理到调参的完整细节4.1 点云预处理流程在送入模型之前必须对原始点云做标准化处理。第一步是按距离裁剪把超过70米的点去掉因为远处的点过于稀疏且标注质量参差不齐。第二步是降采样在固定体素内保留一个点或者用体素平均强度作为代表点控制每帧点数在合理范围内。第三步是强度归一化不同传感器的强度范围不一致通常要把强度压到0到1之间再做后续计算。4.2 体素分辨率选型体素分辨率直接决定精度和显存消耗的取舍。常用的是0.05米对近距离目标的结构刻画比较好但如果目标域场景范围很大0.05米会导致体素数量爆炸把显存占满。这时候可以把体素分辨率放宽到0.1米全局精度会掉1到2个点但训练速度和显存占用会显著改善。建议做法是训练时用0.05米硬扛推理部署时再按设备性能调整到0.1米甚至0.15米配合后续的轻量化在校准精度上的损失。4.3 两阶段训练的配置参考第一阶段源域预训练学习率用余弦退火从1e-2降到1e-4经验上要比一上来就训练完整模型稳定得多。第二阶段域适应自训练学习率降到1e-3再到1e-4并且给编码器部分使用较小的学习率解码器和域判别器使用较大的学习率。原因很简单编码器在源域已经学到了较多通用特征不宜大改解码器和判别器需要快速适配目标域信息需要更高的更新幅度。阶段学习率伪标签置信度对抗损失权重训练轮数源域预训练1e-2 - 1e-4不使用030域适应自训练1e-3 - 1e-40.6-0.9按类别0.05204.4 数据增强与防止过拟合点云特有的增强手段包括全局随机旋转尤其在BEV视角内的水平旋转、随机缩放、随机翻转、全局点云dropout。增强变换必须保持点云语义不变所以不能像图像那样随意做拉伸扭曲。另一个容易被忽略的点是域适应训练中源域和目标域数据要按合理比例混批而不是先训完源域再只训目标域伪标签。混批能避免模型在源域上灾难性遗忘同时保持两个域的特征对齐。4.5 显存控制与分布式训练经验这种两阶段的训练方式显存压力不小。实际工程中最有效的办法是限制训练时输入的点云帧点数比如锚定在每帧6万点以内超出部分随机丢弃或按体素采样降密度。分布式训练时BatchNorm的统计量需要跨卡同步否则单卡Batch Size太小会导致域适应训练不稳定。如果条件不允许同步BN替代方案是用GroupNorm替代所有BN层收敛会慢一些但跨卡结果一致性更好。5. 踩坑实录常见问题与排查方法5.1 目标域精度不升反降这是域适应训练中最常见的灾难。我遇到的情况中八成是因为伪标签噪声太大模型被错误监督信号带偏。排查思路是把伪标签渲染出来逐帧检查。如果车辆轮廓残缺、行人数量明显少大概率是置信度阈值过低如果伪标签里出现大量雪花状噪点说明源域模型对目标域完全不适应需要先调结构或加一轮基础域对齐。整体升级路径是先提高置信度阈值再降低对抗损失权重最后检查梯度翻转系数是否过大。5.2 训练损失震荡不收敛对抗训练本质上是一个极小极大博弈过程震荡是常态。如果震荡幅度太大可以优先降低判别器的学习率或者给判别器参数做梯度裁剪。另一个有效做法是引入值域截断对判别器的输出做sigmoid后用标签平滑正样本标签从1降到0.9负样本标签从0升到0.1这种平滑方式能让对抗信号变得更温和显著改善训练稳定性。5.3 小目标类别行人、骑行者丢失根本原因是这类目标在点云中占据的体素数量太少了即使加了类别权重也难以抵抗背景类别的梯度淹没。我试过三种有效手段第一提高小目标类别在损失函数中的权重到背景类的5到10倍第二在数据预处理阶段做目标级别的过采样把包含行人和骑行者的帧重复采样几次相当于不生成额外数据就让网络多看几遍少数类第三在后处理阶段配合连通域分析和形态学膨胀把不完整的小目标预测补全。三管齐下之后这类目标的mIoU能提升到接近正常水平。5.4 代码里的细节坑体素坐标越界和稀疏张量内存泄漏写实现的时候最容易出问题的地方是体素坐标计算。点云范围必须和体素网格的长宽高严格匹配一旦有个别点超出预设范围稀疏卷积库会直接报错或者静默丢点。稳妥做法是在所有涉及范围操作的环节复用同一个配置文件避免不同模块各算各的。另一个坑是稀疏张量在循环训练时如果反复创建会导致显存碎片化解决办法是使用可复用的缓冲池并且定期释放不再引用的中间变量。5.5 推理部署时的速度优化模型练好了不代表能上车跑。稀疏卷积虽然计算量低但在通用深度学习框架上的算子效率通常一般。我测试过的部署路径是把预先训练好的模型导出为即时编译格式并在推理阶段设置合适的体素化参数和点云范围。进一步优化可以用半精度推理精度损失在0.5个mIoU以内速度能提升近一倍。实测一套5层大小的稀疏卷积主干在单卡上能达到接近实时的处理速度基本满足在线感知需求。6. 性能评估与后续演进方向6.1 评估指标怎么选道路目标分割的标准指标是mIoU但对工程落地来说只报一个mIoU远远不够。我会额外记录每一类的IoU以及耗时的95分位数。如果发现地面和道路的IoU很高而行人和骑行者的IoU明显偏低说明模型存在类别间不均衡问题需要回到损失权重做调整。此外评估时要把场景按距离段拆分。远处目标的IoU普遍低但如果连近处的IoU也低那就是模型结构本身的问题不是数据分布的问题。6.2 消融实验如何设计如果你要验证整套方案的有效性建议按四个步骤做消融基线模型无结构改进无域适应、加结构改进观察源域和目标域各自提升多少、加伪标签自训练但去掉对抗对齐观察对抗对齐的实际增益、完整方案。顺序不能乱因为结构改进和伪标签策略之间存在交互。我的经验是把这些结果画成一个表格每一项都标注清楚配置细节方便后续调参对照。6.3 后续可以拓展的三个方向第一时序信息融合。单帧分割的稳定性始终有上限引入连续几帧点云做时序聚合能显著提升远处小目标的召回率。第二多模态融合。如果系统同时搭载了视觉相机可以在域适应阶段加入跨模态监督用图像的语义信息来辅助校准激光雷达的特征空间。第三不断迭代伪标签的自训练循环。每轮自训练结束后重新生成伪标签再次清洗过滤然后接着训练一般三轮之后收益会递减但第一轮和第二轮的提升都很可观。这套方案虽然脱胎于点云道路目标分割但里面的思路可以平移到其他3D感知任务上比如地面分割、障碍物检测甚至多传感器标定的后处理。关键是记住结构改进是抬高能力上限域适应是保住部署下限两者缺一不可。最后分享一点个人体会这类项目最忌一支独秀式调参。源域指标涨得再漂亮也要时刻盯着目标域的表现伪标签质量再高也要定期人工抽查。我现在每次跑完一轮训练一定会随机抽帧渲染分割结果用眼睛确认模型“看到”的物体形状是否符合直觉。数据驱动模型有时候会作弊它记住了源域的纹理模式到了目标域就失效。人脑校验这一步目前任何自动指标都替代不了。
阅读完成 · 觉得有帮助?