PointNet的缺点:

  1. PointNet不捕获由度量空间点引起的局部结构,限制了它识别细粒度图案和泛化到复杂场景的能力。

利用度量空间距离,我们的网络能够通过增加上下文尺度来学习局部特征。

  1. 点集通常采用不同的密度进行采样,这导致在统一密度下训练的网络的性能大大降低。

新的集合学习层来自适应地结合多个尺度的特征。

一,介绍:

PointNet++:分层方式处理在度量空间中采样的一组点 。

  1. 通过基础空间的距离度量将这组点分割成重叠的局部区域。
  2. 提取局部特征来捕获来自小邻域的精细几何结构; 这些局部特征被进一步分组为更大的单元并被处理以产生更高级的特征。
  3. 重复这个过程直到我们获得整个点集的特征。

需要解决的问题:

  1. 如何生成点集的划分
  2. 如何通过局部特征学习抽象点集或局部特征。

这两个问题是相关的:

点集的分割必须产生跨分区的共同结构,以便像卷积设置那样共享局部特征学习者的权重。

PointNet++在嵌套的分割输入集上递归的运用pointNet

每个分区:相邻的球。每个分区包含质心位置和规模。质心通过最远采样点算法获得(FPS)

感受野依赖输入数据和度量。

二.问题描述:

X = (M; d) 是离散的度量空间,m是点,d是距离度量。m的密度不均匀,

三.方法:

可以看作增加了层次结构的pointNet,

  1. 复习pointnet:缺乏不同规模上捕捉局部上下文的能力。(采用分层特征学习框架)
  2. 分层架构:

New architecture builds a hierarchical grouping of points and progressively abstract larger and larger local regions along the hierarchy.

At each level, aset of points is processed and abstracted to produce a new set with fewer elements.

抽象层的三个关键层:

Sampling layer : selects a set of points from input points (确定局部区域的图心)

Grouping layer : 分组层通过查找质心周围的“邻近”点来构建局部区域集。

PointNet layer :使用小型PointNet将局部区域模式编码为特征向量

输入:N * (d + c) 矩阵,d纬度坐标,c点特征纬度。

输出:. It outputs an N0 × (d + C0) matrix of N0 subsampled points with d-dim coordinates and new C0-dim feature vectors summarizing local context

采样层:迭代最远点采样(FPS)来选择点x1,x2...的子集 ,(距离其余的子集在欧几里得空间上距离最远)

分组层:

输入:大小为N(d + C)的点集和大小为NId的一组质心的坐标

输出:groups of point sets of size N0 × K × (d + C),where each group corresponds to a local region and K is the number of points in the neighborhood of centroid points

使用方法:bell查询(和cnn相比)

pointNet层:

输入:N0 local regions of points with data size N0×K×(d+C)

输出:输出中的每个局部区域都由其质心和局部特征抽象出来,这些特征对质心的邻域进行编码。 Output data size is N0 × (d + C0)

将局部的点坐标进行转化,通过使用相对坐标和点要素,我们可以捕捉到局部区域内的点对点关系 。

3.3 对不均匀采样的鲁棒特征学习:

we should look for larger scale patterns in greater vicinity.

density adaptive PointNet layers

Multi-scale grouping (MSG).

  1. apply grouping layers with different scales
  2. according PointNets to extract features of each scale
  3. Features at different scales are concatenated to form a multi-scale
    feature.

(各种稀疏性的训练集)

Multi-resolution grouping (MRG). (这种更好)

MSG的计算成本太高。新方法:still preserves the ability to adaptively aggregate information according to the distributional properties of points。

当局部区域的密度较低时,第一个矢量可能不如第二个矢量可靠,因为在计算第一个矢量中的子区域包含更稀疏的点并且更多地受到抽样不足的影响。 在这种情况下,第二个向量应该加权得更高。

当局部区域的密度很高时,第一个矢量提供更精细的细节信息,因为它具有以较低分辨率递归地检查较高分辨率的能力。

3.4 Point Feature Propagation for Set Segmentation

在集合抽象层中,对原始点集进行二次抽样。 然而,在集合分割任务中,比如语义点标注,
我们希望获得所有原始点的点特征。

方法1:

always sample all points as centroids in all set abstraction levels (高成本)

方法2:

propagate features from subsampled points to the original points

hierarchical propagation strategy with distance based interpolation and across level skip links

In a feature propagation level, we propagate point features from
Nl × (d + C) points to Nl-1 points where Nl-1 and Nl (with Nl Nl-1) are point set size of input and output of set abstraction level l.

我们通过在Nl1点的坐标处插入Nl个点的特征值f来实现特征传播。在插值的众多选择中,我们使用基于k近邻的反向距离加权平均值。

The interpolated features on Nl-1 points are then concatenated with skip linked point features from the set abstraction level.

结果:

本质:是PointNet的分层版本

PointNet的不足:

1)无法很好地捕捉由度量空间引起的局部结构问题,由此限制了网络对精细场景的识别以及对复杂场景的泛化能力。

2)欠缺了对局部特征的提取及处理,比如说点云空间中临近点一般都具有相近的特征,同属于一个物体空间中的点的概率也很大,就好比二维图像中,同一个物体的像素值都相近一样。

