目录
- 激光雷达点云的研究
- 激光雷达数据的处理方法分类
- 体素
- 转化为图像
- 直接对点云操作
- 三种方式的优劣
激光雷达点云的研究
目前,学术界和业界对于激光雷达点云的处理方式的研究变的非常热门。我认为原因有二:
- 来自学术界的推力:对于图片中的许多问题有了突破性的进展,例如图片分类、语义分割和目标检测等问题。这些突破性进展使得计算机对2D世界的理解有了质的飞跃,那么如果将问题变难,计算机是否能够对3D世界中的相对应的问题有很好的的解决办法呢?获取3D信息的传感器典型的有双目相机、RGBD相机和激光雷达,而其中激光雷达的获取的数据精度最高,那么使用激光雷达点云数据处理上述3D问题就是很好的突破口。
- 来自产业界的拉力:人工智能的研究火爆,产业界也纷纷尝试将人工智能落地,自动驾驶产业则是既有市场又有突破的可能性,吸引了一大批商业巨头和创业公司。在自动驾驶的任务中,保证行车安全是第一任务,那么高精度的感知则成为了重中之重的模块,而激光雷达以其精度高、不易受光照影响等特点成为了自动驾驶车辆上不可缺少的传感器之一。所以,对激光雷达点云的处理的方法则需要着突破性的进展。
激光雷达数据的处理方法分类
激光雷达数据的处理方法的的根源是深度学习在计算机视觉的发展。这里,我们按照网络输入的格式进行分类。
体素
体素Voxel,英文可能是来源于像素Pixel,将体素理解为3维的像素也是可以的。先来说说像素,给定一张固定大小的图片,将图片均匀的分为很多小格子,每个小格子就叫像素。那么对于给定的三维空间,将空间均匀分成很多3维小格子,每个小格子叫体素。不同点在于,相机的工作原理,在图像形成的同时就决定了图像是由像素组成的,而且相机的感光三通道决定了每个像素的特征就是RGB。而体素并不是数据固有的格式,激光雷达返回的数据是点云格式,需要预先确定体素的大小,人工对点云区域进行分割,将点云格式转为体素格式。而在转化的过程中,有的体素可能包含多一些激光点,有些体素包含少一些激光点,那么如果将一个体素内的激光点信息编码得到体素的特征也是一个研究内容。
那么为什么要讲点云转为体素呢?这种想法我认为很大程度上是来自于图像,在CNN未取得突破性进展之前,体素也并没有被十分重视,在CNN取得突破性进展之后,使用2D卷积操作提取特征显得非常有效。那相对应的,如果使用3D卷积提取点云的特征是否也同样有效呢?这样就推进了体素表达和3D卷积的研究。
Pytorch支持了3D卷积,使用nn.Conv3D即可,3D卷积离不开体素表示。体素表示的处理方法也就是3D卷积。
转化为图像
本人是做自动驾驶相关的激光雷达数据处理的,但将激光雷达转化为图像处理的方式也其他领域和问题上也很常见。我就拿自动驾驶场景举例,自动驾驶车辆搭载的激光雷达是通过360度旋转扫描周围环境的,例如64线激光雷达,是指64个激光雷达纵向排列,俯仰角不同,然后通过旋转,达到对360度环境的采样。那么这种工作方式,很容易让人想到,扫出来的点如果转为柱坐标,就是可以根据俯仰角、转角和距离一一确定的点,而且点和点之间有固定关系,展开就是一张深度图像,被称为Range View。由于考虑自动驾驶环境中的物体都是在路面上,在俯视图中一般是彼此无遮挡的,经过体素化,将每一层的体素都认为是一张图像的一个channel,就可以将雷达点云转为俯视图,Bird Eye View。
将雷达点云转为图像之后,那么各种问题的处理就变得非常容易,只需要使用在处理图像的成熟的网络即可。比较典型的网络有MVnet。
直接对点云操作
直接对点云操作,就直接看论文PointNet和PointNet++就可以了。
另外一种思路就是,将点云表达为graph的形式,使用graph convolution进行处理。具体我也不是很了解。
三种方式的优劣
体素是从CNN直接扩展而来的,非常暴力,理解简单。但对于自动驾驶场景而言,体素化之后,有很多体素中没有雷达点,通常的做法是将其特征置0,0参与卷积之后的结果还是0,相当于没有贡献。但这种体素稀疏的性质,使得大量的卷积是无用计算。另一个问题是,体素是三维的,卷积模板也是三维的,那么计算起来就比二维的慢,而且卷积核移动的方向也是三维的,随着空间的大小的增大,体素的数量是以立方的数量增长,使得体素这种表达方式,不仅使得计算缓慢,而且大量计算是无用的。当然,稀疏卷积spare convolution的研究可以部分解决这个问题。
转化为图像的操作,理解简单,工具现成。但转为图像势必要牺牲一些数据,结果好坏一部分取决于如何将通过点云数据构造图像的特征。
直接对点云操作,由于点云的无序性,使得对点云直接操作的研究要从头进行。PointNet系列和graph convolution的研究给了直接使用点云计算的可能性,但我觉得这仍然是个待研究的问题。