PointPillars 解读用于点云目标检测的快速编码器

Posted AI 菌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PointPillars 解读用于点云目标检测的快速编码器相关的知识,希望对你有一定的参考价值。


一、PointPillars 介绍

本文提出了一种新的用于 3D 目标检测的方法 PointPillars,它利用 PointNets 来学习组织在垂直列中的点云表示。虽然编码特征可以与任何标准的 2D 卷积检测架构一起使用,但本文进一步提出了一个精简的下游网络。广泛的实验表明,PointPillars 在速度和精度方面都大大优于以前的编码器。尽管仅使用激光雷达,PointPillars 在 3D 和鸟瞰图 KITTI 基准测试方面显着优于现有技术。

论文地址:https://arxiv.org/pdf/1812.05784.pdf

代码开源:https://github.com/nutonomy/second.pytorch

二、相关工作

点云中的目标检测本质上是一个三维问题,因此,部署 3D 卷积网络进行检测是很自然的。在最常见的范例中,点云以体素组织,每个垂直列中的体素集被编码为固定长度的手工特征编码,以形成可由标准图像检测架构处理的伪图像。这里的一些著名作品包括 MV3D、AVOD 、PIXOR 和 Complex YOLO,它们都使用相同固定编码范式的变体作为其架构的第一步。前两种方法另外将激光雷达特征与图像特征融合以创建多模态检测器。 MV3D 和 AVOD 中使用的融合步骤迫使它们使用两级检测流水线,而 PIXOR 和 Complex YOLO 使用单级流水线。

早期,Qi 等人提出了一个简单的架构 PointNet,用于从无序点集学习,它提供了一条完整的端到端学习的途径。VoxelNet 是最早在激光雷达点云中部署 PointNet 进行目标检测的方法之一。在他们的方法中,PointNets 应用于体素,然后由一组 3D 卷积层处理,然后是 2D 主干和检测头。这使得端到端学习成为可能,但与早期依赖 3D 卷积的工作一样,VoxelNet 速度较慢,单个点云需要 225 毫秒的推理时间(4.4 Hz)。

另一种最近的方法是 Frustum PointNet,它使用 PointNets 对通过将图像上的检测投影到 3D 生成的视锥体中的点云进行分割和分类。与其他融合方法相比,Frustum PointNet 实现了较高的基准性能,但其多阶段设计使得端到端学习不切实际。最近,SECOND 对 VoxelNet 进行了一系列改进,从而获得了更强的性能和 20Hz 的大幅提高的速度。然而,他们无法去除昂贵的 3D 卷积层。

因此,本文的主要贡献在于:

  • 提出了一种新颖的点云编码器和网络 PointPillars,它在点云上运行,以实现 3D 对象检测网络的端到端训练。
  • 展示了如何将所有关于 pillars 的计算都设置为密集的 2D 卷积,从而在 62 Hz 下进行推理,比其他方法快 2-4 倍。
  • 对 KITTI 数据集进行了实验,并在 BEV 和 3D 基准测试中展示了汽车、行人和骑自行车者的最新结果。
  • 进行了多项消融研究,以检查实现强大检测性能的关键因素。

三、PointPillars 网络架构

PointPillars 接受点云作为输入,并估计面向汽车、行人和骑自行车者的 3D 框。它由三个主要的阶段组成:(1)将点云转换为稀疏伪图像的特征编码器网络; (2) 一个 2D 卷积主干,将伪图像处理成高级表示; (3) 检测头,用于检测和回归 3D 框。

(1)Pointcloud to Pseudo-Image

为了应用 2D 卷积架构,本文首先将点云转换为伪图像。如何构成这个伪图片呢? 可以参考下图所示:

其具体实现步骤如下:

1)输入点云

按照点云数据所在的X,Y轴(不考虑Z轴)将点云数据划分为一个个的网格,凡是落入到一个网格的点云数据被视为其处在一个 pillar(柱体)里,或者理解为它们构成了一个 Pillar。

