体积占用网格表示对点进行体素化,然后使用3d卷积神经网络来学习体素级语义。由于点云的稀疏性,体素化效率低,为避免较高的计算成本而忽略了细节。此外,由于同一体素内的所有点都被赋予了相同的语义标签,因此精度受到限制。为了利用传统的那些2D分割框架,尝试将3D空间从多角度映射到二维空间,然后分割完成后再投影回去,然而,重新投影回3d空间也是一个重要的问题。
非结构化点云的 3d 语义分割存在的问题:
1.大规模点云数据
2.不规则形状
3.非均匀密度
Pointnet:
PointNet是第一个直接处理原始点云的方法。只有全连接层和最大池化层,PointNet网络在推理速度上具有强大的领先优势,并且可以很容易地在CPU上并行化。
困难:
由于点云不是常规数据格式,通常将此类数据转换为规则的 3D 体素网格或图像集合,然后再用神经网络进行处理。数据表示转换使生成的数据过于庞大。
应对点云的无序性有三种方案:
方案1:排序
高维空间的排序,不可稳定。
方案2:假如有N个点,N!种排列训练一个RNN。
2015年《Order Matters: Sequence to sequence for sets》证明RNN网络对序列的排序还是有要求的。
方案3:设计对称函数,因为输入顺序对于对称函数没有影响。比如:加法、乘法
PointNet使用的最大池化,是对称函数。
Pointnet的解决方法:
训练一个正交矩阵,将点云对齐
使用单个对称函数 max pooling。
限制:
PointNet架构有两个限制将其性能限制在更大、更复杂的点云上。一方面,只集成了点特征和池化的全局特征,无法捕获相邻点所代表的局部结构。另一方面,首先将点云细分为小体积块,每个块都是独立预测的,没有任何连接。因此,点网的整体精度在复杂场景中受到限制。
PointNet++:
PointNet 没有捕捉到由现场的度量空间点引起的局部结构,限制了其识别细粒度模式和对复杂场景的泛化能力。
Pointnet可以通过一组稀疏的关键点来总结输入点云,这些关键点大致对应可视化骨架。PointNet 对输入点的小扰动以及点插入(异常值)或删除(缺失数据)损坏具有高度鲁棒性。
点集通常以不同的密度进行采样,这导致在均匀密度上训练的网络的性能大大降低,我们提出了一种新的集合学习层来自适应地组合多个尺度的特征。
为了实现这一目标,提出了密度自适应点网层,当输入采样密度发生变化时,这些点网层可以学习组合来自不同尺度区域的特征。具有密度自适应点网层的分层网络称为pointnet++。
PointNet++的设计必须解决两个问题:如何生成点集的划分,以及如何通过局部特征学习器抽象点集或局部特征。
2种方案:
(a)多尺度分组(MSG);(b)多分辨率分组(MRG)
PointSIFT
PointSIFT是在pointnet++的基础上改进的,引入了尺度不变特征变换。
八叉树
八叉树(Octree)的定义:若不为空树的话,树中任一节点的子节点恰好只会有八个,或零个,也就是子节点不会有0与8以外的数目。
八叉树在3D空间中,可以很快地知道物体在3D场景中的位置。
八叉树算法的算法实现简单,但大数据量点云数据下,其使用比较困难的是最小粒度(叶节点)的确定。
3D-RNN
为了捕捉局部特征,使用步长为1 的金字塔池化。
方式1步长固定、窗口大小不同
方式2 窗口大小固定,不同步长
采用双向RNN,具体来说,首先将点云沿两个水平方向(即x和y)细分为部分重叠的块。椅子通常在桌子附近,窗户通常在墙内。