1. 为什么这篇综述值得反复精读
如果你正在做三维视觉相关的课题,或者刚被导师分配了一个"用深度学习处理点云"的方向,大概率已经在参考文献列表里见过这篇综述。它的标题很直白——Deep Learning for 3D Point Clouds: A Survey,但真正读过几遍之后你会发现,它不只是一份论文清单,更像是一张领域地图,把2017年前后点云深度学习爆发期到2020年之间的主要技术路线梳理得相当清楚。
我第一次接触点云是在一个室内场景重建的项目里。当时手里有一批激光扫描出来的数据,几十万个三维坐标点散落在空间里,没有网格、没有纹理、没有规则的拓扑结构。用传统方法做分割和分类,特征工程写得极其痛苦,效果还很不稳定。后来转向深度学习路线,第一件事就是找综述补课,而这篇是当时读下来结构最完整的一篇。
它解决的核心问题是:把无序、稀疏、不规则的三维点集,喂给擅长处理规则网格数据的神经网络,到底有哪些可行路径,各自的代价是什么。这个问题听起来简单,实际上牵扯到置换不变性、旋转不变性、局部特征聚合、计算效率等一系列硬骨头。综述把这些技术按任务和表示方式分了类,对每一类都给出了代表性方法和对比分析。
适合谁读?我认为有三类人收益最大。第一类是刚入门三维视觉的研究生,需要快速建立技术全景;第二类是做自动驾驶、机器人、AR/VR的工程师,想判断哪种网络结构适合落地;第三类是做多模态融合的人,需要理解点云分支在整个感知管线里的位置。下面我按自己的理解,把这篇综述里最值得深挖的几条线索拆开讲,同时补上一些论文里没展开、但实操中一定会遇到的细节。
2. 点云数据的三个"先天缺陷"决定了网络设计走向
要理解综述里为什么会有那么多看似迥异的网络结构,得先回到点云数据本身的特性上。很多初学者一上来就背PointNet的结构图,结果换个数据集就懵了,根本原因是没搞清楚这些设计到底在对抗什么。
2.1 无序性:置换不变不是可选项而是必选项
点云本质上是一个集合,N个点的排列顺序不影响它表达的几何形状。这意味着任何直接吃原始点序列的网络,如果对输入顺序敏感,就是错的。传统卷积网络在图像上能work,是因为像素有固定的空间邻接关系,而点云没有。
PointNet给出的解法是用对称函数——具体来说就是max pooling——来聚合每个点的特征。无论点怎么打乱,max的结果不变。这个思路在综述里被归为"基于点的直接处理方法"的基石。但要注意,max pooling虽然保证了置换不变,代价是丢失了点的密度分布信息。后来PointNet++引入分层采样和局部区域聚合,就是在补这个短板。
实操中我踩过一个坑:自己实现对称函数时用了sum pooling,理论上也满足置换不变,但训练时对点数变化极其敏感,同一类物体点数从1024变到4096,特征幅值差了好几倍,导致分类头完全失效。后来换成max pooling并加了特征归一化才稳定下来。这个细节综述里不会写,但你在复现时一定会遇到。
2.2 稀疏性与不规则采样:局部邻域怎么定义
点云在空间里的分布是不均匀的,物体表面曲率大的地方点密,平坦区域点稀。更麻烦的是,点与点之间没有显式的连接关系,你要做局部特征提取,第一步得先定义"邻居"。
综述里对比了几种邻域构建方式:KNN(K近邻)、球查询(ball query)、以及基于网格的体素化。KNN按数量取邻居,适合点密度相对均匀的场景;球查询按半径取,能更好地保留几何尺度信息,但半径这个超参很难调——设小了邻居太少,设大了跨区域混入无关点。我在一个室外场景分割任务里试过,半径从0.2米调到0.5米,mIoU能差出6个百分点。
体素化是另一条路,把空间切成规则网格,每个格子里的点用统计量表示。好处是可以直接套用3D卷积,坏处是量化误差和内存爆炸。综述里提到的高分辨率体素方案,在显存有限的卡上基本跑不动,这也是后来稀疏卷积被大量采用的原因。
2.3 旋转不变性:一个至今没有完美解的问题
同一个物体,绕Z轴转90度,点云坐标全变了,但它还是同一个物体。理想情况下网络应该对旋转不变,但主流方法大多只做到了部分不变。
综述里讨论了两类思路:一类是在数据层面做旋转增强,让网络见过各种朝向;另一类是在网络结构里显式设计旋转不变的算子。前者简单粗暴但泛化有限,后者理论优雅但计算开销大。我在实际项目里的经验是,如果应用场景的朝向相对固定(比如车载激光雷达扫描的地面场景),数据增强就够了;如果是机械臂抓取这种任意姿态的场景,就得认真考虑旋转等变网络,否则换个角度就翻车。
提示:不要指望一个网络同时完美解决置换不变、旋转不变和尺度不变。综述里几乎所有方法都是在这三者之间做权衡,选型时先明确你的场景最不能容忍哪种变化。
3. 从PointNet到Transformer:主干网络的演进逻辑
综述的主体部分按时间线和方法论梳理了主干网络的演进。我把这条线重新组织一下,重点讲清楚每一步演进到底在解决前一步的什么遗留问题,这样你在选型时才有判断依据。
3.1 基于点的直接处理:PointNet系列的贡献与天花板
PointNet的核心贡献是证明了原始点云可以直接输入网络,不需要体素化或投影。它的结构极其简洁:每个点独立过MLP升维,然后全局max pooling得到全局特征。分类任务上效果不错,但分割任务暴露了问题——全局特征无法区分局部细节,一个桌子腿和桌面在全局特征里可能混在一起。
PointNet++用分层结构回应了这个缺陷。它先对点云做最远点采样选出中心点,再对每个中心点的邻域做局部特征聚合,逐层抽象。这个"采样-分组-聚合"的范式后来被大量方法沿用。但PointNet++也有代价:最远点采样是串行的,点数多的时候很慢;而且它对每个局部区域用同一个MLP,没有考虑邻域内点的相对位置关系。
我在复现PointNet++时发现,分组半径和采样点数这两个参数对结果影响极大,论文里的默认值在ShapeNet上work,换到自己的数据上必须重新调。建议的做法是先把采样点数设成输入点数的四分之一到二分之一,半径根据点云的平均最近邻距离来定,大概是它的2到3倍。
3.2 卷积的回归:在点云上重新定义卷积核
PointNet系列用MLP替代了卷积,但很多人不甘心,想把卷积的归纳偏置重新引入点云。综述里介绍了连续卷积和离散卷积两条路线。
连续卷积的代表是PointConv和KPConv。KPConv的思路很巧妙:在空间里定义一组可学习的"核点",每个核点有位置和权重,卷积操作就是根据输入点到核点的距离加权求和。这样既保留了卷积的局部性,又适应了点云的不规则分布。我在一个语义分割任务里用过KPConv,精度确实比PointNet++高,但训练时间长了将近一倍,显存占用也大。
离散卷积则是先把点云变到规则结构上再卷积,比如投影到多视图、体素化、或者用切比雪夫多项式在谱域做卷积。这类方法在特定任务上效率高,但转换过程本身就有信息损失。综述里有一张对比表,把各类方法的精度和效率列在一起,那张表值得反复看。
3.3 注意力与Transformer:长距离依赖的诱惑
近两年点云领域最明显的变化是Transformer的渗透。综述虽然成文较早,但已经提到了注意力机制在点云上的应用。核心动机是:卷积和MLP都偏向局部,而点云里相距很远的点也可能有强关联(比如对称结构的两端)。
Point Transformer这类方法把自注意力用在点云上,每个点根据特征相似度聚合全局信息。理论上很美,实际用起来最大的拦路虎是计算复杂度——自注意力是点数的平方级,几万个点直接爆显存。所以后续工作大多在做局部注意力或者线性注意力近似。
我个人的判断是:如果你的点云规模在几千点以内,Transformer值得一试;如果是几十万点的场景级数据,现阶段还是稀疏卷积或PointNet++变体更务实。综述里没有给出这个结论,但这是我从多个项目里得出的经验。
| 主干类型 | 代表方法 | 优势 | 主要代价 | 适用场景 |
|---|---|---|---|---|
| 基于点直接处理 | PointNet/PointNet++ | 结构简单,保留原始几何 | 局部特征表达有限 | 中小规模分类分割 |
| 连续卷积 | KPConv/PointConv | 局部性强,精度高 | 训练慢,显存大 | 精度优先的离线任务 |
| 稀疏卷积 | 基于体素的方法 | 可利用成熟3D卷积 | 量化误差,内存高 | 大规模场景 |
| 注意力/Transformer | Point Transformer | 全局建模能力强 | 复杂度高 | 小规模高精度任务 |
4. 三大核心任务的评测口径与真实差距
综述把点云深度学习的任务分成三类:分类、分割、检测。每一类下面又细分,评测指标和数据集各不相同。这部分是很多人容易囫囵吞枣的地方,我展开讲一下实操中怎么理解这些指标。
4.1 分类任务:整体精度高不代表模型好用
分类任务常用的数据集是ModelNet40和ShapeNet,指标是整体精度(OA)和平均类精度(mAcc)。ModelNet40上现在的方法动辄95%以上,看起来都很强。但这里有个陷阱:ModelNet40是合成数据,物体朝向统一、点分布均匀、没有噪声。你在真实扫描数据上跑,精度掉十几个点是常事。
我在一个真实文物扫描分类的项目里深有体会。合成数据上训好的模型,直接迁移到扫描数据上,OA从94%掉到71%。后来做了两件事才拉回来:一是加入模拟扫描噪声的增强(高斯噪声、随机丢点、局部密度扰动),二是用真实数据做微调。综述里提到的鲁棒性评测部分,值得每个要做落地的人仔细读。
4.2 分割任务:mIoU背后的类别不平衡问题
分割分语义分割和部件分割。语义分割常用S3DIS和SemanticKITTI,指标是mIoU;部件分割常用ShapeNet Part,指标是类别平均IoU。
mIoU这个指标对类别不平衡很敏感。室内场景里墙、地板、天花板的点数远超其他类别,如果模型偏向预测大类,mIoU看起来还行,但小类(比如垃圾桶、白板)的IoU可能低得可怜。我在调S3DIS的时候,专门统计过每个类别的IoU,发现椅子、桌子这类中等大小的物体最难分,因为它们和周围物体的边界模糊。
实操建议:训练时用类别加权损失,评测时除了看mIoU,一定要把每个类别的IoU单独列出来看。综述里有些方法报告的是总体mIoU,没有分项,对比时要小心。
4.3 检测任务:3D检测的难点不在网络而在标注
3D目标检测的数据集主要是KITTI和nuScenes,指标是mAP。检测和分类分割最大的不同是,它需要回归3D边界框,涉及中心点、尺寸、朝向等多个量。
这里有个综述里没强调但极其重要的事实:3D检测的性能瓶颈往往不在网络结构,而在标注质量和数据分布。KITTI的标注只覆盖了视场内的目标,远处和遮挡严重的物体标注不一致。我在一个类似场景的项目里发现,同一批数据用不同标注版本训练,mAP能差5个点以上。
另外,朝向估计是3D检测特有的难点。车头朝前还是朝后,在点云上差异很小,但边界框的朝向错了,后续的跟踪和预测全乱。综述里提到的一些方法用bin-based回归来处理朝向,把连续角度离散成几个区间再分类回归,这个技巧在实际中很管用。
5. 复现综述方法时最容易翻车的五个环节
综述读起来顺畅,但真要复现里面的方法,坑一个接一个。我把这些年踩过的、以及身边同行反馈最多的问题整理出来,按翻车概率排序。
5.1 数据预处理:归一化和采样的顺序错了全盘皆输
点云预处理通常包括:去噪、下采样、归一化到单位球、随机打乱。顺序很重要。我见过有人先归一化再下采样,结果下采样后的点云不再在单位球内,因为下采样改变了点云的包围盒。正确的顺序应该是先去噪,再下采样,最后根据下采样后的点云计算包围盒做归一化。
还有随机打乱,这个操作在训练时要做,但评测时不要做,否则同一份数据两次评测结果不一致,排查问题时会怀疑人生。
5.2 邻域搜索:KNN的K值不是越大越好
KNN的K值直接影响局部特征的感受野。K太小,局部特征不稳定,对噪声敏感;K太大,局部区域跨越了物体边界,特征被污染。综述里很多方法默认K=16或32,但这是针对特定数据集的。
我的经验是,先统计点云的平均最近邻距离,然后让K值对应的邻域半径大约等于平均最近邻距离的3到5倍。如果点云密度变化大,考虑用球查询代替KNN,或者用多尺度分组。
5.3 损失函数:交叉熵不是万能的
分类和分割常用交叉熵,但点云任务有几个特殊情况。一是类别不平衡,需要加权;二是边界区域难分,可以考虑加边界损失;三是分割任务里,相邻点的预测应该平滑,有些方法会加正则项。
我在做部件分割时试过Dice损失和交叉熵的组合,对小部件(比如飞机引擎)的IoU提升明显。综述里没有详细展开损失函数的设计,但这部分对最终指标的影响不亚于网络结构。
5.4 训练策略:学习率调度和批大小的联动
点云网络的训练对学习率很敏感。PointNet系列用Adam,初始学习率1e-3,但批大小不同时这个值不一定合适。批大小增大,学习率通常也要相应增大,否则收敛慢;批大小太小,BatchNorm的统计量不准,训练不稳定。
我一般会先固定批大小(能塞满显存的最大值),然后用学习率扫描找一个使loss下降最快的初始值,再配合余弦退火或阶梯下降。这个流程比直接抄论文里的超参靠谱得多。
5.5 评测协议:别被虚高的指标骗了
最后说评测。综述里汇总的指标都是论文报告值,但不同论文的评测协议可能有细微差别。比如有的方法在评测时用了投票增强(test-time augmentation),有的没用;有的报告的是最后一次epoch的结果,有的是最佳验证结果。
公平对比的前提是评测协议一致。我自己做对比实验时,会把所有方法放在同一套数据划分、同一个评测脚本下重跑。虽然费时间,但结论才可信。综述里那张跨方法对比表,参考价值有,但不能直接拿来当定论。
6. 从综述到落地:我的选型决策清单
读完综述,最终要落到"我该用哪个方法"这个问题上。我把自己做技术选型时的决策逻辑整理成一个清单,供参考。
第一步,明确任务类型和数据规模。分类任务、几千点、合成数据,PointNet++足够;分割任务、几万到几十万点、真实场景,优先考虑稀疏卷积或KPConv;检测任务,直接看KITTI榜单上的成熟方案,不要从零设计。
第二步,评估计算资源。Transformer类方法精度上限高,但训练成本也高。如果只有单卡且显存有限,老老实实用基于点的方法或轻量稀疏卷积。
第三步,考虑部署约束。如果模型要上嵌入式设备,参数量和推理延迟是硬指标。PointNet系列在这方面的优势明显,很多轻量化工作也是基于它做的。
第四步,留出鲁棒性验证的预算。无论选哪个方法,都要在带噪声、带遮挡、密度变化的数据上测一遍。综述里报告的高精度,很多是在理想数据上得到的,真实场景的差距需要你自己去填。
第五步,别忽视传统方法的基线。有些任务里,基于几何特征的传统方法(比如FPFH加SVM)在特定数据上仍然有竞争力,而且可解释性强。深度学习不是唯一解。
| 决策维度 | 优先深度学习 | 优先传统方法或轻量方案 |
|---|---|---|
| 数据规模 | 大规模,标注充足 | 小样本,标注昂贵 |
| 场景复杂度 | 非结构化,类别多 | 结构化,类别少 |
| 实时性要求 | 可离线处理 | 在线实时 |
| 可解释性要求 | 不敏感 | 高要求 |
7. 这个方向接下来还能往哪走
综述成文之后,点云领域又发生了不少变化。自监督学习在点云上的应用越来越热,通过对比学习或掩码重建来预训练,减少对标注的依赖。多模态融合也在深化,点云和图像、文本的联合表征开始出现。另外,大模型思路也在渗透,虽然点云的大规模预训练还面临数据量和计算量的双重挑战。
我个人最关注的是高效推理这一块。点云数据量天然大,很多方法在论文里精度漂亮,一到实际部署就卡在速度上。稀疏计算、量化、剪枝这些在2D领域成熟的技术,在点云上还有很大空间。如果你正在选课题,这个方向既有学术价值,也有明确的落地需求。
回到这篇综述本身,它的价值不在于告诉你哪个方法最好——这个问题没有标准答案——而在于帮你建立起判断方法优劣的坐标系。知道每个设计选择在对抗什么问题,知道每个指标背后藏着什么假设,你才能在面对新任务时做出靠谱的决策。我前后翻过不下十遍,每次做新项目遇到选型困惑时还会回去查,这大概就是一篇好综述该有的样子。