【点云网络】 pointnet 和 pointnet++

这两个网络都是斯坦福大学的一个团队提出的

我先先看一下pointnet的网络架构,这个网络比较经典,是2016年提出的:

PointNet 是一个专门用于点云数据处理的神经网络。它的设计目的是直接操作不规则的点云数据,而无需将点云数据转换为规则网格或体素。下面我们解析一下 PointNet 的网络结构:

  1. 输入层:输入是一个点云,每个点通常有三维坐标 ((x, y, z)),可能还包含颜色或法向量等特征。对于一个包含 (N) 个点的点云,这里输入是一个 (N \times 3) 的矩阵。

  2. 特征提取层

    • MLP 层:PointNet 使用多个多层感知机 (MLP) 层对每个点进行逐点特征提取,MLP 层通常会将每个点的特征从3维映射到更高维(如64或128维)。这是逐点操作,保持了点云的无序性。
    • T-Net:为了处理点云的旋转、平移等变换,PointNet 引入了 T-Net,它学习一个近似的仿射变换矩阵,对输入点进行对齐。这一层使用了独立的网络结构来估计变换矩阵,然后通过矩阵乘法对点云进行变换。通常,PointNet有两个T-Net,一个对齐原始输入点,另一个对齐局部特征。
  3. 全局特征提取

    • 逐点 MLP:进一步应用 MLP 来提取高维局部特征,例如将每个点从 64 维映射到 1024 维。
    • 全局最大池化:PointNet 使用全局最大池化来生成点云的全局特征。这一步将所有点的特征压缩为一个 1024 维的全局特征向量。最大池化操作可以确保网络不依赖于点的排列顺序,保证点云的无序性。
  4. 分类或分割层

    • 对于分类任务全局特征直接用于全连接层以输出类别标签 。输出一个输出为
      K维向量,K代表当前分类任务的种类个数,代表整个点云的类别概率分布。
    • 对于分割任务 ,将全局特征复制并与逐点局部特征进行融合,再次通过 MLP 层细化特征,从而为每个点预测标签。输出为N*M为每个点预测类别标签的概率分布,用于逐点分割任务。

PointNet 的网络结构的设计原因

  • 不变性 :点云的无序性意味着模型需要对点的排列不敏感。通过逐点处理和最大池化,PointNet 确保了这种排列不变性。
  • 旋转和仿射不变性:T-Net 处理仿射变换,减轻了旋转、平移等变化对特征提取的影响。
  • 全局信息与局部信息结合:全局最大池化提取了整个点云的全局特征,而逐点特征提供了局部细节。这种结合使得 PointNet 能够同时理解点云的整体结构和细节。

PointNet 的结构相对简单,但设计上有巧妙之处,使其既能保持点云特征的无序性,又能从中提取全局和局部信息,从而满足分类和分割任务的需求。

下面看pointnet++,2017年提出,网络结构如下:

PointNet++ 是 PointNet 的改进版本,专门用于捕捉点云数据中的局部特征,以提升其在物体检测、语义分割和场景理解等任务中的表现。PointNet++ 引入了分层结构,使网络能够从点云的不同尺度中提取更丰富的局部信息。

1. PointNet++ 设计背景

  • 局部特征的重要性:PointNet 使用全局最大池化来提取特征,对点云的细节和局部结构关注不足。在复杂场景中,物体的细节(如形状和边缘)对识别和定位尤为重要。
  • 尺度不变性:在点云中,物体的尺度可能会变化(比如,远处的物体在点云中点数更少),因此需要设计一个能捕捉多尺度特征的网络。

2. PointNet++ 的核心结构

PointNet++ 将点云处理分为多个层次,通过"采样-分组-特征提取"的过程,逐层提取局部特征,并在最后生成全局特征。每一层包含以下几个步骤:

  • 采样(Sampling):每一层首先对点云进行采样,逐层减少点数。例如,可以使用"最远点采样"(Farthest Point Sampling, FPS)算法选择有代表性的点集。这些点集定义了新的"局部区域中心",用于下一级的特征提取。

  • 分组(Grouping):对每一个采样点,从其邻近的点中提取局部区域(邻域)。可以基于距离(如欧氏距离)在采样点周围划分区域,这样可以捕捉到点云的局部结构。

  • 特征提取(Feature Extraction with PointNet):在每一个局部区域内,应用 PointNet 网络提取该区域的特征。这一步会生成一个区域特征,通过最大池化操作总结每个局部区域的信息,提取高维特征向量。

3. 多尺度特征提取

为了让 PointNet++ 更具鲁棒性,网络使用了两种多尺度处理方式:

  • Multi-Scale Grouping (MSG):在同一层中,PointNet++ 使用不同的邻域尺度来提取多尺度特征。例如,一个采样点可以在小、中、大邻域内分别提取特征,从而获得不同尺度的信息。适用于点密度变化较大的情况。

  • Multi-Resolution Grouping (MRG):在逐层下采样的结构中,使用前一层特征分辨率较高的点云特征与当前层的特征结合,以确保在下采样过程中不会丢失重要的细节信息。适用于点云密度较为均匀的情况。

4. 分层结构的逐层汇总

PointNet++ 会重复多次"采样-分组-特征提取"操作,构建分层结构,逐层捕捉从局部到全局的信息。最后一层生成全局特征,可用于分类、分割等任务。对于分割任务,PointNet++ 会将全局特征和逐点特征相结合,细化输出。

5. PointNet++ 相较于 PointNet 的优势

  • 更强的局部感知能力:PointNet++ 通过多层局部特征提取实现了对局部结构的深入理解,提升了分割和检测的准确性。
  • 尺度不变性:PointNet++ 的多尺度机制增强了对不同尺度和密度点云的适应性。
  • 适应性强:通过逐层采样和下采样机制,PointNet++ 能够在密度不均匀的点云中有效工作,适合于复杂场景中的目标检测和场景理解。

总结

PointNet++ 通过分层采样、分组和特征提取的方法增强了对点云局部结构和多尺度特征的理解。

总结二者

这两个网络比较早期, 可以看出他俩只能做全局分类,也就是最终是对所有点云分类,而分割的结果倒是可以知道点云的类别,但是无法像物体检测,检出边界,后面会和大家分享物体检测的网络,希望大家多多关注啊!

相关推荐
无限大.28 分钟前
力扣题解3248 矩阵中的蛇(简单)
算法·leetcode·矩阵
灼华十一33 分钟前
算法编程题-排序
数据结构·算法·golang·排序算法
谁在夜里看海.35 分钟前
【从零开始的算法学习日记✨优选算法篇✨】第二章:流动之窗,探索算法的优雅之道
c++·学习·算法
SoraLuna1 小时前
「Mac玩转仓颉内测版25」基础篇5 - 布尔类型详解
开发语言·算法·macos·cangjie
先鱼鲨生1 小时前
排序【数据结构】【算法】
数据结构·算法·排序算法
时光の尘2 小时前
C语言菜鸟入门·关键字·void的用法
c语言·开发语言·c++·算法·c#·c·关键字
蚂蚁没问题s2 小时前
图像处理 - 色彩空间转换
图像处理·人工智能·算法·机器学习·计算机视觉
戊子仲秋2 小时前
【LeetCode】每日一题 2024_11_21 矩阵中的蛇(模拟)
算法·leetcode·矩阵
HP-Patience2 小时前
【机器学习】- 模型复杂度vs模型误差
python·算法·机器学习
螺旋天光极锐斩空闪壹式!2 小时前
第十三课 二维数组(2)方向数组
开发语言·c++·算法