重读经典(点云深度学习开山之作):《Deep learning on point clouds for 3D scene understanding》(持续更新中)

在这里插入图片描述
本文介绍的是 PointNet 作者的博士论文:3D场景理解中的点云深度学习。从上图可以看到,整个博士论文主要贡献有两块:一是点云深度学习的网络架构(PointNetPointNet++);二是在3D场景理解中的应用(Frustum PointnetsFlowNet3D)。在本文中,将会按照博士论文篇幅顺序对 PointNetPointNet++ 进行一次详解介绍。关于后面两章 3D 场景理解中的应用 感兴趣的朋友可以看论文原文,这里就不介绍了。

文章目录

      • Abstract
      • Acknowledgments
      • Introduction & Background
      • Deep Learning on Point Sets: PointNet
        • Problem Statement
        • PointNet Architecture
        • Experiments
        • Appendix
      • From PointNet to PointNet++
        • Problem Statement
        • PointNet++ Architecture
        • Experiments
        • Appendix
      • Conclusion and Outlook
      • 参考文献


Abstract

在这里插入图片描述
首先是论文摘要,可以看到摘要篇幅不长,主要有两段:

  • 第一段介绍点云是一种常用的几何数据类型,在计算机视觉、计算机图形学和机器人领域有着广泛的应用。廉价的 3D 传感器的出现使得点云数据可以广泛获得,而当前对自动驾驶汽车的兴趣突显了可靠和高效的点云处理的重要性。然而,由于点云自身格式的不规则,目前的卷积深度学习方法不能直接用于点云处理。大多数研究人员将点云数据转换为规则的3D体素网格或图像集合,这使得点云数据量变得巨大,同时也出现点云量化和其他问题。在本论文中,提出了一种新的神经网络 (PointNet和PointNet++),可直接处理点云,同时考虑了点云输入的排列不变性。网络对物体分类部件分割语义场景解析的各种应用提供了统一的架构,同时对各种输入扰动数据损坏具有高效和鲁棒性。理论分析表明网络可以逼近任何连续的集合函数,并解释了它的鲁棒性。在 PointNet++ 中,我们进一步研究了点云中的局部内容,研究了 3D 扫描中采样密度不均匀的挑战,并设计了学习适应不同采样密度的网络层
  • 本文提出的架构打开了新的以 3D 为中心的场景理解方法。我们展示了如何将 PointNets 技术应用于机器人领域中两个重要的感知问题:3D物体检测3D场景流估计。在 3D物体检测 方面,我们提出了一种新的基于 frustum 的检测框架,实现了点云中的 3D实例分割3D非模态的box估计 。我们的模型,称为 Frustum PointNets,得益于点云提供的精确几何信息,能够通过在输入上应用非参数和数据驱动的几何变换来规范化学习问题。在大规模的室内和室外数据集上进行评估,我们的实时检测器都取得了最好的检测效果。在场景流估计方面,我们提出了一种新的深度网络 FlowNet3D,该网络学习从两帧点云中恢复 3D 运动流。与以往侧重于二维表示和优化光流的工作相比,我们的模型直接优化了三维场景流,在实际 LiDAR 扫描的评估中显示出巨大的优势。由于点云的普遍存在,我们的体系结构并不局限于上述两种应用,甚至不局限于三维场景理解。本文最后对其它潜在的应用领域和未来的研究方向进行了讨论。
  • 这里可以看到作者的摘要写的还是很简短的,前面介绍了设计的网络结构,后面介绍了两个具体感知应用。

Acknowledgments

