摘要
这篇论文提出了一种将计算机视觉中常用的滑动窗口(sliding window)方法应用于三维数据的有效方案。
具体来说,该问题的稀疏性通过投票方案(voting scheme)得以利用,从而能够在任何方向上对所有假定的对象位置进行搜索。
这个投票方案在数学上等价于一个稀疏特征网格上的卷积,因此能够在全3D中处理任何点云(point cloud),而不管构造它所需的有利点(vantage points)的数量。
该方法能够在不到0.5秒的时间内处理一个包含超过100K个点的点云。
Ⅰ.介绍
滑动窗口(sliding window)物体检测方法可以说是计算机视觉中最常用的物体检测范例。然而,在基于激光的物体识别中,它一直被忽视。事实上,同样的范例似乎同样适用于3D点云(point cloud),就像适用于2D图像一样。概念上的差异并不明显,你只需要首先将空间离散成一个三维体素网格,然后在所有三维空间中滑动窗口,而不是像图像那样在二维空间中滑动窗口。一个可能导致忽视的因素是感官上的额外维度带来的计算负担,从而认为在3D中考虑滑动窗口不切实际。
举例说明,假设我们要在一个底面积为100m*100m,高为10m的3D点云空间中进行物体检测。将空间离散成边长20cm的单元格,则总共需要100 * 100 * 10 /(0.2 * 0.2 * 0.2)=12.5 * 1 0 6 10^6 106 个网格单元。一种简单的方法是将检测窗口的一角放在这12.5 * 1 0 6 10^6 106个单元格中的每一个上,然后测试它是否包含了感兴趣的对象。也就是要处理12.5 * 1 0 6 10^6 106个窗口(暂时忽略边界条件)。即使假设一个窗口的处理只需要1us(相对乐观了),那么处理一帧也需要12.5s。
现在利用本论文的方法,对于上述情况下的处理只需0.5s。
实现这种效率的关键是注意到与2D图像相比,3D点云的结构有一个根本的区别:由于大部分空间是空闲的,所以3D点云是稀疏的。
Ⅱ.相关工作
Techiman等人(Tracking-Based Semi-Supervised Learning 、Towards 3D object recognition via classification of arbitrary object tracks):首先分割输入激光扫描,然后跟踪在一系列扫描中获得的片段。采用boosting classifier将每一个被跟踪的段序列分为汽车、行人和自行车三类。
Wang等人(What Could Move? Finding Cars, Pedestrians and Bicyclists in 3D Laser Data):首先用激光扫描过度分割成物体部分,然后用SVM分类器将段(segments)分成感兴趣的前景和背景,接着用聚类处理前景获取物体实例。第二个分类阶段将产生的集群划分为同一组类:car、pedestrian和bicyclist。
Behley等人(Laser-based segment classification using a mixture of bag-of-words):同样采用了基于分割的方法。首先,从输入点云获得段的层次结构。然后,使用一个混合模型对这些片段进行分类,该模型以词袋(bag-of-words)描述符为训练对象。层次结构中的冗余段稍后通过贪婪策略删除。
Lai等人(Sparse distance learning for object recognition combining
RGB and depth information):使用Kinect传感器来学习一个稀疏距离度量,用于使用用Group-Lasso 正则化(Group Least Absolute Shrinkage and Selection Operator)识别预先分割的室内目标。
大量单眼目标检测中的三维姿态估计的研究也利用三维滑动窗口识别的三维限定框(bounding-box)来表征目标。(3D Object Detection and Viewpoint Estimation with a Deformable 3D Cuboid Model、Thinking Inside the Box: Using Appearance Models and Context Based on Room Geometry)然而,是通过将图像的平行平面(fronto-parallel)投影到物体边界长方体的每个可见面上来实现检测,然后从投影图像中提取该面的二维特征。
类似地,另一种常见的三维物体检测方法是选择或利用一个有利点(vantage point),将激光扫描仪的三维数据投影到一个成像平面上,形成一个深度图像,然后利用2D滑动窗口。
(Pedestrian Detection Combining RGB and Dense LIDAR
Data、High-accuracy 3D sensing for mobile manipulation: Improving object
detection and door opening)还考虑了常规图片中的外观信息。
Lai等人(Detection-based object labeling in 3D scenes):在3D点云上进行物体检测,这个3D点云由RGB-D数据的多个视角生成(通过在RGB和深度数据上从每一个视角运用2D滑动窗口),然后,将二维检测分数投影到集成的三维点云中,利用体素表示(voxel representation)进行融合,得到三维检测结果。
相比之下,本文提出的方法不需要任何投影,仅对三维数据进行处理。
与本文最密切相关的是由Song和Xiao提出的用于3D对象检测的滑动窗口方法(Sliding Shapes for 3D Object Detection in Depth Images),通过使用3D积分图像来减少计算代价。但是,需要显式地测试每个窗口,以确定是否有比某个阈值更多的已占用单元。
Lehmann等人(Fast PRISM: Branch and Bound Hough Transform for Object Class Detection)也发现了滑动窗口检测和投票策略之间的对偶性。
Ⅲ.综述
左上角为点云,首先将点云离散化为3D栅格(右上角)。对于每个被占据的单元,位于单元内的点及其反射率值被映射到一个固定维的特征向量(中间靠右给出了这样一个被占用的单元格的例子,并在右上角和中间靠左突出显示)。未被占据的单元根据定义被映射到零特征向量。因此,点云被转换为一个特征网格(中间靠左,每个带颜色的球代表从一个被占据的单元提取出的特征向量)。然后在3个维度穿过特征网格滑动一个3D检测窗口,利用分类器评估每个窗口位置来检测物体。每旋转一个角度,这个过程就重复一次。
检测的输入是通过一系列点的位置和反射率值表示的3D激光扫描。首先,点云根据以下说明转换成特征网格。3D空间根据固定的网格大小离散化,且每个被占据的单元转换成固定维度的特征向量。没有被任何点占据的单元映射到零特征向量。这个定义对于挖掘问题的稀疏性很重要。在每个窗口位置,包含在滑动窗口内的特征向量被堆积成单个长向量并传递给分类器(例如,SVM)。然后,分类器通过返回检测分数来确定检测窗口的当前位置是否包含了感兴趣的对象。
与基于图像的探测器相比,这里的尺度不是问题,因为绝对尺度(以米为单位)是在3D中已知的。然而,旋转是一个问题。假设感兴趣的物体是普遍垂直的,也就是说,任何旋转都是基于垂直轴的,为了在任意的方向检测物体,我们将360度离散成N个orientation bin并在每个旋转点云上对每个orientation bin运行相同的检测过程N遍。
Ⅳ.Sliding window,Sparse convolution and Voting
线性分类器在滑动窗口检测的情况下等价于卷积,所以标准的方法比如Fast Fourier Transform (FFT,快速傅里叶变换)可用于高效地计算detection scores,但此方法并不适用于3D中的情况。空间域的稀疏性并不意味着频率域的稀疏性,因此,稀疏特征网格的傅里叶变换将是密集的。
在这部分将说明投票策略与稀疏卷积在数学上是等价的。
注意,将要描述的方法只适用于线性分类器。
特征网格自然是4维的——每个单元有一个特征向量,而单元跨越一个3维的网格。
用
f
i
j
k
l
f_{ijk}^l
fijkl来表示位置
(
i
,
j
,
k
)
(i,j,k)
(i,j,k)处的单元的
l
’
t
h
l’th
l’th(第
l
l
l)个特征。
将位置
(
i
,
j
,
k
)
(i,j,k)
(i,j,k)处的所有特征集体表示为向量
f
i
j
k
f_{ijk}
fijk
为了让表达简单,
ϕ
=
(
i
,
j
,
k
)
\phi = (i,j,k)
ϕ=(i,j,k)。
网格有维度
(
N
x
G
,
N
y
G
,
N
z
G
)
(N_x^G,N_y^G,N_z^G)
(NxG,NyG,NzG)
定义一个集合
Φ
=
[
0
,
N
x
G
)
×
[
0
,
N
y
G
)
×
[
0
,
N
z
G
)
\Phi=[0,N_x^G) ×[0,N_y^G)×[0,N_z^G)
Φ=[0,NxG)×[0,NyG)×[0,NzG) (此处的符号[m,n)理解为定义在整数集上的标准半开区间,即
[
m
.
n
)
=
q
∈
Z
:
m
≤
q
<
n
[m.n)={q\in \Z:m\leq q < n}
[m.n)=q∈Z:m≤q<n)
所以
Φ
\Phi
Φ是特征网格上的一组索引,而任何
ϕ
∈
Φ
\phi \in \Phi
ϕ∈Φ指出了网格中的一个单元。
f
i
j
k
f_{ijk}
fijk则可写成
f
ϕ
f_{\phi}
fϕ,相应地
f
ϕ
=
0
f_{\phi}=0
fϕ=0则表示在
ϕ
\phi
ϕ处的单元没有被占据。
我们用
Φ
∗
⊂
Φ
\Phi_* \subset \Phi
Φ∗⊂Φ来表示被占据的单元集合。
则显然
ϕ
⊂
Φ
╲
Φ
∗
→
f
ϕ
=
0
\phi \subset \Phi \diagdown \Phi_* → f_{\phi} = 0
ϕ⊂Φ╲Φ∗→fϕ=0
类似地,detection window 有维度
(
N
x
W
,
N
y
W
,
N
z
W
)
(N_x^W,N_y^W,N_z^W)
(NxW,NyW,NzW)
定义一个集合
Θ
=
[
0
,
N
x
W
)
×
[
0
,
N
y
W
)
×
[
0
,
N
z
W
)
\Theta=[0,N_x^W) ×[0,N_y^W)×[0,N_z^W)
Θ=[0,NxW)×[0,NyW)×[0,NzW):detection window的局部索引集
我们将与window( θ ∈ Θ \theta \in \Theta θ∈Θ)中的cell位置相关的线性分类器的权重定义为 w θ w_{\theta} wθ,这里与特征网格相反,权重是密集的。
图(a)中detection window刚好包含了3个被占据的单元(已经用不同的颜色表示),detection window的原点(anchor锚点)由角落的蓝色大立方体高亮显示,与特征网格中的cell位置
ψ
=
ϕ
=
(
i
,
j
,
k
)
\psi = \phi = (i,j,k)
ψ=ϕ=(i,j,k)重合。所有的3个被占据单元投票给window位置
ψ
\psi
ψ,进而贡献给分数
s
ψ
s_{\psi}
sψ.
图(b)中显示了单个被占据的单元的投票。被占据单元的位置由红色球体表示,接收来自它的投票的检测窗口的原点由蓝色立方体表示。window大小为
8
∗
4
∗
3
8*4*3
8∗4∗3
为了避免边界条件的担忧,规定当索引越界时,定义特征向量和权重为0.
这将特征和权重的索引集扩展到整个
Z
3
\Z^3
Z3
定义第三个集合
Ψ
\Psi
Ψ:包含所有可能接收到非零检测分数的detection window位置的索引
如果我们定义detection window的锚点在它的局部坐标
θ
=
(
0
,
0
,
0
)
\theta=(0,0,0)
θ=(0,0,0),那么所有可能的窗口位置集可以由窗口锚点的特征网格上的所有可能位置集捕获。
则所有可能接收到非零检测分数的窗口的锚点的索引集为
Ψ
=
[
1
−
N
x
W
,
N
x
G
)
×
[
1
−
N
y
W
,
N
y
G
)
×
[
1
−
N
z
W
,
N
z
G
)
\Psi=[1-N_x^W,N_x^G) ×[1-N_y^W,N_y^G) ×[1-N_z^W,N_z^G)
Ψ=[1−NxW,NxG)×[1−NyW,NyG)×[1−NzW,NzG)
接下来的推导中,将用 ϕ \phi ϕ索引出特征网格中的特征向量,用 θ \theta θ索引出detection window中的权重向量,用 ψ \psi ψ索引出一个window位置(网格中的anchor锚点位置)。
定理1
原点在网格位置
ψ
\psi
ψ处的detection window的检测分数
s
ψ
s_{\psi}
sψ可以写成落于detection window中的被占据单元的投票总和。
证明:首先根据线性分类器写出
s
ψ
s_{\psi}
sψ的显性形式:
s
ψ
=
∑
θ
∈
Θ
f
ψ
+
θ
⋅
w
θ
s_\psi=\sum_{\theta \in \Theta} f_{\psi+\theta} · w_{\theta}
sψ=θ∈Θ∑fψ+θ⋅wθ
因为当
θ
∉
Θ
\theta \notin \Theta
θ∈/Θ时,
w
θ
=
0
w_{\theta}=0
wθ=0,所以总和可以扩展到整个
Z
3
\Z^3
Z3
注意
ϕ
=
ψ
+
θ
\phi=\psi+\theta
ϕ=ψ+θ
定义位置
ψ
\psi
ψ处的window中位置
ϕ
\phi
ϕ处的被占据单元的投票为
v
ϕ
,
ψ
=
f
ϕ
⋅
w
ϕ
−
ψ
v_{\phi,\psi} = f_{\phi} · w_{\phi-\psi}
vϕ,ψ=fϕ⋅wϕ−ψ
则
推论1
三维分数数组
s
s
s可以写成每个被占用单元的投票数组的和。
证明:首先,s是将
Z
3
\Z^3
Z3中的元素映射到实数(不同窗口位置的检测分数)
由
v
ϕ
,
ψ
=
f
ϕ
⋅
w
ϕ
−
ψ
v_{\phi,\psi} = f_{\phi} · w_{\phi-\psi}
vϕ,ψ=fϕ⋅wϕ−ψ有
定义函数
v
ϕ
:
Z
3
⇒
R
v_{\phi}:\Z^3 \Rightarrow \R
vϕ:Z3⇒R,即
v
ϕ
(
ψ
)
=
v
ϕ
,
ψ
,
∀
ψ
∈
Z
3
v_{\phi}(\psi)=v_{\phi,\psi},\forall \psi \in \Z^3
vϕ(ψ)=vϕ,ψ,∀ψ∈Z3
则显然有
s
=
∑
ϕ
∈
Φ
∗
v
ϕ
s = \sum_{\phi \in \Phi*} v_{\phi}
s=ϕ∈Φ∗∑vϕ
算法1
Ⅴ.Feature Extraction
特征表示部分,计算了3个形状因子(shape factor)在被占据单元内的点的散射,以及单元中包含的点的反射率值的平均值和方差,以及二进制占用特征(对于已占用的单元为1,如果未占用则为0)。
即总共有6个特征。
为滑动窗口检测器选择最好的特征不是这篇论文的重点。
Ⅵ.Non-Maximum Suppression
为了移除重复的检测,使用了类似于CV中常用的非极大抑制,被选择了贪婪策略。
非极大抑制作用过程:
首先将所有窗口位置(所有方向角度)中检测分数大于阈值
σ
\sigma
σ的根据分数按降序排列。
然后一个个与当前被接受的窗口位置列表(初始化为空)相比较,如果一个窗口位置与之前接受的任何对象窗口重叠的幅度不超过给定的阈值,则接受该窗口位置并将其添加到接受的窗口列表中。
两个对象窗口之间的重叠被计算为交集的体积与并集的体积之比。
总结
CV中基于滑动窗口的目标检测方法是普遍存在的,但在基于三维激光的目标检测中却被忽视。这可能是由于感官上它的计算效率低。在本文中,证明了充分利用问题的稀疏性,在三维空间中进行穷举窗口搜索是非常有效的。同时证明了稀疏卷积和投票策略之间的数学等价性,并设计了一个有效的算法来精确计算所有窗口位置的检测分数。