三个点云深度学习网络的理解
1.PointNet
关键点1:无序点云,点云无序性与对称函数的关系,对称函数可以忽略点云坐标位置的无序性。
关键点2:输入点云数目N在MLP过程中不变,只是每个点x y z三个坐标的MLP。最终形成 N x 1024 维的全局特征。
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
网络结构如图:
在模型中,局部特征聚合模块LFA(local feature aggregation),包括局部特征编码模块和注意力池化机制。
通过inference函数(inference方法被train调用)理解,拓展残差块DRB包含2个LFA。网络的编码部分,拓展残差块使用了5次。
局部特征聚合模块LocSE,是针对输入点云中的每个点的K个局部近邻进行的。
4.三者的区别
(1)采样方式的区别:PointNet++中主要采用最远点采样FPS,采样点的个数在每次SA模块中是固定的,512,256,128,前已述及。
Randla-Net中采用随机采样,因而产生了问题就是可能采样的点不具备代表性,因此提出了局部特征聚合模块LFA,通过对每个采样点进行局部编码和注意力池化提高局部点的特征表达能力。通过拓展残差块使得点的数目不断减少,分别为输入点N的1/4,1/16,1/64,1/256。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程