文章目录
摘要
在本文中,我们考虑将点云编码为适合下游检测的格式的问题。最近的文献提出了两种编码器;固定编码器往往很快,但牺牲了准确性,而从数据中学习的编码器更准确,但更慢。在这项工作中,我们提出了PointPillars,这是一种新颖的编码器,它利用PointNets来学习以垂直列(柱子)组织的点云表示。虽然编码的特征可以与任何标准的2D卷积检测体系结构一起使用,但我们进一步提出了一个精益下游网络。大量的实验表明,point柱子在速度和准确性方面都大大优于以前的编码器。尽管只使用激光雷达,但我们的完整检测管道在3D和鸟瞰KITTI基准测试中,即使是在融合方法中,也明显优于目前的技术水平。
介绍
传统上,激光雷达机器人管道将点云解释为通过包括背景减法的自底向上管道进行的目标检测,然后进行时空聚类和分类。
图1:我们提出的PointPillars,PP方法在KITTI[5]测试集中的BEV性能与速度的关系。仅使用激光雷达的方法绘制为蓝色圆圈;激光雷达和视觉方法绘制为红色方块。还绘制了KITTI排行榜的顶级方法:M: MV3D, A: A VOD, C: ContFuse, V: VoxelNet , F: Frustum PointNet, S: SECOND,P+:PIXOR++。PointPillars在速度和精度方面都大大优于所有其他仅使用激光雷达的方法。该方法优于除行人外的其他融合方法。在3D指标上也实现了类似的性能(表2)。
虽然模态之间有许多相似之处,但有两个关键的区别:1)点云是稀疏表示,而图像是密集表示;2)点云是3D表示,而图像是2D表示。因此,点云的目标检测适用于标准图像卷积管道并不简单。
一些早期的工作专注于使用3D卷积[3]或点云投影到图像[14]。最近的方法倾向于从鸟瞰角度观察激光雷达点云[2,11,31,30]。这种架空视角提供了几个优点,如缺乏尺度模糊和几乎缺乏遮挡。
然而,鸟瞰图往往是极其稀疏的,这使得卷积神经网络的直接应用不切实际和低效。一个常见的解决方法是将地平面划分为一个规则的网格,例如10 x 10 cm,然后对每个网格单元中的点执行手工制作的特征编码方法[2,11,26,30]。然而,这样的方法可能是次优的,因为硬编码的特征提取方法可能不能在没有重大工程努力的情况下推广到新的配置。为了解决这些问题,基于Qi等人[22]开发的PointNet设计,VoxelNet[31]是第一个真正在该领域进行端到端学习的方法之一。VoxelNet将空间划分为体素,对每个体素应用PointNet,然后使用3D卷积中间层来巩固垂直轴,之后应用2D卷积检测架构。虽然体素网的性能很强,但4.4 Hz的推断时间太慢,无法实时部署。最近SECOND[28]提高了VoxelNet的推理速度,但三维卷积仍然是一个瓶颈。(Pillar:在点云处理中,pillar通常指的是一种基于点云的三维物体检测方法中的一个概念。pillar可以理解为点云中的柱状物体,通常是由一组相邻的vexel(体素)组成的。pillar的主要作用是将点云数据转换为一种更易于处理的形式,以便进行物体检测和识别等任务。pillar通常是通过将点云数据进行体素化(voxelization)得到的,即将点云数据划分为一组相邻的体素,每个体素可以看作是一个pillar。在一些基于点云的三维物体检测算法中,pillar是一个重要的概念,例如PointPillars算法就是基于pillar进行物体检测的。)
相关工作
我们首先回顾了最近在将卷积神经网络应用于一般目标检测方面的工作,然后重点介绍了特定于激光雷达点云目标检测的方法。
使用cnn进行对象检测
从Girshick等人[6]的开创性工作开始,人们确定卷积神经网络(CNN)架构是图像检测的最先进技术。随后的一系列论文[24,7]主张用两阶段方法来解决这个问题,在第一阶段,区域建议网络(RPN)提出候选建议。这些提案的裁剪和调整版本然后由第二阶段网络进行分类。两阶段方法主导了重要的视觉基准数据集,如COCO[17],而不是Liu等人最初提出的单阶段架构[18]。在单阶段体系结构中,一组密集的锚框在一个阶段中被回归并分类为一组预测,从而提供了一个快速而简单的体系结构。最近Lin等人[16]令人信服地指出,他们提出的focal loss函数单级方法在精度和运行时间方面都优于两级方法。在这项工作中,我们使用单级方法。
激光雷达点云中的目标检测
点云中的目标检测本质上是一个三维问题。因此,部署一个三维卷积网络进行检测是很自然的,这是几个早期工作的范例[3,13]。虽然提供了简单的体系结构,但这些方法速度很慢;例如,Engelcke等[3]对单点云的推断需要0.5s。最近的方法通过将3D点云投影到地平面[11,2]或图像平面[14]来提高运行时间。在最常见的范例中,点云以体素组织,每个垂直列中的体素集被编码为固定长度的手工特征编码,以形成可由标准图像检测体系结构处理的伪图像。这里一些著名的作品包括MV3D [2], AVOD [11], PIXOR[30]和Complex YOLO[26],它们都使用相同的固定编码范式作为其架构的第一步。前两种方法还融合了激光雷达特征和图像特征,以创建一个多模态检测器。MV3D和AVOD中使用的融合步骤迫使它们使用两级检测管道,而PIXOR和Complex YOLO使用单级管道。
图2:网络的概述。网络主要由支柱功能网络、骨干网和SSD检测头组成。详见第2节。将原始点云转换为叠加柱张量和柱索引张量。编码器使用堆叠的柱子来学习一组特征,这些特征可以分散回卷积神经网络的2D伪图像。检测头使用来自主干的特征来预测物体的3D包围框。注意:这里我们展示了汽车网络的主干尺寸。
Qi等人在他们的开创性工作[22,23]中提出了一个简单的体系结构PointNet,用于从无序点集学习,它提供了一条完整的端到端学习的路径。VoxelNet[31]是在激光雷达点云中部署PointNets进行目标检测的第一个方法之一。在他们的方法中,PointNets应用于体素,然后由一组3D卷积层处理,然后是2D主干和检测头。这使得端到端学习成为可能,但与早期依赖3D卷积的工作一样,VoxelNet速度较慢,单点云需要225ms推断时间(4.4 Hz)。另一种最近的方法,Frustum PointNet[21],使用点网来分割和分类锥体中的点云,该锥体是通过将检测投影到图像上到3D生成的。与其他融合方法相比,Frustum PointNet实现了较高的基准性能,但其多阶段设计使得端到端学习不切实际。最近,SECOND[28]对VoxelNet进行了一系列改进,从而提高了性能,并大大提高了20 Hz的速度。然而,他们无法去除昂贵的3D卷积层。
贡献
- 我们提出了一种新的点云编码器和网络PointPillars,它在点云上运行,以实现3D对象检测网络的端到端训练。
- 我们展示了如何在pillars上的所有计算都可以作为密集的2D卷积,从而能够在62 Hz下进行推理;比其他方法快2-4倍。
- 我们在KITTI数据集上进行了实验,并在BEV和3D基准上演示了汽车、行人和自行车的最新结果。
- 我们进行了几项消融研究,以检查能够实现强大检测性能的关键因素。
PointPillars 网络
PointPillars接受点云作为输入,并为汽车、行人和骑自行车的人估计面向3D boxes。它由三个主要阶段组成(图2):
(1)将点云转换为稀疏伪图像的特征编码器网络;
(2)二维卷积主干,将伪图像处理为高级表示;
(3)用于检测和回归3D盒的检测头。
点云到伪图像
为了应用二维卷积架构,我们首先将点云转换为伪图像。
我们用
l
l
l表示坐标为
x
,
y
,
z
x, y, z
x,y,z和反射率为
r
r
r的点云中的一个点。作为第一步,点云被离散成
x
−
y
x-y
x−y平面上的一个均匀间隔的网格,创建了一组柱子
P
P
P和
∣
P
∣
=
B
|P| = B
∣P∣=B。注意,不需要超参数来控制
z
z
z维度上的分块。然后用
x
c
,
y
c
,
z
c
,
x
p
x_c, y_c, z_c, x_p
xc,yc,zc,xp和
y
p
y_p
yp增强每个柱中的点,其中
c
c
c下标表示到柱中所有点的算术平均值的距离,
p
p
p下标表示从柱
x
,
y
x, y
x,y中心的偏移量。增强激光雷达点
l
l
l现在是
D
=
9
D = 9
D=9维(
x
,
y
,
z
,
r
,
x
c
,
y
c
,
z
c
,
x
p
,
y
p
x, y, z,r,x_c, y_c, z_c, x_p,y_p
x,y,z,r,xc,yc,zc,xp,yp)。
由于点云的稀疏性,这组柱子大部分是空的,而非空的柱子中一般只有很少的点。例如,在
0.1
6
2
m
2
0.16^{2}m^{2}
0.162m2的容器中,来自HDL-64E Velodyne激光雷达的点云具有6k-9k非空柱,该范围通常用于KITTI,稀疏度为97%。这种稀疏性是通过对每个样本(
P
P
P)的非空柱数和每个柱的点数(
N
N
N)施加限制来利用的,以创建一个大小(
D
,
P
,
N
D, P, N
D,P,N)的密集张量。如果一个样本或柱包含太多的数据,无法适合这个张量,则数据将被随机采样。相反,如果样本或柱的数据太少无法填充张量,则应用零填充。
接下来,我们使用PointNet的简化版本,其中对于每个点,应用一个线性层,然后是BatchNorm[10]和ReLU[19],以生成
(
C
,
P
,
N
)
(C, P, N)
(C,P,N)大小的张量。接下来是对通道进行max操作,以创建大小为
(
C
,
P
)
(C, P)
(C,P)的输出张量。请注意,线性层可以被表述为一个1x1卷积的张量,导致非常有效的计算。
编码后,特征被分散到原始柱子位置,以创建大小
(
C
,
H
,
W
)
(C, H, W)
(C,H,W)的伪图像,其中
H
H
H和
W
W
W表示画布的高度和宽度。
图3:KITTI结果的定性分析。我们展示了激光雷达点云(顶部)的鸟瞰图,以及投影到图像中的3D包围框,以便更清晰地可视化。注意,我们的方法只使用激光雷达。我们展示了汽车(橙色)、自行车(红色)和行人(蓝色)的预测框。Ground truth方框用灰色表示。盒子的方向是由连接底部中心和盒子前面的一条线来显示的。
图4:KITTI上的故障案例。与图3相同的可视化设置,但侧重于几种常见的故障模式。
主干网络
我们使用与[31]类似的主干,其结构如图2所示。骨干网有两个子网络:一个自上而下的网络以越来越小的空间分辨率生成特征,另一个网络执行自上而下特征的上采样和连接。自顶向下的主干可以由一系列块
(
S
,
L
,
F
)
(S, L, F)
(S,L,F)来表征。每个块以步幅
S
S
S(相对于原始输入伪图像测量)运行。一个块有
L
3
×
3
L 3×3
L3×3 2D convi -layers和
F
F
F个输出通道,每个通道后面跟着BatchNorm和一个ReLU。层内的第一个卷积步幅为
S
S
i
n
\frac{S}{S_{in}}
SinS以保证块在接收到步幅
S
i
n
S_{in}
Sin的输入blob后,对步幅
S
S
S进行操作。块中所有后续的卷积都有步幅1。
每个自顶向下的块的最终特征通过上采样和拼接进行组合,如下所示。首先,对特征进行上采样,Up
(
S
i
n
,
S
o
u
t
,
F
)
(S_{in}, S_{out}, F)
(Sin,Sout,F)从初始步幅
S
i
n
S_{in}
Sin到最终步幅
S
o
u
t
S_{out}
Sout(两者都再次测量wrt原始伪图像)使用转置二维卷积与
F
F
F最终特征。接下来,BatchNorm和ReLU应用于上采样的特征。最终的输出特征是来自不同步长的所有特征的连接。
检测头
在本文中,我们使用单次探测器(SSD)[18]设置来执行3D目标检测。与SSD类似,我们使用2D Intersection over Union (IoU)[4]将先验boxes与地面真值匹配。边界框高度和标高不用于匹配;与给定2D匹配不同的是,高度和仰角成为额外的回归目标。
实现细节
在本节中,我们将描述我们的网络参数和我们优化的损失函数。
网络
而不是预先训练我们的网络,所有的权重都是使用[8]中的均匀分布随机初始化的。
编码器网络具有
C
=
64
C = 64
C=64输出特征。汽车和行人/骑行者的骨架除了第一个block的步幅外是相同的(汽车为
S
=
2
S = 2
S=2,行人/骑行者为
S
=
1
S = 1
S=1)。两个网络都由三个区块组成,Block1(
S
,
4
,
C
S, 4, C
S,4,C), Block2(
2
S
,
6
,
2
C
2S, 6, 2C
2S,6,2C)和Block3(
4
S
,
6
,
4
C
4S, 6, 4C
4S,6,4C)。每个块通过以下上采样步骤进行上采样:Up1(
S
,
S
,
2
C
S, S, 2C
S,S,2C), Up2(
2
S
,
S
,
2
C
2S, S, 2C
2S,S,2C)和Up3($4S, S, 2C4)。然后将Up1、Up2、Up3的特征拼接在一起,得到检测头的6C特征。
损失
我们使用SECOND[28]中引入的相同损失函数。地面真值框和锚点由
(
x
,
y
,
z
,
w
,
l
,
h
,
θ
)
(x, y, z, w, l, h,θ)
(x,y,z,w,l,h,θ)定义。地面真实值与锚点之间的定位回归残差定义为:
Δ
x
=
x
g
t
−
x
a
d
a
,
Δ
y
=
y
g
t
−
y
a
d
a
,
Δ
z
=
z
g
t
−
z
a
h
a
\begin{aligned} \Delta x &= \frac{x^{gt} - x^a} {d^a}, \ \Delta y &= \frac{y^{gt} - y^a}{d^a}, \ \Delta z &= \frac{z^{gt} - z^a }{h^a} \end{aligned}
Δx=daxgt−xa, Δy=daygt−ya, Δz=hazgt−za
Δ
w
=
log
w
g
t
w
a
,
Δ
l
=
log
l
g
t
l
a
,
Δ
h
=
log
h
g
t
h
a
,
\begin{aligned} \Delta w &= \log \frac{w^{gt}}{w^a}, \ \Delta l &= \log \frac{l^{gt}}{l^a}, \ \Delta h &= \log \frac{h^{gt}}{h^a}, \end{aligned}
Δw=logwawgt, Δl=loglalgt, Δh=loghahgt,
Δ
θ
=
sin
(
θ
g
t
−
θ
a
)
\begin{aligned} \Delta \theta &= \sin (\theta^{gt} - \theta^{a}) \end{aligned}
Δθ=sin(θgt−θa)
其中
x
g
t
x^{gt}
xgt和
x
a
x^a
xa分别为地面真理和锚框,
d
a
=
(
w
a
)
2
+
(
l
a
)
2
d^a = \sqrt{(w^a)^2 + (l^a)^2}
da=(wa)2+(la)2。总定位损失为:
L
l
o
c
=
∑
b
∈
(
x
,
y
,
z
,
w
,
l
,
h
,
θ
)
S
m
o
o
t
h
L
1
(
Δ
b
)
\begin{aligned} L{loc} = \sum_{b \in (x,y,z,w,l,h,\theta)} SmoothL1(\Delta b) \end{aligned}
Lloc=b∈(x,y,z,w,l,h,θ)∑SmoothL1(Δb)
由于角度定位损失不能区分翻转的box,我们在离散方向[28],
L
d
i
r
L_{dir}
Ldir上使用了软最大分类损失,使网络能够学习到标题。
对于目标分类损失,我们使用focal loss[16]:
L
c
l
s
=
−
α
a
(
1
−
p
a
)
γ
log
p
a
\begin{aligned} L_{cls} = -\alpha_a (1 - p^a)^\gamma \log p^a \end{aligned}
Lcls=−αa(1−pa)γlogpa
其中
p
a
p^a
pa是锚的类概率。我们使用原始论文设置
α
=
0.25
α = 0.25
α=0.25和
γ
=
2
γ = 2
γ=2。因此,全部损失为:
L
=
1
N
p
o
s
(
β
l
o
c
L
l
o
c
+
β
c
l
s
L
c
l
s
+
β
d
i
r
L
d
i
r
)
\begin{aligned} L = \frac{1}{N_{pos}} (\beta_{loc} L_{loc} + \beta_{cls}L_{cls} + \beta_{dir}L_{dir}) \end{aligned}
L=Npos1(βlocLloc+βclsLcls+βdirLdir)
其中
N
p
o
s
N_{pos}
Npos为正确的锚点的个数,
β
l
o
c
=
2
\beta_{loc} = 2
βloc=2,
β
c
l
s
=
1
\beta_{cls} = 1
βcls=1,
β
d
i
r
=
0.2
\beta_{dir} = 0.2
βdir=0.2。
为了优化损失函数,我们使用初始学习率为
2
∗
1
0
−
4
2 * 10^{−4}
2∗10−4的Adam优化器,每15个周期衰减0.8倍的学习率,并训练160个周期。我们使用批大小为2的验证集和4的测试提交。
实验设置
在本节中,我们将介绍我们的实验设置,包括数据集、实验设置和数据增强。
数据集
KITTI
##设置
除非在实验研究中有明确的变化,否则我们使用xy分辨率:0.16 m,最大柱数§: 12000,每个柱的最大点数(N): 100。
我们使用与[31]相同的锚点和匹配策略。每个类锚都由宽度、长度、高度和z中心描述,并应用于两个方向:0度和90度。根据以下规则,使用2D借据将锚点与地面真相匹配。积极匹配要么与基本真值框的匹配值最高,要么高于积极匹配阈值,而消极匹配则低于消极匹配阈值。所有其他锚点在损失中被忽略。
在推理时,我们应用轴对准非最大抑制(NMS),重叠阈值为0.5 IoU。与旋转NMS相比,这提供了类似的性能,但速度要快得多。
汽车:x, y, z的范围分别为[(0,70.4),(- 40,40),(- 3,1)]米。汽车锚的宽、长、高分别为(1.6、3.9、1.5)米,z轴中心为-1米。匹配使用0.6和0.45的正阈值和负阈值。
行人和骑车人:x, y, z范围分别为[(0,48),(- 20,20),(-2.5,0.5)]米。行人锚的宽、长、高分别为(0.6、0.8、1.73)米,z中心为-0.6米;自行车锚的宽、长、高分别为(0.6、1.76、1.73)米,z中心为-0.6米。匹配使用0.5和0.35的正阈值和负阈值。
实验结果详见论文!
数据增强
数据增强对于KITTI基准测试的良好性能至关重要[28,30,2]。
首先,遵循SECOND[28],我们为所有职业和落在这些3D框内的相关点云创建一个地面真相3D框的查找表。然后,对于每个样本,我们分别随机选择15、0、8个汽车、行人和骑自行车的地面真相样本,并将它们放入当前点云中。我们发现这些设置比建议的设置[28]执行得更好。
接下来,所有地真值框都被单独增强。每个盒子都被旋转(从[−π/20, π/20]中均匀绘制)和平移(x, y和z分别从N(0,0.25)中绘制),以进一步丰富训练集。
最后,我们执行两组全局增强,它们联合应用于点云和所有盒子。首先,我们沿x轴[30]应用随机镜像翻转,然后进行全局旋转和缩放[31,28]。最后,我们应用从N(0,0.2)绘制的x, y, z的全局平移来模拟定位噪声。
结果
实时推理
消融研究
结论
在本文中,我们介绍了PointPillars,一种新型的深度网络和编码器,可以在激光雷达点云上进行端到端训练。我们证明,在KITTI挑战中,PointPillars以更快的速度提供更高的检测性能(BEV和3D上的mAP),从而主导了所有现有的方法。我们的结果表明,point柱子提供了迄今为止最好的架构,用于激光雷达的3D物体检测。