每个点云用一个 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)。其中 x, y, z, r 为该点云的真实三维坐标信息和反射强度; x c , y c , z c x_c, y_c, z_c xc,yc,zc 为该点云所处 Pillar中所有点的几何中心; x p , y p x_p, y_p xp,yp x − x c , y − y c x-x_c, y-y_c xxc,yyc ,反应了点与几何中心的相对位置。

2)堆积 Pillars

假设每个样本中有 P 个非空的 pillars,每个 pillar 中有 N 个点云数据,那么这个样本就可以用一个 (D, P, N) 的张量表示。但是,如何保证每个 Pillar 中恰好有 N 个点云数据呢?

如果每个pillar中的点云数据数据超过 N 个,那么我们就随机采样至 N 个;如果每个pillar 中的点云数据数据少于 N 个,少于的部分我们就填充为0;于是,就很容易将点云转换成 (D, P, N) 张量格式的堆积 Pillars。

3)特征学习

得到堆积 Pillars 后,作者利用简化版本的 PointNet 对张量化的点云数据进行处理和特征提取。特征提取可以理解为对点云的维度进行处理,原来的点云维度为 D=9 ,处理后的维度为 C , 那么我们就获得了一个 (C, P, N) 的张量。

接着,按照 Pillar 所在维度进行 Max Pooling 操作,即获得了 (C, P) 维度的特征图。

4)伪图像

为了获得伪图片特征,作者将 P 转化为(W, H)。因此最终就获得了形如(C, H, W) 的伪图片了。具体过程如下:

(2)Backbone

如下图所示,本文使用了与 VoxelNet 类似的主干网络。主干网络由两个子网络构成:一个自上而下的网络以越来越小的空间分辨率产生特征;第二个网络执行上采样和串联自顶向下的功能。


自上而下的主干可以用一系列块 Block(S, L, F) 来表征。每个块以步幅 S(相对于原始输入伪图像测量)运行。一个块有 L 个 3x3 2D 卷积层和 F 个输出通道,每个通道后面跟着 BatchNorm 和一个 ReLU。层内的第一个卷积具有步幅 S / S i n S/S_{in} S/Sin 以确保块在收到步幅 S i n S_{in} Sin 的输入后以步幅 S 运行。一个块中的所有后续卷积的步长为 1。

每个自顶向下块的最终特征通过上采样和级联进行组合,步骤如下所示:

  • 首先,使用具有 F 个最终特征的转置 2D 卷积对特征进行上采样,Up( S i n S_{in} Sin, S o u t S_{out} Sout, F) 从初始步幅 S i n S_{in} Sin 到最终步幅 S o u t S_{out} Sout(均再次测量原始伪图像)
  • 接下来,将 BatchNorm 和 ReLU 应用于上采样的特征。
  • 最终输出特征是源自不同步幅的所有特征的串联。

(3)Detection Head

在本文中,作者使用 Single Shot Detector (SSD) 来设置来执行 3D 对象检测。与 SSD 类似,使用 2D 中的 IoU 将先验框与真实框进行匹配。边界框的高和海拔不用于匹配;相反,给定 2D 匹配,高度和海拔成为额外的回归目标。

四、损失函数

本文使用与 SECOND 相同的损失函数。真值框和锚点由 (x, y, z, w, l, h, θ) 定义。地面实况和锚点之间的定位回归残差定义为:


其中, x g t x^{gt} xgt x a x^a xa 分别是 ground truth 和 anchor box。并且,


总的定位损失为:

由于角度定位损失无法区分翻转框,本文在离散方向 L d i r L_{dir} Ldir 上使用 softmax 分类损失,这使网络能够学习航向。对于目标分类损失,本文使用 Focal Loss:

其中, p a p_a pa 是锚的类别概率。我们使用 α = 0.25 和 γ = 2 的原始论文设置。因此总损失为:

其中, N p o s N_{pos} Npos 是正锚的数量, β l o c = 2 , β c l s = 1 , β d i r = 0.2 β_{loc}=2,β_{cls}=1,β_{dir}=0.2 βloc=2βcls=1βdir=0.2

