PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
    Charles R. Qi*    Hao Su*    Kaichun Mo    Leonidas J. Guibas    时间:2016.12
Stanford University

论文下载地址:https://arxiv.org/abs/1612.00593

代码:https://github.com/charlesq34/pointnet

论文中文翻译:https://blog.csdn.net/qq_41895003/article/details/105217366

https://blog.csdn.net/qq_37314249/article/details/103605076

一、 存在的问题

  3D点云是一种很重要的几何数据结构。由于其存在空间关系不规则的特点,因此不能直接将已有的图像分类分割框架套用到点云上。许多研究者会将3D点云转换为3D体素(voxel grids )或者一系列图片,然后套用到现有的深度学习框架上,取得了非常好的效果。但是将点云体素化势必会改变点云数据的原始特征,造成不必要的数据损失。因此,作者想要做的就是设计一个可以直接处理3d点云数据的深度学习框架

二、 解决的方案

1、点云特征

  点云数据是在欧式空间下的点的一个子集,它具有以下三个特征:

(1)无序。

与图像中的像素阵列或体积网格中的体素阵列不同,点云是一组没有特定顺序的点集。换句话说,一个消耗N个3D点集的网络对N!种排列顺序的输入点集数据的应是不变的。

(2)点与点之间的空间关系。

这些点来自于具有距离度量的空间。这意味着点与点之间不是孤立的,并且相邻点可以形成一个有意义的集合。因此,这个模型需要从相邻点中捕捉局部结构,以及局部结构之间的结合相互作用。

(3)变换下的不变性。作为一个几何物体,点集的学习表示对某些变换应该是不变的。例如,旋转和平移不能改变全局点云类别或点的分割情况。

2、解决方法

  针对点云的特征提出解决问题的方法

(1)无序性的解决方案:目前文献中使用的方法包括

  将无序的数据重排序、

  用数据的所有排列进行数据增强然后使用RNN模型、

  用对称函数来保证排列不变性。

  作者最终选择使用max pooling来聚合全局信息,并在后面从理论上证明了,当特征维数足够大时,max pooling可以模拟论文中所述的任意对称函数f。推导略。

(2)点间关系的解决方案:

  一个物体通常由特定空间内的一定数量的点云构成,也就是说这些点云之间存在空间关系。为了能有效利用这种空间关系,论文作者在计算得到全局点云特征向量后,将其与前面的点特征拼接在一起聚合特征。随后再从拼接后的特征向量中提取特征,这时既有局部信息也有全局信息。

(3)不变性解决方案:

  论文作者提出了在进行特征提取之前,先对点云数据进行对齐的方式来保证不变性。对齐操作是通过训练一个小型的网络来得到转换矩阵,并直接和输入点云数据相乘来实现。

对齐网络也可以扩展到特征空间中,通过一个小网络T-Net预测出一个特征变换矩阵,乘在输出的特征向量上。

  考虑到在特征空间上的变换矩阵比普通的空间变换矩阵(3维)的维度高得多,这会给优化增加不小的难度。所以另外还要在最后的softmax损失上加上一个正则化项: 。 其中A是T-Net预测得到的特征对齐矩阵。对角矩阵不会丢失输入信息,这也是我们所期望的。作者提到,加上正则化项之后训练会更稳定。

三、 网络结构

三个关键结构:

  1、最大池化层,用来将从所有的点上提取得来的信息聚合到一起===》无序性

  2、局部信息和全局信息结合结构===》点间关系

  3、两个对齐网络T-Net,用来将输入点和特征点进行对齐 ====》不变性

  点云》空间对齐》特征变换》特征对齐》特征变换》池化》特征变换==》分类

  点云》空间对齐》特征变换》特征对齐》特征变换》池化》特征拼接》特征变换》特征变换》==》分割

