论文阅读|可直接处理无序3D点云的神经网络PointNet

论文相关信息

1.论文题目:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

2.发表时间:2016.12

3.文献地址:https://arxiv.org/pdf/1612.00593.pdf

4.论文源码:

论文贡献:

  • 设计了一个新的适用于处理无序3D点云数据的深度网络架构。
  • 该网络可以用于3D分类和部件分割、场景语义分割等数据任务。
  • 提供了一个处理3D点云数据的基本思路。

Abstract

点云是一种重要的3D数据格式,因为点云具有不规则的形式,大多数研究者会将其转换为3D体素或图片几何。但这会导致数据量极大,并且出现一些不必要问题。本论文设计出一种新的神经网络,能够直接处理具有转换不变性的点云。我们将这个神经网络叫做PointNet,它为目标分类,部件分割和场景语义分割提供另一个统一架构,该网络简单高效。

1.Introduction

本篇论文我们将开发一个能够推理如点云或(meshes)的3D几何数据的深度学习架构,经典的卷积架构要求高度规则的输入数据格式,比如图片格子或是3D voxels(体素),进而能够实现权重共享和优化内核。而点云和网状物并非规则格式,大部分研究者在将数据送入网络前会将它们转换为规则的3D voxel grids或者图片的集合,但是这种数据表示转换会使得结果数据冗余,并且会模糊掉数据原有的不变性(无序性)。

为此,我们要聚焦于使用简单的点云来实现一种不同的3D几何特征的输入表示,并将该深度网络命名为PointNets.点云是简单且同一的结构,能够避免网格的组合不规则性和复杂性,进而容易学习。PointNet仍然是一个点的集合,它对其成员的排列是不变的,所以网络计算中需要一定的对称,并且还需要考虑严格运动的进一步不变性。

PointNet是一个统一的架构,直接以点云为输入然后输出整个输入的类别标签(分类)或者单个点的标签(语义分割)。我们将点云中每个点用一个向量表示,基本的属性有(x,y,z),当然还可以有其它维度信息,比如颜色等。由于点云的无序性,所以我们使用一个对称函数(比如max pooling或者sum函数)来处理,这样可以忽略顺序。具体而言,文中采用对称函数max pooling对所有点的每个维度做池化操作来获取每一维度全局信息,但是由于每个点的维度不多,这样的全局信息能力太弱,所以可以先将每个点升维,然后再做池化操作获取一个高维度的全局信息,最后使用一个全连接层来聚合这些学习到的值并做分类。其简化图如下。
在这里插入图片描述

其中的MLP是一个多层感知机,用于升维,当然可以将其理解为一个全连接层。

网络的架构

在这里插入图片描述

其中,input transform和feature transform用于规范数据,但是后面学者指出这些工作无用,可以去掉,所以不管。

网络的输入是一个点云,每个物体的点不同,但是都只采样n个点传入,每个点可以有若干维,最少3维表示x,y,z的坐标信息,这里假设只有3维,即(x,y,z),n个点云数据首先通过mlp(64,64)升维到64(mlp是多层感知机,括号中的数字其每层的输出维度),然后再通过一个mlp(64,128,1024)升维到1024,此时每个点的维度够高,通过max pool池化操作后可以得到一个1024维的全局特征,接着将该全局特征再传入一个mlp降维到k,最后输出该点云的k个分类得分。如果是做分割,则会将每个点的特征和全局特征相结合,如上图中所示,会将1024维的全局特征复制n份加到64维时的点云中每个点上,得到n个1088维的点,这样每个点中既有全局信息又有局部信息,然后通过mlp做每个点的分类即可实现分割任务。

以上是整个网络的思想,比较容易理解,该思想中的关键是采用对称函数应对点云的无序性,该对称函数可以提炼如下:

f ( { x 1 , . . . , x n } ) ≈ g ( h ( x 1 ) , . . . , h ( x n ) ) f(\left\{ x_1,...,x_n\right\})\approx g(h(x_1),...,h(x_n)) f({ x1,...,xn})g(h(x1),...,h(xn))$, (1)

其中 f : 2 R N → R , h : R N → R K , g : R K × ⋅ ⋅ ⋅ × R K ⏟ n f:2^{R^N}\to R,h:R^{N}\to R^K,g: \begin{matrix} \underbrace{ R^K×···×R^K} \\ n\end{matrix} f:2RNR,h:RNRK,g: RK××RKn

h h h对应的是用来给点云升维mlp,g则是全局最大池化函数, f f f则是我们的对称函数。

补充

点云的性质

无序性。虽然输入的点云是有顺序的,但是显然这个顺序不应当影响结果

与其他点的交互性。每个点不是独立的,而是与其周围的一些点共同蕴含了一些信息,因而模型应当能够抓住局部的结构和局部之间的交互。

变换下的不变性。比如点云整体的旋转和平移不应该影响它的分类或者分割.

MLP实现

mlp是多层感知机,实际上是通过一种1维卷积Conv1d实现的,而关于这种一维卷积conv1d,知乎上的这篇文章讲的很清楚。而且这个作者还有pointnet论文笔记,分析的很好,也放在参考处了

PointNet论文复现及代码详解

参考

https://www.bilibili.com/video/BV1M5411K7Gx?p=3

至于PointNet的改进版,PointNet++,它在PointNet基础上增加了局部特征提取,能够像CNN那样层级的下采样提取点特征,并且解决了点密度自适应的情况,所以叫PointNet++。原论文中是这么说的:

we propose density adaptive PointNet layers that learn to combine features from regions of different scales when the input sampling density changes. We call our hierarchical network with density adaptive PointNet layers as PointNet++.

下面给出PointNet++的推荐博客,自己不写笔记了,因为大体的原理看这些博客, 然后细节可以直接看英文版的,还说比较好懂。
文章思想看这篇:3D分类与分割之PointNet 论文笔记
论文具体实现细节看这篇:PointNet++详解与代码,上面文章思想的那篇中给的论文实现就是这篇中摘取的,不完善,而且有些具体意思没有表述完全,但是好在大体思路顺序和论文一致,总体来说二者结合,再加上原论文就很好懂了。

猜你喜欢

转载自blog.csdn.net/yanghao201607030101/article/details/114437211
今日推荐