当前位置: 首页 > news >正文

【点云分类】简述对pointnet和pointnet++的理解

前言        

        如果你和我一样,是一名刚刚踏入三维点云处理世界的新手,你一定听说过 PointNet 和 PointNet++ 这两个大名鼎鼎的模型。它们就像是3D视觉领域的“开山鼻祖”,理解了它们,学习之路会顺畅很多。

        本文中我会根据最近从B站以及博客中看的内容,梳理一下对这两个模型的理解。

为什么会有点云模型?

        在深入了解PointNet之前,我们不妨先思考一个问题:为什么我们熟悉的二维图像处理方法(例如CNN,即卷积神经网络)无法直接应用于三维点云?

        不妨将一张图像想象成一个整齐排列的网格,每个像素都有其固定的位置。CNN中的“卷积核”就像一个小窗口,在这个网格上以规则的步伐滑动,从而提取特征。然而,点云数据却截然不同——它更像是一把被随意抛洒在空中的沙粒,具有两个关键特性,使得传统的CNN方法难以直接适用:

  • 无序性(Unordered):点云是一组点的集合,其输入顺序不应影响对物体本身的描述。例如,先处理A点再处理B点,与先处理B点再处理A点,所表示的是同一个三维物体。但对于普通神经网络来说,输入顺序的改变往往会导致输出结果的巨大差异。

  • 非规则的空间分布(Sparsity & Irregularity):点云在三维空间中的分布是不均匀且不规则的。某些区域可能非常密集(如物体的边缘和角落),而其他区域则较为稀疏(如平坦的表面)。因此,我们无法像在图像上那样,使用固定尺寸的卷积核进行规则滑动采样。

        正是为了克服这两个根本性挑战,PointNet 才得以提出并成为这一领域的里程碑。

Pointnet:直接处理无序点云的深度学习模型

1.解决了什么核心问题?

        前面提到点云和二维图像最大的差别是其具有“无序性”,而pointnet的作者就提到:我需要找到一种方法,无论点的顺序怎么打乱,我最后得到的特征都是一样的。这种特性在数学上叫做“对称函数” (Symmetric Function)。PointNet最终选择了 Max-Pooling(最大池化) 作为它的核心对称函数。

        对于Max-Pooling,我们都知道,他是通过选取N个特征中的“最大值”,来对这些特征图进行“瘦身”,即降维处理。那么这个最大值在真实物体中的实际意义是什么呢?

        我们可以把它理解为整个点云在某个特征维度上的 “最具代表性的发言”或 “最关键的证据”。比如:在识别一把椅子时,对“椅背高度”这个特征,最大值很可能来自椅子的最高点。络中的每个特征通道(Channel)都在学习检测某种特定的模式或结构(如边缘、弧度、平面等)。Max Pooling操作汇集了所有点在该通道上的响应,并只保留最强的那个。这个最强的响应就足以代表整个物体是否具有该模式

2.PointNet工作流程

  1. 独立特征提取:

    • 输入是一堆点的坐标(一个大小为 N x 3 的矩阵,N是点的数量,3是XYZ坐标)。

    • PointNet对 每一个点 单独进行特征学习,把它从3维映射到更高维度的空间(比如1024维)。你可以把它想象成给每个点“画像”,让它的信息更丰富。这一步是通过几个共享参数的多层感知机(MLP)完成的。

  2. 全局特征聚合(关键一步):

    • 现在我们有N个1024维的特征向量了。

    • PointNet在这些特征向量的 每一个维度上 做一次Max-Pooling。也就是说,在第一个维度上,从N个点中选出最大值;在第二个维度上,也选出最大值……以此类推。

    • 做完之后,N个点的特征就被“压”成了一个1024维的 全局特征向量。这个向量代表了整个点云的“样子”。因为Max-Pooling是无序的,所以无论输入点的顺序如何,这个全局特征都是不变的!

  3. 输出结果:

           最终的全局特征向量被送入不同的输出网络以完成特定任务,比如接一个分类器判断这个点云是什么物体(桌子?椅子?),或者做一个分割器判断每个点属于物体的哪个部分。

        PointNet虽然开创了直接处理点云的先河,但其方法存在一定的局限性。它通过最大池化(Max-Pooling)将所有点的信息压缩为一个全局特征向量,这种方式虽然高效,却导致模型难以捕捉局部结构信息。

        举例来说,PointNet能够识别出整体对象是一辆汽车,但在细分结构层面,例如区分车轮、车灯或车窗等局部部件时,其能力较为有限。这是由于模型在聚合过程中平等对待所有点的特征,忽略了点与点之间的空间关系与局部几何上下文,从而削弱了对细节结构的感知能力。        

