哈喽,大家好,我是Sunny。
在点云处理领域,PointNet++是一篇非常有影响力的论文,它提出了一种新的方法来处理3D点云数据。相比于它的前作PointNet,PointNet++在捕捉局部结构和上下文信息方面做出了重要改进。本文将详细介绍PointNet++的主要思想,重点解释其网络结构。
背景:点云数据与挑战
点云是3D空间中数据的集合,其中每个点都包含空间坐标和可能的附加特征(如颜色、法向量等)。点云广泛用于自动驾驶、3D扫描、机器人导航等领域。然而,点云数据的处理有几个挑战:
- 无序性:点云中的点是无序的,网络需要在输入顺序变化时保持不变性。
- 稀疏性与不均匀性:不同区域的点云密度可能差异很大,某些局部区域的点分布较密,而其他区域则可能较稀疏。
- 局部结构的捕捉:在点云处理中,如何有效捕捉和表达局部区域的几何信息至关重要。
PointNet回顾
在PointNet中,作者提出了一种直接处理点云的端到端网络结构,通过应用对称函数(如max-pooling)来实现对输入点顺序的不变性。然而,PointNet在捕捉局部几何结构时存在局限性,因为它只关注全局特征,忽略了局部区域内的特征关系。
PointNet++的创新
PointNet++针对上述问题提出了一种基于分层结构的改进方法。其核心思想是通过递归地应用PointNet在不同的空间尺度上提取特征,从而在保留全局特征的同时,逐层捕捉局部几何信息。
网络结构
P
o
i
n
t
n
e
t
+
+
Pointnet++
Pointnet++ 的网络结构分为三个模块。
- 主干模块:分层点集特征学习
- 分割模块:用于点云的语义分割任务
- 分类模块:用于三维点云物体分类
主干模块的输出特征输入给分割模块和分类模块,这样构成了 P o i n t N e t + + PointNet++ PointNet++ 的整体网络结构。
其中主干模块类似于编码器,分割模块类似于解码器。
主干模块
主干模块包含多个集合抽象层,该层主要是从特征中提取抽象信息。每一个集合抽象层都由采样、分组、 p o i n t n e t pointnet pointnet 编码三个部分组成。
分割模块
分割模块可以看做编码器的一个逆过程,不断的通过插值和跳跃链接拼接编码器中对应的层来还原所有点。最终得到(N,k)的矩阵,获取每一个点的得分。
分类模块
分类模块将特征送入pointnet得到一个全局特征,接着送入全连接神经网络进行特征映射,最后获得k个类别上的得分。
分层特征提取
集合抽象层(SA层)由三个关键层组成:采样层、分组层和PointNet层(特征提取)。采样层从输入点中选择一组点,用于定义局部区域的质心。然后,通过在质心周围查找“相邻”点,对层进行分组来构造局部区域集。PointNet层使用mini-PointNet将局部区域模式编码为特征向量。
一个集合抽象层将 N × ( d + C ) N×(d+C) N×(d+C) 矩阵作为输入,包含 N N N个点,每个点有 d d d维坐标和 C C C维特征向量。它的输出是 N ′ × ( d + C ′ ) N'\times({d+C'}) N′×(d+C′) 的矩阵,其中 N ′ N' N′ 是二次采样后的点,具有 d d d维坐标和总结了局部上下文信息的 C ′ C' C′维特征向量。
集合抽象层的几个关键步骤:
-
采样(Sampling): 使用FPS(Farthest Point Sampling)方法从输入点云中选择一个较小的子集,作为当前层的关键点。FPS确保采样点尽可能均匀地分布在整个点云中,这对捕捉全局特征尤为重要。
-
分组(Grouping): 对于每个采样点,基于欧氏距离定义一个局部邻域,形成一个点集。这个点集包括了当前采样点及其周围的若干近邻点。这样可以在局部区域中捕捉到更细粒度的几何特征。
-
特征提取(Feature Extraction): 在每个分组后的点集中,应用一个小型的PointNet网络来提取局部特征。该过程可以理解为在每个局部邻域内学习一个特征表示,类似于传统卷积神经网络中的局部卷积操作。
-
特征聚合(Feature Aggregation): 通过对每个局部特征进行池化操作(如max-pooling),提取出该局部区域的特征表示,并将其与采样点关联。经过几层处理后,网络逐渐从小尺度局部特征聚合到大尺度的全局特征。
多尺度特征学习
一个重要的改进在于,PointNet++引入了多尺度特征学习(Multi-Scale Grouping, MSG)和自适应特征学习(Multi-Resolution Grouping, MRG)。这些机制通过在不同尺度上进行特征提取,增强了模型对不同粒度几何结构的捕捉能力。
具体来说,MSG在每一层中使用多个不同半径的邻域,而MRG则通过在不同层次中逐渐调整采样密度,使网络更灵活地适应数据的稀疏性变化。
特征传播(Feature Propagation)
在点云分割和分类任务中,通常需要恢复到原始点云的分辨率。
PointNet++通过一个特征传播模块来逐步将分层中提取到的特征映射回原始点集。
这个模块通过插值操作和残差连接将特征逐级传播,确保高分辨率点云的特征信息得以保留。
实验
作者在4个数据集上训练,包括2D物体(MINST),3D物体(ModelNet40 刚性物体,SHREC15 非刚性物体),真实的3D场景(ScanNet)。
- MNIST:手写数字图像,60k训练样本和10k测试样本。
- ModelNet40:40个类别的CAD模型(主要是人造的)。我们使用9843个形状的官方分割用于训练,2468个用于测试。
- SHREC 15:50个类别的1200种形状。每个类别包含24个形状,其中大部分是非刚性的,具有各种姿势,如马,猫等,我们使用五折交叉验证,以获得在这个数据集上的分类精度。
- ScanNet:1513个扫描和重建的室内场景。我们遵循中的实验设置,使用1201个场景进行训练,312个场景进行测试。
在欧式度量空间的点集分类
在 M I N S T MINST MINST 和 M o d e l N e t 40 ModelNet40 ModelNet40 上的表现
使用面法线作为额外特征并使用更多的点的方法在
M
o
d
e
l
N
e
t
ModelNet
ModelNet上表现最好,超越了
C
N
N
CNN
CNN的方法。
对采样密度变化的鲁棒性
如左图所示,在测试期间随机丢弃点,以验证网络对非均匀和稀疏数据的鲁棒性。图中 D P DP DP 是在训练期间随机丢弃输入点。
如右图所示,在采样密度变化时, M S G + D P MSG+DP MSG+DP 和 M R G + D P MRG+DP MRG+DP 表现的比较鲁棒。
从 1024 1024 1024到$25 6 个测试点, 6个测试点, 6个测试点,MSG+DP$ 性能下降不到 1 1 1%。和其他方法相比,在几乎所有采样密度上实现了最好的性能。
P o i n t N e t PointNet PointNet v a n i l l a vanilla vanilla 在密度变化下相当鲁棒,因为它专注于全局特征而不是精细细节。
部分方法在丢失细节后表现不好。 S S G SSG SSG(每个级别具有单尺度分组的消融 P o i n t N e t + + PointNet++ PointNet++)在稀疏采样密度下表现不佳,而 S S G + D P SSG+DP SSG+DP 通过在训练时间中随机丢弃点来修正该问题。
基于点集分割的语义场景标注
为了进行公平的比较,我们在所有实验中删除了RGB信息,并按照ScanNet论文中将点云标签预测转换为体素标签。
与体素化的方法相比,直接在点云上学习可以避免额外的量化误差。为了测试我们的训练模型在非均匀采样密度的扫描上的表现,我们合成了扫描网络场景的虚拟扫描,并在此数据上评估我们的网络。
我们看到,由于采样密度从均匀的点云到虚拟扫描的场景,SSG的性能大大下降。MRG网络对采样密度偏移更具鲁棒性,因为当采样稀疏时,它能够自动切换到描绘较粗粒度的特征。MSG网络仅受到轻微影响,并且在比较中达到了最佳精度。这些都证明了密度自适应层设计的有效性。
由于引入了分层特征学习,并在不同尺度上捕获几何特征。这对于理解多层次的场景和标记各种大小的对象非常重要。在图6中可视化示例场景标记结果。
非欧度量空间中点集分类
本部分主要测试在非欧几里得空间上的泛化性。
在非刚性形状分类中(图7),一个好的分类器应该能够正确地将图7中的(a)和(c)分类为相同的类别,即使考虑到它们的姿态差异,这需要内在结构的知识。
测试结果如表3所示。
总结
PointNet++在PointNet的基础上,通过引入分层结构、局部特征提取、多尺度特征学习和特征传播模块,有效地解决了点云处理中局部几何信息捕捉的挑战。它的设计思想与传统卷积神经网络中的分层特征提取类似,但针对点云数据的稀疏性、不均匀性和无序性做了优化。因此,PointNet++在多个3D点云任务中表现出色,如3D目标检测、语义分割和场景理解。
我是Sunny,你也可以叫我萨宁,一个热爱分享编程知识的程序员。我的昵称是Sunny不要停,寓意是美好的晴朗日子不要停下来,希望大家都能每天开开心心的。我的频道主要分享编程知识,生活,大学计算机学科学习,考研经验。目前有大学学习,考研相关的问题,欢迎关注我,同名公众号[Sunny不要停]可以找到我的联系方式。