CVPR 2021
Qiangeng Xu et al.
SPG: Unsupervised Domain Adaptation for 3D Object Detection via Semantic Point Generation
A. Introduction
由于天气原因,自动驾驶场景中经常会出现一些遮挡因素,造成大量的目标丢失其部分或者全部的点云信息。而对于这些目标来说,由于点云信息的丢失使得其特征空间不再完整,或出现较大的区别,降低算法的整体识别能力。因此SPG算法的出现意在解决此类问题。
首先SPG算法是一个点云数据增强算法,他实现的功能是将低密度的目标点云进行up-sampling(而不是盲目的up-sampling整个场景),将残缺、遮挡的点云区域进行语义生成,从而使得可以一般检测器可以在此类糟糕天气场景中正常工作。
所以SPG并不包含检测功能,因此在文章的实验部分,作者采取了SPG+PV_RCNN以及SPG+PointPillars进行算法有效性的验证。
B. Method
I. Network Structure
对于点云空间
P
C
r
a
w
=
{
p
1
,
p
2
,
.
.
.
,
p
N
}
∈
R
3
+
F
PC_{raw} = \{p_1,p_2,...,p_N\}\in\mathbb{R}^{3+F}
PCraw={p1,p2,...,pN}∈R3+F,首先进行体素化:
P
C
r
a
w
→
V
=
{
v
1
,
v
2
,
.
.
.
,
v
M
}
∈
R
C
PC_{raw}\to V=\{v_1,v_2,...,v_M\}\in \mathbb{R}^C
PCraw→V={v1,v2,...,vM}∈RC
体素化的过程与Voxelnet相似,通过MLP将同一网格内的所有点进行特征的聚合。对于每一个体素通过前馈网络判断其前景概率,即:
P
~
i
f
=
FFN
(
v
i
)
\tilde{P}^f_i=\text{FFN}(v_i)
P~if=FFN(vi)
其中
v
i
∈
V
v_i\in V
vi∈V。对于每一个体素,通过一个网络进行语义点的生成:
s
p
~
=
Net
(
v
i
)
\tilde{sp} = \text{Net}(v_i)
sp~=Net(vi)
其中
s
p
~
∈
R
3
+
F
\tilde{sp}\in\mathbb{R}^{3+F}
sp~∈R3+F,
v
i
∈
V
v_i\in V
vi∈V,
Net()
\text{Net()}
Net()论文中未给出描述。进一步的,对所有的生成点进行筛选,筛选规则如下:
- 生成点的坐标需要在generation area内。generation area被定义为具有点的体素空间以及其比邻的所有体素空间。
- 生成点的体素前景置信度需要满足 P ~ i f > P t h r e s h \tilde{P}^f_i>P_{thresh} P~if>Pthresh。
最后将
s
p
~
\tilde{sp}
sp~与原始点云进行合并,并添加一个置信度维度:对于所有的原始点云,其置信度维度值为1.0,对于
s
p
~
\tilde{sp}
sp~,其置信度维度值为
P
~
i
f
\tilde{P}^f_i
P~if。即:
P
C
a
u
g
=
{
p
1
,
p
2
,
.
.
.
,
p
N
,
s
p
~
1
,
s
p
~
2
,
.
.
.
,
s
p
~
k
}
∈
R
3
+
F
+
1
PC_{aug} = \{p_1,p_2,...,p_N,\tilde{sp}_1,\tilde{sp}_2,...,\tilde{sp}_k\}\in\mathbb{R}^{3+F+1}
PCaug={p1,p2,...,pN,sp~1,sp~2,...,sp~k}∈R3+F+1
II. Training Targets & Loss
- 使用 y f y^f yf作为 P ~ f \tilde{P}^f P~f的监督
在这里使用
L
c
l
s
L_{cls}
Lcls作为前景分类损失,损失函数使用Focal loss。
L
c
l
s
L_{cls}
Lcls对四个类别进行监督(见下文 III.Strategies/Semantic Area Expansion )。
L
c
l
s
=
1
∣
V
o
∪
V
e
b
∣
∑
V
o
∪
V
e
b
L
f
o
c
a
l
+
0.5
∣
V
e
f
∣
∑
V
e
f
L
f
o
c
a
l
+
2
∣
V
h
i
d
e
∣
∑
V
h
i
d
e
L
f
o
c
a
l
L_{cls}=\frac{1}{|V_o\cup V^b_e|}\sum_{V_o\cup V^b_e}L_{focal}+\frac{0.5}{|V^f_e|}\sum_{V^f_e}L_{focal}+\frac{2}{|V_{hide}|}\sum_{V_{hide}}L_{focal}
Lcls=∣Vo∪Veb∣1Vo∪Veb∑Lfocal+∣Vef∣0.5Vef∑Lfocal+∣Vhide∣2Vhide∑Lfocal
- 使用体素的真值 ψ \psi ψ作为 s p ~ \tilde{sp} sp~的监督
在这里使用
L
r
e
g
L_{reg}
Lreg作为特征回归损失,损失函数使用Smooth-L1。SPG生成语义点的目标为前景体素的平均,即对于每一个体素
v
i
∈
R
C
v_i\in\mathbb{R}^{C}
vi∈RC,若其为前景(
y
f
>
1
y^f>1
yf>1),则生成的点
s
p
~
\tilde{sp}
sp~以
[
x
i
ˉ
,
f
i
ˉ
]
[\bar{x_i},\bar{f_i}]
[xiˉ,fiˉ]为目标。
L
r
e
g
=
1
∣
V
o
f
∣
∑
V
o
f
L
s
m
o
o
t
h
−
L
1
(
ψ
,
ψ
~
)
+
2
∣
V
h
i
d
e
∣
∑
V
h
i
d
e
L
s
m
o
o
t
h
−
L
1
(
ψ
,
ψ
~
)
L_{reg}=\frac{1}{|V^f_o|}\sum_{V^f_o}L_{smooth-L1}(\psi,\tilde{\psi})+\frac{2}{|V_{hide}|}\sum_{V_{hide}}L_{smooth-L1}(\psi,\tilde{\psi})
Lreg=∣Vof∣1Vof∑Lsmooth−L1(ψ,ψ~)+∣Vhide∣2Vhide∑Lsmooth−L1(ψ,ψ~)
III. Strategies
为了使得网络不仅可以在有点的体素中生成以增加点的密度,同时还需要在没有点但是为前景的体素中生成,以弥补遮挡和信息丢失带来的“missing points”情况。为此,在之前网络的基础上,作者添加了两个策略:“Hide and Predict” 以及 “Semantic Area Expansion”.
- Hide and Predict
为了模拟部分目标被遮挡,点云空间部分丢失的情景,对于体素空间
V
V
V,随机进行
γ
%
\gamma\%
γ%隐藏(作者使用
γ
=
25
\gamma=25
γ=25),有:
V
h
i
d
e
⊂
V
V_{hide}\subset V
Vhide⊂V
在训练中,需要仅通过
∣
V
−
V
h
i
d
e
∣
|V-V_{hide}|
∣V−Vhide∣而对所有的
V
V
V进行前景/背景标签
y
f
y^f
yf的判断。对于
V
h
i
d
e
V_{hide}
Vhide内的语义点
s
p
~
\tilde{sp}
sp~生成,应该以真值为目标(见 II. Training Targets 章节)。
其实网络对于所有 y f = 1 y^f=1 yf=1的体素都需要生成一个语义点,那么在代码中完全可以不对 V h i d e V_{hide} Vhide进行区分,直接进行前景判断、 s p ~ \tilde{sp} sp~生成。那么这里 V h i d e V_{hide} Vhide的作用就是故意隐去一部分前景,并鞭策网络对空的体素也要判断其属性并相应进行语义点的生成。
- Semantic Area Expansion
由于空体素不一定紧邻有信息的前景体素,因此需要对更多的空体素进行生成。对于所有的体素,根据其不同类别进行如下划分:
- 背景体素( V b V^b Vb): y f = 0 y^f=0 yf=0
- 前景非空体素( V o f V^f_o Vof): y f = 1 y^f=1 yf=1
- 前景空体素( V e f V^f_e Vef): y f = α , where α < 1 y^f=\alpha,~\text{where} ~\alpha <1 yf=α, where α<1
同时由于空体素没有真值,因此只对非空前景体素进行 ψ \psi ψ监督,空前景生成的点不再监督。
IV. Experiment and Result
见原文结果。