1. Motivation
3D目标图像与2D图像不同,3D物体能再3D bbox中很好的分离开,而且能提供每个前景点在3D地面真实包围盒内的相对位置。而对于2D图像来说,会产生部分对象遮挡的问题。因此论文从此角度出发,充分利用三位对象内的intra-object part location的信息,结合之前的PointRCNN,提出一种新的3D目标检测算法。
2. Contribution
- 论文提出基于点云的三维目标检测Part-A^2,该框架利用对象内部结构信息学习具有鉴别性的三维特征,并且利用roi和稀疏卷积对结构特征进行有效聚合;
- 提出两种3D proposal的生成方法:anchor-free和anchor。前者对内存的需求较小,后者能生成较高的召回率框;
- 提出一种新的可微的roi点云池化操作,以消除现有点云区域池化操作的模糊性。
3. 正文
与前面提到一致,相对于2D对象检测框,3D检测框的中三维物体不仅自然分离,而且点云之间包含了每个前景三维点在bbox的相对位置。这些前景点相对位置能提供三维物体的内部结构信息,因此论文将其命名为intra-object part location。
因此论文结合PointRCNN,提出新的框架Part-A^2 Net。第一阶段利用3D对象内部结构信息和分割标签作为额外的监督信息,以来更好学习3D特征;第二阶段聚合每个3D proposal中预测的3D对象内部结构位置和每个点的3D特征,来对bbox进行评分和位置细化。
3.1 Stage-I:Part-aware 3D proposal generation
3.1.1 Point-wise feature learning via sparse convlution
论文摒弃了之前使用基于点方法提取特征的方法(PointNet++)方法,使用了具有稀疏卷积和反卷积的编码-解码器网络,来学习具有判别行的点状特征用于前景点的分割。
首先先对点云数据进行处理,论文对点云采用voxel操作,将非空体素的中心作为一个新的点云(即voxel-wise),由于体素相对于整个场景来说时较小的,因此在进行体素化之后,可以认为时形成了一个新的点云数据。
论文的编码-解码器网络架构时基于稀疏卷积骨干实现的。输入特征数据以stride=2向下采样8次,然后通过稀疏反卷积追歼向上采样到原始分辨率。
3.1.2 Estimation of foreground points and intra-object part locations
3.1.2.1 Formulation of intra-object part location
论文首先先对每个前景点对象的局部位置表示为其所属的3D gt bbox中的相对位置。假设前景对象部分结构的点的相对位置坐标为
(
x
(
p
)
,
y
(
p
)
,
z
(
p
)
)
(x^{(p)},y^{(p)},z^{(p)})
(x(p),y(p),z(p)),即可以计算得到:
3.1.2.2 Learning foreground segmentation and intra-object part location estimation
论文在编码-解码器主干输出上增加两个分支,用于前景点的分割,预测其在对象内部的部件位置。两个分支利用sigmoid函数作为最后一个非线性函数来生成输出。由于目标内part location是在训练阶段的前景点上定义和学习的,因此前景点的分割分数表示预测目标内part location的置信度。由于大型户外场景中前景点的数据是比背景点的数量烧很多,因此采用focal loss来处理类的不平衡问题:
对于每个前景点的对象的part location,采用二元交叉损失作为loss进行回归估计:
3.1.3 3D proposal generation from point cloud
3.1.3.1 Anchor-free 3D proposal generation
论文采用与PointRCNN类似的新方案,以自底向上的方式生成3D proposal。假设直接从前景点回归估计目标中心位置,回归变化范围过大(例如位于目标对象交流和位于目标对象侧面的偏移量区别是较大的),使用常规的损失函数会产生较大的前景点误差。
因此论文采用bin-base方法进行中心回归(也就是与PointRCNN一样的)。因此对象中心回归目标可以表述为:
由于生成的proposal是anchor-free的,因此论文将
2
π
2\mathrm\pi
2π直接划分为离散的bin,bin尺寸大小为
w
w
w,即对应损失函数为:
因此损失函数汇总为:
在推理阶段,首先选择预测置信最高的bin中心,然后假如预测的残差得到回归的
x
,
y
,
θ
x,y,\theta
x,y,θ。
3.1.3.2 Anchor-based 3D proposal generation
基于稀疏卷积采样得到M x N x H的体素化点云,对x轴和y轴进行8x下采样得到
M
8
×
N
8
\frac M8\times\frac N8
8M×8N的channels数量为
H
16
×
D
\frac H{16}\times D
16H×D的2D的鸟瞰图,其中
H
16
\frac H{16}
16H为z轴上的16x的下采样,
D
D
D为每一个voxel的维度大小,
×
D
\times D
×D则为在鸟瞰图上每一个x-y聚合特征的高度信息。
然后将一个类似与RPN head加在鸟瞰图中,用于生成3D proposal。每一类生成
2
×
M
8
×
N
8
2\times\frac M8\times\frac N8
2×8M×8N个预定义anchors,并且每个anchors对应的大小与类的anchor大小是相一致的。在kitti数据集中,汽车anchors设置为
l
=
3.9
,
w
=
1.6
,
h
=
1.56
l=3.9, w=1.6, h=1.56
l=3.9,w=1.6,h=1.56,行人设置为
l
=
0.8
,
w
=
0.6
,
h
=
1.7
l=0.8, w=0.6, h=1.7
l=0.8,w=0.6,h=1.7,骑车人设置为
l
=
1.7
,
w
=
0.6
,
h
=
1.7
l=1.7, w=0.6, h=1.7
l=1.7,w=0.6,h=1.7。
因此结合原先对应的gt,可以计算出每一个anchor的iou值。论文将汽车、行人和骑车者的pos iou阈值设置为0.6、0.5、0.5,neg iou设置成0.45,0.35,0.35。并且在鸟瞰图后添加了两层1x1x1卷积层,用于proposal的分类和检测框回归。因此各个voxel点的各个特征损失可以表示为:
由于该方法将两个相反方向编码成相同的值,因此受SECORD启发,鸟瞰图特征上增加了一个1x1x1的卷积层,来对两个方向相反进行分类处理,然后采用二值交叉损失来对其进行回归处理并计损失为
L
d
i
r
L_{dir}
Ldir。因此总的3D bbox的回归损失可以总结为:
3.2 RoI-aware point cloud feature pooling
在这一小节中,根据预测的对象的部件位置和3D proposal,对信息进行整和以来对框进行细化操作。
3.2.1 Canonical transformation
论文首先先对框进行正则化坐标系转换,一个三维proposal的正则化坐标系表示为:
- 原点位于检测框中心;
- x轴和y轴近似平行于地面,其中x轴指向proposal的头部方向,y轴垂直于x轴;
- z轴保持不变。
论文通过旋转和平移将检测框的所有集合的点转化为正则化坐标系下的点,能很好的消除不同3D proposal的旋转和位置变化因素,提高学习效率。
3.2.2 RoI-aware point cloud feature pooling
按照之前的PointRCNN,所有的内部点的特性都由PointNet++编码器聚合,然后在第二阶段进行检测框细化操作。但是此操作丢失很多三维信息,并且引入了歧义。
因此论文提出一种新的RoI-aware点云池化方法,将点云切分成大小相等的规则voxel且为
L
x
×
L
y
×
L
z
L_x\times L_y\times L_z
Lx×Ly×Lz(论文设置成14x14x14)。
设定检测框b中的点集合为
F
=
{
f
i
∈
R
C
0
,
i
∈
1
,
…
,
n
}
F=\left\{f_i\in\mathbb{R}^{C_0},\;i\in1,\;\dots,\;n\right\}
F={fi∈RC0,i∈1,…,n},切割后的voxel里的点进行正则化后对应坐标为
X
=
{
(
x
i
(
c
t
)
,
y
i
(
c
t
)
,
z
i
(
c
t
)
)
∈
R
3
,
i
∈
1
,
…
,
n
}
X=\left\{(x_i^{(ct)},\;y_i^{(ct)},\;z_i^{(ct)})\in\mathbb{R}^3,\;i\in1,\;\dots,\;n\right\}
X={(xi(ct),yi(ct),zi(ct))∈R3,i∈1,…,n},其中n为每一个voxel里的点的数目。因此最大池化和平均池化可以定义为:(其实可以看做对局部进行最大池化或者平均池化)
论文提出的roi感知点云池化可以提取得到局部空间信息特真正,很好的捕获3D提案的集合形状,并未后续置信度计算和位置细化提供有效表示。而且该模块是可微的,使得模型是可以端到端训练的。
3.3 Stage-II:Part location aggregation for confidence prediction and 3D box refinement
对于stage-I中学习到对象内部结构特征,因此在这一部分论文训练一个子网络来聚合第一部分学习到的特征信息,并对proposal进行refine。
3.3.1 Fusion of predicted part locations and semantic part features
论文采用上面提出的新的roi感知点云池化来获得每个3D proposal的特征。假设对于一个3D proposal
b
b
b,其中
F
1
=
{
(
x
i
(
p
a
r
t
)
,
y
i
(
p
a
r
t
)
,
z
i
(
p
a
r
t
)
,
s
i
)
∈
R
4
,
i
∈
1
,
…
,
n
}
F_1=\left\{(x_i^{(part)},\;y_i^{(part)},\;z_i^{(part)},\;s_i)\in\mathbb{R}^4,\;i\in1,\;\dots,\;n\right\}
F1={(xi(part),yi(part),zi(part),si)∈R4,i∈1,…,n}为第一阶段预测的结构部件位置和对应置信度得分,
F
2
=
{
f
i
(
s
e
m
)
∈
R
C
,
i
∈
1
,
…
,
n
}
F_2=\left\{f_i^{(sem)}\in\mathbb{R}^C,\;i\in1,\;\dots,\;n\right\}
F2={fi(sem)∈RC,i∈1,…,n}为从骨干网络学习得到的特征,其中
n
n
n为每一个proposal中的点的个数,然后点云进行特征编码为:
其中G表示对特征进行流形稀疏卷积,以来将池化的part部分的特征转成与
Q
(
s
e
m
)
Q^{(sem)}
Q(sem),而
[
⋅
,
⋅
]
\left[\cdot,\;\cdot\right]
[⋅,⋅]为特征连接。其中
Q
(
s
e
m
)
Q^{(sem)}
Q(sem)、
Q
(
p
a
r
t
)
Q^{(part)}
Q(part)、
Q
(
r
o
i
)
Q^{(roi)}
Q(roi)大小都为14x14x14。
论文采用平均池化来预测结构内部位置
F
1
F_1
F1,使用最大池化来池化语义特征
F
2
F_2
F2。
3.3.2 Sparse convolution for part information aggregation
论文得到聚合特征 Q ( r o i ) Q^{(roi)} Q(roi)后,采用多个3D稀疏卷积且kernel=3x3x3进行特征聚合,然后后面追加一个kernel=2x2x2的,stride=2的稀疏最大池化层,最后将其向量化,并将其输入两个分支来进行检测框置信度计算和位置细化。
3.3.3 3D IoU guided box scoring
论文采用3D IoU对第二阶段的proposal的损失进行优化计算:
经过相关实验证明,与传统的基于分类的bbox评分相比,IoU引导的bbox得到评分性能略好。
3.4 Overall loss
3.4.1 Losses of part-aware stage-I
第一阶段的损失由前景点分割的focal loss、结构位置的二值交叉损失和3D proposal带来的smooth-L1损失:
3.4.2 Losses of part-aggregation stage-II
对于第二阶段,损失函数由bbox细化的二值交叉损失和3D 检测框细化的smooth-L1:
3.4.3 Overall loss
因此Part-A^2端到端的损失函数为: