1. Motivation
现在存在的3D目标检测方法可以分为两种,一种是基于point-based,一种是基于grid-based(也就是voxel-based)。point-based可以获得更大的感受野,但是计算成本过高;voxel-based计算效率高,但是信息的损失较大。
因此本论文提出一种新的方法,结合两种不同方法的优点,从而来进一步提高目标检测性能。
2. Contribution
- 提出PV-RCNN框架,有效结合voxel-based和point-based的有点,在内存消耗可控的情况下提高了3D对象检测的性能;
- 提出voxel-to-keypoint方案,在多尺度下将体素特征编码到一个关键点集中,不仅保持了准确的位置,而且丰富了场景特征信息;
- 提出多尺度ROI特征提取,聚集更丰富信息,从而实现准确的proposal refinement和置信度预测;
3. 正文
3.1 网络框架
从网络架构可以看出,本论文提出的PV-RCNN框架包含两个stage。首先采用稀疏卷积方法生成高质量的proposals,并且同时采用pointnet方法对每个尺度的输出进行特征提取并且最后进行拼接,然后根据该特征信息对生成的proposals进行细化操作。
3.2 3D Voxel CNN for Efficient Feature Encoding and Proposal Generation
3.2.1 3D voxel CNN
3D稀疏voxel CNN是目前性能较好的3D目标检测器,具有高效率和准确性,因此论文将其作为特征提取和3D proposal的backbone。
首先将输入点云分割成L x W x H个voxel,并对非空voxel进行平均处理。接着采用3x3x3进行1x,2x,4x,8x的下采样处理。
3.2.2 3D proposal generation
对下采样结果的3D特征向量转化为2D的鸟瞰图,并生成proposals。对于鸟瞰图,采用poinpillar进行2D鸟瞰图的投影,论文采用了 L 8 × W 8 \frac L8\times\frac W8 8L×8W的grid大小进行pointpillar。并且每个类有 2 × L 8 × W 8 2 \times \frac L8\times\frac W8 2×8L×8W个3D proposals,头偏角分别为0度和90度。
3.3 Voxel-to-keypoint Scene Encoding via Voxel Set Abstraction
3.3.1 Keypoints Sampling
论文使用FPS进行点云采样得到包含n个点的点集 { p 1 , p 2 , … , p n } \left\{p_1,\;p_2,\;\dots,\;p_n\right\} {p1,p2,…,pn}。对于不同的数据集,kitti的n=2048,Waymo的n=4096。
3.3.2 Voxel Set Abstraction Module
论文提出一个新的模块VSA(Voxel Set Abstraction),将多尺度下的特征向量进行特征编码。相对于之前PointNet只学习到相邻点特征,该模块可以学习多尺度下得数据特征,能获取更多特征信息。
假定
F
(
l
k
)
=
{
f
1
(
l
k
)
,
⋯
,
f
N
k
(
l
k
)
}
F_{}^{(l_k)}=\left\{f_1^{(l_k)},\;\cdots,\;f_{N_k}^{(l_k)}\right\}
F(lk)={f1(lk),⋯,fNk(lk)}是第
k
k
k个3D voxel CNN得每一个voxel得特征向量,
V
(
l
k
)
=
{
v
1
(
l
k
)
,
⋯
,
v
N
k
(
l
k
)
}
V_{}^{(l_k)}=\left\{v_1^{(l_k)},\;\cdots,\;v_{N_k}^{(l_k)}\right\}
V(lk)={v1(lk),⋯,vNk(lk)}为对应的3D坐标(可以通过voxel的坐标和实际的voxel的大小来计算得出)。
N
k
N_k
Nk为不为空的voxel的第k个voxel块。
对于每一个点
p
i
p_i
pi,在第k个voxel CNN上,设定采样半径为
r
k
r_k
rk,即可以计算出每个voxel的特征向量为:
其中
v
j
(
l
k
)
−
p
i
v_j^{(l_k)}-p_i^{}
vj(lk)−pi为点云的point位置相对于voxel中心的偏移值,论文把该值接到后面,于是变形成了一个通过voxel的特征向量集合。接着通过PointNet-block(PointNet++模块)来对集合信息进行进一步提取:
其中
M
(
⋅
)
M\left(\cdot\right)
M(⋅)函数在
S
i
(
l
k
)
S_i^{(l_k)}
Si(lk)中随机采样
T
k
T_k
Tk个点,
G
(
⋅
)
G\left(\cdot\right)
G(⋅)函数为一个多层感知机对采样点信息进行特征编码。因为每个体素上的关键点的数量是不同的,因此在最外层加上
m
a
x
(
)
max\left(\right)
max()进行max-pooling处理,对提取到的特征向量进行信息聚合。这样便可以得到一个点的特征信息。论文为了获取更加丰富的多尺度上下文信息,通常设置不同大小的半径进行局部体素信息获取。
因此经过上面对多尺度的卷积信息获取并进行拼接,便可以得到关键点
p
i
p_i
pi的多尺度语义特征:
3.3.3 Extened VSA Module
论文对特征进行再一次的丰富,补充了原始点云和8x的下采样的鸟瞰图信息。原始点云数据弥补了点云体素化的量化损失,鸟瞰图信息包含了原始信息在z轴上的很大感受野。
对于原始点云特征
f
i
(
r
a
w
)
f_i^{(raw)}
fi(raw),则按照3.3.2中计算
f
i
(
p
v
)
f_i^{(pv)}
fi(pv)的方法一样,对于鸟瞰图特征
f
i
(
b
e
v
)
f_i^{(bev)}
fi(bev)则通过对原始bev map进行双线性插值。因此最终得到的每个点的特征向量为:
3.3.4 Predictd Keypoint Weighting
论文接着利用已有的关键点信息进行proposal的细化。由于部分关键点可能是背景区域,而对于proposal而言,前景点对于proposal的贡献是较大的,背景点权重应该进行缩小。
因此论文从该点出发,提出一个PKM框架对关键点的权重进行再次赋值。通过判断关键点是否在3D box中,便可以判断该点是否为前景关键点,因此依据此重新对关键点权重进行再分配:
其中PKW模块采用focal loss进行训练,以来解决样本不均衡问题。
3.4 Keypoint-to-grid RoI Feature Abstraction for Proposal Refinement
通过3.3可以提取到多尺度的语义特征向量,因此本模块根据之前生成的3D proposal,利用关键点特征向量对其进行进一步细化。
3.4.1 RoI-grid Pooling via Set Abstraction
论文提出RoI-grid pooling module模块,对关键点特征信息进行进一步的聚合。首先采用6x6x6的网格在每一个3D proposal进行采样处理,得到集合
G
=
{
g
1
,
g
2
,
…
,
g
216
}
G=\left\{g_1,\;g_2,\;\dots,\;g_{216}\right\}
G={g1,g2,…,g216}。因此定义网格点
g
i
g_i
gi以半径为
r
~
\widetilde r
r
进行领域搜索,即可得:
其中
p
j
−
g
i
p_j - g_i
pj−gi表示相对位置,因此根据之前的PointNet-block方法对集合进行进一步提取,即为:
同时同样设置多个不同大小的半径以来获取多尺度下更加丰富的特征信息。
3.4.2 3D Proposal Refinement and Confidence Prediction
精细化部分论文采用两层MLP结构,并且分出有置信度预测和box细化分支。
对于置信度预测分支,通过计算gt和预测的的3D RoIs的3D iou值来进行置信度预测,并对置信度值
y
k
y_k
yk进行标准化:
其中
I
o
U
k
IoU_k
IoUk是第k个RoI的iou值,该模块通过二分类交叉损失进行优化。
对于box分支,论文采用传统的residual-based 方法并且使用Smooth-L1 loos进行优化。