在工业界,利用激光雷达获取点云数据,很早就有应用了,如进行测高、遥感等。近几年的大规模发展得益于自动驾驶和机器人领域的火热,激光雷达成为重要的感知手段而得到人们关注,点云处理也成为热门。
点云是什么
说白了点云就是一堆带有三维坐标(也可以带强度、颜色信息)的点,由于数目庞大,因此可以描绘出物体的三维轮廓。
点云VS图像
点云数据与图像处理具有很多相似点,因此不少处理方法是从图像处理演变而来,但是点云又具有自身特点(简单、稀疏、准确),因此研究人员根据这些特点,发展出效果更好的处理手段。
PCL VS深度学习
我们都知道,在深度学习没出来之前,图像处理就已经发展出大量算法了。同样的,点云处理领域也是这样,比如做点云特征提取、配准、识别等等。这方面还有不少开源程序库,例如大家都知道的PCL,在这里顺便吐槽一下,PCL中文网站的维护实在太差了,信息陈旧,国内参考书籍出的也少,导致民间不少从事点云数据处理的研究人员,相互聚集在一些QQ群、微信群中,互帮互助,抱团取暖,但是解决问题效率一般。
近几年深度学习发展迅速,在图片、视频和自然语言处理等领域大放异彩。最近三年在点云处理领域中也逐渐发展起来,下面按照点云处理形式对现有方法进行分类和梳理。
基于像素的深度学习
这是最早用深度学习来处理点云数据的方法,但是需要先把三维点云在不同角度渲染得到二维图像,然后借助图像处理领域成熟的深度学习框架进行分析。代表作是MVCNN网络,它的思路是考虑到图像领域已经通过渲染3D模型的12个角度的图像,并对图像进行分类。效果也不差。
怎么评价这种思路呢?其实还是不错的,除了分类任务,在点云目标检测中,也有不少论文采用了这种思路,比如自动驾驶场景的目标检测,如MV3D等,也是会把点云投影到三维空间。
基于体素的深度学习
代表作有Volumetric CNN 、VoxNet、VoxelNet。将点云划分成均匀的空间三维体素,对体素进行处理。优点是这种表示方式很规整,可以很方便地将卷积池化等神经网络运算迁移到三维;缺点是由于体素表达的数据离散运算量大,所以分辨率较低,因此具有一定的局限性。
基于树的深度学习
OCNN利用八叉树方法将三维点云划分为若干节点,以节点的法向量作为输入信号,按照Z排序方法将点云表示成一维数组,之后可以很方便地与已有神经网络进行连接。类似思路的论文还有OctNet同样采用八叉树组织点云,Kd-Network采用的是KD树。
基于点的深度学习
代表作是斯坦福大学研究人员提出的PointNet,用来直接对点云进行处理,该网络很好地考虑了输入点云的排列不变性。采用maxpooling作为对称函数进行处理。之后考虑到PointNet缺乏局部信息的缺点,提出了改进版PointNet++,各项指标也是刷新了前作。
与PointNet不同,在解决点云的无序排列问题上,PointCNN没有采用maxpooling作为对称函数,而是训练了一个X变换网络,在多项任务中达到了当时的最高水平。
趋势总结
最后进行一个简单的总结,点云遇到深度学习之后,主要朝着两个方向发展,其一是解决点云领域的自身需求,如配准、拟合;其二是解决计算机视觉领域的需求,如识别、检测、跟踪。
如果走第一条路,需要对传统点云处理算法进行学习,而深度学习就只是提取特征的工具了,会用就行。如果走第二条路,就需要对计算机视觉领域的识别、检测、跟踪等领域浩如烟海的paper、代码都要进行学习,然后往点云领域去迁移,目前很多点云目标检测算法也都是这么做的。相比较而言,第二条路前景更广阔一些,对于高校研究生发表论文也相对容易找到突破口。