Network Framework
Instance-Aware Module
我们提出了一个实例感知模块(IAM),主要用于选择捕获空间实例上下文的代表性点。对于位置为
x
i
,
y
i
,
z
i
x_i, y_i, z_i
xi,yi,zi的点
p
i
p_i
pi,通过上下文检测分支预测点级的偏移量,来表示实例的空间扩展,表示为
{
Δ
x
k
i
,
Δ
y
k
i
,
Δ
z
k
i
}
k
=
1
K
\lbrace \Delta x_k^i,\Delta y_k^i,\Delta z_k^i \rbrace ^K_{k=1}
{Δxki,Δyki,Δzki}k=1K。
p
i
p_i
pi 预测的实例的代表区域为
R
i
R_i
Ri,可以简单表示为:
R
i
=
{
(
x
i
+
Δ
x
k
i
,
y
i
+
Δ
y
k
i
,
z
i
+
Δ
z
k
i
)
}
k
=
1
K
R_i= \lbrace (x_i+\Delta x_k^i,y_i+\Delta y_k^i,z_i+\Delta z_k^i) \rbrace ^K_{k=1}
Ri={(xi+Δxki,yi+Δyki,zi+Δzki)}k=1K
其中
K
K
K 是代表性点的个数,
i
i
i 代表第
i
i
i个点。每个点预测的轴向包围盒可以用最小-最大函数
F
F
F 表示为
B
i
B_i
Bi:
B
i
=
F
(
R
i
)
B_i=F(R_i)
Bi=F(Ri).
学习这些代表性区域是由空间边界框和实例分组标签共同驱动的,这样
R
i
R_i
Ri 就可以紧密地围绕实例。为此,提供了三个损失:
L
b
n
d
L_{bnd}
Lbnd、
L
l
e
n
L_{len}
Llen 和
L
i
n
s
L_{ins}
Lins (后两个将在下一节讨论)。
L
b
n
d
L_{bnd}
Lbnd是为了最大化预测和地面真实之间的边界框的重叠。本文使用3D IoU loss:
L
b
n
d
=
1
N
∑
I
=
1
N
1
−
I
o
U
(
G
T
i
,
B
i
)
L_{bnd}=\frac{1}{N} \sum^N_{I=1} 1-IoU(GT_i, B_i)
Lbnd=N1I=1∑N1−IoU(GTi,Bi)
式中,
N
N
N 为点总数,
B
i
B_i
Bi 为第
i
i
i个点的预测包围盒,
G
T
i
GT_i
GTi为第
i
i
i个点的三维轴向包围盒地面真值。
在效率方面,我们选择
K
=
18
K=18
K=18,实例相关区域被定位并成功覆盖空间扩展。
Instance Branch
传统上,实例解码器的输入是下采样的瓶颈点 (bottleneck points) P b ⊆ P P_b \subseteq P Pb⊆P,对应的特征表示为 F b F_b Fb。这些特征通过几个上采样层逐渐传播到完整的点集。为了在传播过程中对实例上下文进行编码,我们利用 R b R_b Rb 的有意义的语义区域对瓶颈点进行编码。
Encode Instance-Aware Context
F b F_b Fb 的表示是通过聚合来自覆盖实例空间范围的 R b R_b Rb 的信息来增强的。由于这些检测点不一定位于输入点上,因此利用K-NN对 R b R_b Rb 特征进行插值。然后将插入的特征添加到原始 F b F_b Fb 中,生成包含局部表示和实例上下文的特征。与每个输入点都需要搜索相邻点的 A S I S [ 30 ] ASIS^{[30]} ASIS[30]相比,我们的方法效率更高。由于在瓶颈层采用了K-NN, P b P_b Pb 中的搜索空间比P中的搜索空间小很多,计算开销非常有限。在解码过程中,组合特征逐渐上采样,通过所有点传播实例感知上下文。
Encode Geometric Information
几何信息是识别两个近距离物体的关键。为了学习具有鉴别性的嵌入特征,我们直接将坐标的归一化质心连接到嵌入空间中。考虑点
p
i
p_i
pi 预测的质心
C
(
B
i
)
C(B_i)
C(Bi),其中
C
(
⋅
)
C(·)
C(⋅) 为计算给定边界盒几何质心的函数,最终的每点嵌入特征可表示为
E
^
i
=
C
o
n
c
a
t
(
E
i
,
C
(
B
i
)
)
\hat{E}_i= Concat(E_i, C(B_i))
E^i=Concat(Ei,C(Bi)),其中
E
i
E_i
Ei 为实例分支生成的嵌入特征。此外,为了使具有相同实例标签的点的几何信息保持一致,我们将预测的几何质心从同一实例拉向聚类中心:
L
c
e
n
=
1
M
∑
m
=
1
M
1
N
m
∑
i
=
1
N
m
[
∥
C
(
B
i
)
−
μ
m
∥
−
σ
v
]
+
2
L_{cen}=\frac{1}{M} \sum_{m=1}^{M} \frac{1}{N_m} \sum_{i=1}^{N_m}[ \lVert C(B_i)- \mu_m\rVert - \sigma_v ]^2_+
Lcen=M1m=1∑MNm1i=1∑Nm[∥C(Bi)−μm∥−σv]+2
其中,
M
M
M 是实例的个数,
N
m
N_m
Nm 是第
m
m
m 个实例的点数,
μ
m
μ_m
μm 是指第
m
m
m 个实例的平均预测几何质心。
[
x
]
+
[x]_+
[x]+ 的定义为
[
x
]
+
=
m
a
x
(
0
,
x
)
[x]_+=max(0,x)
[x]+=max(0,x),
σ
v
\sigma_v
σv 是一个待定的(?loose)裕量。
L
c
e
n
L_{cen}
Lcen 的设计目的是迫使额外的几何信息有更少的变化,并为分离相邻的对象提供信息。
信息性的 (informative) 逐点嵌入
E
^
n
=
1
N
\hat{E}_{n=1}^N
E^n=1N 用于学习一个距离度量,该度量可以将实例内嵌入拉向集群中心,并将实例中心推离彼此。损失函数的表达式为:
L
i
n
s
=
1
M
(
M
−
1
)
∑
a
=
1
M
∑
b
=
1
,
b
≠
a
M
[
2
σ
d
−
∥
μ
a
−
μ
b
∥
]
+
2
⏟
i
n
t
e
r
−
i
n
s
t
a
n
c
e
+
1
M
∑
i
=
1
M
1
N
m
∑
m
=
1
N
m
[
∥
μ
m
−
E
^
m
∥
−
σ
v
]
+
2
⏟
i
n
t
r
a
−
i
n
s
t
a
n
c
e
L_{ins}=\underbrace{\frac{1}{M(M-1)} \sum^M_{a = 1} \sum^M_{b=1,b \neq a} [2 \sigma _d- \lVert \mu_a - \mu_b \rVert]_+^2}_{inter-instance} + \underbrace{\frac{1}{M} \sum^M_{i = 1} \frac{1}{N_m} \sum^{N_m}_{m=1} [ \lVert \mu_m - \hat E_m \rVert - \sigma _v]_+^2}_{intra-instance}
Lins=inter−instance
M(M−1)1a=1∑Mb=1,b=a∑M[2σd−∥μa−μb∥]+2+intra−instance
M1i=1∑MNm1m=1∑Nm[∥μm−E^m∥−σv]+2
其中,
M
M
M 是实例的个数,
N
m
N_m
Nm 是第
m
m
m 个实例的点数,
σ
d
\sigma_d
σd 和
σ
v
\sigma_v
σv 是放宽范围的裕量。在训练过程中,第一项将实例聚类推离彼此,第二项将嵌入拉向聚类中心。在推理过程中,采用 Mean-Shift 算法对嵌入空间中的不同实例进行聚类。
总而言之,我们的方法是端到端可训练的,并且受到四种损失的监督。在我们的所有实验中,四种损失的损失权重都设置为1。
L
=
L
f
l
+
L
b
n
d
+
L
c
e
n
+
L
i
n
s
L=L_{fl}+L_{bnd}+L_{cen}+L_{ins}
L=Lfl+Lbnd+Lcen+Lins
S3DIS实验设置
房间分割:
1
m
×
1
m
,
s
t
r
i
d
e
=
0.5
1m \times 1m, \, stride=0.5
1m×1m,stride=0.5
区块采样:
n
u
m
p
o
i
n
t
s
=
4096
num \; points=4096
numpoints=4096
点特征:参考
S
G
P
N
[
1
]
SGPN^{[1]}
SGPN[1],每个点有9维特征:
X
,
Y
,
Z
,
R
,
G
,
B
,
N
X
,
N
Y
,
N
Z
X,Y,Z,R,G,B,N_X,N_Y,N_Z
X,Y,Z,R,G,B,NX,NY,NZ
骨干网络:PointNet++
优化器:
A
d
a
m
,
m
o
m
e
n
t
u
m
=
0.9
Adam, \; momentum=0.9
Adam,momentum=0.9
损失函数的超参数:参考
A
S
I
S
[
2
]
,
σ
v
=
0.5
,
σ
d
=
1.5
ASIS^{[2]}, \; \sigma_v=0.5, \; \sigma_d=1.5
ASIS[2],σv=0.5,σd=1.5
其他参数:
b
a
t
c
h
s
i
z
e
=
16
,
e
p
o
c
h
s
=
100
,
l
e
a
r
n
i
n
g
r
a
t
e
=
0.001
&
d
i
v
i
d
e
d
b
y
2
i
n
e
v
e
r
y
300
k
i
t
e
r
a
t
i
o
n
s
batch \; size=16, \; epochs=100, \; learning \; rate=0.001 \; \& \; divided \; by \; 2 \; in \; every \; 300k \; iterations
batchsize=16,epochs=100,learningrate=0.001÷dby2inevery300kiterations
分割结果整合:
B
l
o
c
k
M
e
r
g
i
n
g
[
1
]
BlockMerging^{[1]}
BlockMerging[1]