论文笔记:PointSIFT

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hongbin_xu/article/details/83071273

原文:PointSIFT: A SIFT-like Network Module for 3D Point Cloud Semantic Segmentation

PointSIFT

1、四个问题

  1. 要解决什么问题?
    • 3D点云感知通常包含了三大任务:3D物体分类,3D目标检测,以及3D语义分割。
    • 在三个大任务中,3D点云的语义分割相对更具挑战性,也是这篇论文所要解决的问题。
  2. 用了什么办法解决?
    • 参考SIFT特征子,作者设计了一个PointSIFT模块,用来对三维点云在不同方向上的信息进行编码,并且也具有尺度不变性。
      • 首先,8个重要方向的信息通过一个方向编码单元(orientation-encoding unit)来提取。
      • 然后,通过堆叠多个尺度下的方向编码单元(orientation-encoding unit),以获得尺度不变性。
  3. 效果如何?
    • 目前点云分割领域state-of-the-art的方法。
    • 在ScanNet数据集上的测试准确率达到86%,而此前的PointNet则为73.9%、PointNet++为84.5%。
    • 在S3DIS数据集上,对大多数类的点云分割效果都取得了最好的效果。
    • 作者公开了代码,下次试试看再说。
  4. 还存在什么问题?
    • 虽然文中说是参考SIFT设计了PointSIFT,但更多的还是依靠PointNet++的结构设计,只是仿照SIFT增加了尺度不变性,与此同时也会让计算量增加。尽管精度提高了很多,但是效率和速度还是硬伤。
    • 采样不均衡性,随机选取中心点无法保证一定能将领域覆盖所有的点,如下图所示。由于点云的无序性和稀疏性,很大程度上会限制网络的效果。

在这里插入图片描述

2、论文概述

2.1、介绍

在这里插入图片描述

  • SIFT是最成功的特征描述子之一,主要是因为它考虑了图像表示(shape representation)的两个基本特征:方向编码(orientation-encoding)和尺度感知(scale-awareness)。
    • 尺度感知(scale-awareness)意思是,SIFT能自动选择目标图像最合适提取特征的尺寸。
    • 方向编码(orientation-encoding)意味着,能够感知不同方向下的图案信息。
  • PointSIFT模块就是基于上面两个性质设计的。下面是基本思路:
    • 与SIFT不同的是,PointSIFT不是人工设计(handcrafted)的,而是一个神经网络模块,在训练过程中自动优化。
    • PointSIFT的基本模块是方向编码单元(orientation-encoding unit),在8个方向上提取特征。
    • 通过堆叠多个方向编码单元(orientation-encoding unit,简写为OE),在不同层上的OE单元可以感知到不同尺度的信息,即具有了尺度感知(scale-awareness)的能力。
    • 最后通过shortcut连接,将这些OE单元连接到一起,再让神经网络自行选择(训练后)合适的尺度。

2.2、PointSIFT模块

2.2.1、基本模块概述

在这里插入图片描述

  • 输入为 n × d n \times d ,即点云;输出也为 n × d n \times d ,是提取到的特征。
  • PointSIFT模块采用了多个不同的方向编码卷积层堆叠而成,不同层都表示了不同的尺度,最后的一层将前面所有方向编码卷积层的输出通过shortcuts连在一起,再从中提取出最终的尺度不变的特征信息。

2.2.2、方向编码卷积(orientation-encoding convolution)

在这里插入图片描述

  • 给定点 p 0 p_0 ,其对应的特征为 f 0 f_0 。以 p 0 p_0 为中心点的3D空间中,可以根据8个方向分为8个子空间(octant)。从其中分别寻找 p 0 p_0 的k个最近邻点,如果在某个子空间(octant)内,搜索半径 r r 内没有找到点,就将这个子空间的特征认为等于 f 0 f_0 。如图a所示。
  • 为了使卷积操作能感知方向上的信息,分别在X、Y、Z轴上进行三阶段的卷积。
  • 对搜索到的k近邻点的特征编码, M R 2 × 2 × 2 × d M \in R^{2 \times 2 \times 2 \times d} ,前三个维度分别表示点在8个子空间上的编码。比如, ( 1 , 1 , 1 , ) (1, 1, 1, ) 表示top-front-right的octant。
  • 如图c所示,卷积操作如下:

在这里插入图片描述

  • A x , A y , A z A_x, A_y, A_z 为待优化的卷积权值; C o n v x ( C o n v y , C o n v z ) Conv_x(Conv_y, Conv_z) 分别表示在 X ( Y , Z ) X(Y, Z) 轴上的卷积操作; g ( ) g(\cdot) 表示 R e L U ( B a t c h N o r m ( ) ) ReLU(BatchNorm( \cdot ))
  • 在三次卷积后,每个点都被转换为了一个 d d 维向量,这个向量就代表着点 p 0 p_0 附近k领域内的形状信息。
  • 注意,经过方向编码(orientation-encoding)后再利用卷积提取特征,现在的输出点集的 d d 维表示的已经不是原始的坐标等等的信息了,实质上已经转换为了另一个分布了,即从这个领域内所有点的信息中提取的特征点。虽然PointSIFT的输入输出都是 N × d N \times d

2.2.3、讨论一个特殊情况

在这里插入图片描述

  • 像PointNet++,搜索最近邻点时使用的是球形搜索算法(ball query searching)。
  • 一方面,在方向编码卷积(orientation-encoding convolution)中,只需要在每个方向上搜索一个更小的领域,效率比球形搜索算法更高。
  • 另一方面,如上图所示,K近邻的k如果较小,很容易集中在一个很小的范围。实际上,这不利于表示中心点所在区域的整体特征,换句话说,只能提取到红点那块区域的信息。使用方向编码卷积一定程度上,可以避免这个问题,可以至少兼顾8个方向的特征信息。当然方向越多越好,但与此同时计算复杂度也会增加。

2.2.4、尺度感知结构(scale-aware architecture)

  • 尺度感知这部分感觉更好理解,类别于CNN的感受野随着卷积层的深入逐渐扩大。
  • 对于某一个方向编码卷积单元来说,会对8个方向领域内的点进行特征提取,可以将其感受野认为是8个方向下的k领域,每个领域对应一个特征点。随着堆叠,每层的每个点又会对应上一层8个方向领域的特征点。。。
  • 依此类推,可以算出,理想情况下(每次卷积时每个方向上都有点),堆叠 i i 次,感受野为 8 i 8^i 个点。
  • 不难理解,每层都有不同的感受野,自然可以像SIFT那样提取不同尺度的信息了。
  • 最后将这些层都通过shortcut拼接在一起,接上pointwise卷积( 1 × 1 1 \times 1 卷积),让网络随着训练自行选择合适的尺度即可。

2.2.5、网络整体结构

在这里插入图片描述

  • 网络分为了两部分:编码器和解码器。
  • 输入为 n = 8192 n=8192 个点的点云,如果只考虑3D点的X、Y、Z坐标,那么 d = 3 d=3 ;如果另外加入了RGB信息,那么 d = 6 d=6
  • 参考PointNet++的设计,第一层先将输入点云的维度转换为64维。
  • 同样参考自PointNet++,SA(set abstraction)和FP(feature propagation)都嵌入在网络中,主要任务分别是降采样和上采样。
  • 最后将解码器的输出接到全连接层,用于预测各个类的概率。

在这里插入图片描述

在这里插入图片描述

2.3、实验结果

  • 比较懒,直接贴结果图了。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hongbin_xu/article/details/83071273
今日推荐