• 论文笔记:(NIPS2018)PointCNN: Convolution On X-Transformed Points



    PointCNN: Convolution On X-Transformed Points

        Yangyan Li     Rui Bu     Wei Wu     Xinhan Di     Baoquan Chen
        Shandong University     Huawei Inc     Peking University

    论文地址:https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1801.07791.pdf
    代码:https://github.com/yangyanli/PointCNN

    摘要

    • 我们提出了一个简单而通用的点云特征学习框架。
    • CNN成功的关键是卷积算子,它能够利用网格形式密集表示的数据中的局部相关性(如图像)。
    • 然而,点云是不规则的,无序的,因此点对点的特征与点的直接卷积将导致形状信息丢失,还会因为输入点顺序不一致而产生不同的输出。
    • 为了解决这些问题,我们尝试从输入点学习X-变换,然后使用它来加权与排列输入点的特征。这种操作可以把输入点的形状信息编码到特征中,同时把输入特征的顺序归一化到某种潜在的一致的模式。
    • 这种方法是将典型的针对规则域数据的CNN推广到能够处理点云这种非规则无序数据的一种尝试,因此被称为PointCNN。
    • 实验表明,PointCNN在多种具有挑战性的基准数据集和任务上达到了与最先进方法相当或更好的性能。

    一、2D卷积应用在点云上存在的问题

       空间-局部关联 是各种类型数据的普遍属性,它独立于数据表示。对于在规则域中表示的数据,如图像,卷积运算被证明在利用相关性作为CNNs在各种任务中成功的关键因素方面是有效的。然而,对于不规则和无序的点云形式表示的数据,对卷积算子不适合利用数据中的空间-局部相关性。

      我们将在图1中说明在点云上应用卷积的问题和挑战。在图像中数据是结构化存储的。直接对图像应用卷积核 就能从这种二维空间结构中获取信息。而点云数据是无序集,如果直接使用卷积会出现(1a)中ii,iii,iv的情况。

      上图中的ii,iii,每个点可以看作是点云,1234表示采集到的点云数据存储中的顺序,ii,iii中的数据虽然具有相同的顺序,ii中的feature abcd和iii中的feature abcd排列顺序一模一样。但是它们的形状信息不一样,那么就需要网络,可以区分出它们两个的不同;另外一种情况是如图iii和iv,iii中的feature排列是abcd,图iv的feature排列是cabd,虽然iii和iv中feature的排列顺序不同,但是它们拥有相同的形状信息以及相同的feature,那么就要求网络对于特定输入点云,可以得到与输入顺序无关的feature。

      由于卷积操作的性质,在所有情况下fii与fiii的计算结果是相等的,而fiii与fiv的计算结果在大多数情况是不相等的。很显然,直接卷积会导致形状信息的变形并且使卷积结果对于顺序敏感。

    二、解决的方法

    2.1 idea

      为了解决这个问题,本文作者的思路是让网络去学一个转置矩阵X,该矩阵能对某个特定顺序的输入进行处理,得到一个与顺序无关的feature。输入数据先经过X变换矩阵处理,再执行Convolution的操作。比如上图中iii,它的feature排列顺序是abcd,经过和转置矩阵X相乘之后,得到了某一种顺序能和图iv所示的cabd这种排列顺序相等。

      本文作者在训练网络之后发现,理想状态下它是一个完全的转置矩阵,经过可视化分析之后,发现它分布不是很有规律,而是比较杂乱的分布。   如上图中学习出来有0.9或者1.1,在1附近的值,还有在零附近的一些值,这并不是一个理想转置矩阵,这也是本文中网络一个待解决的问题,虽然网络学习出来的不是0101矩阵,这样的特征也可以理解为这个矩阵也学到了如何在点云中提取feature的权重。
      在有相同的结构信息,但有不同的顺序信息的情况下,网络自己学习到某一种特征,比如说1234,让拥有相同结构的点云,拥有相同的feature。   在有不同的结构信息,但有相同的顺序信息的情况下,经过矩阵计算,得到两个feature是不相等的。 这就是本文作者想要达到目的。

    2.2 X-conv算子

      pointcnn也需要对点云数据进行平移不变性的操作,就是在中心点查到k近邻之后(a),用它周围这些点的信息剪去中心点的坐标(b),得到局部坐标系,将每个点的局部坐标单独提升,并结合相关特征(c)。这样就消除了由于整体的变化导致局部变化,让网络学习到东西产生变化。
    1、将所有邻居点的坐标转化为相对p的坐标P’;

    2、用一个MLPδ网络,将邻居点的位置信息P’转化为feature信息Fδ;

    3、将转化得到的feature Fδ,与邻居点自己的feature F拼接,得到新的feature F*;

    4、用一个MLP网络计算出特定输入顺序对应的X矩阵;

    5、用矩阵X对特定顺序的feature F*矩阵进行处理,得到FX;

    6、执行Convolution,得到p的特征。

      算法也可以用如下公式来表达:

      整个实现过程是先输入数据,先采样,再进行X-cov,并且在X-cov的过程中,不仅实现了对本身特征的提取,也通过对dim,空间信息的处理,其中X是从空间信息中提取出来的,经过X的相乘之后实现了数据的规则化。

    2.3 分层卷积

      图2上半部分是图像的CNN,通过conv提取特征,通过池化降采样。下半部分是PointCNN,通过X-Conv提取特征,通过降采样削减样本数量,但是每个点的特征却越来越丰富。PointCNN从F1中选取代表点集F2的方法,暂时的实现是:对分类问题,p2是p1的随机下采样;对语义分割问题,p2是p1的最远点采样。

    三、实验

    3.1分类和分割

    3.2消融实验、可视化和模型复杂度

      上图是转置矩阵的可视化分析,同样颜色是同一个点查询到的k近邻里,本文作者对k近邻进行了一个人工的处理,处理后就可以近似的认为,在实际场景中点云输入,可能有人工处理得到的k的阶乘的情况,那么就可以表示由于点云的无序性,带来每次输入的不同。同一个色块就是k近邻的不同的分布,上图中左图就是原始输入,训练网络的时候不加x transferform,BC两个图中b就是网络经过x transferform之前的分布,c就是点云和转置矩阵进行相乘之后得到的feature分布,再经过transform之后,一个点的k近邻信息可以更好的区分开。a图和c图的结果很明显,a图不同点的一些feature混合到一块儿,网络很难区分这些不同的信息,再经过x transform之后,点云的信息后面feature信息已经可以很明显的区分开来。可以通过上面可视化的图证明x transform的有效性。

    总结

    1、卷积操作的关键,是其能够很好的提取规则数据(如图片)的空间和局部信息。由于点云的无序性和不规则性,使得如果直接用普通卷积处理点云,将无法考虑到点云的形状信息以及点云顺序的差异。作者提出一种X-transformation先对点云数据进行处理,使其实现数据的“规则化”,然后利用卷积操作,对点云进行处理。

    2、X-transformation有两个作用:

    • 增强输入特征和点的联系(X-transformation和输入点特征都有相对局部坐标特征,消除了由于整体的变化导致局部变化);
    • 将无序点云重新排列成隐含空间的有序点云(该隐式空间并不知道是什么样的)

    3、图像CNN中的卷积层和PointCNN中的X-Conv层仅在两个方面有所不同:

    • 提取局部区域的方式(图像CNN中的K×K区域 与 PointCNN中代表点周围的K个邻近点)
    • 对于局部区域的信息学习方式(图像CNN的Conv 与PointCNN中的X-Conv)。

    仍存在的问题

    1、理想状态下,作者是希望经过X变换,点云就变得有序,这样就可以和图像一样使用卷积,同时学习周围领域的特征。但一个矩阵适应N!中置换,这应该是不现实,本文的思路和PointNet中的T-Net的思路类似,都是希望先通过变换在一定程度上解决无序的问题。
    2、PointCNN采取了最简单也是最直接的方式来学习X-Conv——用MLP学习变换矩阵。虽然一般的矩阵可以用来实现权值和顺序变换,但是这种方法是否是实现目标的最简形式仍然是不得而知的。

    参考:https://zhuanlan.zhihu.com/p/68920441
    https://zhuanlan.zhihu.com/p/96067255
    https://www.sohu.com/a/220248571_473283
    https://blog.csdn.net/weixin_30950607/article/details/95408148?utm_medium=distribute.pc_relevant.none-task-blog-title-2&spm=1001.2101.3001.4242

  • 相关阅读:
    Linux——shell简单学习(一)
    Linux——进程管理简单学习笔记(二)
    Linux——进程管理学习简单笔记
    Linux——用户管理简单学习笔记(四)
    PHP计算程序运行时间的类
    php几个常用的概率算法(抽奖、广告首选)
    限制非安全IP访问
    简单的点击短信发送计时器
    php 以图搜图
    递归获取二维数组后代、删除后代
  • 原文地址:https://www.cnblogs.com/wangchangshuo/p/13949799.html
Copyright © 2020-2023  润新知