首页 > 其他分享 >深度学习3D网络---PointNet++

深度学习3D网络---PointNet++

时间:2023-12-14 10:22:58浏览次数:31  
标签:采样 layer ++ PointNet --- 特征 点云

PointNet++

地址:http://stanford.edu/~rqi/pointnet2/

1.两者主要不同点

  1. 考虑到PointNet特征提取时只考虑单点,不能很好的表示局部结构 ==> PointNet++引入了sampling & grouping,考虑局部领域特征
  2. PointNet中global feature直接由max pool得到,容易造成信息丢失 ==> PointNet++采用层级结构,可以有效的依据不同的感受野大小来提取不同区域的局部特征
  3. PointNet中采用TNet来保证点云特征旋转的不变性 ==> PointNet++采用局部相对坐标进行特征提取,剔除了TNet网络
  4. 针对稀疏点云导致样本不均匀问题,PointNet未做处理 ==> PointNet++提出多尺度方法MSG和多层级方法MRG来解决样本不均匀问题
  5. 对于分割网络来讲,PointNet直接整合global feature和local embedding特征 ==> PointNet++采用Encoder - Decoder结构,特征通过skip link concatenation进行连接

2. PointNet++网络结构

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

sampling layer

  • 作用

    考虑到点云数量通常较大且数量不一致,PointNet++采用最远点采样(FPS(farthest point sampling ))从原始\(N\)个点云中获取\(N'\)个样本进行特征提取。

  • 数据变化

    比如结构图中输入是点云信息\((N,d+c)\),其中\(N\)表示点云个数,\(d\)表示坐标维度(通常为(x, y, z)3维),\(c\)表示其他特征(如颜色、法线等),经过sampling layer后变成\((N_1,d+c)\),其中\(N_1 \leq N\) 。

  • FPS

    采样后的样本集包含于原始样本集\(\{x_{i1}, x_{i2}, ..., x_{im}\} \subset \{x_1, x_2, ..., x_n\}\)

    采样过程也简单,先随机选取一个样本点,然后从剩余点中挑选离该样本点最远的点,即:新的样本点\(x_{ij}\)是原始样本中离已有样本集\(\{x_{i1}, x_{i2}, ..., x_{ij-1}\}\)距离最远的点

    注意:这里的距离度量是参考的坐标维度d,不考虑其他特征

grouping layer

  • 作用

    为每个样本点从其局部区域中挑选出K个领域点,便于特征能更好的包含局部领域信息,个人理解这里应该参考了图片提取特征时考虑\(k*k\)的区域与一个\(k*k\)的卷积核作用,因而学习样本点特征时也考虑其相邻K个点进而构成一个子区域。PointNet++中还通过实验证明Ball querykNN(k近邻)效果更好。

  • 数据变化

    输入为\((N_1, d+c)\), 经过grouping layer得到\((N_1, K, d+c)\),其中\(N_1\)表示点云采样个数,\(K\)表示每个样本得到的领域点个数。

  • Ball query

    以样本点为球心,按照给定搜索半径R得到一个球形搜索区域,然后从该区域提取K个邻近点。

  • 问题点

    • 给定领域中点的个数不足K个或者多余K个如何处理?

      如果不足K个,则直接对某个点重采样,凑够K个;

      如果大于K个,则选取距离最小的前K个。

    • 对于稀疏网络而言,样本分布不均匀,如何处理?

      PointNet++提出了多尺度方法MSG和多层级方法MRG,这个见后面具体介绍。

pointnet layer

  • 作用

    对采样点进行局部特征提取,即:

    \[f(x_1, x_2, ..., x_n) = \gamma(\max_{i=1,...,n} \{h(x_i)\}) \]

    其提取过程如下图所示

  • 数据变化

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

  • 问题点

    • 特征提取时,未采用T-Net,那如何保证特征旋转不变性?

      PointNet++未像PointNet一样采用T-Net,而是采用局部相对坐标,就是对每个采样点及其K个领域点的空间坐标进行变换:

      \[x_i^{(j)} = x_i^{(j)} - \hat x^{(j)}, i = 1, 2, ..., K, j = 1, 2. ..., d \]

      其中\(\hat x\)表示采样点坐标,经过变换后其坐标都是想对于球形领域中心点的。

      注意:这里变换只针对坐标,其他特征不变

interpolate

  • 作用

    主要针对分割网络,因为分割结果需要对每一个点云分配一个语义标签。但是目前只获取到了下采样后点云的特征,那插值的作用就是得到下采样过程中忽视的点云的特征

  • 数据变化

    输入为\((N1, d + C)\),输出为\((N, d + C)\),其中\(N\)为上采样之前的点云数量。

  • 问题点

    • 插值操作具体如何实现?

      作者采用反向思维,对于采样过程中忽视的点,在采样后的结果中查找领域内的k个点,那这些点的特征都是已知的,对这些已知特征采用加权平均即可得到被忽视点的特征。

      其中d表示距离,距离越小,权值越大

3. 稀疏点云处理

在实际点云采样过程中,其密度是不均匀的,比如下图,离相机较近的点云较密,而远点的点云较稀疏。

如果按照同一领域半径去寻找领域点,那对于稀疏的地方局部特征其实是比较差的,为了解决这一问题,作者提出了MSG和MRG两种方式。

MSG

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

MRG

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

4. 其他细节

dropout

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

unit pointnet

分割网络中的 unit pointnet是什么?

论文中的原文写的是:

也就是说unit pointnet是由MLP + ReLU组成。没有了pointnet layer中的最大池化后后续的MLP操作。

实验效果



标签:采样,layer,++,PointNet,---,特征,点云
From: https://www.cnblogs.com/xiaxuexiaoab/p/16695460.html

相关文章

  • ChatGLM2-6B模型的微调
    概述GLM、ChatGLM的相关基础知识说明:GLM模型底层还是基于Transformer,因此其设计、优化都是围绕Transformer的各个组件的。从注意力层的掩码、位置编码等方面优化与设计。ChatGLM3/ChatGLM2的源码中,比如finetune、trainer等代码,其实是copy自HuggingFace,而且其使用流程与调用机......
  • 子类父类有相同的方法优先调用子类-重写-递归
    子类和父类有相同的方法,优先调用子类。如果子类没有,父类。packagestudyDemo9yue;publicclassstudy01{ publicstaticvoidmain(String[]args){ Sons1=newSon(); s1.test(); }}classFather{ voidtest(){ System.out.println("我是父类的test"); }}c......
  • 第1-14届河南省大学生程序设计竞赛(ICPC-ACM河南省赛)
    河南省大学生程序设计竞赛又称为河南省内的ACM,是河南省内大学生程序设计的盛宴  2021年5月22日至23日,河南省第十三届大学生程序设计竞赛在  河南农业大学举行,2022年 4月16日,中原工学院我院2022年(第14届)ACM程序设计竞赛决赛在学院基础实验楼举行。5月20日至21日,2023年......
  • windows安装tensorflow-gpu / CUDA / cuDNN
    最终安装内容:windows10+3060显卡+tensorflow-gpu2.10.0+CUDA11.2+cuDNN8.1 1.命令行输入nvidia-smi,查看显卡对应的cuda版本。如下图,CUDAVersion为12.1,则安装的CUDA版本不能高于12.1。 2.Nvidia官网查看tensorflow-gpu和CUDA的版本对应关系。注意:语言一定要切......
  • C++基础 -6- 二维数组,数组指针
    ———————二维数组,数组指针——————— ......
  • 界面控件DevExpress .NET MAUI v23.1 - 发布一系列新组件
    DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpressDashboardeXpressApp框架、适用于VisualStudio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress今年第一个重要版本v23.1正式发布,该版本拥有众多新产品和数十个具有高影响力......
  • 数据分析--数据预处理
    本文主要是个人的学习笔记总结,数据预处理的基本思路和方法,包括一些方法的使用示例和参数解释,具体的数据预处理案例case详见其他文章。如有错误之处还请指正!目录数据的质量评定数据处理步骤缺失值的处理标记缺失值删除缺失值填充缺失值重复值处理异常值的处理数据集合并pandas.Dat......
  • 最强Pose模型RTMO开源 | 基于YOLO架构再设计,9MB+9ms性能完爆YOLO-Pose
    https://mp.weixin.qq.com/s/4EJAKBcqlCzDXib1_TKJxw点击下方卡片,关注「AI视界引擎」公众号AI视界引擎「AI视界引擎」公众号不仅致力于分享AI视觉与大语言模型的前沿科技,还将成为连接业界专家、学术界和广大读者的桥梁。我们将提供最新的研究进展、技术突破、应用案例以......
  • 使用file-saver导出文件
    使用file-saver导出文件:https://blog.csdn.net/guizi0809/article/details/119421502?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170246311516800192248321%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170246311516800192248......
  • 汇编-JNAE无符号小于则跳转
     .386.modelflat,stdcalloptioncasemap:none.stack4096IncludeIrvine32.incincludelibIrvine32.libExitProcessPROTO,dwExitCode:DWORD.data.codemainPROCmoveax,10cmpeax,100;比较eax和10的大小jnaelabel......