![image-20200502174907434](https://img-blog.csdnimg.cn/9d793c087f8b4dbcab697ad04a9e8979.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATWljaGFlbC5DVg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
版本 | 更新时间 | 更新内容 | 作者 | |
---|---|---|---|---|
1 | V 1.0 | 2020.5.3 | 完成主体内容 | W.P. Xiao |
2 |
目录
文章目录
PV-RCNN
1 简介
这文章标题为《PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection》,收录于CVPR 2020。文章一作作者是来自香港中文大学MMLab实验室的博士Shaoshuai Shi,这是我知道的他的第三篇一作论文,前两篇分别是PointRCNN(CVPR 2019)、Part A 2 A^2 A2 Net(PAMI)。这是一篇将Voxel-base方法和Point-base方法进行深度结合的文章,充分结合了两种方法各自的优势,算是一个集大成者。实际效果也非常出众,在KITTI benchmark中Car的这个类别上到现在(截止2020.5.3)仍然是第一名。
![image-20200504153054787](https://img-blog.csdnimg.cn/3498c2eafdda443f8f3788cea20bb468.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATWljaGFlbC5DVg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
2 文章的贡献
-
作者提出了PV-RCNN框架,该框架有效地利用了基于体素和基于点的3D点云特征学习方法的优点,提高了3D对象检测的性能,并且具有可管理的内存消耗。
图2.1 Voxel与Point相结合 -
作者提出了一种voxel set abstraction layer(类似Pointnet++中的Set abstraction layer)将场景的多尺度体素特征编码到一组小关键点的体素编码方案。这些关键点特征不仅保留了精确的位置,而且编码了丰富的场景上下文,极大地提高了三维检测的性能。
-
针对任意一个Proposal中的Grid point,作者提出了一种multi-scale RoI feature abstraction layer,该层从多尺度感受野的场景中聚集了丰富的上下文信息,为了更精确的box refinement和confidence prediction。
3 网络框架
目前最先进的三维检测方法要么是将3D voxel CNN with sparse convolution要么将PointNet-based networks作为的Backbone。3D voxel CNN的优势是能够进行高效feature encoding以及产生高质量的3D object proposals,而PointNet-based的方法能通过灵活可调的感受野捕获更准确的上下文信息。作者将两者优势结合,提出了一个two-stage的模型PointVoxel-RCNN(PV-RCNN)。第一阶段,作者以3D voxel CNN with sparse convolution作为backbone,高效的进行特征编码和proposal的生成。第二阶段,作者利用两个新提出来的策略来进行更好的proposal refinement:voxel-to-keypoint scene encoding,用来将整个场景的体素特征总结为一小部分keypoints feature;point-to-grid RoI feature abstraction,用来效地将场景中关键点特征聚合到RoI网格中,最终用于proposal的置信度预测和位置细化。
![image-20200502181248331](https://img-blog.csdnimg.cn/3e25f217ca244faab82997784b118d03.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATWljaGFlbC5DVg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
具体流程如下:
- 首先对于原始点云进行体素化处理将其输入到基于系数卷积的三维编码器中,学习多尺度的语义特征,生成3D object proposals。
- 然后通过新的体素集抽象模块将学习到的多尺度的体素特征量归纳为一小组关键点特征。
- 将关键点特征聚集在ROI格点中,用于细粒度的Proposal refinemen和confidence prediction。
4 网络细节
4.1 Voxel特征编码以及Proposal的生成
这部分都是比较常见的内容,与SECOND的backbone类似。体素编码后进行了四次稀疏卷积,每次下采样到原来的1/2。最后一层feature map在z轴上拼接,转化为2D bird-view feature maps。鸟瞰图的每个pixel(voxel)配置一个0°和90°的anchor。
4.2 Voxel-to-keypoint编码以及Voxel Set-Abstraction
-
Keypoints Sampling
这里使用的是最远点采样(非空的voxel),KITTI采样2048个keypoints,waymo采样4096个keypoints
-
Voxel Set Abstraction Module
图4.1 Voxel Set Abstraction Module 选出了keypoints,下一步就是要获得keypoints feature。作者通过设定一个合适的半径,这样就可以利用Pointnet将keypoint周围非空的voxel特征聚集起来,从而获得keypoints feature。对于不同尺寸的voxel feature,选择的半径也不一样。keypoints在不同voxel feature的坐标位置也要根据下采样的倍数进行相应的转换。
-
Extended VSA Module
对VSA模块进行扩展,主要是将原始点云(弥补了初始点云体素化的量化损失)和BEV(使得keypoints feature在Z轴上有更大的感受野)上的feature也转为keypoins feature,再与原来的keypoins feature进行拼接(如图4.1)。因此,总共有6种不同的keypoints feature拼接在一起。其中在BEV feature maps上的keypoints feature是通过将keypoints投影在BEV上然后通过双线性插值获得的。
-
Predicted Keypoint Weighting
图4.2 预测关键点权重模块 通过FPS选择关键点,其中一些关键点可能只代表背景区域。作者认为,属于前景对象的关键点应该对提案的精确细化贡献更大,而来自背景区域的关键点应该贡献更小。为此作者提出Predicted Keypoint Weighting (PKW)来重新分配keypoints的权重。关键点的分割特征通过MLP学习得来,最后通过Sigmoid输出预测权重。PKW模块用Focal loss来训练,使用默认的超参数。
4.3 Keypoint-to-grid RoI Feature Abstraction
-
RoI-grid Pooling via Set Abstraction
图4.3 预测关键点权重模块 有了高质量的Proposal、有了带权重的丰富上下文信息的keypoint features,接下来就是使用ROI pooling操作进行refinement。这里作者先将每个Proposal均匀划分为6x6x6个Grid point,以gird points为中心,设定不同的半径将keypoints feature聚集起来。
-
3D Proposal Refinement and Confidence Prediction
- 给定每个box proposal的RoI特征,proposal refinement网络将学习预测相对于输入3D proposal的大小和位置(即中心,大小和方向)的残差。
- 对于置信度的预测,区别于其他文章(BEV IoU),作者使用的是3D IoU作为训练目标,使用交叉熵损失函数作为置信度预测的Training loss。
4.4 Training losses
5 思考
-
作者为什么要将Voxel转为keypoints再转为grid,然后进行Proposal refinement,而不直接ROI Pooling后做refinement?
目前大多数State-of-the-art的方法都是two-stage的方法,它们需要在第二步时利用ROI特定的feature(3D feature volumes或者2D maps)来进行further proposal refinement。然而通过3D voxel CNN获得的特征有以下局限性:
-
这些特征量通常是低空间分辨率的,因为它们被下采样到8倍,这妨碍了在输入场景中对象的精确定位
-
即使可以通过上采样获得更大空间尺寸的特征量/地图,它们通常仍然是相当稀疏的。已有的Pooling方法,比如RoIPooling/RoIAlign,它们只能在附近的像素点进行双线性、三线性插值操作。这使得传统的池化方法获得几乎全为零的特性,并为第二阶段的优化浪费大量计算和内存。
另一方面,Pointnet++所提出来的Set-Abstraction被证明能很好的利用相邻的特征,任意调整感受野的大小,从而获得高质量的上下文信息。一个初步的想法是利用Set-Abstraction模块将不同尺度的feature maps直接聚集到ROI girds中。然而这将非常消耗内存,使其很难用于实际。
为此,作者先选出一部分keypoints,让其代表当前的feature map,然后将这些keypoints在不同尺度下的feature maps聚合的特征拼接在一起(VSA)。这样做有两个好处:
- 将scene用keypoints来替代,大大减少计算的消耗
- 经过Set-Abstraction的特征包含了更丰富的上下文信息,有利于后续的refinement
作者继续将拼接好的keypoints feature聚合到ROI girds中,并再次通过Set Abstraction模块获取Proposal的丰富上下文信息以及灵活的感受野。Proposal中grid points的感受野甚至超出了RoI捕捉周围的keypoints的边界外,而之前一些state-of-the-art方法只简单的聚集ROI中的逐点特征(Point RCNN在refine阶段就是直接将proposal中的点进行坐标转换后再次聚合的,不过为了扩大感知范围,作者还特意手工扩大了proposal的边界,个人认为PV-RCNN这种做法会更加高级,而且更自然),或者池化那些不提供信息的零RoI特征。
-