PointASNL: Robust Point Clouds Processing using Nonlocal Neural Networks with Adaptive Sampling(CVPR 2020)

论文 https://arxiv.org/pdf/2003.00492.pdf
代码 https://github.com/yanx27/PointASNL

李镇老师个人主页
本文来自于香港中文大学(深圳)、深度比特实验室,一作为颜旭,通讯作者为李镇。
PS:本人小白,此篇博客仅作为个人笔记,有很多用语不准确,如有错误请麻烦指出,谢谢!

0. Abstract

  当原始点云由3D传感器采集或者重建算法生成时,必然会包括一些 离群点(outliers) 或者噪声。本文提出了一种用于处理点云的端到端网络:PointASNL。此网络对处理这些包含outliers或者noise的点云十分有效。

  此网络主要由两大部分组成,分别为adaptive sampling (AS) module和local-nonlocal (L-NL) module。

adaptive sampling (AS) module
1.对FPS得到的初始采样点周围的neighbors进行re-weight

2.自适应地调整采样点,其中,这个采样点可能就是一个outlier

3.作用:有利于点云数据的特征学习,抑制outlier的负面影响

4.如下图左半部分所示,黄色五角星就是由FPS得到的初始采样点,运气不好,它是一个outlier
  直接用它进行接下去的学习,那必然会出现很多问题。
  而AS通过步骤1和2,将这个采样点调整到了点云内部,也就是红色五角星的位置。
  将这个红色五角星作为新的采样点,进行接下去的步骤。
  如此,就抑制了outlier的影响。
local-nonlocal (L-NL) module
1.受论文Non-local Neural Networks(CVPR 2018)启发,提出L-NL模块。

2.目的是为了进一步获取采样点(AS处理后的)的neighbor和long-range dependencies(远程依存关系?不知道如何翻译)
  总之就是,L-NL模块,通过使用局部和全局的信息,进一步对feature进行增强。
  
3.L-NL模块,使得网络对噪声不敏感


  实验效果都很不错,尤其是对那种有很多噪声的真实世界室外数据集,比如KITTI,效果相比其他算法来说,有很大的提升。

1. Introduction

  点云由两部分组成:the points P ∈ R N ∗ 3 R^{N*3} RN3 and the features F ∈ R N ∗ D R^{N*D} RND

  和二维图像不同,3D点云具有稀疏性无序性,使点云处理很困难。另外,在真实世界中获取的点云或者由重建算法得到的点云,不可避免地存在outlier或者噪声

  作者提出了PointASNL,可以很好地处理这些outlier和噪声。由两大部分组成,分别为adaptive sampling (AS) module和local-nonlocal (L-NL) module。

adaptive sampling (AS) module

  由于传统卷积无法直接用在点云上,所以大多数方法采取的策略是:从原始点云中,运用采样法选择采样点,再进行局部特征的学习。

  论文中提到的采样算法有FPS:farthest point sampling、PDS:Poisson disk sampling、GSS:Gumbel subset sampling等。

  它们各自存在缺点,且有一个共同的问题:它们都可能将outlier选为采样点,然后继续接下去的流程肯定会造成负面影响,即对outlier敏感

  而本文提出的AS模块,可以调整初始采样点的坐标,像摘要中讲的那样,有利于fit the intrinsic geometry submanifold (拟合固有几何子流形),且使得学习不受outlier影响。

  所以,AS模块不仅有利于点云特征的学习,还有利于减弱噪声和outlier的影响。

local-nonlocal (L-NL) module

  为了进一步提升效果且为了使学习过程对噪声不敏感,提出了 local-nonlocal (L-NL) 模块。

  过去的特征提取算法大多都是先弄一个采样点,再结合基于图的点云学习或者类卷积的方式进行局部特征的学习,作者将这些操作命名为Point Local Cell。然而这仅仅考虑了局部区域的信息交互,想要获取全局的上下文信息必须通过分层结构来获取,这样的话,层数较大的时候,可能会出现计算量增大、梯度爆炸消失、信息丢失等情况。

  L-NL分为L部分和NL部分。前者就是局部特征学习,后者则是全局特征学习。NL本质上是self-attention,对每个采样点,在整个点云范围内进行融合,为每个采样点计算出一个包含全局信息的feature。这样,N-NL模块就可以为点云处理提供一个更加准确且鲁棒的信息。比如,即使上图中,下侧引擎的采样点(红色五角星)被noise覆盖,L-NL还是可以从另一侧的引擎学习特征。

