我看了一篇高引用的综述性文章,感觉写的挺好的,把其中的一个部分“3D POINT CLOUD SEGMENTATION” 里的内容结合自己的理解写了篇笔记,在这里进行分享,适合入门选手了解(如果写的有不准确的地方,还请大家指出,谢谢!),需要了解更多细节可以下载这篇论文看。
Guo Y, Wang H, Hu Q, et al. Deep learning for 3d point clouds: A survey[J]. IEEE transactions on pattern analysis and machine intelligence, 2020, 43(12): 4338-4364.
1、3D点云分割方法
🔹一、3D Semantic Segmentation(语义分割)
定义: 将点云中每个点赋予一个“语义类别标签”(比如:地面、建筑、树木、行人、车等)。
1. Projection-Based Methods(投影方法)
思路:把3D点云投影成2D图像,借助图像的CNN来做语义分割。
-
原理:把3D点云“拍成照片”(比如从上往下看),变成2D图像,像处理照片一样用CNN来做分割。
-
类比理解:你把一堆零散的沙子(3D点)拍个照,然后在照片上用涂色的方式标出来“这块是车”,“这块是行人”。
-
举例:将点云投影到地面(BEV视角)、球面(像SqueezeSeg)等,形成类似深度图或RGB图像的结构。
-
优点:可复用成熟的2D语义分割技术。
-
缺点:投影过程会导致信息丢失(比如深度、遮挡问题)。
2. Discretization-Based Methods(离散方法)
思路:把3D空间“划格子”,把点云转换为体素(Voxel)或栅格(Grid),再用3D CNN处理。
-
原理:把点云的3D空间“划格子” → 每个小立方体叫“体素 voxel”,然后用3D CNN对体素处理。
-
类比理解:就像把整个空间分成一个个小“乐高方块”,每个方块里有哪些点,就打个标签。
-
举例:VoxelNet:直接把点云体素化后用3D卷积做处理。
-
优点:有结构感,适合大场景(如建筑、地面)。
-
缺点:分辨率受限,占用内存大,处理效率低。
3. Hybrid Methods(混合方法)
思路:结合投影、体素和原始点云等多种方式取长补短。
-
原理:结合投影、体素和原始点处理,取长补短。
-
举例:MinkowskiNet 结合稀疏体素和卷积方法。
-
优点:效率和精度之间取得平衡。
-
缺点:设计复杂,对工程实现有挑战。
4. Point-Based Methods(基于点的方法)
思路:直接处理原始的点云,使用神经网络。不需要投影或体素化。
-
原理:每个点就像一颗“粒子”,给它输入位置(x, y, z)、有时还加上颜色(r, g, b)或强度信息,让神经网络告诉我们:“这个点属于什么类别”
-
类比理解:像是“一个个点”做问卷调查:“你是地面吗?”“你是车吗?”再根据周围点的回答一起判断。
-
举例:PointNet、PointNet++、DGCNN、PointTransformer。
-
PointNet:输入是点 → 输出每点的分类。
-
PointNet++:考虑邻居点的信息,更精准。
-
DGCNN:把点之间的“边”也考虑进去,用图神经网络提特征。
-
-
优点:原始信息保留最好,处理精度高。
-
缺点:计算量大,点之间缺乏结构(点是无序的),需要设计特别的邻接结构。
🔍 主要代表方法对比:
模型 | 特点 | 能力 |
---|---|---|
PointNet | 直接处理每个点,忽略周围邻居 | 能捕捉整体形状,但对细节不敏感 |
PointNet++ | 加入局部邻域,层次化聚合 | 能识别曲面变化、边缘、小结构 |
DGCNN | 用图建边,动态调整邻居点连接 | 特征更强,适合复杂形状 |
PointTransformer | 用注意力机制建邻居间关系 | 类似Transformer那一套,精度高 |
🔧 模型怎么“理解点”?(以 PointNet++ 为例)
-
采样:选出一部分关键点(比如远离边界的地面、物体边缘)。
-
建邻域:对每个关键点,在点云中找“附近的点”(K近邻 or 球形邻域)。
-
提特征:用MLP(多层感知机)提取邻域内每个点的局部特征。
-
聚合:把邻域内的特征“汇总”成该关键点的特征(类似做平均或最大池化)。
-
堆叠多层:像CNN一样,做成多层局部+全局融合。
🔹二、Instance Segmentation(实例分割)
定义: 不仅要告诉“每个点是啥”,还要知道“属于哪个具体对象”。 比如:图中有两辆车,语义分割都标成“车”,实例分割则会标成“车1”、“车2”。
1. Proposal-Based Methods(候选框方法)
思路:先生成“物体候选区域”,然后在区域内做精细分割。
-
原理:先提出几个“可能是物体”的区域,再在每个区域内精细分类。
-
类比理解:像摄影师先拿一个框圈出“可能是车的地方”,再细看里面是不是车,是几号车。
-
举例:3D-MPA:使用Proposal生成多个候选区域,再做区域内分割。
-
优点:适合处理边界明确的物体。
-
缺点:计算复杂,候选框容易重叠或错位。
2. Proposal-Free Methods(无候选框方法)
思路:不生成候选框,直接根据点之间的关系进行“聚类”,形成不同实例。
-
原理:不生成“框”,直接通过点之间“相似性”或“连通性”来聚类。
-
类比理解:就像你在一堆点之间“拉关系”,谁离得近、特征像,就分成一类。
-
举例:ASIS、JSIS3D、PointGroup。
-
PointGroup:先做语义分割,再将相似点聚成不同“车”或“人”
-
ASIS:共享语义和实例特征,边分边聚类。
-
-
优点:流程简单,适合稠密或无明显边界的点云。
-
缺点:对点的邻接信息、聚类算法依赖大,边界容易模糊。有时边界不清楚,会把两个物体混在一起。
🔹三、Part Segmentation(部件分割)
定义: 通常在一个物体已知的前提下,对其“组成部分”进行分割。 比如:一把椅子 → 椅背、椅腿、坐垫等。
-
思路:先识别是“椅子”,然后在其上进行“部件级别”的细分。
-
类比理解:就像你买了一把椅子,需要给每个部件编号来组装。
-
相关方法:常用 PointNet++ 进行监督训练。
-
举例:常用于CAD建模、ShapeNet Part等任务。
-
基于 PointNet++ 进行训练。
-
使用 ShapeNet Part 数据集(每个物体都带有部件标注)
-
-
优点:常用于CAD建模、ShapeNet Part等任务。
-
基于 PointNet++ 进行训练。
-
使用 ShapeNet Part 数据集(每个物体都带有部件标注)
-
-
缺点:物体部件的定义存在主观性,不同实例的结构差异较大。
总结:任务+方法对照表
任务类型 | 主要目标 | 代表方法类型 | 是否保留原始点云结构 |
---|---|---|---|
Semantic Segmentation | 每点分类(车、人、树…) | 投影 / 体素 / 点云 / 混合 | 点方法保留最好 |
Instance Segmentation | 区分同类不同物体(车1、车2) | 候选框 / 聚类 | 大多数基于点或聚类 |
Part Segmentation | 同一物体的局部分割(椅背等) | 多数基于点云直接操作 | 是 |