【3D目标检测】PointNet++

目录

  • 概述
  • 细节
    • 网络结构
    • 分层点集特征学习

概述

首先,本文是基于点云,并且直接处理点云数据的3D目标检测网络
本文可以看做是对PointNet的一个改进。PointNet我们之前也聊到了。他最初是提取点的特征,然后通过对称函数(max pool)将所有的点特征进行聚合,得到全局点云特征,这就完成了特征提取部分的功能。但是在这个过程中,没有考虑到某些点与周围点之间的关系,没有提取局部的特征,而这一点是很重要的(卷积在图像处理中大放异彩),也就限制了它的细粒度识别能力和泛化能力。

细节

网络结构

我们可以发现,最核心的特征提取部分是Hierarchical point set feature learning,它重复堆叠了set abstraction 模块,借助该模块点云的数量不断减少,特征不断聚合。最终分类的时候,就是采用PointNet得到全局特征,经过两层全连接和softmax得到分类结果,而分割就是使用一种类似上采样的方式结合类似skip connection的方式得到最终的分割点云。
【3D目标检测】PointNet++_第1张图片

分层点集特征学习

特征提取的核心就是set abstraction 模块,它主要包含三个部分,分别是sampling、grouping以及pointnet。
【3D目标检测】PointNet++_第2张图片
sampling:这部分做的工作就是从输入的点云集合中的N个点采样出来 N 1 N^1 N1个点,这 N 1 N^1 N1个点就是分区的质点。采样的方式不是往常的随机采样,而是farthest point sampling (FPS)算法,尽可能使得挑选出来的点是较为关键的点,它的算法流程如下:

  1. 随机选择一个点作为已选择采样点;
  2. 计算未选择采样点集中每个点与已选择采样点集之间的距离,将距离最大的那个点加入已选择采样点集;
  3. 更新距离;
  4. 迭代,直至获得了目标数量的采样点。

grouping:对于上面sampling阶段采样到的每个点,都构建一个分区。(这步操作就像是得到CNN中卷积 窗口一样)作者使用了一个Ball query方式,也就是以这些点为球心,在半径范围画一个球,在球内寻找点,注意的是寻找的点上限是K,也就是最多寻找到k个点,如果没找到k个点那就算了,找到几个算几个,这也就带来了一个问题,grouping阶段寻找到的点是数量不定的。注:寻找点的方式其实也有别的,比如KNN,但出于模拟CNN中采样的过程的角度而言,还是Ball query的方式好一些,另外可能是Ball query实验做出来效果好一些。

PointNet:对于grouping阶段得到的所有分区进行特征提取。这边的话,论文中提到了一个问题,就是点云中的点分布是不均匀的,所以在密集区域和稀疏区域得到的特征是存在巨大沟壑的。这个问题有点像之前在图像中的多尺度问题,也就是同一张图片中存在多个不同尺度的物体,我们如何获得一个更好的特征去表征所有尺度的物体。作者给出了两个解决方案,分别是Multi-scale grouping (MSG)以及Multi-resolution grouping (MRG)。

MSG:这种方式是使用不同的尺度(半径)进行grouping操作,并且分别进行特征提取,接下来对这些特征进行堆叠。
【3D目标检测】PointNet++_第3张图片
MRG:这种方式是分级进行grouping操作,最后再进行特征提取。
【3D目标检测】PointNet++_第4张图片

三个阶段的数据变化:假设输入数据是 N ∗ ( d + c ) N*(d+c) N(d+c),N是点数,d是点的坐标数,c是额外提取到的特征。经过sampling就是从 N N N个点中得到 N 1 N^1 N1个点,经过grouping就变成了 N 1 ∗ k ∗ ( d + c ) N^1*k*(d+c) N1k(d+c),而经过PointNet的特征提取就变为了 N 1 ∗ ( d + c ) N^1*(d+c) N1(d+c)

你可能感兴趣的:(论文学习,其他)