2. Related Work

2.1 Volumetric-based and Projection-based Methods.

1.不是十分有效率
2.有一些算法进行了优化,计算效率得到提升,但是导致容量的下降。
3.还有一些投影的方法,但是缺少全局的特征学习。

2.2 Point-based Learning Methods.

1.PointNet、PointNet++ 、PointCNN。。。。

2.同样,缺少全局信息,想要全局信息要通过分层结构或者很深的层,从局部特征中进行获取。

2.3 Outlier Removal and Sampling Strategy.

1.outlier去除算法一般都需要很复杂的参数或者要求额外的信息。

2.有一些基于数据驱动的方法首先将outlier去除,再projects noisy points to clean surfaces,
  但是不能将点云的特征学习和outlier去除算法结合起来。
  
3.通过对点云进行采样,可以减少计算量。但是采样算法的效果大多都因为
  对噪声敏感、不是基于数据驱动、没有考虑到空间分布,而受到限制。

3. Our Method

3.1 Adaptive Sampling (AS) Module

  FPS存在两个缺点:
   1.对outlier敏感,使得它很难对真实世界的点云进行处理
   2.对于缺失的地方,比如在采集过程中发生遮挡和丢失错误,则很难推断出原始几何信息。

  如前面所述,运用AS模块可以克服上述缺点。先用FPS采样,获得相对均匀的点作为原始采样点后,再用AS模块对原始采样点进行处理,自适应地学习每个采样点地位移量,进行坐标调整。再利用KNN寻找到每个采样点的neighbors,最后通过自注意力机制对每一组的特征进行更新。接下来介绍方法。

   P s ϵ R N S ∗ 3 P_{s}\epsilon R^{N_{S}*3} PsϵRNS3: 表示从某个层用FPS下采样后得到的点集,其中可能包含噪点,总共有 N S N_{S} NS
   F s ϵ R N S ∗ D l F_{s}\epsilon R^{N_{S}*D_{l}} FsϵRNSDl: 表示下采样得到的点集的feature集合
   x i , f i x_{i}, f_{i} xi,fi: 表示下采样得到的点集里面的某个点的坐标和feature

  1. AS模块首先从上一层的点集中,运用FPS下采样,得到 P S P_{S} PS F S F_{S} FS

  2. 用KNN为每个采样点寻找neighbors,拥有K个。
   采样点 x i x_{i} xi的neighbors为: x i , 1 x_{i,1} xi,1,…, x i , k x_{i,k} xi,k ϵ N \epsilon N^{} ϵN( x i x_i xi)
   对应的neighbors的feature集合为 f i , 1 f_{i,1} fi,1,…, f i , k f_{i,k} fi,k

  3. 使用Self-attention机制对所有neighbors进行group features的更新,论文中给出的公式如下
   
    f i , k = A ( R ( x i , k , x i , j ) γ ( x i , j ) , ∀ x i , j ϵ N ( x i ) ) f_{i,k}=A(R(x_{i,k},x_{i,j})\gamma (x_{i,j}),\forall x_{i,j}\epsilon N(x_{i}) ) fi,k=A(R(xi,k,xi,j)γ(xi,j),xi,jϵN(xi))
   
   其中, f i , k f_{i,k} fi,k表示第i个采样点的第k个neighbor的特征。

    R ( x i , k , x i , j ) R(x_{i,k},x_{i,j}) R(xi,k,xi,j)是一个关系函数,用来计算 x i x_{i} xi的neighbors互相之间的高纬度关系,实际上就是求两者的点积相似性。公式如下:

    R ( x i , k , x i , j ) = S o f t m a x ( ϕ ( f i , k ) T θ ( f i , j ) / D ′ ) R(x_{i,k},x_{i,j})=Softmax(\phi (f_{i,k})^{T}\theta (f_{i,j})/\sqrt{{D}'}) R(xi,k,xi,j)=Softmax(ϕ(fi,k)Tθ(fi,j)/D ) , ϕ \phi ϕ θ \theta θ通过一维卷积实现,Conv: R D l R^{D_{l}} RDl——> R D ′ R^{D^{'}} RD D l D_{l} Dl D ′ D^{'} D分别是输入和输出的通道数。

    γ ( x i , j ) \gamma (x_{i,j}) γ(xi,j)= W γ f i , j W_{\gamma }f_{i,j} Wγfi,j,就是一个线性变换,进行维度变换,将维度从 D l D_{l} Dl变换到 D ′ {D}' D

   A是一个聚合函数,最后将第k个neighbor对其他所有neighbors的特征进行聚合,获得最终的 f i , k f_{i,k} fi,k

   这里本小白对self-attention机制还没有弄得很清楚,可以参考论文:attention is all you need,以及博客深度学习中的注意力机制

   这里简单介绍一下:
在这里插入图片描述
   我们可以这样来看待Attention机制:将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成,此时给定元素Query,通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。即可以将其本质思想改写为如下公式:
在这里插入图片描述
  到此,我们获得了 f i , k f_{i,k} fi,k,也就是第i个采样点的第k个neighbor更新之后的特征。然后通过多层MLP网络,再加softmax,即可获得 W p W_{p} Wp W f W_{f} Wf。再通过 W p W_{p} Wp W f W_{f} Wf,即可获得采样点 x i x_{i} xi调整之后的坐标 x i ∗ x^{*}_{i} xi和特征 f i ∗ f^{*}_{i} fi。公式如下:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.2 Local-Nonlocal (L-NL) Module

  该模块通过使用局部、全局信息,进一步对采样所得点的feature进行增强。

3.2.1 Point Local Cell

  对于每个经过AS模块处理后得到的采样点 x i ∗ x^{*}_{i} xi,local cell主要是对这些采样点的局部领域内,对其neighbors的特征进行融合,计算出一个新的特征。公式如下:
在这里插入图片描述  其中,L是 local feature transformation function, A是一个aggregation function。
  PointNet++中,L是一个多层MLP,A是max-pooling。
  这篇文章中,主要使用了PointConv的思想(连续空间下的卷积操作)。将每个邻居点的相对坐标映射为一组卷积操作的系数矩阵,然后用每个邻居点的系数矩阵对其feature进行变换,最后用一个Aggregation操作,将邻居点的feature融合为local feature。
在这里插入图片描述

3.2.2 Point Nonlocal Cell

  NonLocal本质上,使用的就是Self-Attention机制。和AS模块几乎相同。对每一个采样点,在整个点云范围内进行feature融合,为每个采样点计算出一个包含全局信息的feature。

           N L ( x i , P k ) : = A ( R ( f i , f j ) γ ( f j ) , ∀ x j ϵ P ( k ) ) NL(x_{i},P_{k}):=A(R(f_{i},f_{j})\gamma (f_{j}),\forall x_{j}\epsilon P(k) ) NL(xi,Pk):=A(R(fi,fj)γ(fj),xjϵP(k))
           f i n l = σ ( N L ( x i , P k ) ) f^{nl}_{i}=σ(NL(x_{i},P_{k})) finl=σ(NL(xi,Pk))
在这里插入图片描述

3.2.3 Local-Nonlocal (L-NL) Fusion

  除了Local和NonLocal这两个分支之外,代码中其实还有一个skip connection的分支。对于每个采样所得点,该分支直接对采样点的邻居点的feature执行max_pool,最后通过一个1d convolution给每个采样点计算出来一个新的feature。

  最后将local、nonlocal、skip-connection三个分支的feature加到一起,再用一个1d convolution对feature的channel进行变换,得到每个采样点的feature。

3.3. PointASNL

通过AS模块和L-NL模块,就可以搭建分类和分割网络。
以segmentation为例:
每个下采样操作,相当于FPS -> Adaptive Sampling -> Local-Nonlocal
每个上采样操作,相当于Up-Sampling -> Local-Nonlocal
在这里插入图片描述

4. Experiment

在这里插入图片描述

5. Conclusion

  本文核心即Adaptive Sampling、Local-NonLocal这两个模块。
  Adaptive Sampling的核心是Self-Attention、Attention。
  Local-NonLocal的核心是Self-Attention、PointConv。

  总体上,这篇文章演示了如何融合local、global范围内的feature,进行feature增强。比较特别的是,作者从“噪点“这个角度作为文章的出发点,如此一来,就有别于其它点云feature融合的文章了。

参考:
https://zhuanlan.zhihu.com/p/139396088
https://zhuanlan.zhihu.com/p/129925437
https://blog.csdn.net/Yong_Qi2015/article/details/105852471
https://zhuanlan.zhihu.com/p/148737297

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