文章目录
Abstruct
- 提出了一种图神经网络来检测激光雷达点云中的目标,为此将点云编码在一个固定半径的近邻图中。
- 设计了Point-GNN来预测图中每个顶点所属对象的类别和形状。
- 在Point-GNN中,作者提出了一种自动配准机制来保证平移不变性,并设计了一个框合并和打分操作来精确地结合多个顶点的检测结果。
1、Introduction
- 由于点云的稀疏性,在体素网格上使用传统的CNN会导致拥挤的网格中潜在的信息丢失和空网格中浪费的计算量。如PointNet点的集合表示方式在一个大点云上重复分组和采样在计算上是昂贵的。而混合策略也可能会遭受两种表示方式(网格和集合)的缺点。
- Point-GNN使用点作为图的顶点,在图中原生地编码顶点,图的边缘连接在一个固定半径内的邻居点,允许特征信息在邻居点之间流动。
- 这种图的表示方式直接适应点云的结构,不需要使其规则化。GNN重用了每一层的图边,避免了对点的重复分组和采样。
- Point-GNN以点图作为其输入,输出每个顶点所属对象的类别和边界框。它是一种单阶段检测方法,可以在一个场景中检测多个目标。为了保证图神经网络中的平移不变性,引入了自动配准机制,该机制允许点根据其特征对其坐标进行配准,并进一步设计了一个框合并和打分操作,以准确地组合来自多个顶点的检测结果。
Contirbution
- 提出了新的点云目标检测方法,利用图神经网络。
- 设计了PointGNN,一个有自动配准机制的在单帧检测多个目标的图神经网络。
- 在KITTI基准中实现了最先进的3D目标检测精度,并深入分析每个组件的有效性。
2、Point-GNN for 3D Object Detection in a Point Cloud
2.1 Graph Construction
给定一个点云P,构造一个图G = (P, E),用P作为顶点,并将一个点连接到其固定半径r内的邻居,即
E
=
{
(
p
i
,
p
j
)
∣
∥
x
i
−
x
j
∥
2
<
r
}
E=\{(p_i,p_j)| \|x_i-x_j\|_2<r\}
E={(pi,pj)∣∥xi−xj∥2<r}
其中,
P
=
{
p
1
,
p
2
,
.
.
.
,
p
N
}
P=\{p_1,p_2,...,p_N\}
P={p1,p2,...,pN},
p
i
=
(
x
i
,
s
i
)
p_i=(x_i,s_i)
pi=(xi,si),
x
i
ϵ
R
3
x_i\epsilon\mathbb R^3
xiϵR3表示三维坐标,
s
i
ϵ
R
k
s_i\epsilon\mathbb R^k
siϵRk表示长度为k点属性的状态值(特征)向量,可以是反射的激光强度或对周围物体进行编码的特征。
通过使用一个单元列表来寻找给定半径内的点对(即固定半径的近邻搜索),这样可以有效地解决运行时复杂度为O(cN)地问题,其中c是半径内地最大邻居数。
实际上,一个点云有成千上万个点,构造一个所有点都为顶点地图会增加大量的计算负担。因此作者采用了体素下采样点云 P ^ \hat P P^来构件图,且体素仅用于降低点云地密度而不是作为点云地表示,仍然使用图表来表示下采样点云。
为了保留原始点云内的信息,对每个顶点搜索一个半径为 r 0 r_0 r0的邻域,并使用集合上的神经网络来提取它们的特征,然后再使用MLP去嵌入邻域内所有特征,最后使用max函数来聚合特征后作为顶点的初始状态值 s i s_i si。
2.2 Graph Neural Network with Auto-Registration
典型的GNN通过沿边缘聚集特征来细化顶点特征,即根据边连接邻域的信息来更新每个点的特征信息 v i t + 1 = g t ( ρ ( { e i j t ∣ ( i , j ) ϵ E } ) , v i t ) v_i^{t+1}=g^t(\rho(\{e_{ij}^t|(i,j)\epsilon E\}),v_i^t) vit+1=gt(ρ({eijt∣(i,j)ϵE}),vit) e i j t = f t ( v i t , v j t ) e_{ij}^t=f^t(v_i^t,v_j^t) eijt=ft(vit,vjt)其中 e t e^t et和 v t v^t vt分别是第t次迭代边的特征和顶点的特征,f(·)计算两点之间的边缘特征,ρ(·)是聚合每个顶点边缘特征的聚合函数,g(·)表示采用聚合的边缘特征来更新顶点特征。
在本文中,作者使用相邻顶点来细化定点状态 s i t + 1 = g t ( ρ ( { f t ( x j − x i , s j t ) ∣ ( i , j ) ϵ E } ) , s i t ) s_i^{t+1}=g^t(\rho(\{f^t(x_j-x_i,s_j^t) | (i,j)\epsilon E\}),s_i^t) sit+1=gt(ρ({ft(xj−xi,sjt)∣(i,j)ϵE}),sit)在上式中使用邻居的相对坐标作为f(·)的输入提取边缘特征。相对坐标对点云的全局平移具有平移不变性,然而邻域内的平移还是很敏感。当顶点发生小平移时,虽然邻居局部结构保持相似,但是邻居的相对坐标都发生了变化,从而增加了f(·)的输入方差。为了减少平移方差,作者提出用结构特征代替中心顶点坐标对邻居坐标。因为中心顶点已经包含了之前迭代的一些结构特征,故可以使用它来预测对齐偏移量,并提出一种自动配准机制 ∆ x i t = h t ( s i t ) ∆x_i^t=h^t(s_i^t) ∆xit=ht(sit) s i t + 1 = g t ( ρ ( { f t ( x j − x i + ∆ x i t , s j t ) } ) , s i t ) s_i^{t+1}=g^t(\rho(\{f^t(x_j-x_i+∆x_i^t,s_j^t)\}),s_i^t) sit+1=gt(ρ({ft(xj−xi+∆xit,sjt)}),sit)其中 ∆ x i t ∆x_i^t ∆xit是用 h t ( ⋅ ) h^t(·) ht(⋅)使用前一次迭代的中心顶点状态值计算的顶点坐标偏移量。通过将 h t ( ⋅ ) h^t(·) ht(⋅)设置为输出零点,GNN可以在必要时禁用偏移。
作者使用MLP和Max对上述函数建模,在所提出的网络中进行一次迭代 ∆ x i t = M L P h t ( s i t ) ∆x_i^t=MLP_h^t(s_i^t) ∆xit=MLPht(sit) e i j t = M L P f t ( [ x j − x i + ∆ x i t , s j t ] ) e_{ij}^t=MLP_f^t([x_j-x_i+∆x_i^t,s_j^t]) eijt=MLPft([xj−xi+∆xit,sjt]) s i t + 1 = M L P g t ( M a x ( { e i j ∣ ( i , j ) ϵ E } ) ) + s i t s_i^{t+1}=MLP_g^t(Max(\{e_{ij} | (i,j) \epsilon E\}))+s_i^t sit+1=MLPgt(Max({eij∣(i,j)ϵE}))+sit其中[,]表示连接操作。
每个迭代 t 使用不同的 M L P t MLP^t MLPt集合,这些集合在迭代中是不共享的。经过图神经网络的T次迭代,我们使用顶点状态值来预测顶点所属对象的类别和边界框。分类分支 M L P c l s MLP_{cls} MLPcls计算多类概率。最后,一个本地化分支 M L P l o c MLP_{loc} MLPloc计算每个类的边界框。
2.3 Loss
对于对象类别,分类分支为每个顶点计算一个多分类的概率分布 { p c 1 , . . . , p c M } \{p_{c_1},...,p_{c_M}\} {pc1,...,pcM},M是对象类别的总数(包含背景类)。如果一个顶点在某一对象的边界框内,则将该对象类分配给该顶点,如果一个顶点在任何边界框之外,则将背景类分配给这个顶点。此时使用平均交叉熵损失作为分类损失 l c l s = − 1 N ∑ i = 1 N ∑ j = 1 M y c j i l o g ( p c j i ) l_{cls}=-\frac 1N\sum_{i=1}^N\sum_{j=1}^My_{c_j}^ilog(p_{c_j}^i) lcls=−N1i=1∑Nj=1∑Mycjilog(pcji)其中,y是真实值的标签,p是预测的标签。
对于包围框定位损失,作者使用7自由度格式
b
=
(
x
,
y
,
z
,
l
,
h
,
w
,
θ
)
b=(x,y,z,l,h,w,\theta)
b=(x,y,z,l,h,w,θ)来预测,其中
(
x
,
y
,
z
)
(x,y,z)
(x,y,z)是包围框的中心位置,
(
l
,
h
,
w
)
(l,h,w)
(l,h,w)是包围框的长宽高,
θ
\theta
θ是偏角。然后用顶点坐标对包围框进行编码
δ
x
=
x
−
x
v
l
m
,
δ
y
=
y
−
y
v
h
m
,
δ
z
=
z
−
z
v
w
m
\delta _x=\frac {x-x_v}{l_m},\delta _y=\frac {y-y_v}{h_m},\delta _z=\frac {z-z_v}{w_m}
δx=lmx−xv,δy=hmy−yv,δz=wmz−zv
δ
l
=
l
o
g
(
l
l
m
)
,
δ
h
=
l
o
g
(
h
h
m
)
,
δ
w
=
l
o
g
(
w
w
m
)
\delta _l=log(\frac l{l_m}),\delta _h=log(\frac h{h_m}),\delta _w=log(\frac w{w_m})
δl=log(lml),δh=log(hmh),δw=log(wmw)
δ
θ
=
θ
−
θ
0
θ
m
\delta _{\theta}=\frac {\theta-\theta_0}{\theta_m}
δθ=θmθ−θ0其中,
l
m
,
h
m
,
w
m
,
θ
0
,
θ
m
l_m,h_m,w_m,\theta_0,\theta_m
lm,hm,wm,θ0,θm都是恒定的尺度因子。
然后预测每个类的编码边界框 δ b = ( δ x , δ y , δ z , δ l , δ h , δ w , δ θ ) \delta_b=(\delta_x,\delta_y,\delta_z,\delta_l,\delta_h,\delta_w,\delta_\theta) δb=(δx,δy,δz,δl,δh,δw,δθ),如果一个顶点在一个边界框内,计算真实标签和预测标签之间的Huber损失[7]。如果一个顶点在任何边框之外,或者它属于一个不需要本地化的类,则将其本地化损失设为0。然后平均所有顶点的定位损失 l l o c = 1 N ∑ i = 1 N 1 ( v i ϵ b i n t e r e s t ) ∑ δ ϵ δ b i l h u b e r ( δ − δ g t ) l_{loc}=\frac 1N\sum_{i=1}^N 1(v_i\epsilon b_{interest})\sum_{\delta\epsilon\delta_{b_i}} l_{huber}(\delta-\delta^{gt}) lloc=N1i=1∑N1(viϵbinterest)δϵδbi∑lhuber(δ−δgt)为了防止过拟合,在每个MLP中添加L1正则化,则总的Loss为 l t o t a l = α l c l s + β l l o c + γ l r e g l_{total}=\alpha l_{cls}+\beta l_{loc}+\gamma l_{reg} ltotal=αlcls+βlloc+γlreg其中 α , β , γ \alpha ,\beta,\gamma α,β,γ是平衡每个损失的恒定权重。
2.4 Box Merging and Scoring
由于多个顶点可以在同一个对象上,因此神经网络可以输出同一个对象的多个包围框,作者将这些框合并为一个框,并分配了一个置信值。通常是使用NMS算法选择得分最高的方框,然而,部分被遮挡的物体可能有强烈的线索来指示物体的类型,但缺乏足够的形状信息,分类的分数不能够总是正确对应着框的质量,所以作者认为要加上遮挡的因素。 所以作者修改了NMS算法
为了提高定位精度,作者考虑整个重叠框集群来计算合并框,即考虑重叠包围框的中值位置和大小。 还将置信度分数计算为由单位交叉(IoU)因子和遮挡因子加权的分类分数之和。 遮挡因子表示占用体积比。 给定一个box
b
i
b_i
bi,让
l
i
,
w
i
,
h
i
l_i,w_i,h_i
li,wi,hi是它的长度、宽度和高度,让
v
i
l
,
v
i
w
,
v
i
h
v^l_i,v_i^w,v_i^h
vil,viw,vih分别是指示它们方向的单位向量,
x
j
x_j
xj是点
p
j
p_j
pj的坐标,则闭塞因子
o
i
o_i
oi为
o
i
=
1
l
i
w
i
h
i
∏
v
ϵ
{
v
i
l
,
v
i
w
,
v
i
h
}
max
p
j
ϵ
b
i
(
v
T
x
j
)
−
min
p
j
ϵ
b
i
(
v
T
x
j
)
o_i=\frac 1{l_iw_ih_i}\prod_{v\epsilon\{v_i^l,v_i^w,v_i^h\}}\max_{p_j\epsilon b_i}(v^Tx_j)-\min_{p_j\epsilon b_i}(v^Tx_j)
oi=liwihi1vϵ{vil,viw,vih}∏pjϵbimax(vTxj)−pjϵbimin(vTxj)
3、Experiments