3.模型效果

ModelNet40 上的分类结果:

Pointnet++:从全局到局部的精细化升级

        为了解决其前代模型 PointNet 的一个根本性缺陷:无法有效地捕捉点云中精细的局部结构,pointnet++在2019年被提出,它借鉴了卷积神经网络(CNN)的多层感受野思想,通过分层地划分局部区域并在每个区域内部使用 PointNet 进行特征提取,从而自底向上地逐步捕获从简单到复杂、从小范围到大范围的多尺度局部特征。

1.网络结构(SA)

        PointNet++网络结构如图所示,主要包含set abstraction(SA)块,分割网络中上采样的插值操作(interpolate),其中SA由sampling layer grouping layer和pointnet layer构成,接下来依次对其进行介绍。 

sampling layer

        给定输入点集 P,迭代最远点采样(Farthest Point Sampling, FPS)用于从中选取一个子集 S,使得每次被选入的点 pi​ 都是当前剩余点中距离已选点集 S 最远的一个。具体步骤如下:

  1. 选择初始点:通常可随机选取一个点,或选择距离点云重心最远的点作为起始点 p0​,此时初始候选集为 S={p0​}。

  2. 定义距离:对于任意点 q∈P∖S,定义其到当前候选集 S 的距离为:d(q,S) =  min​∥q−s∥,(s∈S),即该点到 S 中所有点的最小欧几里得距离。

  3. 选取最远点:从剩余点中选出使得 d(q,S)最大的点 pi​,将其加入候选集 S。

  4. 重复步骤2–3,直到 S 中点的数量达到预设值 K。

        FPS 算法与泊松盘采样(Poisson Disk Sampling)有相似之处,但后者通常引入更多随机性,并对点间最小距离的要求更为宽松。相比之下,FPS 无需任何参数,确定性更强(尤其当初始点非随机选择时),因此在实际应用中通常更易于实现和控制。

采样层最终输出 K个采样点,这些点将用于后续的局部特征构建。

grouping layer     

        组合层的输入包括维度为 n×d 的原始点集和 k 个采样点。对于每一个采样点,通过 ball query 操作收集其固定半径范围内最近的 m 个邻近点(m 可能随不同采样点而变化)。与 KNN(K近邻)方法不同,ball query 通过限制空间范围,确保了每个局部区域具有相同的物理尺度,从而增强了局部特征的一致性。

        对于每个采样点,其邻域点可表示为一个 m×d 的矩阵。将所有采样点对应的局部区域组合起来,即得到一个维度为 k×m×d 的三维矩阵,该矩阵聚合了多个局部点集信息。若与二维图像处理进行类比,每个局部区域类似于卷积神经网络(CNN)中的一个感受野。不同之处在于,CNN 可通过规则的滑动窗口高效处理图像,而点云中的局部结构则需通过 ball query 这类操作显式构造。

pointnet layer

对采样点进行局部特征提取,其提取过程如下图所示:

        输入为(N1,K,d+c),输出为(N1,d+c1),其中c1表示经过pointNet Layer后特征维度,直观理解可以参照下图,即每一个采样点及其领域K个点经过特征提取后都形成一个新的特征,N1个采样点最终提取得到N1个特征。       

        这层通过中心化操作和特征拼接来实现局部特征聚合,目的就是将每个局部区域内的点信息聚合成一个特征向量。

2.稀疏点云的处理

        在实际点云采样过程中,其密度是不均匀的,比如下图,离相机较近的点云较密,而远点的点云较稀疏。如果按照同一领域半径去寻找领域点,那对于稀疏的地方局部特征其实是比较差的,为了解决这一问题,作者提出了MSG和MRG两种方式。

         

MSG

        多尺度进行采样,即前面提到的grouping layer不采用同一个半径R,而是采用不同的半径和采样个数,然后每次采样的特征都经过pointnet layer提取到特征后再进行融合,参照下图应该就清晰了。

MRG

        多层级进行采样,主要是考虑到如果对每一个采样点都进行MSG,计算量太大。MRG采用两个pointnet layer对特征进行提取和聚合,过程见下图。

3.Dropout 

        为提高模型鲁棒性,在训练的时候采用随机丢弃点云的策略DP,即给定一个概率α∈[0,p],每个点云都按照概率α来决定是否丢弃该点,实验对比结果是加入DP后模型鲁棒性更好,最佳组合是MSTG+DP,其中SSG就是grouping layer里面提到的单尺度采样。        ​​​​​​​        

