点云论文阅读
date
May 2, 2022
Property
slug
paper_reading
status
Published
tags
笔记
summary
for paper
type
Post
#0-PointNet
##0-简介
点云数据是由无序的数据点构成一个集合来表示, 在以前总是会使用二维图像识别任务的深度学习模型来处理点云, 用2D处理3D的方法一般会转化为如下:
- 将点云数据投影到二维平面上, 转化为前视视角和鸟瞰视角, 也可以融合使用来自相机的图像信息。通过将这些不同视角的数据相结合,来实现点云数据的认知任务。比较典型的算法有MV3D和AVOD。
- 将点云数据划分到有空间依赖关系的voxel。此种方式通过分割三维空间,引入空间依赖关系到点云数据中,再使用3D卷积等方式来进行处理。这种方法的精度依赖于三维空间的分割细腻度,而且3D卷积的运算复杂度也较高。
而PointNet提出了面向点云直接学习的方法.
##1-理论基础
点云具有三个特征:
- 无序性
点云数据是一个集合,对数据的顺序是不敏感的。这就意味这处理点云数据的模型需要对数据的不同排列保持不变性。目前文献中使用的方法包括将无序的数据重排序、用数据的所有排列进行数据增强然后使用RNN模型、用对称函数来保证排列不变性。由于第三种方式的简洁性且容易在模型中实现,论文作者选择使用第三种方式,既使用maxpooling这个对称函数来提取点云数据的特征。
- 点与点之间的空间关系
一个物体通常由特定空间内的一定数量的点云构成,也就是说这些点云之间存在空间关系。为了能有效利用这种空间关系,论文作者提出了将局部特征和全局特征进行串联的方式来聚合信息。
- 不变性
点云数据所代表的目标对某些空间转换应该具有不变性,如旋转和平移。论文作者提出了在进行特征提取之前,先对点云数据进行对齐的方式来保证不变性。对齐操作是通过训练一个小型的网络来得到转换矩阵,并将之和输入点云数据相乘来实现。
作者提出两个定理:
- 定理一:
定理1证明了PointNet的网络结构能够拟合任意的连续集合函数, 其作用类似证明神经网络能够拟合任意连续函数一样. 同时, 作者发现PointNet模型的表征能力和maxpooling操作输出的数据维度(K)相关, K值越大, 模型的表征能力越强.
- 定理二:
Theorem 2. Suppose such that and . Then,
(a) if ;
(b)
定理2(a)说明对于任何输入数据集S,都存在一个最小集Cs和一个最大集Ns,使得对Cs和Ns之间的任何集合T,其网络输出都和S一样。这也就是说,模型对输入数据在有噪声(引入额外的数据点,趋于Ns)和有数据损坏(缺少数据点,趋于Cs)的情况都是鲁棒的。定理2(b)说明了最小集Cs的数据多少由maxpooling操作输出数据的维度K给出上界。换个角度来讲,PointNet能够总结出表示某类物体形状的关键点,基于这些关键点PointNet能够判别物体的类别。这样的能力决定了PointNet对噪声和数据缺失的鲁棒性。如图所示,作者通过实验列出了PointNet学习到的以下几个物体的关键点。
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F43dc7bda-86e1-48d9-8e17-3efe45d6f33f%2Fd6ee5589-b09e-4fca-8a5f-45d0556cbd51%2FUntitled.png%3Ftable%3Dblock%26id%3Dd5a10a50-20ca-4a78-8471-33c2d0b02459%26spaceId%3D43dc7bda-86e1-48d9-8e17-3efe45d6f33f%26expirationTimestamp%3D1739188800000%26signature%3D-qiKqNj_flG2YNnwk8MHQt-VY6e38alhXikfVkaPsBo?table=block&id=d5a10a50-20ca-4a78-8471-33c2d0b02459&cache=v2)
##2-PointNet系列模型结构
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F43dc7bda-86e1-48d9-8e17-3efe45d6f33f%2F7cc5fd61-2532-4d2a-bb1b-054c912e4ef8%2FUntitled.png%3Ftable%3Dblock%26id%3D7b607021-0e6c-4007-ae99-60c905c2f893%26spaceId%3D43dc7bda-86e1-48d9-8e17-3efe45d6f33f%26expirationTimestamp%3D1739188800000%26signature%3DogMmMk0AzHXe4DDg9yWLIMzXQjSgtdnEYUrc2-Iil2c?table=block&id=7b607021-0e6c-4007-ae99-60c905c2f893&cache=v2)
关键的流程如下:
- 输入为一帧的全部点云数据的集合,表示为一个的2d tensor,其中代表点云数量,3对应坐标。
- 输入数据先通过和一个T-Net学习到的转换矩阵相乘来对齐,保证了模型的对特定空间转换的不变性。
- 通过多次mlp对各点云数据进行特征提取后,再用一个T-Net对特征进行对齐。
- 在特征的各个维度上执行maxpooling操作来得到最终的全局特征。
- 对分类任务,将全局特征通过mlp来预测最后的分类分数;对分割任务,将全局特征和之前学习到的各点云的局部特征进行串联,再通过mlp得到每个数据点的分类结果。
#1-PointNet++
#0-网络构成
PointNet提取的是点云整一个全局的特征, 目前主流的CNN是采用提取局部特征的方式, 所以提出PointNet++, 能够在不同尺度提取局部特征, 通过多层网络结构得到深层特征, PointNet++由以下几个关键部分构成.
- 采样层(sampling)
激光雷达单帧的数据点可以多达100k个,如果对每一个点都提取局部特征,计算量是非常巨大的。因此,作者提出了先对数据点进行采样。作者使用的采样算法是最远点采样(farthest point sampling, FPS),相对于随机采样,这种采样算法能够更好地覆盖整个采样空间。
- 组合层(grouping)
为了提取一个点的局部特征,首先需要定义这个点的“局部”是什么。一个图片像素点的局部是其周围一定曼哈顿距离下的像素点,通常由卷积层的卷积核大小确定。同理,点云数据中的一个点的局部由其周围给定半径划出的球形空间内的其他点构成。组合层的作用就是找出通过采样层后的每一个点的所有构成其局部的点,以方便后续对每个局部提取特征。
- 特征提取层(feature learning)
因为PointNet给出了一个基于点云数据的特征提取网络,因此可以用PointNet对组合层给出的各个局部进行特征提取来得到局部特征。值得注意的是,虽然组合层给出的各个局部可能由不同数量的点构成,但是通过PointNet后都能得到维度一致的特征(由上述K值决定)。
上述各层构成了PointNet++的基础处理模块, 如果将多个这样的处理模块级联起来, PointNet++就能够像CNN一样从浅层得到深层语义特征, 对于分割任务网络, 还需要将下采样后的特征进行上采样, 使得原始点云中的每个带你都有对应的特征, 这个上采样的过程通过最近K个临近点进行插值计算得到, 完整的PointNet++的网络示意图如下图所示:
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F43dc7bda-86e1-48d9-8e17-3efe45d6f33f%2F224a830d-24ea-4e70-b6a9-1cc6d51f5c6b%2FUntitled.png%3Ftable%3Dblock%26id%3D4528ee3b-5de6-4c8d-8a20-ddd0c2e0be7b%26spaceId%3D43dc7bda-86e1-48d9-8e17-3efe45d6f33f%26expirationTimestamp%3D1739188800000%26signature%3DvoQ_z36SLk6naSi8NdZB7cIamKD_JBk53WgbxbXOlBw?table=block&id=4528ee3b-5de6-4c8d-8a20-ddd0c2e0be7b&cache=v2)
#1-不均匀点云数据的特征提取
不同与图片数据分布在规则的像素网格上且有均匀的数据密度, 点云数据在空间中的发布是不规则且不均匀的. 虽然PointNet能够用于各个点云局部提取特征, 但是由于电鱼在各个局部均匀性不一致, 很可能导致学习搞的PointNet不能够提取很好的局部特征, 比如说, 在很远的地方激光数据通常变得越远越稀疏, 因此在稀疏的地方应该考虑更大的尺度范围来提取特征, 为此, 作者提出了两种组合策略来保证更优的特征提取.
- 多尺度组合(multi-scale grouping, MSG):
比较直接的想法是对不同尺度的局部提取特征并将它们串联在一起,如下图(a)所示。但是因为需要对每个局部的每个尺度提取特征,其计算量的增加也是很显著的。
- 多分辨率组合(multi-resolution grouping, MRG):
为了解决MSG计算量太大的问题,作者提出了MRG。此种方法在某一层对每个局部提取到的特征由两个向量串联构成,如下图(b)所示。第一部分由其前一层提取到的特征再次通过特征提取网络得到,第二部分则通过直接对这个局部对应的原始点云数据中的所有点进行特征提取得到。
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F43dc7bda-86e1-48d9-8e17-3efe45d6f33f%2F8f7b393f-c4bd-4d3a-9b1c-a46268436b18%2FUntitled.png%3Ftable%3Dblock%26id%3D929db3ff-c006-4e3b-95f2-500a82d93b3a%26spaceId%3D43dc7bda-86e1-48d9-8e17-3efe45d6f33f%26expirationTimestamp%3D1739188800000%26signature%3DKP9YVGtrqfzU4BrS9BZ2m01KeRxERSzGiLqp8fsYqpk?table=block&id=929db3ff-c006-4e3b-95f2-500a82d93b3a&cache=v2)
#2-RandLA-Net
#0-主要的思想
RandLA-Net主要是提出一种有效的下采样策略, 能够把范围很大的点云, 下采样成为稀疏有效的点云, 从而更加高效的学习点云的语义信息.
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F43dc7bda-86e1-48d9-8e17-3efe45d6f33f%2F8f3411e5-7291-4fb9-8236-694034053e7b%2FUntitled.png%3Ftable%3Dblock%26id%3D66d2e6e6-7f10-46aa-ac24-70638f988a73%26spaceId%3D43dc7bda-86e1-48d9-8e17-3efe45d6f33f%26expirationTimestamp%3D1739188800000%26signature%3DgImTZLZ5MbsaPvCKjriwrS0xBPVThQ1DEYPqVEaFTV0?table=block&id=66d2e6e6-7f10-46aa-ac24-70638f988a73&cache=v2)
如上图所示,给定一个大规模的点云,其中数百万个点跨越数百米,要用深度神经网络处理它,不可避免地需要在每个神经层中对这些点进行逐步有效的下采样,而不会丢失有用的点特征。在RandLA-Net中,使用简单快速的随机采样方法来降低点密度,同时应用局部特征聚合器来保留突出的特征,这使整个网络能够在效率和效力之间取得良好的平衡.
#1-采样的方法
目前采样的方法大致可以分成启发式方法和基于学习的方法, 但是目前还没有适用于大规模点云的标准采样策略.
- 启发式采样
- Farthest Point Sampling (FPS): 对于大规模点云(), FPS在单个GPU上处理时间高达200秒, 这说明FPS不适用于大规模点云.
- Inverse Density Importance Sampling (IDIS): 从N个点中抽取K个点,IDIS根据每个点的密度对所有N个点进行重新排序,然后选取最上面的K个点。其计算复杂度近似为O(N),根据经验,处理点需要10秒。与FPS相比,IDIS的效率更高,但对离群值更敏感。但是,在实时系统中使用它还是太慢了。
- Random Sampling (RS): 随机抽样均匀地从原始的N个点中选取K个点。它的计算复杂度为O(1),与输入点的总数无关,也就是说,它是常数时间的,因此具有内在的可伸缩性。与FPS和IDIS相比,无论输入点云的尺度如何,随机采样具有最高的计算效率。处理个点只需要0.004秒。
- 基于学习的采样
- Generator-based Sampling (GS): GS学习生成一个小的点集来近似表示原始的大点集。然而,通常用FPS在推理阶段将生成的子集与原始集匹配,这会招致额外的计算。对 个点中的10%进行采样需要1200秒。
- Continuous Relaxation based Sampling (CRS): CRS方法使用重新参数化技巧将采样操作放宽到连续域,以进行端到端训练。特别是,每个采样点都是基于整个点云的加权和来学习的。当用一次矩阵乘法同时对所有新点进行采样时,它会产生一个大的权重矩阵,从而导致难以承受的存储成本。估计需要300GB以上的内存来采样个点中的10%.
- Policy Gradient based Sampling (PGS): PGS将抽样操作表述为马尔可夫决策过程。它依次学习概率分布来采样点。然而,当点云较大时,由于探索空间极大,学习的概率具有较高的方差。例如,对个点中的10%进行采样,探索空间是,不太可能学习到有效的采样策略。我们根据经验发现,如果将PGS用于大型点云,网络很难收敛。
总体而言, FPS, IDIS和GS计算量太大, 不适用于大规模点云处理, CRS方法的内存占用过大, PGS很难学, 相比之下, 随机采样有以下的两个优点:
- 计算效率非常高, 因为它与输入带你的总数无关;
- 它不需要额外的计算内存.
因此, 可以得出, 相比于目前现有方案, 随机采样时迄今为止最适合处理大规模点云的方法, 但是随机采样也会导致许多有用的点要素的丢失, 为了克服这个问题, 提出一个强大的局部特征聚合模块.
#2-局部特征提取
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F43dc7bda-86e1-48d9-8e17-3efe45d6f33f%2F65b7bf8a-07a8-4ce5-99a5-126cbde4e57e%2FUntitled.png%3Ftable%3Dblock%26id%3D77b82512-51fc-4603-93a0-2eff033c0f35%26spaceId%3D43dc7bda-86e1-48d9-8e17-3efe45d6f33f%26expirationTimestamp%3D1739188800000%26signature%3Dv4b9H2m3Ei-1qirctfisMV9sklPXtW5vaCUmLYwsq9I?table=block&id=77b82512-51fc-4603-93a0-2eff033c0f35&cache=v2)
如上图,局部特征聚合并行地应用于每个3D点,它由三个神经单元组成:
1)局部空间编码Local Spatial Encoding(LocSE);
2)Attentive pooling;
3)Dilated Residual Block (扩张的残差块).
#3-整体结构
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2F43dc7bda-86e1-48d9-8e17-3efe45d6f33f%2F5171947b-c879-406d-b2e5-8b015f17e597%2FUntitled.png%3Ftable%3Dblock%26id%3Db90e8b4a-98be-423c-80a9-5b91e8e9a50c%26spaceId%3D43dc7bda-86e1-48d9-8e17-3efe45d6f33f%26expirationTimestamp%3D1739188800000%26signature%3DMbClS0HLwF6Nzuf-G4Tx2MCrPCX6ncpBb2-HC3VuwDw?table=block&id=b90e8b4a-98be-423c-80a9-5b91e8e9a50c&cache=v2)
- 通过堆叠多个局部特征聚合模块和随机采样层来实现
RandLA-Net
,详细的体系结构如上图。
- 为了并行训练
RandLA-Net
,从每个点云中抽取固定数量的点作为输入,使用带有默认参数的Adam
优化器。初始学习率设置为0.01,并在每个时期后降低5%。最近点K的个数设为16。
- 在测试过程中,整个原始点云被输入到网络中,以推断每个点的语义,而不需要诸如几何或块划分等预处理/后处理。