大体的方向:
目前用于深度学习的三维数据有如下几种表达方式:
1) 多视角(multi-view):通过多视角二维图片组合为三维物体,此方法将传统CNN应用于多张二维视角的图片,特征被view pooling procedure聚合起来形成三维物体;
2) 体素(volumetric):通过将物体表现为空间中的体素进行类似于二维的三维卷积(例如,卷积核大小为5 x 5 x 5),是规律化的并且易于类比二维的,但同时因为多了一个维度出来,时间和空间复杂度都非常高,目前已经不是主流的方法了;
3) 点云(point clouds):直接将三维点云抛入网络进行训练,数据量小。主要任务有分类、分割以及大场景下语义分割;
4) 非欧式(manifold graph):在流形或图的结构上进行卷积,三维点云可以表现为mesh结构,可以通过点对之间临接关系表现为图的结构。
1、基于像素的深度学习
这是最早用深度学习来处理点云数据的方法,但是需要先把三维点云在不同角度渲染得到二维图像,然后借助图像处理领域成熟的深度学习框架进行分析。代表作是MVCNN网络,它的思路是考虑到图像领域已经通过渲染3D模型的12个角度的图像,并对图像进行分类。效果也不差。
怎么评价这种思路呢?其实还是不错的,除了分类任务,在点云目标检测中,也有不少论文采用了这种思路,比如自动驾驶场景的目标检测,如MV3D等,也是会把点云投影到三维空间。
2、基于体素的深度学习
代表作有Volumetric CNN 、VoxNet、VoxelNet。将点云划分成均匀的空间三维体素,对体素进行处理。优点是这种表示方式很规整,可以很方便地将卷积池化等神经网络运算迁移到三维;缺点是由于体素表达的数据离散运算量大,所以分辨率较低,因此具有一定的局限性。
3、基于树的深度学习
OCNN利用八叉树方法将三维点云划分为若干节点,以节点的法向量作为输入信号,按照Z排序方法将点云表示成一维数组,之后可以很方便地与已有神经网络进行连接。类似思路的论文还有OctNet同样采用八叉树组织点云,Kd-Network采用的是KD树。
4、基于点的深度网络
代表作是斯坦福大学研究人员提出的PointNet,用来直接对点云进行处理,该网络很好地考虑了输入点云的排列不变性。采用maxpooling作为对称函数进行处理。之后考虑到PointNet缺乏局部信息的缺点,提出了改进版PointNet++,各项指标也是刷新了前作。与PointNet不同,在解决点云的无序排列问题上,PointCNN没有采用maxpooling作为对称函数,而是训练了一个X变换网络,在多项任务中达到了当时的最高水平。PointNet:轻量级,快速,高效的2D、3D栅格与volimetric相比,剩下超过80%的内存和计算量,对数据丢失很鲁棒,1. 以VoxNet为代表的volumetric convolution虽然直观自然,但是由于有大量0体素值太耗费内存。
5、图神经
常见方法整理
POINTWISE
https://blog.youkuaiyun.com/xsstef/article/details/82759647
SqueezeSeg: 点云中三维物体的实时分割技术
https://zhuanlan.zhihu.com/p/43598102
Dual Attention Network for Scene Segmentation
https://zhuanlan.zhihu.com/p/65931837
该论文提出新型的场景分割网络DANet,利用自注意力机制进行丰富语义信息的捕获,在带有空洞卷积的FCN架构的尾部添加两个并行的注意力模块:位置注意力模块和通道注意力模块,论文在Cityscapes,PASCAL Context和COCO数据集上都取得了SOTA效果。
具体地在位置注意力模块中,任一位置的特征的更新是通过图像所有位置上特征的带权聚合进行更新,权重是由两个位置上特征的相似性决定的,也就是说无论两个位置的距离只要他们的特征相似那么就能得到更高的权重。
通道注意力模块中也应用了相似的自注意力机制来学习任意两个通道映射之间的关系,同样通过所有通道的带权加和来更新某一个通道。