【论文阅读】【点云处理】Point-Voxel CNN for Efficient 3D Deep Learning

2019NIPS
MIT与上海交通大学,Song Han老师

我觉得本文还是比较容易理解的,但是在读的过程中,我对PVCNN产生了其他思考,可能PVCNN中实现的东西有更深层次的内涵,希望读者能够耐心看一下思考这部分,因为我的思考也不一定对,很期待大家的不同意见。 但我认为,对这篇文章的思考让我对point-based的方法和voxel-based的方法有了更深入的理解。

PVCNN

本文首先介绍了目前Voxel-based和Point-based的方法的缺点。

Voxel-based Method的缺点

Voxel-based的缺点已经是为人所熟知的,主要就是在将点云变为voxel的过程中,信息的丢失程度与resolution的大小有关。但随着resolution的增加,the computational cost and memory requirement是三次方增加的。而且本文增加了实验分析,本文给出了,相比于算术运算,内存操作所需要的时间和消耗的能量更为昂贵。下图对比了算数运算与内存访问的时间能量的消耗。
在这里插入图片描述

Point-based Method的缺点

Point-base的方法,本文详细分析了point-based的运算速度慢的原因:

  • point-based的方法的输入是无序的点云,在前向计算过程中,需要找出某些点邻域内的点,由于点云是无序的,所以不能通过其在点云中的位置进行索引,需要使用KNN方法去计算寻找,而这个计算过程则是非常慢的。
  • point-based的某些方法中,是根据点的位置使用MLP先计算权重的,然后才会使用权重与点的特征去卷积。(Pointnet++并不是这个过程,具备这个过程的典型方法可以参考我另外两篇博客[1][2])

本文做了与PointCNN,SpiderCNN和DGCNN的对比实验,实验证明其他方法确实在上述两个运算速度慢的地方确实消耗了大量运算时间。

PV-Conv

在这里插入图片描述
PV-Conv包含两个分支,一个是point-based,一个是Voxel-based。

Voxel-based分支,首先将点云变为体素,然后使用3D卷积核卷积提取特征。认为每个体素的特征是对应每个体素的中心,然后使用trilinear interpolation来恢复每个点的特征。

Point-based的方法不再使用邻域的点,而是使用MLP直接计算每个点的feature。

然后将每个点的两种feature相加。

实验

本文的时间非常详细,在分割和识别的方面都做了实验,结果表明本文提出的方法在速度和精度上都有提高。

思考

在读论文的过程中,我觉得还有很多角度可以理解本文的方法。

接下来的角度都是我个人的理解,读者们可以在评论中分享不同的看法。我认为以下的理解加深了我对Voxel-based的方法和Point-based的方法的理解。

从Point-based的角度理解

本文基于Pointnet和Pointnet++,将MLP部分改为PV-Conv,得到PVCNN和PVCNN++。接下来,我以PVCNN为例。

首先,如果我们去掉PV-Conv中voxel的那个分支,那么,可以看出去掉voxel那一支的PVCNN其实是与Pointnet几乎是一模一样的,都是直接对每个点使用MLP计算新的特征,而且计算每个点的特征时不与其他点的特征产生关系。(这也是我认为这类方法的缺陷)。
那么,PVCNN中的voxel那一分支起到了什么作用?
1)voxel一分支首先将每个格子内的点的特征首先取平均,这里就可以理解成为aggregate了一定区域内点的feature,而且通过取平均,点与点之间产生了关系。但这个区域是人为划定的,感觉上不如使用KNN那种方法好,但是接下来使用3D卷积核的卷积可以自动扩展和调整感受野,获取每个体素对应的特征。
2)在Devoxelize的阶段,是将每个体素的特征认为是体素中心点对应的特征,然后使用差值的方式求取每个point的特征。
结合上面两个部分,我认为voxel起的作用就是在Pointnet的基础上增加了点的局部特征,类似于Pointnet++的改进,只不过这个局部特征的提取是依赖人工划分邻域,然后依赖神经网络自动调节感受野的。

另外让我联想到的一点就是,在目标检测领域,Part-A^2PV-RCNN使用3D卷积的backbone的效果是好于PointRCNN的PointNet++的backbone的,那时候我就觉得可能3D卷积的方法更能提取有效的特征。那么从本文中Table I的结果中可以看到,PVCNN的效果是明显好于PointNet++的,这也可能说明了在提取局部(邻域)信息的过程中,3D卷积的效果确实是优于Pointnet++的那种方式的。
在这里插入图片描述

从Voxel-based的角度理解

同样,这种想法来自于,如果去掉point的那一支会怎么样?去掉point那一支,然后如果再认为某一层的PV-Conv中的devoxelize的过程与下一层的取一个格子内特征平均的过程是互相抵消的,那么去掉point那一支的PVCNN就是和3D-UNet就很相似了。那么point那一支是在起什么作用?

point那一支,每个point的feature是通过MLP计算新feature的,也就是说,某个point的feature的计算是与其他point没有关系的。那么这相当于什么?是不是和自注意力机制的想法有些像?

那么再次考虑第n层的插值和第n+1层的平均这个过程,仍然是从去掉point那一支的过程开始想,第n+1层的平均过程势必取得格子的边长更大,实现与3D-Unet中down sample的类似过程。而区别在于,这种先插值后平均过程使得PV-Conv的down sample的过程是详细到point的,而不是在voxel级别的,这样子首先就更细致一点。然后加上point分支,那么就是使得这个详细程度更细致,信息更丰富。

与PV-RCNN的对比

我在另外一篇博客中记录了PV-RCNN的阅读笔记,这里就做一下对比。

KITTI屠榜专家的最新方法PV-RCNN也是将Point-based的方法和Voxel-based的方法结合起来,这里就对比一下这两篇文章的不同:

  • 首先对应解决的问题不一样:本文其实还是解决了点云处理过程中的问题,也就是说提出了一种对点云实现Conv的新的操作方式,也就是该方法还是使用在backbone中的,可以把PV-Conv运用到各种问题中,对相应的conv进行替换。而PV-RCNN则是提出了针对目标检测领域一个framework,并没有PV-Conv这种普适性。
  • 解决的思路是不一样的:上文已经将PVCNN的思路解释的非常清楚了,这里说一下PV-RCNN的解决思路。PV-RCNN的融合思路在于,能不能将非常庞大的点云数据的特征集中到少量representative points上?那么就是首先体素化,使用3D卷积得到不同scale的特征图。然后从点云中选取一些点作为representative point,使用point-based的方法在得到的不同scale的特征图中再一次aggregate特征,得到每个representative point的特征。这样子,representative point就包含了整个点云空间的特征。这种想法是与3D目标检测中使用的point来预测box的这种常用手段相关联的。
  • 从具体操作上看:两者都实现了point在体素上提取特征,PVCNN用的是插值,PV-RCNN用的是Pointnet++;PVCNN的从体素上提取特征的点是逐层减少的,而且是融到了整个特征金字塔中,PV-RCNN的点的数量是固定的,是从3D卷积和下采样得到的特征金字塔中提取特征的,point是在金字塔之外的。所以从信息的细节程度上来说还是PV-CNN更细一些。

猜你喜欢

转载自blog.csdn.net/wqwqqwqw1231/article/details/105353231
今日推荐