3)点云数据的一个特征是数据密度不同,体现出近多远少等问题,而在密度不同的情况下,使用统一的模板处理这些数据显然是不对的,基于此,PointNet++的作者提出了密度适应的网络结构。

PointNet++解决的问题:

1.如何对点云进行局部划分

对数据集进行划分,提取局部特征,然后不断抽象,提取更高维的特征,是PointNet++的基本思路,那么首先的问题是如何定义局部,PointNet++给出的解决思路是使用点球模型,从全部数据集中选出若干质心点,然后选取半径,完成覆盖整个数据集的任务。在质心点的选取上,采用的是FPS算法,即随机选取一个点,然后选择离这个点最远的点加入到结果集中,迭代这个过程,直到结果集中点的数量达到某个给定值,在PointNet++中,很常见的一个词是metric,即度量,PointNet++中的很多东西都是依赖度量的,而在PointNet中,其实对于度量并不是很强调,或者细究的话都有可能不需要是度量空间(这个度量指的是什么呢?)。在读到中心点的集合后,第二个问题是如何选择半径,其实半径的选取是个很麻烦的事,在点云数据集中,有些地方比较稠密,有些地方比较稀疏,稠密的地方必然半径要小,而稀疏的地方必然半径要大,不然可能都提取不出什么特征,此时引出第二个问题——密度适应,若半径确定,即局部大小确定,此时训练的模板大小也就确定了。

2.如何对点云进行局部特征提取

每个图层都有三个子阶段:采样,分组和PointNeting。在第一阶段,选择质心,在第二阶段,把他们周围的邻近点(在给定的半径内)创建多个子点云。然后他们将它们给到一个PointNet网络,并获得这些子点云的更高维表示。然后,他们重复这个过程。

(这两个问题是关联的)

3.如何进行密度适应?

论文中提到的处理密度适应的方法有两种

方法1为MSG,即把每种半径下的局部特征都提取出来,然后组合到一起.

作者在如何组合的问题上提到了一种random dropping out input points的方法,存在两个参数p和q,每个点以q的概率进行丢弃,而q为在[0,p]之间均匀采样,这样做,可以让整体数据集体现出不同的稠密性和均匀性。MSG有一个巨大的问题是运算的问题,然后作者提出we can avoid the feature extraction in large scale neighborhoods at lowest levels,因为在低层级处理大规模数据,可能模板处理能力不够,感受野有些过大,基于此,作者提出了MRG。

方法二MRG有两部分向量构成,分别为上一层即Li-1层的向量和直接从raw point上提取的特征构成,当点比较稀疏时,给从raw point提取的特征基于较高的权值,而若点比较稠密,则给Li-1层提取的向量给予较高的权值,因为此时raw point的抽象程度可能不够,而从Li-1层的向量也由底层抽取而得,代表着更大的感受野。当局部区域的密度较低时,第一个矢量可能不如第二个矢量可靠,因为在计算第一个矢量中的子区域包含更稀疏的点并且更多地受到抽样不足的影响。 在这种情况下,第二个向量应该加权得更高。 当局部区域的密度很高时,第一个矢量提供更精细的细节信息,因为它具有以较低分辨率递归地检查较高分辨率的能力。

整体的网络结构:

在整体网络结构中,首先进行set abstraction,这一部分主要即对点云中的点进行局部划分,提取整体特征,如图可见,在set abstraction中,主要有Sampling layer、Grouping layer、以及PointNet layer三层构成,sampling layer即完成提取中心点工作,采用fps算法,而在grouping中,即完成group操作,采用mrg或msg方法,最后对于提取出得点,使用pointnet进行特征提取。在msg中,第一层set abstraction取中心点512个,半径分别为0.1、0.2、0.4,每个圈内的最大点数为16,32,128。在classification的处理上,与pointnet相似。

分割和语义部分:

在集合抽象层中,对原始点集进行二次抽样。 然而,在集合分割任务中,比如语义点标注,
我们希望获得所有原始点的点特征。

方法1:

always sample all points as centroids in all set abstraction levels (高成本)

方法2:

propagate features from subsampled points to the original points

hierarchical propagation strategy with distance based interpolation and across level skip links

In a feature propagation level, we propagate point features from
Nl × (d + C) points to Nl-1 points where Nl-1 and Nl (with Nl Nl-1) are point set size of input and output of set abstraction level l.

我们通过在Nl1点的坐标处插入Nl个点的特征值f来实现特征传播。在插值的众多选择中,我们使用基于k近邻的反向距离加权平均值。

插值及回溯的方式,对于l - 1层的点,它有l层点插值后与在set abstraction时得到的特征进行1 * 1的卷积,最终得到l - 1层的点的值,一直回溯,最终得到原始点的score。插值公式如下:

The interpolated features on Nl-1 points are then concatenated with skip linked point features from the set abstraction level.

3D点云数据分析:pointNet++论文分析及阅读笔记的更多相关文章

  1. 三维点云去噪无监督学习:ICCV2019论文分析

    三维点云去噪无监督学习:ICCV2019论文分析 Total Denoising: Unsupervised Learning of 3D Point Cloud Cleaning 论文链接: htt ...

  2. 3d图像识别基础论文:pointNet阅读笔记

    PointNet 论文阅读: 主要思路:输入独立的点云数据,进行变换不变性处理(T-net)后,通过pointNet网络训练后,最后通过最大池化和softMax分类器,输出评分结果. 摘要: 相较于之 ...

  3. 3D点云点云分割、目标检测、分类

    3D点云点云分割.目标检测.分类 原标题Deep Learning for 3D Point Clouds: A Survey 作者Yulan Guo, Hanyun Wang, Qingyong H ...

  4. 2020国防科大综述:3D点云深度学习——综述(3D点云分割部分)

    目录 摘要 1.引言: 2.背景 2.1 数据集 2.2评价指标 3.3D点云分割 3.1 3D语义分割 3.1.1 基于投影的方法 多视图表示 球形表示 3.1.2 基于离散的方法 稠密离散表示 稀 ...

  5. 2020厦门大学综述翻译:3D点云深度学习(Remote Sensiong期刊)

    目录 摘要 1.引言: 2.点云深度学习的挑战 3.基于结构化网格的学习 3.1 基于体素 3.2 基于多视图 3.3 高维晶格 4.直接在点云上进行的深度学习 4.1 PointNet 4.2 局部 ...

  6. 2020国防科大综述:3D点云深度学习—综述(点云形状识别部分)

    目录 摘要 1.引言: 2.背景 2.1 数据集 2.2评价指标 3.3D形状分类 3.1基于多视图的方法 3.2基于体素的方法 3.3基于点的方法 3.3.1 点对多层感知机方法 3.3.2基于卷积 ...

  7. segMatch:基于3D点云分割的回环检测

    该论文的地址是:https://arxiv.org/pdf/1609.07720.pdf segmatch是一个提供车辆的回环检测的技术,使用提取和匹配分割的三维激光点云技术.分割的例子可以在下面的图 ...

  8. 3D点云的深度学习

    使用卷积神经网络(CNN)架构的深度学习(DL)现在是解决图像分类任务的标准解决方法.但是将此用于处理3D数据时,问题变得更加复杂.首先,可以使用各种结构来表示3D数据,所述结构包括: 1  体素网格 ...

  9. 3D点云几何拟合

    3D点云几何拟合 Supervised Fitting of Geometric Primitives to 3D Point Clouds 论文地址: http://openaccess.thecv ...

随机推荐

  1. 读取Properties文件以及中文乱码问题

    在java类中常见的读取Properties文件方式,是使用Properties.load(inputStream);的方式但是常常出现中文乱码问题,这就很尴尬了 public synchronize ...

  2. 机器学习工作流程第一步:如何用Python做数据准备?

    这篇的内容是一系列针对在Python中从零开始运用机器学习能力工作流的辅导第一部分,覆盖了从小组开始的算法编程和其他相关工具.最终会成为一套手工制成的机器语言工作包.这次的内容会首先从数据准备开始. ...

  3. SSM框架中的前后端分离

    认识前后端分离 在传统的web应用开发中,大多数的程序员会将浏览器作为前后端的分界线.将浏览器中为用户进行页面展示的部分称之为前端,而将运行在服务器,为前端提供业务逻辑和数据准备的所有代码统称为后端. ...

  4. [SDOI2016]储能表——数位DP

    挺隐蔽的数位DP.少见 其实减到0不减了挺难处理.....然后就懵了. 其实换个思路: xor小于k的哪些都没了, 只要留下(i^j)大于等于k的那些数的和以及个数, 和-个数*k就是答案 数位DP即 ...

  5. Hash碰撞 & 拒绝服务漏洞

    前段时间在网上看到的: http://www.baidu.com/s?wd=Hash%E7%A2%B0%E6%92%9E+++%E6%8B%92%E7%BB%9D%E6%9C%8D%E5%8A%A1% ...

  6. Excel:LOOKUP函数的经典用法

    1.逆向查询 下面这个表中,A:C列是员工基础信息表,分别是部门.姓名和职务. ​现在要根据E5单元格中的员工姓名,在这个信息表中查询属于哪个部门,也就是咱们常说的逆向查询,就可以使用LOOKUP函数 ...

  7. Python协程笔记 - yield

    生成器(yield)作为协程 yield实际上是生成器,在python 2.5中,为生成器增加了.send(value)方法.这样调用者可以使用send方法对生成器发送数据,发送的数据在生成器中会赋值 ...

  8. AtomicInteger和count++的比较

    J2SE 5.0提供了一组atomic class来帮助我们简化同步处理.基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增.减.赋值(更新)操作 ...

  9. Js中this机制全解

    JavaScript中有很多令人困惑的地方,或者叫做机制. 但是,就是这些东西让JavaScript显得那么美好而与众不同. 比方说函数也是对 象.闭包.原型链继承等等,而这其中就包括颇让人费解的th ...

  10. vue2.0 之表单控件绑定

    表单控件绑定v-model 1.文本 <template> <div> <input type="text" name="" v- ...