3D点云深度学习综述:从PointNet到检测分割的全面解析

发布时间:2026/10/16 1:38:45
3D点云深度学习综述:从PointNet到检测分割的全面解析
1. 为什么3D点云值得单独写一篇综述如果你这两年一直在做视觉相关的项目大概率会有一种感觉2D图像那边的玩法已经非常成熟了分类、检测、分割各有各的经典网络论文刷来刷去无非是 backbone 换一换、注意力加一加。但一旦把场景换成3D点云事情就完全不一样了。点云不是规整的网格它是散落在空间里的一堆坐标数量不定、密度不均、还没有固定的排列顺序。同样一个椅子从不同角度扫出来的点云点的个数可能差好几倍顺序也完全对不上。这就导致2D里那套卷积、池化的思路没法直接搬过来用。我最早接触点云是在一个室内重建的小项目里当时用深度相机扫了一圈房间拿到几十万个点想做个简单的物体分类。结果发现把点云直接丢给常规网络根本跑不通要么是输入维度对不上要么是训练完全不收敛。后来才慢慢摸清楚点云深度学习是一个相对独立的方向它有自己的问题定义、自己的网络设计范式、自己的评价体系。这篇综述论文《Deep Learning for 3D Point Clouds: A Survey》做的就是把这些零散的东西系统性地梳理一遍从3D数据的几种表示形式讲起一路覆盖到分类、分割、检测这几大核心任务最后还讨论了少样本、对抗攻击这些前沿话题。这篇文章适合谁看我觉得有三类人。第一类是刚进入3D视觉方向的研究生或者工程师需要一份能快速建立全局认知的地图第二类是已经在做2D视觉、想往3D迁移的从业者需要知道哪些经验可以复用、哪些坑必须重新踩第三类是做机器人、自动驾驶、AR/VR相关产品的开发者需要判断当前点云技术到底能做到什么程度、哪些任务已经相对成熟可以落地。接下来我会按照这篇综述的脉络把里面的核心技术点拆开讲同时补上我自己在实操中积累的一些经验和判断。2. 3D数据的表示方式与点云的特殊性2.1 四种主流3D表示形式对比在深入网络结构之前必须先搞清楚一个前提问题3D数据到底怎么表示。这篇综述里把常见的表示形式分成了四类我结合自己的理解重新整理一下。表示形式数据结构优点缺点典型网络点云无序点集合 (x,y,z)保留原始几何信息采集直接无序、稀疏、密度不均PointNet系列体素规则3D网格可复用3D卷积分辨率与内存矛盾尖锐VoxNet、3D U-Net网格顶点面片表面连续渲染友好从点云重建网格有误差MeshNet多视图多个2D投影可复用成熟2D网络遮挡丢失信息视角选择敏感MVCNN体素这条路我试过把点云量化成比如 64×64×64 的网格然后套3D卷积。听起来很顺但实际做的时候你会发现一个尴尬的事情分辨率提上去显存直接爆炸分辨率降下来很多细节就糊成一团了。一个 256³ 的体素网格光是存储就是一千六百多万个体素大部分还是空的。所以体素方法后来基本只在一些对精度要求不那么极致的场景里用。多视图的思路更取巧一些把3D物体从多个角度拍成2D图然后用2D网络提取特征再融合。这个方案的好处是能直接吃2D视觉的红利但问题也很明显视角怎么选选少了信息不全选多了计算量翻倍而且遮挡区域永远拍不到。网格表示则更多用在图形学渲染那边从点云重建网格本身就是一个难题。所以绕了一圈点云这种最原始的表示反而成了深度学习时代最受关注的方向。它没有中间转换的损失采集设备激光雷达、深度相机直接输出的就是点。难点在于你得设计一种网络能处理这种无序、稀疏、密度不均的数据。2.2 点云处理的三个核心难点我把点云深度学习的难点归纳成三条这三条几乎决定了后面所有网络设计的基本思路。第一是无序性。给你一堆点你把它们的顺序打乱这个点云代表的还是同一个物体。这意味着网络必须对输入顺序具有置换不变性。传统卷积天然依赖固定的空间位置没法直接用。PointNet 的解法是用对称函数比如最大池化把每个点单独提特征之后取全局最大值这样无论顺序怎么变结果都一样。第二是稀疏性和密度不均。激光雷达扫出来的点近处密密麻麻远处稀稀拉拉。深度相机也是离得近的地方点很多边缘区域可能就几个点。这种不均匀性会让网络在稠密区域过拟合、在稀疏区域欠拟合。常见的应对手段包括最远点采样做下采样、或者用球查询在局部自适应地聚合邻居。第三是旋转不变性。同一个物体你把它转个角度点云坐标全变了但它还是同一个物体。理想情况下网络应该对旋转不敏感。但实际中大部分网络并没有显式地处理这个问题通常靠数据增强随机旋转来让网络自己学会。也有一些工作专门设计旋转等变的网络结构但复杂度和收益之间的权衡一直是个问题。提示如果你刚开始做点云项目不要一上来就追求旋转不变性。先用数据增强把基线跑通再考虑要不要引入更复杂的等变结构。很多场景下数据增强带来的鲁棒性已经够用了。3. 点云分类与分割的核心网络演进3.1 从PointNet到PointNet局部特征的关键一步PointNet 是这个方向的里程碑它的核心思想非常简洁对每个点用一个共享的MLP提特征然后用最大池化聚合全局特征。这个设计优雅地解决了无序性问题而且参数量很小。但它的短板也很明显它只提取了全局特征没有利用局部结构。你可以理解为它把每个点单独看然后取了个全局最大值但点与点之间的邻域关系完全没管。PointNet 就是冲着这个短板去的。它引入了层级化的特征提取简单说就是先把点云分成若干局部区域在每个区域内部用PointNet提特征然后逐层抽象。这个思路其实和2D卷积网络里感受野逐层扩大的逻辑是一致的。具体实现上它用最远点采样选中心点用球查询找邻居然后在每个球内做特征聚合。我在复现PointNet的时候踩过一个坑最远点采样的计算量其实不小尤其是点数多的时候。后来发现很多工程实现里会用随机采样或者体素下采样来替代精度损失不大但速度快很多。这个取舍在实际项目中很值得考虑论文里不一定写但你跑起来就知道时间都花在哪了。3.2 基于卷积的点云网络把卷积搬到3D空间PointNet系列之后有一大批工作试图把卷积操作重新引入点云处理。思路大致分两种一种是把点云投影到规则网格上再做卷积另一种是直接在点云上定义连续卷积。基于网格的方法里比较有代表性的是把点云体素化之后用稀疏卷积。稀疏卷积的好处是只对非空体素做计算避免了大量无效运算。这个思路在自动驾驶场景里用得比较多因为激光雷达点云本身就非常稀疏稀疏卷积能把计算效率拉回来不少。直接在点云上做卷积的代表是点卷积类的方法比如用核密度估计或者参数化卷积核在每个点的邻域内做加权聚合。这类方法的优势是保留了原始几何精度但实现起来比稀疏卷积复杂调参也更麻烦。我个人的经验是如果你的场景对精度要求极高、点数又不算太多可以试试点卷积如果是大规模场景、实时性有要求稀疏卷积更稳妥。3.3 基于图的方法与注意力机制点云天然可以看成一张图每个点是节点邻域关系是边。所以图神经网络很自然地就被引入进来。基于图的方法核心在于怎么定义边、怎么在边上做消息传递。相比固定邻域的卷积图方法可以更灵活地建模长距离依赖。注意力机制在点云里的应用也是这两年的热点。核心思路是让网络自己学习每个邻居点的权重而不是像传统卷积那样用固定的空间权重。这样做的好处是能自适应地关注更重要的局部结构。但注意力机制的计算复杂度通常是邻居数的平方点数一多就很吃力。所以实际用的时候往往需要在注意力和效率之间做权衡比如只在小范围邻域内做注意力或者用线性注意力近似。3.4 分割任务的特殊考量分类是给整个点云打一个标签分割是给每个点打一个标签。这个区别决定了分割网络必须保留更多的局部信息。分类网络可以一路下采样到全局特征但分割网络在下采样之后还得上采样回去把每个点的类别预测出来。常见的分割架构是编码器-解码器结构编码器逐层下采样提特征解码器通过插值或者反池化逐步恢复分辨率。这里有个关键细节上采样的时候怎么把特征传回去。最简单的是最近邻插值但这样会丢失细节。更好的做法是像U-Net那样把编码器对应层的特征跳连到解码器让浅层的几何细节和深层的语义信息融合起来。我在做部件分割的时候发现跳连的设计对边缘区域的精度影响特别大。没有跳连的时候物体边界附近的点经常被分错因为深层特征虽然语义强但空间分辨率太低。加上跳连之后边界精度能提升好几个百分点。这个经验在论文里可能只是一句话但实际调的时候值得重点关注。4. 3D目标检测从室内到室外的主流方案4.1 检测任务的两种主流范式3D目标检测和2D检测一样核心是找出物体在哪里、是什么。但3D里多了一个维度问题复杂度上了一个台阶。主流方案大致分两类一类是基于候选框的方法先生成一堆可能包含物体的3D框再分类和回归另一类是单阶段方法直接在每个点上预测类别和框参数。基于候选框的方法精度通常更高但速度慢因为生成候选框和后续处理都很耗时。单阶段方法速度快适合实时场景但小物体的召回率往往不如两阶段。这个取舍和2D检测里的情况非常类似本质上还是精度和速度的平衡。4.2 室外场景激光雷达点云的特殊处理室外自动驾驶场景的点云有几个鲜明特点范围大几十米到上百米、稀疏、前景和背景极度不平衡。一辆车可能只占几百个点而地面和背景占了绝大多数。所以室外检测网络通常需要专门设计前景采样策略或者在损失函数里对前景加权。另一个关键问题是坐标系。激光雷达点云是在传感器坐标系下的而检测需要在世界坐标系或者鸟瞰图视角下做。所以很多方法会先把点云投影到鸟瞰图然后在鸟瞰图上做2D检测。这样做的好处是可以复用成熟的2D检测网络而且鸟瞰图视角下物体不会重叠后处理简单。但缺点是丢失了高度信息对于高度差异不大的物体比如行人和自行车区分度不够。4.3 室内场景密集点云与多模态融合室内场景的点云通常来自深度相机或者结构光设备特点是范围小、密度高、噪声大。室内检测的难点在于物体之间遮挡严重、类别繁多、尺度变化大。很多室内方法会融合RGB图像和点云因为RGB提供纹理信息点云提供几何信息两者互补。多模态融合说起来简单做起来麻烦。最大的问题是标定误差和对齐精度。RGB和深度图之间的对齐如果差几个像素融合特征就会错位反而拖累性能。我在一个室内抓取项目里试过早期融合和晚期融合最后发现晚期融合各自提特征再拼接虽然简单但鲁棒性反而更好因为对对齐误差不那么敏感。4.4 检测中的评价指标与常见陷阱3D检测的评价指标主要是IoU交并比和mAP平均精度均值。但3D IoU的计算比2D复杂因为涉及到旋转框。两个3D框即使中心很近如果旋转角度差很多IoU也可能很低。所以有些工作会用BEV视角下的IoU或者3D IoU的近似计算。一个常见的陷阱是在训练集上IoU很高但测试集上掉得厉害。这通常是因为过拟合了训练场景的特定分布。比如训练集里车都是朝一个方向停的测试集里车朝向变了旋转回归就崩了。解决办法除了数据增强还可以在损失函数里对旋转误差单独加权或者用一些旋转解耦的表示方法。注意做3D检测的时候一定要检查你的标注框的坐标系定义和网络输出的坐标系定义是否一致。我见过不止一个项目因为坐标系搞反了导致训练完全不收敛排查了好几天才发现是标注工具和网络约定不一样。5. 前沿方向与实战中的取舍5.1 少样本与自监督学习标注3D数据比标注2D数据贵得多。一张2D图框个物体几秒钟但3D点云里框一个物体需要旋转、缩放、调整朝向熟练的标注员也要几十秒。所以少样本学习和自监督学习在点云领域特别受关注。自监督的常见思路是设计前置任务比如让网络预测点云被旋转的角度、预测被遮挡的部分、或者对比不同视角下的特征一致性。这些任务不需要人工标注可以利用大量未标注点云来预训练。预训练之后再在小规模标注数据上微调往往能显著提升性能。我在一个数据标注成本很高的项目里试过自监督预训练效果确实明显。但要注意前置任务的设计要和下游任务相关。如果你用重建任务预训练但下游是分类提升可能有限如果用对比学习预训练下游是分割也可能不太匹配。选前置任务的时候要想清楚它学到的特征对下游有没有用。5.2 对抗攻击与鲁棒性点云网络同样面临对抗攻击的问题。攻击者可以通过轻微扰动几个点的坐标让网络把飞机识别成桌子。这种攻击在自动驾驶场景里是很危险的因为路面上一个被篡改的点云可能导致检测失效。防御手段目前主要有两类一类是输入层面的去噪和滤波把异常点过滤掉另一类是在网络里加入鲁棒性约束比如对输入扰动做平滑。但说实话目前还没有特别成熟的通用防御方案这个方向还有很大的研究空间。实际部署的时候如果安全要求高建议在点云预处理阶段加一些统计滤波把明显离群的点去掉能挡掉一部分简单攻击。5.3 实际项目中的选型建议结合我自己的经验给几个选型上的建议。如果你的任务是点云分类而且点数不多几千到几万PointNet 或者基于注意力的方法都可以优先考虑实现简单、社区资源多的方案。如果点数很多几十万以上先做下采样或者用稀疏卷积。如果是部件分割或语义分割编码器-解码器结构是标配重点调跳连方式和上采样策略。如果对实时性有要求可以考虑轻量化的 backbone或者用点云下采样加特征插值的方式加速。如果是3D检测室外场景优先考虑鸟瞰图投影加2D检测的路线工程上更成熟室内场景如果有多模态数据建议做RGB和点云的融合但要注意对齐精度。如果是研究性质的项目想发论文或者探索新方向可以关注自监督、旋转等变、高效注意力这几个方向目前还有很多空白。5.4 常见问题速查问题现象可能原因排查方向训练不收敛学习率过大、坐标系不一致检查标注和网络坐标系降低学习率测试精度远低于训练过拟合、数据分布不一致加数据增强检查测试集场景差异显存溢出点数过多、batch过大下采样、减小batch、用稀疏卷积推理速度慢最远点采样耗时、注意力复杂度过高换采样策略、简化注意力小物体检测差前景背景不平衡前景加权、focal loss、多尺度特征6. 一些踩坑之后的个人体会做点云这几年最大的感受是这个领域变化太快但底层的东西其实没那么复杂。不管网络结构怎么变核心问题始终是那三个无序性、稀疏性、旋转不变性。你把这三个问题想清楚了看新论文的时候就能很快抓住它的核心贡献在哪里。另一个体会是工程实现和论文描述之间往往有差距。论文里一笔带过的采样策略、损失权重、后处理参数在实际项目里可能决定了最终效果的好坏。所以我的习惯是看论文先看它的核心思想然后自己复现的时候把每个细节都调一遍记录下哪些参数敏感、哪些不敏感。这些记录比论文本身更有价值。最后说一个具体的技巧做点云项目的时候一定要把可视化工具搭好。点云不像2D图像那么直观很多问题光看loss曲线是看不出来的。把输入点云、中间特征、输出结果都可视化出来你会发现很多隐藏的问题比如标注错误、坐标系偏移、采样偏差。这个习惯帮我省了很多排查时间。