在这里插入图片描述在这里插入图片描述
下面是论文致谢,总共有五段:

  • 作者第一段是感谢导师 Leonidas Guibas 教授 (Leo教授目前是美国两院院士)对我来说,Leo 是一位非凡的导师,也是一个学术榜样。他总是保持纯真,对新问题保持好奇心。我仍然感谢 Leo 对我的第一个项目的支持,这是小组中的第一个深度学习项目。自从那个项目以来,我们一直在一起学习和成长。现在我经常惊讶于 Leo 在这些新主题上的渊博知识,以及他拥有的深刻洞察力。非常感谢 Leo 经常提醒我要思考得更深,在研究中超越工程层面。最后但同样重要的是,我感谢 Leo 给我的自由,无论是在选择研究课题还是选择职业道路上。Leo 给了我他的建议,但让我决定我真正想做的是什么。 最后作者还感谢了论文阅读委员会和答辩委员会们对论文的建议和评论。
  • 第二段作者感谢的是博士期间一同工作的同学、同事。特别感谢的是 Hao Su,其也是 PointNet 共同一作和PointNet++ 作者之一。第三段作者感谢的是 GoogleNuro 公司,正是因为在这两家公司实习,作者才去研究了点云上的深度学习以及物体检测,作者也感谢了两次实习的其他合作同事。第四段就是感谢家人,最后感谢了英伟达捐赠的 GPU 以及其它组织的支持。

Introduction & Background

论文前两章导论背景知识部分这里就不详细介绍了,具体内容大家可以看论文原文。

首先是介绍研究背景,最近,我们观察到许多新兴的应用需要感知 3D 环境或与 3D 对象交互。例如,在自动驾驶中,为了做出驾驶决策,机器人汽车需要意识到周围的行人和汽车,并理解他们的动作。在增强现实(AR)中,AR 眼镜配备了深度摄像头来感知和理解 3D 几何图形,以便在正确的位置显示虚拟对象,例如冰箱门上的虚拟菜单。许多 3D 场景理解问题不能通过直接编程的方法来结局,因此需要数据驱动的方法来解决。最近深卷积神经网络(CNNs)在 2D 图像理解中的成功启发了我们,我们也希望在 3D 数据理解中受益于深度学习,从而实现 3D深度学习

然而,与用 2D像素数组表示的图像不同3D 具有许多常见的表示,如下图所示:点云、多边形结构、体素结构、深度图等。其中,点云是从物体表面采样的空间中的一组点,通常由激光雷达或深度相机等 3D 传感器采集。在众多的 3D 表示中,对于 3D 场景的理解,我们特别关注点云,原因有两个。

  • 首先,点云可能是最接近原始传感器数据的表示形式。点云编码来自传感器的全部信息,没有任何量化损失(如体积表示)或投影损失(如多视图表示),因此是三维场景理解中是端到端学习的首选。
  • 其次,点云在表示上非常简单:它只是点的集合,避免了网格组合的不规则性和复杂性(如多边形、多边形大小和连通性的选择),因此更容易学习。点云也不需要像在体积表示中那样选择分辨率,或者像在多视图图像中那样选择投影视点。

尽管点云其简单性和普及性很强,但几乎没有任何关于点云的表示学习工作,大多数现有的点云特征都是针对特定任务手动制作的。近年来,用深度神经网络处理点云的研究成果很少。然而,由于点云是不规则的,这些方法几乎都是先将点云转换为其他规则表示,然后再应用现有的深层网络结构。

  • 一个例子是将点云转换为二进制占用网格(如果其中有点,则体素为1,如果为空,则为0),然后在体积网格上应用 3DCNN。然而,这存在非常高的空间和计算成本。在3DCNN 中,存储和计算开销随着网格分辨率的增加呈三次曲线增长。更糟糕的是,由于扫描仪只从物体表面捕获点,许多体素都是空的,因此浪费了大量的计算。由于昂贵的成本,大多数工作只使用非常粗糙的网格,例如分辨率为 30x30x30x30,这反过来会导致较大的量化误差
  • 除了将点云体素化到体网格和使用 3D CNN,还可以将点云投影到 2D 平面上或从 2D 平面绘制 2D 图像,然后使用流行的 2D CNN,但是,由于投影,某些3D信息会丢失,并且选择哪个视点进行投影并不总是显而易见的。
  • 此外,人们可以首先从点云中提取手工制作的特征,然后使用简单的全连接网络来处理它们。然而,通过这种方式,特征学习是通过手工制作的特征来实现的。

