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

论文笔记:(NIPS2018)PointCNN: Convolution On X-Transformed Points的更多相关文章

  1. 【论文笔记】Pyramidal Convolution: Rethinking Convolutional Neural Networks for Visual Recognition

    地址:https://arxiv.org/pdf/2006.11538.pdf github:https://github.com/iduta/pyconv 目前的卷积神经网络普遍使用3×3的卷积神经 ...

  2. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)

    Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文, ...

  3. 论文笔记系列-Neural Network Search :A Survey

    论文笔记系列-Neural Network Search :A Survey 论文 笔记 NAS automl survey review reinforcement learning Bayesia ...

  4. Deep Learning论文笔记之(三)单层非监督学习网络分析

    Deep Learning论文笔记之(三)单层非监督学习网络分析 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文,但老感 ...

  5. 论文笔记-IGCV3:Interleaved Low-Rank Group Convolutions for Efficient Deep Neural Networks

    论文笔记-IGCV3:Interleaved Low-Rank Group Convolutions for Efficient Deep Neural Networks 2018年07月11日 14 ...

  6. 深度学习论文笔记:Fast R-CNN

    知识点 mAP:detection quality. Abstract 本文提出一种基于快速区域的卷积网络方法(快速R-CNN)用于对象检测. 快速R-CNN采用多项创新技术来提高训练和测试速度,同时 ...

  7. 论文笔记之:Visual Tracking with Fully Convolutional Networks

    论文笔记之:Visual Tracking with Fully Convolutional Networks ICCV 2015  CUHK 本文利用 FCN 来做跟踪问题,但开篇就提到并非将其看做 ...

  8. Deep Learning论文笔记之(八)Deep Learning最新综述

    Deep Learning论文笔记之(八)Deep Learning最新综述 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感觉看完 ...

  9. Twitter 新一代流处理利器——Heron 论文笔记之Heron架构

    Twitter 新一代流处理利器--Heron 论文笔记之Heron架构 标签(空格分隔): Streaming-process realtime-process Heron Architecture ...

随机推荐

  1. 【题解】Grape luogu1156改 dp

    考试时被数据坑了 题目 原题 传送门 题目描述: 众所周知的是oyyf 沉迷葡萄,今天的oyyf为了葡萄溜到了He 大佬家的葡萄园偷葡萄,可惜的是还没偷到葡萄He 大佬就来葡萄园了,吓的oyyf 直接 ...

  2. 【linux】驱动-15-定时器

    目录 前言 15. 定时器 15.1 内核函数汇总 15.2 内核滴答 15.3 相关结构体 15.4 setup_timer() 设置定时器 15.5 add_timer() 向内核添加定时器 15 ...

  3. 『无为则无心』Python基础 — 5、Python开发工具的安装与使用

    目录 1.Pycharm下载 2.Pycharm安装 3.PyCharm界面介绍 4.基本使用 (1)新建Python项目 (2)编写Python代码 (3)执行代码查看结果 (4)设置PyCharm ...

  4. js关于数组的操作(合并数组、添加数组、循环等)

    1. concat() 方法 concat() 方法用于连接两个或多个数组 var arr = new Array(3) arr[0] = "George" arr[1] = &q ...

  5. 温故知新,.Net Core遇见Postman(API Development),进阶分布式微服务高效调式

    什么是Postman 环境变量(Environments) 全局协议 描述 变量 初始值 当前值 请求协议 request_protocol http http 授权信息 描述 变量 初始值 当前值 ...

  6. 使用 python 把一个文件生成 C 语言中的数组并保存到头文件中

    (一)要做什么 之前有这么一个需求,是要把一个二进制文件里面的数据,转换成 C 代码里面的数组,可以看之前的一篇文章: NUC980 运行 RT-Thread 驱动 SPI 接口 OLED 播放 ba ...

  7. 咋滴,不就是面试总考Spring的AOP吗,办它!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 为什么,你的代码总是糊到猪圈上? 怎么办,知道你在互联网,不知道你在哪个大厂.知道你 ...

  8. Spring中如何使用自定义注解搭配@Import引入内外部配置并完成某一功能的启用

    文章背景 有一个封装 RocketMq 的 client 的需求,用来提供给各项目收.发消息,但是项目当中常常只使用收或者发消息的单一功能,而且不同的项目 group 等并不相同而且不会变化,可以在项 ...

  9. angular小记

    declarations:包装组件或指令等 providers:依赖注入 imports:导入其他模块 bootstrap:设置根组件 exports:导出组件或指令等 app.component.t ...

  10. Python基础4--数据类型

    一.数据类型是什么鬼? 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同 ...