四、 理论证明

  作者对他们模型进行了进一步的理论分析,并提出了两个定理:

  定理1证明了PointNet(vanilla)的网络结构能够拟合任意一个在Hausdorff空间上连续的函数。其作用类似证明神经网络能够拟合任意连续函数一样。

  同时,作者发现PointNet模型的表征能力和maxpooling操作输出的数据维度(K)相关,K值越大,模型的表征能力越强。

  定理2(a)说明对于任何输入数据集S,都存在一个最小集Cs和一个最大集Ns,使得对Cs和Ns之间的任何集合T,其网络输出都和S一样。这也就是说,模型对输入数据在有噪声(引入额外的数据点,趋于Ns)和有数据损坏(缺少数据点,趋于Cs)的情况都是鲁棒的。定理2(b)说明了最小集Cs的数据多少由maxpooling操作输出数据的维度K给出上界。

五、实验效果

1、应用

(1)分类: ModelNet40数据集

(2)部件分割:ShapeNet part数据集

(3)语义分割/检测

2、网络结构分析

(1)针对无序性的解决方法比较

(2)输入和特征对齐的有效性验证

(3)鲁棒性测试(数据缺失、异常值、点扰动)

3、可视化(解释为什么鲁棒性)

  通过研究是哪些点最大程度激活了神经元的值,论文发现,能够最大程度激活网络的点都是物体的主干点,将其上采样,很容易能得到原始的结构。这样的能力决定了PointNet对噪声和数据缺失的鲁棒性。如图所示,作者通过实验列出了PointNet学习到的以下几个物体的关键点。

4、时间和空间复杂度分析

  尽管MVCNN [23]和Subvolume(3D CNN)[18]实现了高性能,但PointNet在计算成本方面效率更高(以浮点运算/样本进行测量:分别为141x和8x)。
  此外,就网络中参数而言,PointNet比MVCNN更节省空间(参数少17倍)。PointNet更具可扩展性 - 空间和时间复杂度为O(N) - 与输入点数量呈线性。
  然而,由于卷积占主导地位,多视图方法的时间复杂度在图像分辨率上正常增长,而基于体积卷积的方法随着卷大小以立方速度增长。
  从经验上来看,PointNet能够在TensorFlow上使用1080X GPU处理每秒超过100万点的点云分类(约1K个对象/秒)或语义分割(约2个块/秒)任务,显示出实时应用的巨大潜力。

六、仍存在的问题

  PointNet只关注了3D点云的全局信息,对于局部信息的利用不够充分,在平移不变性上有一定缺陷,后来作者提出了PointNet++。

七、代码分析

  (略)

参考:https://cloud.tencent.com/developer/article/1640702

https://www.jiqizhixin.com/articles/2019-05-10-13

https://blog.csdn.net/hongbin_xu/article/details/84638109

论文笔记:(CVPR2017)PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation的更多相关文章

  1. PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

    摘要 点云是一种重要的几何数据结构类型.由于其不规则的格式,大多数研究人员将此类数据转化为常规的三维体素网格或图像集合.然而,这使数据变得不必要的庞大,并导致问题.在本文中,我们设计了一种新型的直接处 ...

  2. 论文笔记(1):Deep Learning.

    论文笔记1:Deep Learning         2015年,深度学习三位大牛(Yann LeCun,Yoshua Bengio & Geoffrey Hinton),合作在Nature ...

  3. 《3-D Deep Learning Approach for Remote Sensing Image Classification》论文笔记

    论文题目<3-D Deep Learning Approach for Remote Sensing Image Classification> 论文作者:Amina Ben Hamida ...

  4. 论文笔记: Dual Deep Network for Visual Tracking

    论文笔记: Dual Deep Network for Visual Tracking  2017-10-17 21:57:08  先来看文章的流程吧 ... 可以看到,作者所总结的三个点在于: 1. ...

  5. ISSCC 2017论文导读 Session 14 Deep Learning Processors,A 2.9TOPS/W Deep Convolutional Neural Network

    最近ISSCC2017大会刚刚举行,看了关于Deep Learning处理器的Session 14,有一些不错的东西,在这里记录一下. A 2.9TOPS/W Deep Convolutional N ...

  6. ISSCC 2017论文导读 Session 14 Deep Learning Processors,A 2.9TOPS/W Deep Convolutional Neural Network SOC

    最近ISSCC2017大会刚刚举行,看了关于Deep Learning处理器的Session 14,有一些不错的东西,在这里记录一下. A 2.9TOPS/W Deep Convolutional N ...

  7. 论文笔记之: Deep Metric Learning via Lifted Structured Feature Embedding

    Deep Metric Learning via Lifted Structured Feature Embedding CVPR 2016 摘要:本文提出一种距离度量的方法,充分的发挥 traini ...

  8. 论文笔记之:Deep Reinforcement Learning with Double Q-learning

    Deep Reinforcement Learning with Double Q-learning Google DeepMind Abstract 主流的 Q-learning 算法过高的估计在特 ...

  9. 论文笔记之:Deep Attributes Driven Multi-Camera Person Re-identification

    Deep Attributes Driven Multi-Camera Person Re-identification 2017-06-28  21:38:55    [Motivation] 本文 ...