由于所有这些转换都有不足之处,一个吸引人的研究问题是:我们能否直接在点云上实现有效的特征学习? 答案是肯定的,下面作者就开始介绍了自己的研究工作(PointNet/PointNet++/Frustum PointNets/FlowNet3D),可以看作是摘要的扩充版,后面还会再详细介绍这里就跳过了。


背景知识部分:

  • 作者介绍了所使用的数据集:MNISTModelNet40ShapeNetPartSHREC15S3DISScanNetSUN RGB-DFlyingThings3DKITTI,可以看到作者博士期间的工作量还是很大的。
  • 然后从五个方面介绍了相关工作:Point Cloud DescriptorsDeep Learning on Unordered PointsDeep Learning on Other 3D Representations3D Object DetectionScene Flow Estimation。背景知识部分这一章,作者写的还是很详细的,值得学习。

Deep Learning on Point Sets: PointNet

在本章,我们开始学习 PointNet。下图是 PointNet 的应用,包括物体分类、部件分割、语义分割。虽然点云在表示上很简单,但在实际处理中面临着两个挑战。

  • 首先,点云只是一组点,因此这些点的排列组合应是不变的,这句话其实是说在处理点云数据时无论这些点如何排列组合,所表示的物体都是确定的。
  • 其次,还需要考虑刚体运动的不变性。即无论怎么进行旋转平移操作,点云所表示的物体也都是确定的。

为了解决上面两个问题,作者构造了一个由神经网络组成的对称函数,从而保证了它对输入点云序列的不变性。与一般论文所不同的是,作者除了进行了实验评估,还进行了理论分析,证明了所设计的网络可以逼近任何连续的集合函数。更有趣的是,网络学会了通过一组稀疏的关键点来总结输入点云,根据可视化,关键点大致对应于对象的骨架

在这里插入图片描述


Problem Statement

下面介绍下我们要处理的问题。假设点云数据集为 {Pi∣i=1,…,n}\left\{P_{i} \mid i=1, \ldots, n\right\}{Pii=1,,n},每个点 PiP_iPi 可以由坐标 (x,y,z)(x,y,z)(x,y,z) 以及其它特征通道来表示(如颜色等),这里为了简化,每个点只包含坐标 (x,y,z)(x,y,z)(x,y,z) 通道。

对于物体分类任务,设计的网络对 kkk 个候选类输出 kkk 个分数;对于部件分割和语义分割,设计的网络会输出 n×mn \times mn×m 个分数,每一个点会有 mmm 个类别分值。


PointNet Architecture

在这里插入图片描述

先来看一下输入的点云数据,它有三个主要的性质:

  • 无序性。与图像的像素数组或体素网格中的体素数组所不同,点云是一个无特定顺序的点的集合。换句话说,一个网络在处理 NNN 个点时应该能保证对这些点 N!N!N! 个排列组合输入时保持不变。
  • 点之间的相互作用。每个点并不是完全孤立的,它们与相邻的点形成了一个有意义的子集。因此,模型需要能够从邻近的点捕获局部特征。
  • 刚体变换不变性。作为一个几何体,网络在物体经过不同刚体变换后学到的表征应该是不变的。例如,旋转或平移所有的点不应该修改全部点的类体和每个点的分割结果。

下面着详细绍下 PointNet 网络结构。从下图可以看到,分类网络和分割网络有很大一部分比例是共用的。整个网络有三个关键模块:

  • 1)最大池化层 作为一个对称函数聚合所有点的信息;
  • 2)局部和全局特征组合结构
  • 3)两个对齐网络对齐输入点云和点云特征。

在这里插入图片描述

  • 无序点云对称函数。为了让模型对点云的排列组合保持不变,可以有三种办法:1)对输入的点云顺序进行排序;2)使用 RNN 网络,讲输入看作是一个序列,但是使用全局的排列组合来进行数据增强;3)使用简单的对称函数聚合每个点的信息。例如 +++∗* 运算符是对称二元函数,其实是我们学过的加法或乘法交换律。

