在《动手学无人驾驶(4):基于激光雷达点云数据3D目标检测》一文中介绍了3D目标检测网络
PointRCNN
。今天介绍该作者新提出的3D检测模型:PVRCNN
,论文已收录于CVPR2020
。
作者个人主页为:https://sshaoshuai.github.io/。
知乎ID为:https://www.zhihu.com/people/yilu-kuang-shuai。
PVRCNN
论文链接为:https://arxiv.org/pdf/1912.13192.pdf。
代码链接为:https://github.com/open-mmlab/OpenPCDet。
在介绍论文前,大家可以先看看作者此前分享的3D目标检测报告:https://www.bilibili.com/video/av89811975?zw
基于点云场景的三维物体检测算法及应用
文章目录
1. PVRCNN算法
在目前的点云目标检测中,3D voxel CNNs
可以生成高质量的proposals
;而基于PointNet
的方法由于其感受野灵活,可以捕获更准确的目标位置信息。
在本文中,作者对这两种检测方法进行集成,首先使用3D voxel CNNs
作为主干网来生成高质量的proposalas
,然后在每一个proposal
中,为了充分有效池化点云特征,作者提出了两种新的池化方式:Voxel-to-keypoint scene encoding
与keypoint-to-grid ROI feature abstraction
。通过这两种池化方法,能够有效提高预测可信度以及对目标位置进行优化。
1.1 3D Voxel CNN for Efficient Feature Encoding and Proposal Generation
这部分相对比较好理解,使用3D CNNs
作为主干网,将输入的点云划分为一个个voxel
。作者总共进行了4次下采样,最后投影到鸟瞰图上,生成proposal
。从结果可以看出,这种生成proposal
的方式有着更高的召回率。
1.2 Voxel-to-keypoint Scene Encoding via Voxel Set Abstraction
PointNet
中提出的set abstraction operation
显示出了强大的特征提取能力,能够对任意空间尺寸的点云集进行特征抽取。受此启发,作者提出了将多个voxels
的特征聚合到keypoints
上。
- 首先是
Keypoints Sampling
,和PointRCNN
一样,作者使用最远点采样法(FPS)在所有点云中选取出 n n n个关键点,在KITTI数据中 n = 2048 n=2048 n=2048。 - 然后是
Voxel Set Abstraction Module(VSA)
,如下图所示,作者在每一次进行下采样时都进行了一次VSA
操作,将不同尺度范围的voxel
特征汇聚到keypoints
。
具体地操作如下,其中 l k l_k lk表示第 k k k层网络, p i p_i pi表示为keypoint
, v j ( l k ) v_{j}^{(l_k)} vj(lk)表示为第 k k k层网络中voxel
坐标, f j ( l k ) f_{j}^{(l_k)} fj(lk)表示为voxel
队以应地特征向量。这样就组成每个keypoint
邻域集 S i l k S_{i}^{l_k} Silk:包括voxel
特征向量及voxel
与keypoint
之间地相对位置。
然后是对
S
i
l
k
S_{i}^{l_k}
Silk进行一次
m
a
x
max
max操作。具体操作如下,其中
M
M
M表示在集合
S
i
l
k
S_{i}^{l_k}
Silk中最多选取出
T
k
T_k
Tk个voxels
,
G
G
G表示进行多层感知机操作,最外层是
m
a
x
max
max操作。最终生成地每个keypoint
特征为
f
i
p
v
k
f_{i}^{{pv}_k}
fipvk。
对每一层3D CNNs
网络都进行上述VSA
操作,这样就得到了keypoint
结合后地特征
f
i
(
p
v
)
f_{i}^{{(pv)}}
fi(pv)。
- 现在将
VSA
模块进行扩展,我们对原始点云进行公示(2)的操作,得到特征 f i r a w f_{i}^{raw} firaw。对鸟瞰图上的keypoint
进行二项插值得到特征 f i ( b e v ) f_{i}^{(bev)} fi(bev),最终,关键点 k e y p o i n t keypoint keypoint特征为 f i ( p ) f_{i}^{(p)} fi(p):
- 这里作者还设计了一个
predicted keypoint weighting
模块,如下图所示。在训练时,可以根据annotation
来判断选取地关键点是不是属于前景点,这里训练使用地损失函数为focal loss
。
1.3 Keypoint-to-grid RoI Feature Abstraction for Proposal Refinement
经过上面的处理,得到了一组含有多尺度语义特征的关键点集(keypoints with multi-scale semantic features)
。
为了进一步优化,作者在这里提出了keypoint-to-grid RoI feature abstraction
,如下图4所示。
首先在每一个候选方案(proposal)中,统一采样
6
×
6
×
6
6\times6\times6
6×6×6个gird points。这里的采样公式如下,其中
g
i
g_i
gi表示为grid points,
p
j
p_j
pj表示为keypoint,
f
~
j
(
p
)
\widetilde f^{(p)}_{j}
f
j(p)表示为关键点特征。
然后使用一个PointNet-block
得到grid point
特征,具体方法如下:
最后通过两层MLP网络,得到256维的特征向量。
2. Experiments
下图是论文作者在KITTI数据集提交的结果(截至2020年11月22日),目前排在第15位,是榜上唯一开源的方案。
总的来说,作者提出的voxel-based
和PointNet-based
方法还是很创新的,值得借鉴。