从点到面:解密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

相关文章

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

一文带你深入了解Python中的GeneratorExit异常处理

《一文带你深入了解Python中的GeneratorExit异常处理》GeneratorExit是Python内置的异常,当生成器或协程被强制关闭时,Python解释器会向其发送这个异常,下面我们来看... 目录GeneratorExit:协程世界的死亡通知书什么是GeneratorExit实际中的问题案例

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

使用Python实现表格字段智能去重

《使用Python实现表格字段智能去重》在数据分析和处理过程中,数据清洗是一个至关重要的步骤,其中字段去重是一个常见且关键的任务,下面我们看看如何使用Python进行表格字段智能去重吧... 目录一、引言二、数据重复问题的常见场景与影响三、python在数据清洗中的优势四、基于Python的表格字段智能去重

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2