三个点云深度学习网络的理解

1.PointNet

  关键点1:无序点云,点云无序性与对称函数的关系,对称函数可以忽略点云坐标位置的无序性

  关键点2:输入点云数目N在MLP过程中不变,只是每个点x y z三个坐标的MLP。最终形成 N x 1024 维的全局特征。

  关键点3:T-Net旋转网络通过对点云数据进行旋转,使得模型能够更好地学习到点云数据的特征。

  

  T-Net旋转网络由一个小型的神经网络构成,该网络接受点云数据作为输入,并输出一个旋转矩阵。这个旋转矩阵被用于对原始点云数据进行旋转,使得旋转后的点云数据在空间中呈现出更加规则化的分布。将原始点矩阵或特征矩阵转换为标准的朝向,这样的话就可以适应不同朝向的点云了,对应点云特征第三点。但实际作用并不是太大,可以略微改善效果,聊胜于无。但其也添加了相应的计算量。因此在PointNet++中就完全删除了T-Net。

  在PointNet中,T-Net旋转网络的作用主要体现在两个方面:

  (1)通过对点云数据进行旋转,解决了模型难以直接从原始无序数据中学习到全局特征的问题。通过对数据进行旋转,模型可以更加容易地捕捉到点云数据的整体结构和形状信息,从而提高模型的识别精度。

  (2)T-Net旋转网络还能够帮助模型学习到点云数据的局部特征(存疑)。在点云数据中,每个点都与其周围的点存在关联关系,通过对点云数据进行旋转,模型可以更加容易地捕捉到这些关联关系,从而更好地学习到每个点的局部特征,这对于后续的点云数据处理任务,如分割、分类等,具有重要的意义。

  参考:https://zhuanlan.zhihu.com/p/418092190

  PointNet模型中第二个 T-Net与第一个 T-Net 的区别是什么  https://blog.csdn.net/m0_45685024/article/details/143633359

2.PointNet++

  PointNet++的核心模块(Set Abstraction)包含采样分组PointNet特征提取三个步骤。

  (1)点云输入数目为N,采样过程采样最大距离采样,采样点数目为npoint(npoint一般为512,256,128,其中分类问题、部分分割问题需要的npoint少于语义分割问题的npoint,1024,256,128);

  (2)每个最大距离采样点在半径0.1(SSD)或者[0.1,0.2,0.4](MSG)(形成局部近邻域)的球体内选择nSample(16,32,64)个点,执行分组操作;

  (3)对每个分组内的点云进行PointNet特征提取,并采用最大池化得到每一组点的全局特征。

3.Randla-Net

  Randla-Net分为数据预处理过程、训练过程、预测过程。

  数据预处理过程对点云进行降采样,默认值为0.04。

  在S3DIS中的 helper_tool.py 文件中配置参数如下,其中 num_points 值为40960,约等于10的5次方。

class ConfigS3DIS:
    k_n = 16  # KNN
    num_layers = 5  # Number of layers
    num_points = 40960  # Number of input points
    num_classes = 13  # Number of valid classes
    sub_grid_size = 0.04  # preprocess_parameter

    batch_size = 6  # batch_size during training
    val_batch_size = 20  # batch_size during validation and test
    train_steps = 500  # Number of steps per epochs
    val_steps = 100  # Number of validation steps per epoch

    sub_sampling_ratio = [4, 4, 4, 4, 2]  # sampling ratio of random sampling at each layer
    d_out = [16, 64, 128, 256, 512]  # feature dimension

    noise_init = 3.5  # noise initial parameter
    max_epoch = 100  # maximum epoch during training
    learning_rate = 1e-2  # initial learning rate
    lr_decays = {i: 0.95 for i in range(0, 500)}  # decay rate of learning rate

    train_sum_dir = 'train_log'
    saving = True
    saving_path = None
View Code

   网络结构如图:

  在模型中,局部特征聚合模块LFA(local feature aggregation),包括局部特征编码模块和注意力池化机制。

  通过inference函数(inference方法被train调用)理解,拓展残差块DRB包含2个LFA。网络的编码部分,拓展残差块使用了5次。

  局部特征聚合模块LocSE,是针对输入点云中的每个点的K个局部近邻进行的。

局部空间编码在每个点周围创建一个局部坐标系统,增加了网络对于点云的几何结构的理解。

注意力池化则根据每个点的重要性对特征进行动态加权。这样的设计允许网络关注那些对任务更重要的点,从而提高了特征提取的精度。

扩张残差模块(Dilated Residual Block),模块通过引入不同扩张率的卷积层来增加感受野,进一步提高了网络对点云数据的理解能力。

 4.三者的区别

(1)采样方式的区别:PointNet++中主要采用最远点采样FPS,采样点的个数在每次SA模块中是固定的,512,256,128,前已述及。

  Randla-Net中采用随机采样,因而产生了问题就是可能采样的点不具备代表性,因此提出了局部特征聚合模块LFA,通过对每个采样点进行局部编码和注意力池化提高局部点的特征表达能力。通过拓展残差块使得点的数目不断减少,分别为输入点N的1/4,1/16,1/64,1/256。

 

 

 


补充:点云的特征

点云往往是欧几里德空间点的子集,往往拥有以下三个主要特征:

  1. 无序性
    与图像的像素矩阵或体积栅格中的体素阵列不同,点云是一组没有特定顺序的点,也就是说,𝑁个3D点集会有𝑁!种排列。
  2. 点之间相互作用
    这些点来自具有距离度量的空间,这就意味着点与点之间不是鼓励的,相邻点可能形成一个有意义的子集。因此,模型应该捕获局部结构以及局部结构互相之间的特征。
  3. 变换不变性
    对点云全集进行刚性变换,点之间的相对位置是不变的。
posted @ 2025-01-06 11:15  太一吾鱼水  阅读(145)  评论(0)    收藏  举报