我们的思想是通过对点集上的变换元素应用对称函数来逼近定义在该点集上的通用函数,即:
f({x1,…,xn})≈g(h(x1),…,h(xn))f\left(\left\{x_{1}, \ldots, x_{n}\right\}\right) \approx g\left(h\left(x_{1}\right), \ldots, h\left(x_{n}\right)\right) f({x1,,xn})g(h(x1),,h(xn))

其实,f:2RN→R,h:RN→RKf: 2^{\mathbb{R}^{N}} \rightarrow \mathbb{R}, h: \mathbb{R}^{N} \rightarrow \mathbb{R}^{K}f:2RNR,h:RNRK$ , g:RK×⋯×RK⏟n→Rg: \underbrace{\mathbb{R}^{K} \times \cdots \times \mathbb{R}^{K}}_{n} \rightarrow \mathbb{R}g:nRK××RKR 是一个对称函数。在实验上,我们的基本模式很简单,使用多层感知机来近似函数 hhhggg 是一个最大池化函数。使用这些基本模块就可以构建一个简单的 PointNet 网络。如下图所示。
在这里插入图片描述


Experiments


Appendix


From PointNet to PointNet++

Problem Statement

PointNet++ Architecture

Experiments

Appendix


Conclusion and Outlook


参考文献

论文链接:Deep Learning On Point Clouds For 3D Scene Understanding

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Coursera自动驾驶课程第17讲:An Autonomous Vehicle State Estimator

在第16讲《Coursera自动驾驶课程第16讲:LIDAR Sensing》我们学习了自动驾驶目前常用的3D 传感器,激光雷达,了解了激光雷达的工作原理,掌握了对点云数据的操作以及如何使用点云配准方法来进行汽车定位。 回顾一下,在本…

!何为脏读、不可重复读、幻读

