模型名称:PV-RCNN
Point-Voxel Feature Set Abstraction for 3D Object Detection
主要贡献和特点
-
PC-RCNN模型在特征提取中结合了基于voxel的方法和基于point的方法,取得较好的目标检测结果;
3D voxel方法仅提取局部特征,但卷积高效 point-based方法计算量大,但感受野可变 因此结合了两种检测方法可以更准确、细粒度的优化box预测结果
-
提出voxel-to-keypoint方案(voxel集合抽象层),用于融合多尺度的3D voxel CNN特征和基于PointNet的点特征为关键点集合;
作者表示,keypoint features不仅可以保留精确的位置信息,还有丰富的场景信息,可以优化预测结果。
-
提出ROI-grid pooling层(多尺度的ROI特征抽象层),用于将关键点集合转化为ROI-grid points,用于细粒度的框预测优化和置信度预测;
-
在KITTI数据集和Waymo数据集上都取得了优异的效果。
主流方法分析
为了更好的预测box,目前出来了很多两阶段的3D检测框架,这些框架要么是基于3D voxel + sparse CNN的,要么是基于PointNet网络的。前者更高效,而且也能得到很好的结果,后者能更提取更准确的信息。
3D voxel CNN
将空间划分为一个个体素,通过稀疏卷积、下采样最终编码为voxel-wise feature vetors。
3D proposal generation
通过8x的下采样,将3D特征转换为2D鸟瞰图样式的特征,再通过基于anchor的方法进行proposal。每一个类别有两个anchor,大小一样,为训练数据的平均大小,角度分别为0°和90°。anchor分布再bird-view feature map上的每一个像素点上。
通常来说,基于3D voxel+anchor框架的方法的召回率都会比基于Pointnet的方法高。
two-stage frameworks
目前的两阶段的方法,通常是将3D特征块或2D特征图来pooling RoI specific features,来优化box的框回归。
3D的特征块回归的主要缺陷为:
(1)由于被下采样过,特征的空间分辨率低,定位的准确性有损失。
(2)即使可以通过上采样来获取更大空间的特征,得到的仍然是很稀疏的特征。因为最常用的方法是通过双线性或三线性插值,通常这些方法也只参考4/8个邻近点,仍然扩大不了什么特征的空间区域。而且很多特征都是零值,插值也没什么用,还浪费计算力和内存。类似RoI Align的方法。
那么基于PointNet的方法优势就出来了,基于PointNet的方法有很强的特征编码能力,可以将任意大的邻近范围内的特征进行编码。
最朴素的想法就是每个voxel和每个box proposal绑定进行特征融合编码来获取全局信息,但是这样计算量太大了,没有可实时性。
本文方法
最终,作者就选择一种策略选取少量的全局关键点,再将keypoint feature整合成ROI grid用于优化box proposal。
网络架构
1. 场景关键点特征 (Voxel-to-keypoint Scene Encoding via Voxel Set Abstraction)
1.1 FPS 最远点采样
-
简介
在 PointNet++ 中用到了FPS(Farthest Point Sampling) 最远点采样法,该方法比随机采样的优势在于它可以尽可能的覆盖空间中的所有点。 -
实现步骤
假设一共有n个点,整个点集为N = {f1, f2,…,fn}, 目标是选取n1个起始点做为下一步的中心点:1. 随机选取一个点fi为起始点,并写入起始点集 B = {fi}; 2. 选取剩余n-1个点计算和fi点的距离,选择最远点fj写入起始点集B={fi,fj}; 3. 选取剩余n-2个点计算和点集B中每个点的距离, 将最短的那个距离作为该点到点集的距离, 这样得到n-2个到点集的距离,选取最远的那个点写入起始点B = {fi, fj ,fk},同时剩下n-3个点, 如果n1=3 则到此选择完毕; 4. 如果n1 > 3则重复上面步骤直到选取n1个起始点为止.
-
作用
采用FPS,KITTI数据集点云保留关键点个数为2048,waymo数据集点云关键点数为4096个点,用关键点代表整个场景的特征信息。
1.2 VSA - Voxel Set Abstraction Module
- 方法
-
以FPS得到的keypoints为中心,划一个半径R的球,将里面包含的非空的voxel作为一组,得到多个体素特征组合的体素级特征向量;
-
每一层的Spase CNN的特征图都经历上述两个步骤,最后所有层的特征拼接起来。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hnJH53U5-1600064716198)(/media/elodie/Ba
- 作用
将3D CNN得到的多尺度特征编码为keypoints feature
1.3 关键点权重学习PKW - Predicted Keypoint Weighting
考虑到keypoints中有的是背景点,有的是前景点,两者对box优化的权重应该前者低,后者高。因此加入PKW模块对keypoints的权重进行学习和调整。
2. 关键点转网格RoI特征 (Keypoint-to-grid RoI Feature Abstraction for Proposal Refinement)
2.1 RoI-grid Pooling via Set Abstraction.
对于每一个3D proposal,运用RoI-grid pooling来整合keypoints features得到RoIf eatures。
先前的方法通常是将proposal内的所有keypoints features求平均,或者拼接补零来作为RoIf eatures。
作者的方法:
-
将proposal均匀的采样6x6x6个grid points,G={g1,g2,…g216}
-
以每一个grid points为中心,划一个半径R的球,将里面包含的所有keypoints作为一组,得到一组特征向量(设置了多个半径R,以获取多尺度特征);
-
再将上述的特征向量输入PointNet Block(SA层)来综合得到一个特征。
-
一个proposal中的所有RoI-grid features都通过一个两层的MLP最终输出一个256维的特征(可以表征整个proposal内的特征)。
2.2 框优化与置信度预测
两层MLP后分为两个分支,分别预测置信度和框优化
- 置信度预测:将3D RoI和ground-truth的IoU作为训练目标,损失函数是交叉熵。
- 置信度预测:box的偏移量作为训练目标,损失函数是smooth-L1。
网络细节与结果
-
网络细节:
-
结果:
-
KITTI
- Waymo
- Effects of voxel-to-keypoint scene encoding
- Effects of different features for VSA module
- Effects of PKW module/RoI-grid pooling module/IoU-guided confidence prediction
PointNet++ Set Abstraction
传统的CNN在进行特征学习时,使用卷积核作为局部感受野,每层的卷积核共享权值,进过多层的特征学习,最后的输出包含图像的局部特征信息。
Set Abstraction 通过改变CNN的采样思路,采取分层特征学习,即在小区域中使用点云采样+成组+提取局部特征(S+G+P)的方式,完成特征提取。
- Sampling:随机选择一个初始点,然后依次利用FPS(最远点采样)进行采样,直到达到目标点数;
- Grouping:以采样点为中心,利用Ball Query划一个R为半径的球,将里面包含的点云作为一簇成组;
- Pointnet: 对Sampling+Grouping以后的点云进行局部的全局特征提取。
以2D点图为例,整个SA(Set Abstraction)三步的实现过程表示如下: