从点到面:解密PointNet++如何让点云处理更智能

2024-08-26 23:20

本文主要是介绍从点到面:解密PointNet++如何让点云处理更智能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

哈喽,大家好,我是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不要停]可以找到我的联系方式。

这篇关于从点到面:解密PointNet++如何让点云处理更智能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109979

相关文章

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

Rust 智能指针的使用详解

《Rust智能指针的使用详解》Rust智能指针是内存管理核心工具,本文就来详细的介绍一下Rust智能指针(Box、Rc、RefCell、Arc、Mutex、RwLock、Weak)的原理与使用场景,... 目录一、www.chinasem.cnRust 智能指针详解1、Box<T>:堆内存分配2、Rc<T>:

Python异常处理之避免try-except滥用的3个核心原则

《Python异常处理之避免try-except滥用的3个核心原则》在Python开发中,异常处理是保证程序健壮性的关键机制,本文结合真实案例与Python核心机制,提炼出避免异常滥用的三大原则,有需... 目录一、精准打击:只捕获可预见的异常类型1.1 通用异常捕获的陷阱1.2 精准捕获的实践方案1.3

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja