• 【NIPS 2017】PointNet++:度量空间中点集的深层次特征学习


    PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space

    做了什么

    PointNet要么对一个点操作,要么对所有点操作,却没有对局部进行操作,这导致它无法捕获点集的局部特征,限制了其识别细节的能力以及对复杂场景的推广能力。

    PointNet++则是一种分层点集处理模型,它将PointNet卷积式地应用于输入点集的嵌套分组,逐层学习点集的局部特征。

    另外,点集在不同区域的密度不均匀会影响网络训练,PointNet++通过组合多个尺度范围内的特征来解决这个问题。

    实验表明,PointNet++网络能够高效、稳健地学习深层点集特征,并在一些3D点云基准测试中达到当时的最佳。

    PointNet++

    PointNet++与CNN

    PointNet的基本思想是学习每个点的高维特征,然后将所有单独的点特征聚合为一个全局点云特征。可见,PointNet不捕获由度量引起的局部特征。然而,利用局部特征已经被证明是CNN成功的重要因素。CNN以规则网格数据为输入,能够沿着多个层次逐步捕获越来越大区域的特征:


    图片来源:3D ShapeNets: A Deep Representation for Volumetric Shapes

    PointNet++与CNN相似,能够逐层学习点集的局部特征。二者可以类比如下:

    • CNN的卷积核 ↔ \leftrightarrow PointNet
    • 卷积核覆盖的区域 ↔ \leftrightarrow 使用特定方法对点集进行采样,以采样点为中心进行局部区域分组

    下面介绍PointNe++的细节。

    分层点集特征学习

    PointNet++构建了点集的分层分组,并沿着层次结构逐步抽象出越来越大的局部区域,其层次结构由多个集合抽象层( set abstraction)组成:

    集合抽象层输入输出: 每个集合抽象层对一组点特征进行处理和抽象,生成具有较少元素的点特征新集。

    (1)输入: N N N个点的3D坐标(维数为 d = 3 d=3 d=3)与点的特征(维数为 C C C)沿着特征维度连起来,得到的 N × ( d + C ) N\times(d+C) N×(d+C)的矩阵。

    (2) 输出:
    N ′ N' N个采样点的3D坐标(维数为 d = 3 d=3 d=3)与采样点的特征(维数为 C ′ C' C)沿着特征维度连起来,得到的 N ′ × ( d + C ′ ) N'\times(d+C') N×(d+C)的矩阵。

    集合抽象层组成:

    (1)采样层(Sampling layer):采样层从输入点中选择一组点,作为局部区域的质心。

    给定输入点 { x 1 , x 2 , . . . , x N } \{x_1,x_2,...,x_N\} {x1,x2,...,xN}PointNet++使用最远点采样(farthest point sampling ,FPS)来选取质心 { x 1 , x 2 , … , x i , … , x N ′ } \left\{x_1, x_2, \ldots,x_i ,\ldots, x_{N'}\right\} {x1,x2,,xi,,xN},其中 x i x_{i} xi是距离(指定度量距离)集合 { x 1 , x 2 , … , x i − 1 } \left\{x_1, x_2, \ldots, x_{{i-1}}\right\} {x1,x2,,xi1}最远的点。

    与随机抽样相比,在质心数相同的情况下,FPS对整个点集具有更好的覆盖率。另外,与CNN不同,这种采样策略使得PointNet++的感受野与数据相关。

    (2)分组层(Grouping layer):分组层通过在质心周围找到“相邻”点来构造局部区域集。

    该层的输入是一个大小为 N × ( d + C ) N\times(d+C) N×(d+C)的点集和一组大小为 N ′ × d N'×d N×d的质心的坐标。指定质心点领域内的点数 K K K,输出一组大小为 N ′ × K × ( d + C ) N'×K×(d+C) N×K×(d+C)的点集,其中每组对应于一个局部区域。

    在卷积神经网络中,局部区域是由卷积核大小决定。而PointNet++的局部区域由指定度量距离定义。

    有两种构造局部区域集的方法:

    • k近邻(kNN)搜索:它查找采样点在点集中固定数量的相邻 K K K个点。

    • 球查找 (Ball query):以质心为圆心,指定半径的球体范围内的所有点(上限为 K K K)。

    与kNN相比,球查找的局部邻域保证了固定的局部区域大小,从而使局部区域特征在空间上更具泛化性。

    最后还要将局部区域中点的坐标转换为相对于质心点 x i \boldsymbol{x}_i xi的相对坐标 x i j ( k ) = x i j ( k ) − x i ( k ) x_{ij}^{(k)}=x_{ij}^{(k)}-{x}_{i}^{(k)} xij(k)=xij(k)xi(k) ,局部区域内点下标 j = 1 , 2 , … , K j=1,2, \ldots, K j=1,2,,K ;点位置维度 k = 1 , . . . d k=1,... d k=1,...d

    (3)PointNet层:PointNet层使用PointNet卷积式地将局部区域点集抽象为特征向量。

    输入数据大小为 N ′ × K × ( d + C ) N'\times K\times(d+C) N×K×(d+C) N ′ N' N个局部区域。使用PointNet处理每个局部区域的的点进行抽象出局部特征。输出数据大小为 N ′ × ( d + C ′ ) N'×(d+C') N×(d+C)

    非均匀采样密度下的鲁棒特征学习

    点集在不同区域的密度不均匀为点集特征学习带来了重大挑战。对于密集的区域,我们可以使用较小尺度的点集分组;而对于稀疏的区域,我们应该使用更大范围的点集分组。前面介绍的抽象层都只包含单个尺度的分组(single scale grouping,SSG)和特征提取。在PointNet++中,每个抽象层还可以使用多尺度分组(Multi-scale grouping,MSG)、多分辨率分组(Multi-resolution grouping ,MRG),来提取并组合多个局部区域特征。

    (1)多尺度分组(Multi-scale grouping,MSG)

    如图3(a)所示,多尺度分组对每个质心使用多个不同尺度的分组,然后将提取到的每个尺度的特征连接起来,形成多尺度特征。

    (2)多分辨率分组(Multi-resolution grouping ,MRG)

    上面的MSG方法计算成本很高。为了降低计算成本,如图(b),MRG则只是将局部区域的每个特征向量(图中左边的特征向量)与全局汇总得到的一个特征向量(图中右边的特征向量)连起来。

    当局部区域的密度较高时,局部区域的特征向量可以提供更精细的信息,因为它处理的是更高分辨率(单位体积点的数量)的点集。然而,当局部区域的密度较低时,计算局部区域特征向量的点的分辨率较低,容易受到采样不足的影响,这时全局的特征向量可以弥补。

    另外,PointNet++还使用了随机输入丢弃(random input dropout,DP)。这是通过以随机概率随机丢弃输入点来实现的。具体地说,对于每个训练点集,我们从 [ 0 , p ] [0,p] [0p]( p ≤ 1 p≤ 1 p1)中均匀抽样选择一个概率率 θ θ θ,对于每个点,以 θ θ θ的概率将其丢弃。这使得PointNet++更稳健。

    分类

    对集合抽象层得到的特征使用全局PointNet,然后再输入全连接网络得到每个类别的分数。

    分割

    集合抽象层对原始点采样,得到的点特征数量少于原始点。然而,在分割任务中,我们需要获取与原始点相同数量的点特征。一种实现方案是在所有集合抽象级中以原始点作为质心进行采样,但这会导致较高的计算成本。另一种方案是将采样点特征传播回原始点。

    PointNet++采用基于距离的插值和跨级别跳跃连接的分层特征传播(feature propagation):

    在特征传播层,点特征从 N l N_l Nl个传播到 N l − 1 N_{l−1} Nl1个,其中 N l − 1 N_{l−1} Nl1 N l N_{l} Nl N l ≤ N l − 1 N_{l}\le N_{l−1} NlNl1) 是集合抽象级别 l l l的输入和输出的点集大小。

    例如,从 N 2 N_2 N2 N 1 N_1 N1

    PointNet++使用基于目标位置 x x x k k k个最近邻特征 x 1 , x 2 , . . . x k x_1,x_2,...x_k x1,x2,...xk的距离加权平均值(如等式2所示,默认 p = 2 , k = 3 p=2,k=3 p=2k=3)插值实现从 N l − 1 N_{l-1} Nl1点到 N l N_l Nl个点的特征传播。目标位置 x x x的特征值 f ( x ) f(x) f(x)

    得到的 N l − 1 N_{l−1} Nl1个插值特征将与从集合抽象级跳跃连接的点特征沿着特征维度连接起来。然后将得到的特征通过全局PointNet更新每个点的特征向量。
    然后将得到的特征通过“unit PointNet(没有最大值汇聚的全局PointNet)”更新每个点的特征向量。

    重复该过程,直到特征数与原始点集相同。

    实验结果

    欧几里德度量空间中的分类


    基于点集分割的语义场景标注


    非欧几里德度量空间中的分类

    部件语义分割

    邻域查询:kNN v.s.Ball查询。

    最远点采样中随机性的影响。

    FPS算法是随机的,采样结果取决第一个选择的点。作者评估了PointNet++对这种随机性的敏感性。表6展示了PointNet++对ModelNet40数据集的特征稳定性和分类稳定性。

    时间和空间复杂度

  • 相关阅读:
    Vscode 如何创建java项目,并添加包
    404和路由钩子
    WSL 2 更改默认安装的 Linux 发行版
    微信小程序 java网上购物商城系统python php
    C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism
    GitLab项目中添加用户,并设置其角色权限等
    idea中jar包关联源码
    第7章 C语言的函数指针数组 (四)
    CSS容器查询终于来了
    安卓Android 架构模式及UI布局设计
  • 原文地址:https://blog.csdn.net/weixin_44378835/article/details/124942017