4.模型效果

分类对比:

写在最后

        PointNet和PointNet++是3D点云深度学习的基石。虽然现在已经有了更多更复杂的模型,但它们的思想——如何解决无序性、如何学习局部和全局特征——依然在影响着后续的研究。

        对于初学者来说,不必急于深究代码的每一个细节,最重要的是理解其背后的思想

参考资料

https://www.bilibili.com/video/BV1x24y1s7TV/?spm_id_from=333.1387.collection.video_card.click

细嚼慢咽读论文:PointNet论文及代码详细解析 - 知乎

从PointNet到PointNet++,小白也能看懂的核心思想 - 开源小栈

深度学习3D网络---PointNet++ - 半夜打老虎 - 博客园

论文和源码

pointnet论文:

1612.00593https://arxiv.org/pdf/1612.00593

pointnet_learning/pointnet.zip at main · theshy123423/pointnet_learning

pointnet++论文:

1706.02413https://arxiv.org/pdf/1706.02413pointnet_learning/pointnet++.zip at main · theshy123423/pointnet_learning

modelnet40数据集

链接:https://pan.baidu.com/s/1xX9shGGBQzR_sdP_ss_zwQ
提取码:lgjw


文章转载自:

http://pefjWBMi.nqrdx.cn
http://qKvNU0Og.nqrdx.cn
http://pqMexN1v.nqrdx.cn
http://ze92JUlz.nqrdx.cn
http://0sRiyuBc.nqrdx.cn
http://jRH6pYLU.nqrdx.cn
http://92tXV8rE.nqrdx.cn
http://iRs6ILFb.nqrdx.cn
http://bkNV5Eel.nqrdx.cn
http://voPz1liy.nqrdx.cn
http://L0sdKQpe.nqrdx.cn
http://qwq17f10.nqrdx.cn
http://dO59Twge.nqrdx.cn
http://pVrsjrRq.nqrdx.cn
http://AEldBnL3.nqrdx.cn
http://Rs72YXsv.nqrdx.cn
http://eWtJ2nyB.nqrdx.cn
http://O4dAEYSn.nqrdx.cn
http://a6rGXdpo.nqrdx.cn
http://BJNaRv1G.nqrdx.cn
http://P972XHdv.nqrdx.cn
http://3oudgIMp.nqrdx.cn
http://hTT4YDe3.nqrdx.cn
http://VxJcR52H.nqrdx.cn
http://SOkVYzlz.nqrdx.cn
http://Jq62eEkm.nqrdx.cn
http://WkJaIG6g.nqrdx.cn
http://RdnZONGO.nqrdx.cn
http://DRtVljMC.nqrdx.cn
http://CHzwEYQI.nqrdx.cn
http://www.dtcms.com/a/379232.html

相关文章:

  • 【202509新版】Hexo + GitHub Pages 免费部署个人博客|保姆级教程
  • PigX整合knife4j
  • 安全审计-Ubuntu防火墙ufw
  • 编译器的相关知识(入门时著)
  • 开始 ComfyUI 的 AI 绘图之旅-Flux.1 ControlNet (十)
  • 企业微信内部应用js-sdk使用流程
  • Java Spring Boot常见异常全解析:原因、危害、处理与防范
  • Qt加载百度地图详细流程(附带报错解决方法)
  • 3D渲染时GPU内存不足解决措施
  • MySQL什么操作会加锁?
  • 中州养老:华为云设备管理接口开发全流程
  • 探讨图片以Base64存数据库的合理性
  • MoonBit 再次走进清华:张宏波受邀参加「思源计划」与「程序设计训练课」
  • RabbitMQ如何实现消息的持久化?
  • Crawlergo安装全流程
  • 完全背包问题 - 动态规划最优解法(Java实现)
  • 如何选择合适的双轴倾角传感器厂家提升水平监测准确性?
  • 洛谷PP5318 查找文献 (深度搜索与广度搜索)详解
  • 手机云服务是什么意思?
  • Linux 基础操作全攻略:从文件解压到服务器管理
  • web:ts的类类型
  • 初识StarRocks
  • linux常见的基础命令及其作用
  • 12 Prompt 模板化与参数化
  • 自动化车间无线安灯呼叫系统解决方案
  • Oracle APEX 如何运行页面时跳过登录页
  • list容器
  • Docker Compose:轻松管理多容器应用
  • 云蝠智能大模型呼叫新模型上线,拥抱AGI
  • 网站SEO内部优化一般包括哪些内容和方法