摘要
识别大量相同类别的被遮挡物体是一个非常具有挑战性的问题。在一个常见的拣箱子场景中,许多相同的物体堆叠在一起,并且这些物体的模型是已知的。因此,可以忽略语义信息;相反,拣箱子的重点放在实例的分割上。基于这一任务需求,我们提出了一种快速点云聚类(FPCC)算法用于拣箱场景的实例分割。FPCC包括一个名为 FPCC-Net 的网络和一种快速聚类算法。FPCC-Net 有两个子网,一个用于推断聚类的几何中心,另一个用于描述每个点的特征。FPCC-Net提取每个点的特征,同时推断每个实例的几何中心点。然后,提出的聚类算法将剩余的点聚类到特征嵌入空间中最近的几何中心。
代码: ttps://github.com/xyjbaal/FPCC
引言
由于三维测量技术的进步,三维点云的获取不再困难,如被动立体视觉、相移法、灰度编码等方法。因此,高效、有效地处理三维点云成为一个新的挑战。在现实应用中,三维点云分割通常需要作为预处理步骤。三维点云分割有助于自动驾驶、人-机器人交互、机器人拣箱、姿态估计、视觉伺服和各种类型的三维点云处理。在机器人领域,捡箱的场景在过去的十年里受到了很大的关注。在这个场景中,大量相同类别的物体被堆叠在一起。因此,这类场景对快速实用的三维点云实例分割提出了很高的要求。
目前,卷积神经网络在三维点云实例分割中的应用还远远落后于实际应用。技术关键点概括如下:1)卷积核更适合处理结构化信息,而原始三维点云是非结构化、无序的;2)高质量、大规模图像数据集的可用性推动了深度学习在二维图像上的应用,但三维点云数据集较少;3)基于cnn的三维点云实例分割耗时较长。
对于关键点1),PointNet[31]被提出作为第一个适合处理非结构化、无序的三维点云的框架。PointNet没有将3D点云数据转换为3D体素网格(如[32,33]),而是使用多层感知(multi-layer perceptions, MLPs)来学习每个点的特征,并采用max-pooling来获取全局信息。PointNet的开创性工作促进了进一步的研究,一些研究人员引入了PointNet的结构作为他们的网络的骨干[34,35,36]。众所周知,PointNet独立处理每个点,这导致学习较少的局部信息[34,37]。为了能够学习三维点云的局部信息,[38,39,37,40,41]中提出的方法通过探索相邻点来提高网络感知局部信息的能力。
对于关键点2),一些著名的3D点云数据集包括室内场景数据集如S3DIS[42]和SceneNN[43],驾驶场景数据集如KITTI数据集[44]和apolo - southbay数据集[45],以及单一对象识别数据集如ShapeNet数据集[33]。对于机器人拣箱来说,提供各种工业对象的通用训练数据集是一项艰巨而艰巨的工作,目前还没有这样的数据集。通过仿真综合训练数据为缓解训练数据集的缺乏提供了一种可行的方法[46,47,48,49,50,51]。
对于关键点3),CNNs在3D点云上分割实例耗时的原因如下:实例分割定位不同的实例,即使它们属于同一类。由于场景中的实例是无序的,并且实例的数量是不可预测的,所以不可能用一个固定张量来表示实例标签。因此,实例分割的研究主要包括两种方法:一种是需要对象检测模块的基于提议的方法,另一种是不需要对象检测模块的不基于提议的方法。Mask R-CNN[52]属于第一种方法。Mask R-CNN将实例分割问题分解为单个对象的目标检测和像素级分割。基于建议的方法需要复杂的后处理步骤来处理许多建议区域,并且在强遮挡情况下性能较差。对于三维点云的实例分割,大多数研究者采用的是proposal-free方法。proposal-free方法通常先进行语义分割,然后通过聚类或度量学习来区分不同的实例,这是一个耗时的过程[35,36,53,48]。
本文旨在设计并提出一种由FPCC-Net组成的快速点云聚类实例分割方法FPCC,以及一种基于FPCC-Net输出的快速聚类算法。FPCC-Net是一种图卷积神经网络,它可以在实例级有效地分割三维点云,无需任何人工标注数据的训练。FPCC-Net涉及到将所有点映射到一个判别特征嵌入空间,它满足以下两个条件:1)同一实例的点具有相似的特征,2)不同实例的点在特征嵌入空间中广泛分离。同时,FPCC-Net为每个实例寻找中心点,并将中心点作为聚类过程的参考点。然后基于中心点进行快速聚类。
本工作的主要贡献如下:
- 提出了一种三维点云的高速实例分割方案。
- 该方案由一种新的三维点云网络FPCC-Net和一种新的中心点聚类算法组成。
- 为了提高FPCC-Net的性能,在损失函数中引入了手工注意机制,并在消融研究中验证了其有效性。
- 实验表明,与现有的方法相比,采用合成数据训练的FPCC-Net对真实数据具有良好的性能。
- 我们为未在XA Bin-Picking数据集[48]中标记的部件注释实例信息。完整的数据集可以在网址://github.com/ xyjbaal/FPCC上找到。
本文的其余部分组织如下。第二部分讨论了图像和三维点云实例分割的研究进展。第三部分介绍了FPCC-Net的结构和原理。第4节提供了实验分析。最后,第五部分对全文进行总结。
在本文中我们使用以下符号。实数集用 R \mathbb R R,点 i i i 的坐标表示为 p i = ( x i , y i , z i ) ∈ R 3 p_i=(x_i,y_i,z_i) \in \mathbb R^3 pi=(xi,yi,zi)∈R3,包含了 N N N 个点的点云为 P = { p 1 , p 2 , p 3 , . . . , p N } \mathbb P=\{p_1,p_2,p_3,...,p_N\} P={p1,p2,p3,...,pN},距离函数表示为 d ( a , b ) = ∥ a − b ∥ 2 d(a,b)=\lVert a-b\rVert _2 d(a,b)=∥a−b∥2。其中 d ( a , b ) d(a,b) d(a,b) 表示 a , b ∈ R n a,b \in \mathbb R^n a,b∈Rn 之间的欧氏距离,对于一个矩阵 A ∈ R n × m A \in \mathbb R^{n \times m} A∈Rn×m,A的第 ( i , j ) (i,j) (i,j) 个元素表示为 a ( i , j ) a_{(i,j)} a(i,j)。
相关工作
随着cnn的出现,从图像和三维点云中提取特征的方法已经从手工设计转变为自动学习[54,55,56]。实例分割是计算机视觉领域中最基本的任务之一,备受关注。在二维(2D)图像上的分割几乎已经得到了充分的发展[57,58],但三维点云分割仍然不发达。
二维实例分割
K. He等人在[52]中提出了用于对象实例分割的掩码R-CNN,它在几乎所有之前的许多实例分割任务的基准测试中都表现出了良好的性能。Mask R-CNN有效地检测图像中的目标,以较低的计算成本为每个实例生成高质量的分割掩码。b . d . Brabandereetal。[59]提出在特征空间中映射每个像素。它们的聚类算法在处理复杂遮挡时具有一定的优势。TensorMask[60]采用密集滑动窗口实现接近Mask RCNN的结果。PolarMask[61]是一种无需锚的方法,它在准确性和速度之间做出了很好的权衡。这些方法虽然基于大量高质量、人工标注的数据集[28,62]取得了很大的成就,但在实际应用中仍存在不足。在工业拣货场景中,常常难以获得带标签的数据集。
为了克服制作数据集的困难,提出了SD Mask R-CNN[51]作为Mask R-CNN的扩展。还提出了一种快速生成合成数据集的方法,并且只用生成的合成深度图像而不是RGB图像来训练网络。然而,SD Mask R-CNN并没有表现出足够的性能,特别是对于场景中多个对象实例的遮挡。
三维点云的实例分割
一些研究者采用了基于proposal的方法来检测目标并预测实例掩码。3DSIS[63]将二维图像与三维几何信息相结合,推断出三维空间中物体的边界盒及其实例蒙版。对二维图像的需求限制了该方法的应用,因为用二维图像训练网络的成本很高。GSPN[64]继续了Mask R-CNN的想法。他们首先预测候选区域,然后使用R-PointNet对候选区域进行精细化,得到实例分割的结果。而基于3D-SIS和GSPN的区域提议网络占用了大量的计算时间。B. Yang等人提供的3D- bonet[65]直接对三维点云中每个实例的边界盒进行回归,同时预测每个实例的点级掩码。3D-BoNet在完成的点云上表现良好,因为在这些数据集中,例如S3DIS [42], ScanNet[66],对象的边界盒几乎没有重叠。换句话说,在拣箱场景中,物体的重叠和不完整性使得3D-BoNet很难回归合理的包围盒。
SGPN[35]是proposal-free的并且是第一个直接执行在三维点云上的实例分割方法。SGPN在假设同一实例中的点具有相似特征的基础上进行点云实例分割。SGPN的子网络预测每个点的置信度得分。每个点的置信度得分表示聚类参考点的置信度。作者[35]强调了一个有趣的现象,即位于边界区域的点的聚类置信值比其他点要低。受此启发,FPCC只选取一个最可能是物体几何中心的点作为物体聚类的参考点。x.wang等人将语义与实例信息相关联以提高性能。Phm等人已经使用多值条件随机场同时学习语义和实例标签。J. Lahoud等[67]通过聚类三维点,根据点对关系将点的特征映射到特征嵌入空间进行实例分割。但是,拣箱子场景中的对象都是相同类型的,所以每个点的语义信息是相同的。在这种情况下,语义信息与实例信息相结合的方法就失去了其有效性。
虽然这些没有提议区域的无提议方法使用了不同的方法来提取点的特征,但它们都需要找到远大于实例数量的点作为聚类的参考点,并且每个参考点对应一个潜在的组。然后,每个组通过union (IoU)上的交集进行合并。合并的过程需要大量的时间。耗时的原因在章节4.3.2中有更详细的描述。
FPCC不需要合并过程。此外,这些方法都是基于具有真实场景的公共数据集,如S3DIS[42]和SceneNN[43]。为拣箱场景制作这样的数据集是一项既耗时又费力的任务[48]。FPCC在真实世界的数据上显示了可接受的性能,即使是经过合成数据的训练。
网络描述
针对三维点云的实例分割问题,提出了一种新的聚类方法。训练数据为无颜色的三维点云,可以利用目标对象的三维形状模型在仿真中自动生成。快速聚类的主要思想是找到目标的几何中心,然后将这些点作为聚类的参考点。与现有的基于聚类的方法相比,我们有两个优点。一是在不含颜色信息的情况下,合成点云可以得到可接受的结果。其次,从理论上讲,我们可以找到场景中实例数量相等的中心点作为聚类的参考点,因此不需要冗余的合并算法[53,35],这些合并算法消耗了大量的计算时间,并且在重叠严重的场景中容易引入错误。
骨干网络
推理规则
如前一节所述,FPCC-Net 的两个分支输出嵌入特征和每个点的中心分数。对所有的点根据中心分数进行非最大抑制,以找到每个实例的中心。得分在0.6分以上的分数被认为是候选点。选择得分最高的点作为第一个中心点,球面上以该点为中心的,半径
d
m
a
x
d_{max}
dmax 以内的所有其他点都被删除,
d
m
a
x
d_{max}
dmax 是从实例的几何中心到实例上最远点的距离。不断重复这个过程,直到候选点集为空。
A
l
g
o
r
i
t
h
m
1
Algorithm1
Algorithm1 给出了中心点选取的详细过程。
经过上述处理后,计算中心点与其他点之间的特征距离:
d
(
e
F
(
i
)
,
e
F
(
k
)
)
=
∥
e
F
(
i
)
−
e
F
(
k
)
∥
2
d(e^{(i)}_F , e^{(k)}_F)=\lVert e^{(i)}_F - e^{(k)}_F \rVert _2
d(eF(i),eF(k))=∥eF(i)−eF(k)∥2 其中,
e
F
(
k
)
e^{(k)}_F
eF(k) 表示
A
l
g
o
r
i
t
h
m
1
Algorithm1
Algorithm1 选取的第
k
k
k 个中心点的特征,
e
F
(
i
)
e^{(i)}_F
eF(i) 表示剩余点中第
i
i
i 个点的特征。根据特征距离,除中心点外的所有点都聚在最近的中心点上。注意,我们先找到点
p
i
p_i
pi 在特征嵌入空间中最近的中心点
c
k
c_k
ck,然后计算
p
i
p_i
pi 与
c
k
c_k
ck 在三维空间中的欧氏距离
d
(
p
i
,
c
k
)
d(p_i, c_k)
d(pi,ck)。如果
d
(
p
i
,
c
k
)
d(p_i, c_k)
d(pi,ck) 超过
d
m
a
x
d_{max}
dmax ,
p
i
p_i
pi 被认为是噪声,不给点
p
i
p_i
pi 分配实例标签。
需要强调的是,我们的聚类方法是新颖的。传统的聚类方法是将整个场景的点下采样成多个
b
a
t
c
h
batch
batch,对每个
b
a
t
c
h
batch
batch 的点进行聚类,然后对所有
b
a
t
c
h
batch
batch 的点进行集成。与此相反,我们在所有点都分批地馈入网络后执行聚类。在获得每个点的特征和中心得分后,直接根据特征到中心点的距离生成预测实例,不需要任何合并或集成步骤。这样既减少了计算时间,又减少了合并过程中累积的误差。
训练规则
网络的损失是两个分支的结合:
L
=
L
E
F
+
α
L
C
S
L=L_{EF}+ \alpha L_{CS}
L=LEF+αLCS,其中,
L
E
F
L_{EF}
LEF 和
L
C
S
L_{CS}
LCS 分别表示嵌入特征分支和中心分数分支的损失。符号
α
\alpha
α 是一个常数,它使
L
E
F
L_{EF}
LEF 和
L
C
S
L_{CS}
LCS 项的权重大致相等。我们引入三个矩阵:特征距离矩阵、有效距离矩阵 (VDM) 和注意力分数矩阵 (ASM) 来学习嵌入特征。
我们按照以下顺序解释训练阶段的设计:特征距离矩阵、有效距离矩阵、中心分数、注意力分数矩阵、嵌入特征损失和中心分数损失。注意力分数矩阵由每个点的中心分数得到。
特征距离矩阵
在特征嵌入空间中,属于同一实例的点应相近,而不同实例的点应相距较远。为了使同一实例中各点的特征相似,我们引入特征距离矩阵 D F ∈ R N × N D_F \in \mathbb R^{N \times N} DF∈RN×N。第 ( i , j ) (i,j) (i,j) 个元素由下式计算得出: d F ( i , j ) = ∥ e F ( i ) − e F ( k ) ∥ 2 d_{F(i,j)}=\lVert e^{(i)}_F - e^{(k)}_F \rVert _2 dF(i,j)=∥eF(i)−eF(k)∥2
有效距离矩阵
有效距离矩阵
D
V
∈
R
N
×
N
D_V \in \mathbb R^{N \times N}
DV∈RN×N 是一个二进制矩阵,其中每个元素为0或1。引入
D
V
D_V
DV 的目的是使网络着重区分在一定欧氏距离内的点对是否属于同一实例。在推理阶段,同时根据点对的特征距离和欧氏距离对点进行聚类。如果两点的欧氏距离超过最大距离
d
m
a
x
d_{max}
dmax 的两倍,则两点不能属于同一实例。因此,我们忽略这些距离太远的点对,使他们不会造成损失。
D
V
D_V
DV 中第
(
i
,
j
)
(i,j)
(i,j) 个元素定义为
d
V
(
i
,
j
)
=
{
1
,
if
∥
p
i
−
p
j
∥
2
<
2
d
m
a
x
0
,
otherwise
d_{V(i,j)} = \begin{cases} 1, & \text{if $\lVert p_i-p_j \rVert _2<2d_{max}$} \\ 0, & \text{otherwise} \\ \end{cases}
dV(i,j)={1,0,if ∥pi−pj∥2<2dmaxotherwise
d
V
(
i
,
j
)
d_{V(i,j)}
dV(i,j) 表示点
p
i
p_i
pi 与
p
j
p_j
pj 之间的欧氏距离是否在合理范围内。
中心分数
中心分数是这样设计的,它应该反映一个点和它所属的实例中心之间的距离。靠近物体中心的点比边界上的点得分高。基于这一概念,点
p
i
p_i
pi 的中心分数表示如下:
s
c
e
n
t
e
r
(
i
)
=
1
−
(
∥
p
i
−
c
i
∥
2
d
m
a
x
)
β
s_{center(i)}=1- \left( \frac{\lVert p_i - c_i \rVert _2}{d_{max}} \right )^\beta
scenter(i)=1−(dmax∥pi−ci∥2)β
其中
β
\beta
β 是一个大于0的常数,
c
i
c_i
ci 为点
p
i
p_i
pi 所在实例几何中心的坐标。
s
c
e
n
t
e
r
(
i
)
s_{center(i)}
scenter(i) 的取值范围是
[
0
,
1
]
[0,1]
[0,1]。如果
β
=
1
\beta = 1
β=1,会导致中心点的分布不平衡,如图3所示:只有非常少的点有较高的分数,而大多数点的分数数较低。这导致中心分数分支无法有效预测中心分数(所有分数都偏向于零)。从图3可以看出,
β
=
2
\beta=2
β=2 比
β
=
1
\beta=1
β=1 更均衡。因此,
β
\beta
β在我们的网络中被设置为2。中心得分如图4所示。从图4可以看出,边界区域的点大多为0分,靠近中心的点近似为1分。
注意力分数矩阵
我们引入注意得分矩阵
S
A
∈
R
N
×
N
S_A \in \mathbb R^{N \times N}
SA∈RN×N 来增加重要点对的权重。
S
A
S_A
SA 的第
(
i
,
j
)
(i,j)
(i,j) 个元素表示
i
i
i 和
j
j
j 点对的权值。因为在推理阶段中心点作为聚类的参考点,所以越靠近中心点位置的点对权重越大。在本文中,
S
A
(
i
,
j
)
S_A(i,j)
SA(i,j) 由下式计算:
S
A
(
i
,
j
)
=
m
i
n
(
1
,
s
c
e
n
t
e
r
(
i
)
+
s
c
e
n
t
e
r
(
j
)
)
S_{A(i,j)}=min(1, s_{center(i)}+s_{center(j)})
SA(i,j)=min(1,scenter(i)+scenter(j))
嵌入特征损失
点对
(
i
,
j
)
(i,j)
(i,j) 有以下两种可能的关系:1)
p
i
p_i
pi 和
p
j
p_j
pj 属于同一个实例;2)
p
i
p_i
pi 和
p
j
p_j
pj 属于不同的实例。考虑到这一点,嵌入式特征损失
L
E
F
L_{EF}
LEF 定义为:
L
E
F
=
∑
i
N
∑
j
N
ω
(
i
,
j
)
κ
(
i
,
j
)
L_{EF} = \sum^N_i \sum^N_j \omega_{(i,j)} \kappa_{(i,j)}
LEF=i∑Nj∑Nω(i,j)κ(i,j)
其中
ω
(
i
,
j
)
\omega (i,j)
ω(i,j) 是
ω
∈
R
N
×
N
\omega \in \mathbb R^{N \times N}
ω∈RN×N的一个元素,该元素是
D
V
D_V
DV 逐项乘以
D
A
D_A
DA 得到的权矩阵,即:
ω
(
i
,
j
)
=
d
V
(
i
,
j
)
s
A
(
i
,
j
)
\omega_{(i,j)}=d_{V(i,j)} s_{A(i,j)}
ω(i,j)=dV(i,j)sA(i,j)
κ
(
i
,
j
)
\kappa_{(i,j)}
κ(i,j) 为基于点对关系的损失,定义为:
κ
(
i
,
j
)
=
{
m
a
x
(
0
,
d
F
(
i
,
j
)
−
ϵ
1
)
,
if
p
i
and
p
j
in the same instance
m
a
x
(
0
,
ϵ
2
−
d
F
(
i
,
j
)
)
,
otherwise
\kappa_{(i,j)} = \begin{cases} max(0,d_{F(i,j)} - \epsilon_1), & \text{if $p_i$ and $p_j$ in the same instance} \\ max(0, \epsilon_2-d_{F(i,j)}), & \text{otherwise} \\ \end{cases}
κ(i,j)={max(0,dF(i,j)−ϵ1),max(0,ϵ2−dF(i,j)),if pi and pj in the same instanceotherwise
其中,
ϵ
1
\epsilon_1
ϵ1 和
ϵ
2
\epsilon_2
ϵ2 是常数且满足
0
<
ϵ
1
<
ϵ
2
0<\epsilon_1<\epsilon_2
0<ϵ1<ϵ2,因为不同实例中点对的特征距离应该大于属于同一个实例的特征距离。我们不需要使同一实例中点对的特征距离接近于零,但要小于阈值
ϵ
1
\epsilon_1
ϵ1,这有助于网络进行学习。
中心分数损失
由于
L
1
L1
L1 损失函数具有鲁棒性,我们将平滑
L
1
L1
L1 损失作为中心分数分支的损失函数。中心分数损失
L
C
S
L_{CS}
LCS 定义为
L
C
S
=
1
N
∑
i
N
s
m
o
o
t
h
L
1
(
s
c
e
n
t
e
r
(
i
)
−
s
^
c
e
n
t
e
r
(
i
)
)
L_{CS}=\frac{1}{N} \sum^N_i smooth_{L1}(s_{center(i)} - \hat{s}_{center(i)} )
LCS=N1i∑NsmoothL1(scenter(i)−s^center(i))
其中
s
^
c
e
n
t
e
r
(
i
)
\hat{s}_{center(i)}
s^center(i) 表示预测的中心分数,
s
m
o
o
t
h
L
1
(
⋅
)
smooth_{L1}(\cdot )
smoothL1(⋅) 定义如下:
s
m
o
o
t
h
L
1
(
x
)
=
{
0.5
∣
x
∣
2
,
if
∣
x
∣
<
1
∣
x
∣
−
0.5
,
otherwise
smooth_{L1}(x) = \begin{cases} 0.5 \lvert x \rvert ^2, & \text{if $\lvert x \rvert <1$} \\ \lvert x \rvert-0.5, & \text{otherwise} \\ \end{cases}
smoothL1(x)={0.5∣x∣2,∣x∣−0.5,if ∣x∣<1otherwise
实验
FPCC-Net 在 TensorFlow 框架中实现,并使用 Adam 优化器进行训练,初始学习率为0.0001,batch size 为2,momentum 为0.9。所有的训练和验证都是在Nvidia GTX1080 GPU、 Intel Core i7 8700K CPU 和 32GB RAM上进行的。在训练阶段,设置 e 1 = 0.5 , e 2 = 1 , e = 3 , e = 2 e1= 0.5,e2= 1,e=3,e= 2 e1=0.5,e2=1,e=3,e=2。在训练过程的每个 batch 中,从每个场景中随机抽取输入点 ( N = 4096 ) (N=4096) (N=4096),每个点只能抽取一次。每个点被转换为一个6D向量 ( x , y , z , n x , n y , n z ) (x,y,z,n_x,n_y,n_z) (x,y,z,nx,ny,nz) 用于输入 FPCC-Net。重复采样,直到场景剩余点小于 N N N。网络共训练30个epoch。每个数据集大约需要10个小时训练FPCC-Net。