随机推荐

  1. NOIP模拟测试5「星际旅行·砍树·超级树」

    星际旅行 0分 瞬间爆炸. 考试的时候觉得这个题怎么这么难, 打个dp,可以被儿子贡献,可以被父亲贡献,还有自环,叶子节点连边可以贡献,非叶子也可以贡献,自环可以跑一回,自环可以跑两回, 关键是同一子 ...

  2. ORA-09817:Write to audit file failed

    ERROR: ORA-09817: Write to audit file failed. --这种错误基本是磁盘空间满了 问题描述:sqlplus / as sysdba登不上,报上述ora-098 ...

  3. DOS命令行(11)——更多实用的命令行工具

    start 启动另一个窗口运行指定的程序或命令,所有的DOS命令和命令行程序都可以由start命令来调用.该命令不仅能运行程序,还能运行协议对应的程序 命令格式:START ["title& ...

  4. 一文带你走遍Git世界,教会你Git的使用

    @ 目录 这篇文章教会Git 1. Git是什么? 1.1 发展历程 1.2 Git是什么? 1.3 Git和SVN 2.Git有什么用? 2.1 代码合并 2.2 代码备份 2.3 代码还原 2.4 ...

  5. Java实现单例模式的几种方式

    单例模式(Singleton),保证在程序运行期间,内存中只有一个实例对象. 饿汉式,最常用的方式.JVM加载类到内存中时,创建实例,线程安全. public class Boss { private ...

  6. Android开发万能Utils(工具大全)

    AndroidUtils Android开发不得不收藏的Utils About AndroidUtilCode  是一个强大易用的安卓工具类库,它合理地封装了安卓开发中常用的函数,具有完善的 Demo ...

  7. string转char*/char[]

    转char* 主要有三种方法可以将str转换为char*类型,分别是:data(); c_str(); copy(); 1.data() data()仅返回字符串内容,而不含有结束符'\0' std: ...

  8. 不藏了,这些Java反射用法总结都告诉你们

    摘要:Java反射是一种非常强大的机制,它可以在同一个系统中去检测内部的类的字段.方法和构造函数.它非常多的Java框架中,都大量应用了反射技术,如Hibernate和Spring.可以说,反射机制的 ...

  9. LRU工程实现源码(一):Redis 内存淘汰策略

    目录 内存淘汰是什么?什么时候内存淘汰 内存淘汰策略 Redis中的LRU淘汰算法 源码剖析 第一步:什么时候开始淘汰key 配置读取 检查时机 getMaxmemoryState 第二步:淘汰哪些k ...

  10. elf文件结构解读以及plt节got节的理解

    前言: 熟悉elf文件结构是一件很不错的事,因为安卓中的so加固以及修复都是需要这些知识的,包括pwn里面的rop之类的,也都是 和got节,plt节息息相关的,个人建议是在搞懂elf文件结构后,自己 ...