三维目标检测

原文:原文英文参考

1、PV-RCNN

首先讲解一下Grid-based和Point-based的方法的优缺点:

一般来说,基于网格的方法计算效率更高,但不可避免的信息丢失会降低细粒度定位精度;而基于点的方法计算成本更高,但通过点集抽象很容易获得更大的接受域。

网络的结构图如下:

三维目标检测_第1张图片

2、RPN

分类回归头:
将3D的feature map转为俯视图,高度变为通道,然后使用每个cell每个类别设置两个anchor,角度分别为0和90度。

如表4所示,采用基于锚定的3D体素CNN主干方案比基于点网的方法获得更高的召回性能[25,37]。”
但这里有个问题是anchor的角度是0或者90度,那-90度是怎么处理的?这相当于是怎么处理相反方向的车?车辆朝向的这个量这个在Proposal生成的过程中是否考虑?如果考虑,则怎么回归相反方向的车,这种anchor设置看起来不合理;如果不考虑,那么在通过Proposal生成6x6x6的grids的时候的顺序怎么确定,难道就一直不考虑?这个得通过具体Loss或者代码中看了。

3、Voxel Set Abastraction Module(VSA)

体素集Abstraction模块VSA
有了Proposal,就要提取Proposal中的feature,形成一个固定大小的feature map了,本文将Proposal分成了6x6x6的栅格。那么如何计算6x6x6的每个cell的feature呢?
然后作者提出了对目前方法不足的地方的讨论:
“(i) These feature volumes are generally of low spatial resolution as they are downsampled by up to 8 times, which hinders accurate localization of objects in the input scene.

这些特征体的空间分辨率通常很低,因为它们被降采样多达8倍,这妨碍了在输入场景中对象的准确定位。

(ii) Even if one can upsample to obtain feature volumes/maps of larger spatial sizes, they are generally still quite sparse.”

即使可以向上采样以获得较大空间尺寸的特征体积/地图,它们通常仍然非常稀疏。

也就是说使用差值的方法,类似于图像中的目标检测那样的RoI Align的方法不太好。
作者就提出了一种思路,使用PointNet++中的SA层,对每个cell,使用SA层,综合这个cell一定范围内的BackBone输出的feature map中的feature。但作者提出,这种方法,计算量太高。

使用集合抽象操作汇集场景特征体素的一个简单解决方案是将场景中的多尺度特征体直接聚合到RoI网格。然而,这种直观的策略只会占用大量内存,在实践中使用效率很低。例如,KITTI数据集中的一个常见场景可能会在4个场景中产生18000个体素×下采样特征体积。如果每个场景和每个场景使用100个盒子的建议
盒子建议有3个× 三× 3格。2700个× 即使在距离阈值化之后,也无法有效地计算18000个成对距离和特征聚合。”
为了解决这个问题,作者提出了VSA Module,来减少要聚集的feature的总数量,也就是上例子中的18000。

4、VSA Module

VSA Module在示例图中已经画的非常形象了。过程如下:(公式1,2,3)
1)在原始点钟用Furthest Point Sampling选n个点
2)在每一层中的feature map中,使用SA Module综合每个点一定邻域内的feature
3)然后把所有feature concat起来
Extended VSA Module还多两种feature:

  • 在Backbone输出的feature map转到的BEV图中,用2D bilinear interpolation计算的feature
  • 使用原始点云通过SA Module计算的feature

PKW Module(Predicted Keypoint Weighting)

问题是n个点中,有些点事前景点,比较重要,有些点是背景点,不重要。这就要区分一下,通过这n个点的feature,可以计算n个weight,weight由真实的mask做监督训练,然后用这weight乘以点的feature,得到每个点的最终的feature。(公式5)这个过程被称为PKW module。
三维目标检测_第2张图片
上述过程是使用n个点来表示整个场景,文章中叫做voxel-to-keypoint scene encoding,n个点叫做key-points

到此,我们有了Proposal和n个点的坐标和对应的feature。

5、RCNN

有了Proposal,就可以生成6x6x6个cell,对于每个cell的中心点,可以在之前得到的n个点中选取那些在其邻域的点,然后使用SA Module综合特征,得到cell的特征。(公式6,7)
三维目标检测_第3张图片
得到了Proposal的固定大小的特征,就可以做confidence prediction和box refinement了。这里要注意的是confidence prediction的真实值是由IOU给出的。

Experiments

在KITTI上和Waymo Open Dataset上效果都很好。

  • 验证了voxel-to-keypoint scene encoding的有效性,与RPN和朴素的想法做了对比。
  • 验证了different features for VSA module。
  • 验证了PKW module的有效性。
  • 验证了RoI-grid pooling module比RoI-aware pooling module(PointRCNN中的方法)的有效性。

思考
PointRCNN完全使用PointNet++做特征提取的module,包括RPN中的backbone和RCNN中的特征提取部分。

STD相比于PointCNN,加入了RoI-grid的部分。由于RCNN中使用voxel表示的,RCNN中的特征提取也变成了3D Convolution。

Part-A^22Net,相比于STD,一开始就是用Voxel的表示方法,将RPN中的主干网络也换成3D Convolution。(当然还有提出了Part location的表示等等)抛开细节的特征表示不谈,我认为其实Part-A^22Net就是本文中朴素的想法。

PV-RCNN解决了本文提出的Part-A^22Net计算效率低的问题。

你可能感兴趣的:(三维目标检测)