2.0、前言 事务的隔离性是指多个事务并发执行的时候相互之间不受到彼此的干扰的特性,隔离性是事务ACID特性中的I,根据隔离程度从低到高分为Read Uncommitted(读未提交),Read Committed(读已提交&#xff0…

【转】JPA、Hibernate和Mybatis区别和总结

很多人都用过java的数据库连接池C3P0,但官方没有说明名称的由来。 据传闻:连接池作者是《星球大战》迷,C3P0就是其中的一个机器人,并且这个名称中包涵connection 和pool的单词字母。因此叫这个名字(根据网友提醒&…

详解3D物体检测模型: Voxel Transformer for 3D Object Detection

本文介绍一个新的的3D物体检测模型:VoTr,论文已收录于ICCV 2021。 这是第一篇使用 voxel-based Transformer 做3D 主干网络,用于点云数据3D物体检测。由于有限的感受野,传统的 3D 卷积网络检测器(voxel-based&#xff…

一步步编写操作系统 65 标准调用约定stdcall 汇编实战

因为c语言遵循的调用约定是cdecl,咱们也自然要遵守cdecl约定了。不过为了起到对比的作用,除了介绍cdecl外,也会介绍下stdcall。 既然咱们用的是调用约定是cdecl,那对它的介绍最好让它离下一节的内容近一些,所以先说一…

Coursera自动驾驶课程第18讲:The Planning Problem

在第17讲《Coursera自动驾驶课程第17讲:An Autonomous Vehicle State Estimator》 我们学习了如何使用多传感器融合进行自车定位,以及传感器的内外参标定和时间同步,我们还讨论了在实际应用中常遇到的问题。 从本讲开始我们将学习一个新的模…

详解3D物体检测模型:Focal Sparse Convolutional Networks for 3D Object Detection

用于3D目标检测的焦点稀疏卷积神经网络【CVPR2022】【3D检测】本文介绍一篇新的 3D 物体检测模型:Focals Conv,论文收录于 CVPR2022。在 3D 检测任务中,点云或体素数据不均匀地分布在3维空间中,不同位置的数据对物体检测的贡献是不…

地平线:面向规模化量产的自动驾驶感知研发与实践

导读 4月27日,地平线智能驾驶感知研发部负责人苏治中就 《面向规模化量产的自动驾驶感知研发与实践》 这一主题进行了直播讲解。 本次课程内容分为4个部分: 1、地平线自动驾驶环境感知量产实践 2、软硬协同的自动驾驶感知算法设计 3、实现规模化量产的“…

Power BI与Power Query、Power Pivot 是什么关系?

搞不清楚Power BI与Power Query、Power Pivot是什么关系?看这篇文章就够了。 刚开始学习PowerBI的时候,总是能碰到Power Query和Power Pivot这两个词(下文简称为PQ和PP),现在中文里面学习PowerBI的资源本来就不是很多&#xff0c…

地平线:上帝视角与想象力——自动驾驶感知的新范式

导读 3月28日,在「地平线自动驾驶技术专场」上,地平线自动驾驶系统架构师刘景初博士围绕《上帝视角与想象力——自动驾驶感知的新范式 》这一主题进行了直播讲解。 本次课程主要分为以下4个部分: 1、自动驾驶结构演化提出算法新需求 2、软件2…

详解Class类文件的结构(上)

前言 相信搞Java开发的同学都经常会接触到Class类文件,了解了JVM虚拟机之后也会大量接触到class字节码,那么它到底是什么样的文件?内部由什么构成?虚拟机又是如何去识别它的?这篇文章就来学习一下Class类文件的结构。…

Coursera自动驾驶课程第19讲:Mapping for Planning

在第18讲 《Coursera自动驾驶课程第18讲:The Planning Problem》 我们对自动驾驶中的规划问题有了一个全面的了解,理解了规划问题中的约束和目标;同时我们还讨论了如何分层如解决规划问题(任务规划、行为规划、路径规划和速度曲线…

详解Class类文件的结构(下)

本文继续使用上次的Test.class文件,它是由下面单独的一个类文件编译而成的,没有包。 6. 索引(Index) 索引又分类索引、父类索引和接口索引集合,类索引(this_class)和父类索引(super…

自动驾驶开源软件和算法库

1. Carla(自动驾驶开源仿真软件) github:https://github.com/carla-simulator/carladoc:https://carla.readthedocs.io/en/latest/website:http://carla.org/Bounding boxes:https://carla.readthedocs.io/…

Coursera自动驾驶课程第20讲:Mission Planning in Driving Environments

在第19讲《Coursera自动驾驶课程第19讲:Mapping for Planning》 我们学习了自动驾驶中两种环境建图方法:占用网格图(occupancy grid map) 和 高清地图(high-definition road map)。 在本讲中,我…

Java实例化对象过程中的内存分配

问题引入 这里先定义一个很不标准的“书”类,这里为了方便演示就不对类的属性进行封装了。 class Book{String name; //书名double price; //价格public void getInfo(){System.out.println("name:"name";price:"price);} } 在这个类中定义了两个属…

【Python学习】 - sklearn学习 - KNN

前言: 针对一个完整的机器学习框架目前还没有总结出来,所以目前只能总结每一个单独的算法。由于现在研究的重点是算法,所以对于数据的处理,数据的分析和可视化呈现,在现阶段并不进行展示(这样容易陷入纠结…

重读经典:《End-to-End Object Detection with Transformers》

DETR 论文精读【论文精读】这一次朱毅博士给大家精读的论文是 DETR,是目标检测领域里程碑式的一个工作,文章收录于 ECCV20 。DETR 是 Detection Transformer 的缩写,作者使用 Transformer 简化了目标检测流程,不再需要进行 NMS&am…

Execute SQL Task 参数和变量的映射

Execute SQL Task能够执行带参数的SQL查询语句或存储过程(SP),通过SSIS的变量(Variable)对参数赋值。对于不同的Connection Manager,在Task中需要使用不同的符号(Parameter marker)来…

【Python学习】 - 手写数字识别 - python读入mnist数据集的多种方法

写在前面: 其实网上有很多读入mnist数据的代码,但是都是比较麻烦冗长的函数,本篇文章介绍几种不算很麻烦的,借用库函数读入数据的方法。 方法1: 方法2: 方法3: