本人是刚入门小白,把最近看的论文记录一下,记录的内容都是感觉比较重要的,望大家可以指点一下。
PointNet是直接处理点云的结构,大体思想是学习到每个点的空间编码然后聚合所有独立的点特征到全局特征。PointNet的缺点是没有捕获点云的局部结构特征。
论文作者提出了一种级联神经网络,pointnet++,用级联方式处理空间中采样得到的点。pointnet++的思想很简单:首先把点集分成几个重叠的局部区域,就和CNNs类似,提取局部区域代表的三维结构的特征;这些局部特征能够组合成更大的单元,处理这些单元得到高层特征。这个过程可以一直重复,直到我们得到整个点集的特征。
pointnet++·有两个需要解决的问题:怎样将点集进行划分;怎样提取点集或者局部特征集的特征。第二个问题,提取局部特征的任务可以交给pointnet。
第一个问题,划分点集:使用球形划分。为了逐渐覆盖整个点集,在点集上采用FPS算法选取点,作为球心。
如上图所示,作者提出的级联结构由几组抽象级别组成。在每个抽象级别,点集经过处理和抽象得到更少元素组成的集合。抽象层次由三个层构成:采样层、组合层和pointnet层组成。
采样层: 给定点集 { x 1 , x 2 , . . . , x n } \{x1, x2, ...,xn\} {x1,x2,...,xn},迭代使用FPS算法,得到子集 { x i 1 , x i 2 , . . . , x i m } \{x_{i1}, x_{i2}, ...,x_{im}\} {xi1,xi2,...,xim}。子集中的点,将作为球形的球心。
组合层: 输入这个层的数据有: N × ( d + C ) N \times (d + C) N×(d+C)的点集和 N ′ × d N'\times d N′×d的球心集合。经过该层,输出的数据为 N ′ × K × ( d + C ) N' \times K \times (d + C) N′×K×(d+C)的点集。 K K K是球形里边的点的数量。值得注意的是 K K K在组合层有可能不同,但是pointnet层能够转换为固定长度的向量。
pointnet层: 输入的数据形状为 N ′ × K × ( d + C ) N' \times K \times (d+C) N′×K×(d+C),输出数据的形状为 N ′ × ( d + C ′ ) N' \times (d+ C') N′×(d+C′)。局部区域中的点的坐标首先转换为以球心为中心点的相对坐标。
点云数据在不同的地方有不同的密度。在密度大的区域,我们希望可以观察的仔细一些(就是观察的空间区域小一些);在密度小的区域,我们需要观察更大的区域。出于这个目的,作者提出了两种方法:
多尺度组合(MSG): 如上图a所示,在不同尺度上使用pointnet提取特征然后组合起来。使用这个方法时,我们会随机的丢弃一些输入数据。对于训练点集,随机选取dropout ratio,对于每个点,应用这个dropout ratio。
多分辨率组合(MRG): 如上图b所示,分成两个层级。输出的特征是由两部分组成:一,较低的层级(大尺度)得到的特征;二:较低的层级(小尺度)得到特征后,由较高的层级再处理得到的特征。
经过抽象层之后,点的数量是变少了。在分割问题中,我们需要获得原始点的特征。作者采用插值的方式来解决。