从PointNet看无人车如何感知世界

随着无人车领域的火爆,在3维点集数据上做识别受到越来越多的关注。最近对这一领域做了简单的阅读,稍微总结一下。


PointNet

PointNet全称<PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation>,是采用深度学习对3维点集数据进行识别最出名的算法之一。他是通过神经网络,直接将三维点云作为输入,进行分类的做法。

点云数据有三个特点:无序性,改变点云的输入顺序不会影响输出结果。相互作用性,点与点并不是独立的,相邻的点更可能来自同一个物品。旋转性:相同的点云在空间中经过一定的刚性变化,坐标发生变化但意义不变。

PointNet的主要贡献是对无序性和旋转性的特殊处理,其主要结构如下:

From PointNet Paper

对无序的输入有很多处理方法,比如对数据进行排序;或者通过数据增强,用一个RNN网络对输入编码;又或者采用一个对称函数。PointNet首先使用一个函数对点提取特征,将3维向量拓展为1024维特征,最后使用max pooling layer提取特征。Max pooling layer可以无视输入顺序。

针对旋转性,作者采用T-Net模块对输入进行转化。对于2D图片,可以采用采样与插值的方法计算如何旋转图片,三维结构则比较困难,因为三维结构是不规则的。T-Net则是学习最有利于网络进行分类和分割的DxD旋转矩阵,而并不关心最终变化是什么。


PointNet++

PointNet提取的是每一个点的独立特征,并没有考虑到点与点之间的相互作用性,作者意识到这一问题,提出能够提取局部特征的PointNet++,<PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space>。

提取局部特征的办法就是添加sampling & grouping层,具体可以参加下图:

From PointNet++ Paper

采样层采用FPS (farthest point sampling)的方法,能够对物体形状有更好的覆盖。分组层将上面提取的采样点和范围内k个临近点组成patch;最后通过PointNet对k个点提取特征,送入下一个分层。随着分层的加深,采样点包含的信息会越来越多。

另外,文章对于点云密度和分辨率问题提出了特殊的解决方案,动态的计算中心点的邻域范围,另一种方法是动态调整不同分层得到特征向量的权重。这两种方案都能使得点云在密度较低时获得稳定的分辨准确性结果。

From PointNet++ Paper

VoxelNet

VoxelNet网络是苹果公司2017年提出的,所以苹果开发无人车是没跑了,全称<VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection>。它主要思想是将三维点云进行划分,然后通过Voxel feature encoding (VFE) layer进行编码,生成特征向量,然后再与RPN连接起来,检测图片内容。

From Voxel Paper

VoxelNet首先将点云划分成若干个空间,然后把属于同一区间的点采样,再经过PointNet一样的FCN和Max Pooling生成特征,最后将生成的新特征和输入特征连接到一起。像PointNet++一样,将上述操作重复多次,我们就得到了整个空间更好的向量表示。

From Voxel Paper

Region Proposal Network通过三个卷积层生成特征,每个卷积层都与BatchNorm和ReLu相连。最后生成probability score map和regression map。

VoxelNet也讲了不少训练细节,对车的监测和对人的检测有不同的优化,并且采用了很多数据增强技巧。但就论文本身来讲,更多算是PointNet和PointNet++在物体检测上的拓展。


MV3D

MV3D是由清华大学和百度提出的基于多种不同类型输入数据的监测和分类模型,全称<Multi-View 3D Object Detection Network for Autonomous Driving>。他首先利用俯视图(The Bird’s view BV)生成3D物体区域,然后结合前视图和图片信息对区域进行判定。

From MV3D Paper

MV3D的结构如上,有三个输入部分。俯视图采用多通道输入,将点云数据按照高度进行分割,对于每一个切面生成2D投影。另外还对每一个投影格栅计算密度和强度特征。前视图将(x,y,z)坐标投影到柱面,得到(r,c)坐标,与俯视图类似,提取高度,距离以及强度特征。

论文利用俯视图进行候选框生成,俯视图在这一方面有若干优势:保留物体原始物理尺寸;物体能够独立占据不同空间;并且在一般城市道路中,目标所处的地面波动较小。对于候选框的生成,论文直接采用不同尺寸的3D框以及角度进行全图扫描,然后采用神经网络进行标注。

From MV3D Paper

论文的另一个亮点是采用Deep Fusion对多种不同模型特征进行融合。网络采用预训练的VGG16模型,减少了通道数并且移除了第四个池化层,增加了额外的全连接层进行训练,但是我感觉在车上运行的话还是有点慢。


AVOD

这篇由滑铁卢大学发表的文章全称<Joint 3D Proposal Generation and Object Detection from View Aggregation>,与MV3D类似,核心思路是利用RGB图像和Bird Eye View相结合,利用FPN网络生成二者的结合,然后再进行3D物体检测。

From AVOD Paper

在3D Region Proposal Network的网络中,作者对input进行了3次down sampling,之后再进行3次up sampling,每次up sample得到的网络与之前同样大小的网络之间建立快捷连接。这样做的好处是最终得到的特征是全分辨率,能够更好地提高小物体的检测效果。

From AVOD Paper

在优化方面,作者舍弃了LiDAR输入,减小了输入大小,另一方面采用了很多1x1的卷积进行降维,减少了运算量与内存消耗。

在最后的3D Bounding Box编码上,MV3D输出8个顶点,也就是计算24个输出。这篇文章则对输出的几何形状加上限定,最后只输出4个顶点的平面坐标与两个高度共10个输出。


Frustum PointNets

上面讲的MV3D利用Bird View进行物体检测,AVOD利用Bird View和RGB同时进行物体检测,而这篇由Stanford,Nuro和UCSD合作的文章则主要利用成熟的2D物体检测技术在RGB数据以及LiDAR数据上做物体检测。文章全称<Frustum PointNets for 3D Object Detection from RGB-D Data>。这篇文章另一个牛逼之处就在于作者群既有PointNet的主要作者,又有SSD的主要作者,对物体检测理解之深是别人无法比拟的。

网络主要结构如下,首先利用一个2D CNN网络在图片上进行2D region proposal,这里可以直接利用Mask-RCNN算法。再有了proposal之后,有很多办法可以进行segmentation,一般图像上的segmentation很容易有遮挡物,而物体在物理空间中是自然分开的,所以采用3D点云的分割比像素分割更容易。在最后利用T-Net对坐标归一,再使用PointNet++对3D Bounding Box进行近似。

From Frustum PointNets Paper

文章利用了一系列坐标变换提升检测和分类的准确性。通过旋转更好的将距离和2D图像合并,通过平移更好的生成segmentation,最后利用T-Net来解决方向带来的偏差。

From Frustum PointNets Paper

在计算3D Bounding Box的时候,文章通过中心点(cx, cy, cz)和大小(h, w, l)以及方向theta来确认边框,进一步减少了需要优化的输出。

文章作者阵容之豪华,让人心之所向。