PointNet++ 学习笔记


前言

PointNet最大的缺点就是缺失局部特征,这使得它很难对复杂场景进行分析,对于场景的分割效果十分一般,由于其网络直接暴力地将所有的点最大池化为了一个全局特征,因此局部点与点之间的联系并没有被网络学习到。
在PointNet++中,作者通过两个主要的方法来进行改进,使得网络能更好的提取局部特征。第一,提出了多层次特征提取结构,利用空间距离(metric space distances),使用PointNet对点集局部区域进行特征迭代提取,使其能够学到局部尺度越来越大的特征。第二,由于点集分布很多时候是不均匀的,如果默认是均匀的,会使得网络性能变差,所以作者提出了一种自适应密度的特征提取方法。通过以上两种方法,能够更高效的学习特征,也更有鲁棒性。

一、问题描述

在这里插入图片描述

二、方法概述

在PointNet++中,作者利用所在空间的距离度量将点集划分为有重叠的局部区域。在此基础上,首先在小范围中从几何结构中提取局部特征(浅层特征),然后扩大范围,在这些局部特征的基础上提取更高层次的特征,知道提取到整个点集的全局特征。可以发现,这个过程和CNN网络的特征提取过程类似,首先提取低级别的特征,随着感受野的增大,提取的特征level越来越高。

为什么点集划分的区域之间要重叠呢? 是不是类似CNN的思想,CNN对3x3卷积,必然有重叠的cell被卷积核获取,而这个获得重叠,应该也是这个意思
答:对,就是这样,每个ball有多个点(32)

PointNet++需要解决两个关键的问题:第一,如何将点集划分为不同的区域;第二,如何利用特征提取器获取不同区域的局部特征。这两个问题实际上是相关的,要想通过特征提取器来对不同的区域进行特征提取,需要每个分区具有相同的结构。这里同样可以类比CNN来理解,在CNN中,卷积块作为基本的特征提取器,对应的区域都是n*n的像素区域。而在3D点集当中,同样需要找到结构相同的子区域,和对应的区域特征提取器。

在本文中,作者使用了PointNet作为特征提取器,另外一个问题就是如何来划分点集从而产生结构相同的区域。作者使用了最远点采样算法来(farthest point sampling (FPS) algorithm)选取中心坐标;然后用 query ball来确定中心周围的点,每个区域可以通过中心坐标和半径来确定。区域半径的选择是一个比较有挑战性的事情,因为输入点集是不均匀的,同时区域特征会存在重叠或被遗忘的情况。尽管在VGG当中提到,CNN使用小的卷积核效果比较好,但这是由于图像是网格化的,每个区域是非常规整的,如果再PointNet++使用小的半径,网络性能反而很差。这里可以从直观上想象一下,邻域球过小,可能意味着可能看不到足够完整的局部特征。这个过程也可是使用KNN实现。

三、网络结构

PointNet++增加了获取不同尺度下的目标的能力,即新增了逐尺度抽象的结构,代替了PointNet的直接抽象整个点云的做法。下图是这一组集合抽象层(set abstraction layers)的结构:
在这里插入图片描述

每一组提取层的输入是N*(d + C),其中N是输入点的数量,d是坐标维度,C是特征维度。输出是N’*(d + C’),其中N’是输出点的数量,d是坐标维度不变,C’是新的特征维度。

这个结构主要分为三个部分:

采样层(sampling)
激光雷达单帧的数据点可以多达100k个,如果对每一个点都提取局部特征,计算量是非常巨大的。因此,作者提出了先对数据点进行采样。作者使用的采样算法是最远点采样(farthest point sampling, FPS),相对于随机采样,这种采样算法能够更好地覆盖整个采样空间。

组合层(grouping)
为了提取一个点的局部特征,首先需要定义这个点的“局部”是什么。一个图片像素点的局部是其周围一定曼哈顿距离下的像素点,通常由卷积层的卷积核大小确定。同理,点云数据中的一个点的局部由其周围给定半径划出的球形空间内的其他点构成。组合层的作用就是找出通过采样层后的每一个点的所有构成其局部的点,以方便后续对每个局部提取特征。

特征提取层(feature learning)
用mini-PointNet将局部区域的点编码成特征向量。因为PointNet给出了一个基于点云数据的特征提取网络,因此可以用PointNet对组合层给出的各个局部进行特征提取来得到局部特征。值得注意的是,虽然组合层给出的各个局部可能由不同数量的点构成,但是通过PointNet后都能得到维度一致的特征(由上述K值决定)。
在这里插入图片描述

上述各层构成了PointNet++的基础处理模块。如果将多个这样的处理模块级联组合起来,PointNet++就能像CNN一样从浅层特征得到深层语义特征。对于分割任务的网络,还需要将下采样后的特征进行上采样,使得原始点云中的每个点都有对应的特征。这个上采样的过程通过最近的k个临近点进行插值计算得到。

四、在非均匀采样密度下的鲁棒特征学习

不同于图片数据分布在规则的像素网格上且有均匀的数据密度,点云数据在空间中的分布是不规则且不均匀的。虽然PointNet能够用于对各个点云局部提取特征,但是由于点云在各个局部均匀性不一致,很可能导致学习到的PointNet不能提取到很好的局部特征。比如说,在越远的地方激光雷达数据通常变得越稀疏,因此在稀疏的地方应该考虑更大的尺度范围来提取特征。为此,作者提出了两种密度适应网络结构来保证更优的特征提取。

多尺度组合(multi-scale grouping, MSG)
比较直接的想法是对不同尺度的局部提取特征并将它们串联在一起,如下图(a)所示。对于同一个中心点,如果使用3个不同尺度的话,就分别找围绕每个中心点画3个区域,每个区域的半径及里面的点的个数不同。对于同一个中心点来说,不同尺度的区域送入不同的PointNet进行特征提取,之后concat,作为这个中心点的特征。也就是说MSG实际上相当于并联了多个hierarchical structure,每个结构中心点数量一样,但是区域范围不同(可以理解成感受野?),PointNet的输入和输出尺寸也不同,然后几个不同尺度的结构在PointNet有一个Concat。但是因为需要对每个局部的每个尺度提取特征,其计算量的增加也是很显著的。

多分辨率组合(multi-resolution grouping, MRG)
为了解决MSG计算量太大的问题,作者提出了MRG。此种方法在某一层对每个局部提取到的特征由两个向量串联构成,如下图(b)所示。第一部分由其前一层提取到的特征再次通过特征提取网络得到,第二部分则通过直接对这个局部对应的原始点云数据中的所有点进行特征提取得到。如果点很稀疏的话,第一个向量就不够准确了,要扩大第二个向量的权重;如果点很稠密,那第一个向量就能获得较好的细节。感觉和ResNet中的跳连接有点类似。
在这里插入图片描述

在这部分,作者还提到了一种random input dropout(DP)的方法,就是在输入到点云之前,对点集进行随机的Dropout,比例使用了95%,也就是说进行95%的重新采样。某种程度有点像数据增强,也是提高模型的robustness。那这些方法效果怎么样呢,我们一起来看一下。

从论文中的这幅分类实验结果图可以看出来,多尺度(MSG,MRG)和单一尺度相比(SSG)对分类的准确率没有什么提升,有一个好处是如果点云很稀疏的话,使用MSG可以保持很好的robustness。对于robustness效果random input dropout(DP)其实贡献更大。
在这里插入图片描述

从论文中的分割实验结果看,使用(MSG+DP)之后的确是比SSG结果提升了,在非均匀点云上差距会大一点,但是作者并没有给出MSG和DP对于效果提升单独的贡献对比,所以我们很难确定到底是MSG还是DP在这其中起作用了。

五、分割问题下的点特征传递

经过了前面的做法后,点云内包含的点的数量相比较原始输入是减小了的。因此,对于像分割这一类问题,就需要将点的个数恢复成原始水平。论文中采取了inverse distance weighted average的方法实现差值,公式如下:
在这里插入图片描述
参考(感谢)
https://zhuanlan.zhihu.com/p/88238420
https://blog.csdn.net/shuqiaos/article/details/83659553

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值