为了优化损失函数,本文使用初始学习率为 2 ∗ 1 0 − 4 2*10^{−4} 2104 的 Adam 优化器,每 15 个 epoch 将学习率衰减 0.8 倍,并训练 160 个 epoch。我们对验证集使用批量大小为 2,对测试提交使用批量大小为 4。

五、实验验证

(1)数据集

本文所有实验都使用 KITTI 目标检测基准数据集,该数据集由具有激光雷达点云和图像的样本组成。我们只在激光雷达点云上训练,但与使用激光雷达和图像的融合方法进行比较。样本最初分为7481个训练样本和7518个测试样本。对于实验研究,我们将官方训练分为 3712 个训练样本和 3769 个验证样本,而对于我们的测试提交,我们从验证集中创建了一个包含 784 个样本的最小集,并在剩余的 6733 个样本上进行了训练。

KITTI 基准测试需要检测汽车、行人和骑自行车的人。由于真实框对象仅在图像中可见时才进行注释,因此我们遵循仅使用投影到图像中的激光雷达点的标准约定。遵循 KITTI 的标准文献实践,我们为汽车训练了一个网络,为行人和骑自行车的人训练了一个网络。

(2)数据增强

数据增强对于 KITTI 基准测试的良好性能至关重要。首先,在 SECOND 之后,我们为所有类以及落在这些 3D 框内的相关点云创建了一个真实 3D 框的查找表。然后对于每个样本,我们分别为汽车、行人和骑自行车者随机选择 15,0,8 个真实框样本,并将它们放入当前点云中。我们发现这些设置的性能优于提出的设置。

接下来,所有真实框都单独增加。每个框都被旋转(均匀地从 [−π/20, π/20] 中提取)和平移(x、y 和 z 独立地从 N(0,0.25) 中提取)以进一步丰富训练集。

最后,我们执行了两组共同应用于点云和所有框的全局增强。首先,我们沿 x 轴应用随机镜像翻转,然后进行全局旋转和缩放 。最后,我们使用从 N(0,0.2) 绘制的 x、y、z 应用全局平移来模拟定位噪声。

(3)对比实验

如表 1 和表 2 所示,PointPillars 在平均精度 (mAP) 方面优于所有已发表的方法。与仅使用激光雷达的方法相比,PointPillars 在所有类别和难度层中都取得了更好的结果。除了简单的汽车层,它还优于基于融合的方法对汽车和骑自行车的人。


本文在图 3 和图 4 中提供了定性结果。虽然我们只在激光雷达点云上训练,但为了便于解释,我们从 BEV 和图像的角度可视化了 3D 边界框预测。

虽然 PointPillars 预测了 3D 方向的盒子,但 BEV 和 3D 指标不考虑方向。使用 AOS 评估方向,这需要将 3D 框投影到图像中,执行 2D 检测匹配,然后评估这些匹配的方向。与预测定向框的仅有两种 3D 检测方法相比,PointPillars 在 AOS 上的性能在所有层中都显着超过,如表3所示:

六、总结

在本文中,作者介绍了一种新颖的深度网络和编码器 PointPillars,可以在激光雷达点云上进行端到端训练。实验证明,在 KITTI 挑战中,PointPillars 通过以更快的速度提供更高的检测性能(BEV 和 3D 上的 mAP)来主导所有现有方法。结果表明,PointPillars 为激光雷达的 3D 目标检测提供了迄今为止最好的架构。

以上是关于PointPillars 解读用于点云目标检测的快速编码器的主要内容,如果未能解决你的问题,请参考以下文章

lidar3D目标检测PointPillars:论文解读代码解读部署实现

lidar3D目标检测PointPillars:论文解读代码解读部署实现

lidar3D目标检测PointPillars:论文解读代码解读部署实现

lidar3D目标检测PointPillars:论文解读代码解读部署实现

论文阅读CVPR 2019| PointPillars: 基于点云的快速编码目标检测框架(Fast Encoders for Object Detection from Point Clouds)(代

论文解读MV3D-Net 用于自动驾驶的多视图3D目标检测网络